wilki.space Blog

ビットコイン自動売買など仮想通貨まわりを中心にシステムトレード関係のお話をいろいろと

Bitflyerの板情報をリアルタイムに取得する

PubNubという仕組みを利用してリアルタイムにプッシュで板情報の配信を受取ることができます。

以下PHPでの実装例です。

SDKのインストール

composerを使ってインストールします。

composer require pubnub/pubnub

これで依存関係含めて必要なものがインストールされます。

PubNubの実装

まぁ基本的には公式のサンプルコードそのままで動きます。

注意点としては

  • 差分配信なこと
  • 板からの削除は数量0で配信されること
  • こちらからPublishすることがなくても、PublishKeyをセットする必要があること

あたりでしょうか ※ 差分配信じゃなくスナップショット配信もありますが、「データ量が大きくなる場合、板情報更新のたびに配信されることは保証されません。」とのことなので差分配信を利用した方がいいでしょう

実装例についてはGithubに上げましたので参考にしてください。

github.com

Bitflyerの価格情報を取得する

前回の記事で、約定履歴を取得する方法を紹介しました。

Bitflyerの約定履歴を取得する - wilki.space Blog

価格情報といった場合、他にも取得の方法があります。

  • Ticker情報を参照する
  • 板情報を参照する

の2つのやり方です。

Ticker情報を参照する

https://api.bitflyer.jp/v1/getticker

にアクセスするとTicker情報を得ることができます。ここでは、best askやbest bidなどアクセスしたタイミングでの一番安い売り板価格や一番高い買い板価格などを得ることができます。ltpというキーは直近の約定価格になっています。

サマリーデータが欲しい場合にはこちらを利用すれば簡単に情報を手に入れることができます。

板情報を参照する

Ticker情報では板の最安値と最高値のみ取得できましたが、それ以外の価格についても取得したい場合には板情報を参照する必要があります。

板情報を参照する方法には2つのやり方があります。

  • 他のAPIと同様HTTPリクエストでAPIを参照する
  • PubNubというリアルタイム配信の仕組みを利用して板情報の配信をプッシュで受ける

この2つは、継続的に板の価格情報をウォッチする場合に違いが大きく出てきます。HTTPリクエストの方はいわゆるポーリングでAPIを参照する必要がありますが、PubNubの場合はプッシュで情報を受取ることができるためよりリアルタイムにデータを参照することができます。

板情報APIにアクセスする

HTTPリクエストで板情報を取得する場合には

https://api.bitflyer.jp/v1/getboard

にアクセスすると板情報を参照することができます。

bidsやasksというところに価格情報が入っているため、それを利用します。

PubNubで価格情報の配信を受取る

PubNubという仕組みを利用してリアルタイムに価格情報の配信を受取ることができます。

www.pubnub.com

言語毎にSDKが提供されているので、それを利用して組み込む形になります。 詳細は実装方法は次回改めて紹介します。

Bitflyerの約定履歴を取得する

テクニカルチャートを描くためには価格を取得する必要があります。

いわゆる始値、終値、高値、安値ってやつですね。 Tickerという形で情報提供されてたりしますが、1分、5分、1時間など複数の時間軸で集計したい場合は生の価格情報をデータとして取得する必要がありますね。

BitflyerのAPIの種類

APIにはPublic APIとPrivate APIの2つがあります。 Publicな方は価格情報など公開されている情報の取得で、Privateな方は口座残高、注文実施などアカウントに紐付く情報の参照、更新系のAPIとなっています。 Privateな方を叩くためにはAPIキーなどの設定が必要になります。

今回は価格の取得になるのでPublicなAPIを使います。

約定履歴の取得

Bitflyerの約定履歴は

https://api.bitflyer.jp/v1/getexecutions

にアクセスすると得られます。パラメータとして、product_codeを利用できます。デフォルトではビットコインの約定履歴が取得できますが、ビットコインFXや先物の約定履歴も取得できます。

ビットコイン以外の約定履歴を取得したい場合は以下の手順で行います。

1. プロダクトコードを取得する

https://api.bitflyer.jp/v1/getmarkets

にアクセスすると、BitflyerのAPIで扱えるプロダクトのコードを取得することができます。 例えば、ビットコインFXだったら「FX_BTC_JPY」というものがそれです。 他にも、イーサ/ビットコインや先物なんかもありますね。

2. 約定履歴APIのパラメータにプロダクトコードを付ける

例えばビットコインFXの約定履歴を取得する場合は、

https://api.bitflyer.jp/v1/getexecutions?product_code=FX_BTC_JPY

となります。

あとはこの返ってきたJSONをパースしてDBとかに保存してやればいいですね。

Javascriptでローソク足を描いてみる

Javascriptでチャートを描くにはいくつかのライブラリがあります。自分でイチから描いてしまってもいいのですが、結構大変なのでこの辺はライブラリ使いたいところですね。 有名どころ(?)は以下2つかなーと思います。

jqPlot

これはjQueryプラグインですね、いわゆるテクニカルチャート用のライブラリというよりもグラフ描画ライブラリでその中にローソク足やいかり足チャートも入ってますよって感じのものになります。

jqPlotのメリット

  • jQueryプラグインなので、jQueryに慣れ親しんだ人にも使いやすい
  • テクニカルチャート以外のグラフ描画もやりやすいので独自にグラフを作成しやすい

jqPlotのデメリット

  • その他のチャート分析のグラフなどを描くためには独自で描画する必要がある

jqPlot Charts and Graphs for jQuery

TechanJS

こちらはD3.jsベースのライブラリになります。テクニカルチャートの色んな描画についてのやり方がまとめられているので、本格的にグラフ描画を実施したい場合にはこちらがオススメです。

TechanJSのメリット

  • 各種チャート分析に対応しているのでいろんな分析を行いやすい
  • D3.jsを用いてその他のグラフ描画も行うことができる

TechanJSのデメリット

  • D3.jsベースになるので、少し学習コストが高い

techanjs.org

双方良し悪しありますが、チャート分析ツールを独自で作成する場合には個人的にはTechanJSをオススメします。 D3.jsに関する知識が必要になってきますが、その分いろいろ拡張性も高くキレイなチャートを作成することができます。

このブログについて

このブログでは、システムトレードに関することを更新してきます。

  • プログラミングは多少わかるけど金融系の知識はあんまりない
  • 最近仮想通貨などに興味をもっている
  • 金融とITの分野に興味がある

という人にとって興味深い内容を書いていけたらなーって思っています。