日時指定で[BTC-FX](bitFlyer)の約定履歴を取得しCSVで出力する方法

1.このnoteの概要

bitFlyerでは、APIを用いてBTC-FXの約定履歴が取得できますが、○月○日○時○分〜○月○日○時○分のデータを取得する、というような日時指定で約定履歴を取得することができません。

bitFlyerのAPIの場合、取得したい約定履歴の日時を指定する代わりに、id(約定毎に付与される約定番号)を指定して約定履歴を取得します。(idを指定しない場合は、直近の約定履歴を取得するetc細かい仕様はありますが)

自分が取得したい日時のidを把握していれば問題ないですが、通常は自分が取得したい日時のidが何番かは実際にAPIを叩いてみないと分かりません。ちなみに、BTC-FXの1日の約定数は多いと300万約定ほどありますので、1週間〜1ヶ月前の約定履歴となると、idを調べるだけでもかなりの労力が必要になります。

また、APIで1リクエストで取得できる約定履歴は最大で500約定しか取得できないので、1日分の約定履歴を取得するだけでも、多いと6000回もリクエストを投げなければいけません。人間の手でやるのはあまり現実的ではありません。

そこで、このnoteでは、自分が取得したい約定履歴の日時(期間)を指定すれば、指定した期間の約定履歴の取得からCSVファイルで出力するところまでを自動で実行してくれるプログラム(ruby)のロジックと実際のプログラムコードを紹介します。

プログラムが自分で書ける人であれば、無料部分だけでも自分でプログラムに落とすことができるかと思いますので、詳細を知りたい方やプログラムを自分で書けない、考えるのが面倒な方は有料部分を参照頂ければと思います。

それでは、ロジック部分の説明に入ります。

2.ロジックの概要

やっていること自体は、非常に原始的ですが、指定された日時(履歴の取得を開始する日時と履歴の取得を終了する日時)のidを探索して、そのidの約定履歴を全て取得できるまで約定履歴を取得するAPIをリクエストし続けるだけです。

指定された日時のidを探索する方法としては、データの探索プログラムとしてよく使われる「二分探索」を用います。二分探索を端的に説明すると下記になります。

二分探索とは、データ検索アルゴリズムの一つで、ソート(整列)済みのデータ群の探索範囲を半分に絞り込む操作を繰り返すことで高速に探索を行う手法。(IT用語辞典 e-Wordsより)

bitFlyerの約定履歴は、約定時間でソートされたデータですので二分探索を適用することができます。実際の手順を下記の<二分探索イメージ図>を用いて説明していきます。

二分探索イメージ図 - シート1 (1)-1 3

まず、id(約定番号)が1〜10000まで存在すると仮定し、その中から赤色の日時(目的の日時)のidを探索する方法を説明します。

最初に探索するidの範囲を確定させるために、赤色の日時より過去と思われる日時のidの目星を付けます。(bitFlyerのAPIでは過去31日分の約定履歴しか取得できないことと、探索する範囲が絞れている方が短時間で探索できるため)

目星はざっくりで構わないので、例えば1日の約定数を300万などとして、直近から目的の日時までの時間の差から算出すればOKです。大事なことは目的の日時より過去のidであることです。

目星を付けることができたら、目星のid(目的の日時より過去のid)を[end_id]、直近のidを[first_id]とします。そして、[end_id]と[first_id]の中間のidを算出、その中間のidの約定履歴を取得し、目的の日時より過去か未来かを判定します。もし、約定日時が目的の日時より「未来」であれば先ほど算出した中間のidを新たに[first_id]に指定します。約定日時が目的の日時より「過去」であれば、先ほど算出した中間のidを新たに[end_id]に指定します。

上記の絞り込みを[first_id]と[end_id]の差が500以下になるまで繰り返していき、差が500以下になれば目的の日時がその範囲にあるはずですので、[first_id]と[end_id]の間の約定履歴を取得し、id毎の約定日時と目的の約定日時を比較していけば、目的の約定日時のidを見つけることができます。

以上のロジックで、自分が取得したい約定履歴の開始日時と終了日時のidを見つけることができれば、約定履歴を取得するAPIを回し続ければOKです。

以下の有料パートでは、実際のプログラムソースと細かい説明、使い方を記載します。

※プログラムは現時点の仕様に基づいて作成しておりますので、仕様が変更になった場合の動作は保証できません。また、プログラム、取得したデータを用いて取引した際に生じた損失については保証できかねますのでご了承ください。ただし、プログラムについては、こちらでフォローできる範囲での修正等は行います。

ここから先は

7,022字

¥ 500

この記事が気に入ったらサポートをしてみませんか?