BOTを作成するにあたって次を前提条件として進める
いちばん大事なのは最後の項目である
研究しながら書いているので間違っている可能性もあるため注意してほしい
では早速本題に入っていくが、今回ははじめに知っておくべきことをメインに書く
HTTP API
Realtime API
API制限に関しては度々コミュニティで話題になるのでここで一応覚えておきたい
Private APIとは各個人のキーを使って行うリクエスト
例えば資産の残高を取得したり入出金や注文に関するリクエスト等がそれにあたる
この制限は2018年あたりで高速で取引を繰り返すMMBOTのようなシステムが流行した際、サーバーの負荷が大幅に増えたためだと考えられる
制限に関してはデメリットでしかない
公式より
Realtime API は、一律の制限を設けていませんが、以下に該当する場合は IP アドレスまたはアカウントごとに接続を制限することや、接続を禁止することがあります。
注文とキャンセルを繰り返しても良いのだろうか?このあたりは実際にBOTを稼働させている人にしか程度がわからないだろう
Realtime API は、購読を開始した時点以降の情報を受信できます。以下のような理由で接続が切断される場合があります。(以下省略)
という記述もあり、HTTPのリクエストと違い切断された場合の処理を実装する必要もありそうだがこれらの制限はHTTPと思えばかなり軽いものだと判断できる
尚、Realtime APIはWebSocketと呼ばれる方式で実現しており、これは双方向のリアルタイム通信を行うプロトコルの一種だと覚えておく
もしかしたら今回の記事の最重要ポイントかもしれない
公式に次のような記述がある
Realtime API は、一本の TCP 接続で複数のチャンネルを購読することができます。一度、接続を確立した後はデータ受信のたびに切断する必要はありません。切断されない限り、データは継続して配信されます。
つまり同時に何本も接続できるということだ
強いBOTは2本の接続を確保するというつぶやきを何度か見かけたことがある
どのように実装しているかわ分からないが上で述べたように一度のタイミングで切断が発生するかわからないAPIであるため、多重化することにより確実な環境を作るのだろう
とりあえず頭の片隅に入れておくべき情報だ
Realtime APIは2018/04/26にbitFlyer公式がツイッターで開始のアナウンスをしており、これが後から追加された(新しい)方のAPIである
約定履歴の記録や、HFT(高頻度取引)に対応できるなどRealtime APIのほうがメリットが多いと考え私ははこちらの実装方法を考えていく
一方で簡易的ながら信頼性のある取引をするならHTTPのほうが良いのだろう(例えば1日に数回しか取引しないようなスイングボットや自分の資産情報のみをとってきて表示するシステムなど)
2020/03/11更新:調べた所、新規注文などはRealtime APIからはできないようだ。
自動売買といっておきながらなんのコードにも触れていない退屈な回であったかもしれない
次回から少しづつコードを見ていこうと思う