取引所のAPI情報のリンク集。FTXのAPIの使い勝手がよさそうだったのだが、Chapter11に申請してしまったので次のどれがいいか調査する。
約定ログの取得方法についてもサンプルとともにまとめる。
APIとは
APIとはApplication Program Interfaceの略で、取引所というApplicationに対しプログラムでアクセスするインターフェースを指す。
REST vs WebSocket
インターネットからアクセスする方法として、REST方式とWebSocket方式の2つが提供される(FTXだけさらに高速と思われるFIX方式が提供されている)。2つの方式の違いは以下のとおり
インターフェース | REST | WebScoket |
取引所へ情報の送信 | ◯ | △プロトコル上問題があるわけではないが、取引所の実装として、注文はREST,注文結果をWebSocketで受信としている例もある。 |
取引所からの情報の受信 | ◯ | ◯ |
リアルタイム性 | △クライアント側から呼び出さないと情報入手できない | ◯取引所から変化があったら情報がPushされてくる。 |
実装容易性 | ◯ブラウザでも動作確認可能 | △やや難しい。 動作確認には、 wscat https://www.npmjs.com/package/wscat などを活用する。 |
サーバ(取引所の負荷) | ❌ 高い。アクセス回数の制限に到達しやすい。 | ◯ 低い。24時間つなぎっぱなしができる。 |
非公開(Private) vs 公開(Public)
ユーザを特定する(ログイン相当)の操作が事前に必要な非公開(PrivateAPI)と、不要な公開API(Public)がある。
非公開(Private)API | 公開(Public)API | |
認証 | 必要 | 不要 |
取引所での通常用途 | 市場全体の動き(値動き、約定履歴) | ユーザ毎の動き(注文、注文結果、残高など) |
トランザクションログの取得可否状況
どれも過去ログは取得できるようだ。ただしBitFlyerのAPIは31日以前の取得が止められている。別の方法で提供されているのかもしれないが、発見できていない。
過去(アーカイブ) | 過去(API) | 現在(リアルタイム) | |
Binance | * Webサイト * API(Old TradeLookup) | [recent trades] | WebSocket 集約版? 集約なし版? |
ByBIt | https://public.bybit.com | TradingRecords | WebSocket |
GMO | WebSite | Trades | WebSocket |
BitFlyer | 過去31日まで | WebSocket | |
CoinCheck | PublicTrades | WebSocket | |
BItBank | Transactions | PublicStream |
ドキュメントURL一覧
Binance
Bybit
FTX(Chapter11中)
過去ログを取得する方法
まず取引所を攻略するには、過去の約定ログを取得して分析するところから始まる。約定ログ(市場全体)の入手方法をまとめる。過去データなので、REST APIが中心となる。
直近の約定ログ(履歴)を取得する方法と、過去アーカイブされたログの取得方法を分けて提供している取引所も多い(BinanceやByBitが該当)
Binance
取得APIドキュメント: https://binance-docs.github.io/apidocs/spot/en/#recent-trades-list
メモリにある情報を取得する Recent Trades List と、DBにログとして保存されたデータを取得する Old Trade Lookupに分かれている。
RecentTradeをブラウザで次のURLを叩くと確認できる。https://api.binance.com/api/v3/trades?symbol=BTCUSDT
Old Trade Looup(MARKET_DATA)も同様に次のURLであるが、認証が必要。試しにこのURLを叩くと、KEYがないというエラーがやってくる。 https://api.binance.com/api/v3/historicalTrades?symbol=BTCUSDT
アーカイブされたログをダウンロードする方法
下記URLに毎日・毎月のデータがアーカイブされている。
ダウロードして解凍したファイルの中身はこんなかんじ。
621248977,16595.45000000,0.00299000,49.62039550,1668470400038,True,True
621248978,16595.46000000,0.00301000,49.95233460,1668470400039,False,True
621248979,16595.45000000,0.00299000,49.62039550,1668470400063,False,True
621248980,16595.00000000,0.00301000,49.95095000,1668470400086,True,True
621248981,16594.63000000,0.99699000,16544.68016370,1668470400096,False,True
621248982,16595.45000000,0.00300000,49.78635000,1668470400131,True,True
621248983,16592.94000000,0.00299000,49.61289060,1668470400153,True,True
621248984,16595.02000000,0.00070000,11.61651400,1668470400536,False,True
621248985,16595.02000000,0.04000000,663.80080000,1668470400598,False,True
621248986,16595.04000000,0.00542000,89.94511680,1668470400598,False,True
621248987,16595.04000000,0.01917000,318.12691680,1668470400598,False,True
ドキュメントが見当たらないが、APIのJSONと同じ順番/内容と想定するとCSVのカラムは以下の内容
id, price, qty, quoteQty, time, isBuyerMaker, isBestMatch
isBuyerMakerの場合、BUY側がMaker, SELLオーダによってTake(約定)した状態。isBestMatchがFalseになる条件は不明。
ByBit
直近のログと過去ログの提供方法が異なる。直近のログはAPIで取得できる。ただし、アーカイブされるのは日付が変わって数時間後、APIは過去数時間しか取得できないのでどうしても切れ目ができてしまう。
これを避けるには、WebSocketで1日ログをとり、1日以上前のをWebサイトからダウンロードという方式を取らざるを得ない(いまいち)。
直近のログを取得するAPI
https://bybit-exchange.github.io/docs/derivativesV3/unified_margin/#t-dv_publictradingrecords (ドキュメントの場所)
https://api.bybit.com/derivatives/v3/public/recent-trade サンプルURL
日付指定ができないので直近の500件、あるいは1000件を取得することしかできない。結果数時間分のログしかとれず、次のアーカイブされたログとの時間的隙間ができてしまう。
アーカイブされたログを取得する方法(Webサイト)
https://public.bybit.com/trading/ (Webサイトの場所)
上記URLに通貨ペアー毎に保存されている。
FTX
FTXのAPIはシンプルで1つで全部のデータを取得できる。
https://docs.ftx.com/#get-trades (ドキュメントの場所)
たとえば、以下のURLで過去データが取得できる。
(APIを呼び出す例 2019年ごろのデータを取得。同様にfrom_time, to_timeを変化させれば良い)
2022年10月現在では、一度に取得できるログは5000レコード。もっと多くのログがほしい場合はstart_time, end_timeを変化させてページングで順次呼び出す。
まとめ
結論としてはFTXが一番シンプルなので、まずFTXのログをダウンロードして分析することを始めてみようと思う(Chapter11に伴い、私のプロジェクトも頓挫中)
コメント