2020-03-06

Node.jsで仮想通貨の自動取引(bitFlyer編 #1) - 初めに知っておくこと

bitFlyer APIにNode.jsで接続する最初のステップ

Article Image

はじめに

BOTを作成するにあたって次を前提条件として進める

  • 仮想通貨取引に関して最低限の知識を持っている
  • Node.jsについての最低限の知識を持っている
  • bitFlyerのアカウントを持っている
  • 筆者もAPIの細かいことについては知らない(BLOGを書きながら研究する)

いちばん大事なのは最後の項目である

研究しながら書いているので間違っている可能性もあるため注意してほしい

では早速本題に入っていくが、今回ははじめに知っておくべきことをメインに書く

bitFlyerには2種類のAPIがある

  1. HTTP API

    • Webと同じくURLで指定したデータをリクエストする方式
    • 実装は簡単だがレスポンスを得るためにリクエストを毎回送らないといけない
    • リクエストに制限がある(後述)
  2. Realtime API

    • リクエストを送らなくともリアルタイムにデータが通信される
    • 余計なデータを送らないで良い分速い

HTTP APIの制限ついて

API制限に関しては度々コミュニティで話題になるのでここで一応覚えておきたい

  • Private APIの呼び出しは 5 分間で 500 回まで
  • 同一IPアドレスからも 5 分間で 500 回まで
  • 注文とキャンセルの場合 5 分間で 300 回まで

Private APIとは各個人のキーを使って行うリクエスト

例えば資産の残高を取得したり入出金や注文に関するリクエスト等がそれにあたる

この制限は2018年あたりで高速で取引を繰り返すMMBOTのようなシステムが流行した際、サーバーの負荷が大幅に増えたためだと考えられる

制限に関してはデメリットでしかない

Realtime APIの制限について

公式より

Realtime API は、一律の制限を設けていませんが、以下に該当する場合は IP アドレスまたはアカウントごとに接続を制限することや、接続を禁止することがあります。

注文とキャンセルを繰り返しても良いのだろうか?このあたりは実際にBOTを稼働させている人にしか程度がわからないだろう

Realtime API は、購読を開始した時点以降の情報を受信できます。以下のような理由で接続が切断される場合があります。(以下省略)

という記述もあり、HTTPのリクエストと違い切断された場合の処理を実装する必要もありそうだがこれらの制限はHTTPと思えばかなり軽いものだと判断できる

尚、Realtime APIはWebSocketと呼ばれる方式で実現しており、これは双方向のリアルタイム通信を行うプロトコルの一種だと覚えておく

Realtime APIで強BOTTERが呟いていたこと

もしかしたら今回の記事の最重要ポイントかもしれない

公式に次のような記述がある

Realtime API は、一本の TCP 接続で複数のチャンネルを購読することができます。一度、接続を確立した後はデータ受信のたびに切断する必要はありません。切断されない限り、データは継続して配信されます。

つまり同時に何本も接続できるということだ

強いBOTは2本の接続を確保するというつぶやきを何度か見かけたことがある

どのように実装しているかわ分からないが上で述べたように一度のタイミングで切断が発生するかわからないAPIであるため、多重化することにより確実な環境を作るのだろう

とりあえず頭の片隅に入れておくべき情報だ

どちらのAPIを使えばいいのか

Realtime APIは2018/04/26にbitFlyer公式がツイッターで開始のアナウンスをしており、これが後から追加された(新しい)方のAPIである

約定履歴の記録や、HFT(高頻度取引)に対応できるなどRealtime APIのほうがメリットが多いと考え私ははこちらの実装方法を考えていく

一方で簡易的ながら信頼性のある取引をするならHTTPのほうが良いのだろう(例えば1日に数回しか取引しないようなスイングボットや自分の資産情報のみをとってきて表示するシステムなど)

2020/03/11更新:調べた所、新規注文などはRealtime APIからはできないようだ。

どちらのAPIを使うかと問われたら両方とも利用するほか選択肢はない。

今回はここまで

自動売買といっておきながらなんのコードにも触れていない退屈な回であったかもしれない

次回から少しづつコードを見ていこうと思う



この記事をシェア


謎の技術研究部 (謎技研)