hatunina’s blog

メモと日記です

bitflyerから日付を指定して約定履歴を取得するスクリプトを作りました

作りました。

github.com

この方とめっちゃ被ってるけど俺氏3月末から着手してたから。。ユルシテ。。。。

sshuhei.com

経緯

botは去年の6月ぐらいにコインチェックAPIで作っていました。Javaで!
当時はJavaしか使えなかったのでラッパーが公開されていたコインチェックでちょこちょこいじったのみ。
移動平均線とかみんなどうやって計算してんの?自分で計算すんの?めんどくさって思ってやめてしまった。

その後、BTCFXに手を出して20万ぐらい損して退場しました。

で、最近はもっぱら機械学習なので自前でビッグデータ欲しす〜って思ってたとこでビットコインを思い出す。
API叩けばいい感じのデータ取れるやんけ!ということで作った。

使い方

下記コマンドでライブラリをインストール

pip install pandas
pip install progressbar2

progressbar2はデータ取得中の進捗をいい感じに出力してくれるやつです。

上記githubからレポジトリをクローンした後、プロジェクト直下にdataディレクトリとlogディレクトリを作成します。
言わずもがなデータとログの出力先です。

そして、下記コマンドでスクリプトを実行します。

python src/getbtc.py -d 2018-01-01-00:00:00

-dオプションで取得開始日となる日付を指定します。
この日付だと2018年になった瞬間から現在までのデータを取得できます。
約50MBのファイルが28個ぐらいできるので容量にはお気をつけください。
時間はだいたい9時間ぐらいかかります。
2015-06-24 05:58:00が最初のデータですがこれ以前を指定するとエラーになります。
また、この辺の時期から取得しようとすると多分数日ぐらいかかるのでご注意を。

しかし、ローカルにビッグデータが蓄積されていく感じはなかなか興奮します。
時系列データは初めて触るので色々試していきたいと思います。

コードについて

コード自体は難しいことは書いていないので、gitを見てください(コメントは後々書いていきます)。
ただ、指定された日付のidを探すロジックに改良の余地ありけりです。

    def get_change_id_num(self, diff_second):
        diff_minutes = diff_second/60
        diff_hour = diff_minutes/60
        diff_date = diff_hour/24
        diff_week = diff_date/7
        diff_month = diff_week/4
        diff_year = diff_month/12

        if diff_year >= 1:
            # 26,280,000
            change_id_num = int((self.change_num_base * 60 * 24 * 365) * 0.1)
        elif diff_month >= 1:
            # 4,464,000
            change_id_num = int((self.change_num_base * 60 * 24 * 31) * 0.1)
        elif diff_week >= 1:
            # 10080
            change_id_num = self.change_num_base * 60 * 24 * 7
        elif diff_date >= 1:
            change_id_num = self.change_num_base * 60 * 24
        elif diff_hour >= 1:
            change_id_num = self.change_num_base * 60
        elif diff_minutes >= 1:
            change_id_num = self.change_num_base
        elif diff_minutes == 0:
            change_id_num = 0

        return change_id_num

最初にdiff_secondという引数で現在の日付(時刻)と指定された日付(時刻)の差を計算して渡しています。
それを秒に直し、年や月、日などに変換しています。指定された日付と現在までにどれくらいの時間差があるのかを計算しています。
そして、その時間差を見て遡るidを決定します。現在取得されているidにchange_id_numを足したり引いたりしてます。

要は、指定された日付のidを探しているわけですが、ここがちょっと時間がかかっています。

まあデータ取得にかかる時間に比べたら全然待てるんですけど、もうちょっとうまく書けないかなあって感じです。
イナリサーチも試しましたが、初期と現在までの取引量の違いが大きいのかうまくいきませんでした。
何かいい案があればお知らせください。

色々いじってあげてください

よしなにしてください。
というより、自分であんまり実行できていないのでバグもりもりかもしれませんが、そんな時は優しく教えてください。
今後は日付間で取得できるようにする(いつからいつまで〜)、各足にデータを変換、プロットまではやる予定です。