こんにちは、初心者だけどbot大好きココです。
「ドテン君」に代表されるような仮想通貨自動売買botが大流行していますが、bot開発者さんは要注意の条件があります。
自分でbotは作らないけど使ってるよという(私のような)ユーザーさんも知っておいた方がいい話です。
botコミュニティと取引所間の良好な関係を築いていくためにも、重要なことだと思います。
要点はこういうことです。すなわち、
botで取引所のAPIに負荷をかけすぎると、キレられてbanされるよ。
という話です。
自動で24時間365日働き続けてくれる便利なbotですが、取引所に注文を送ったり情報を取得する時にAPIというものを使っています。
まあ、アカウントごとに割り振られた固有の電話回線みたいなものだとイメージしましょう。
これを経由してbotと取引所がつながっているのですが、botのプログラムやパラメータによってはやたらと短時間に大量のアクセスを繰り返すとかいう場合があります。
たいていは予期せぬエラーや開発者の意図しない動作によって無効な注文を繰り返してしまうケースが多いようです。
つまり、取引所側がエラーだよと言ってるのに、bot的には無限ループしてしまっている状態ですね。
bot「注文します」
取引所「エラーです」
bot「注文します」
取引所「エラーです」
bot「注文します」
取引所「エラーです」
bot「注文します」
…
きっと取引所から「やめてね」とメールが来ることでしょう。
それでも、よく分からないからそのままにしとこう。bot is 放置。とかなりがちですよね。
そうすると、最終的には取引所側がキレてban(アカウント凍結・制限)してきます。
個別のペナルティならまだしも、社会的に大きな問題となればそもそもbotの利用お断り等、よろしくない状況もありえますし、風評被害にもつながりかねません。
bot黎明期に参加しているからこそ、いいbot文化を作って行きたい!(私はbot開発者と言えるレベルではないですが)そういう思いでここに書き留めておきます。
具体的には今回、BitMEXからこんな連絡がありました。
お問い合わせの件につきまして、アカウントをお調べさせていただいたところ、次の理由で制限をされています。
Disabled for ignoring ‘Invalid orderQty’. Do not re-enable until the bot developer has fixed this.
(無効な数量の注文というエラーが出ていたにも関わらず注文を続けたため。Botの開発者が修正を行うまで制限を外すことができません)(中略)
現在、BitMEXでは、取引エンジンに負荷をかける行為を見直しており、該当する行為は制限させていただいております。
お手数をお掛けし恐縮でございますが、何卒ご理解をいただくようお願いいたします。
渡辺
BitMEXサポートチーム
普段は温厚な渡辺さんがキレかけている…!これは、まずい。
この問題はドテン君コミュニティでも話題になっており、AKAGAMIさんとコミュニティ開発メンバーが対策を行い、現在BitMEXとコンタクト中のようです。
BitMEXでのIP-Ban事象。MEXサポートの渡辺様にエンジニアの方につないでいただきました。Ban条件・注意点は下記の通り。MEXとの良好な関係づくり・健全なトレード環境を実現するためにも、bot開発者の方はこの情報を参考に、極力MEX側に負荷をかけないようなbot作りを徹底していただけると助かります。 pic.twitter.com/KsXfSneaEL
— AKAGAMI 卍 (@akagami_v2) 2018年6月9日
1. If your bot receives a 4xx error, e.g. 400, 401, 402, 403, 404, 429 then that means the request is bad. The bot should not re-try the request. Please make the bot stop if it receives an error. If you keep sending bad requests the user gets an API ban
2. The bot should subscribe to margin via WebSocket and only submit orders when margin.excessMargin > 0
3. The bot should never send an order with orderQty = 0
4. The bot should only submit orders when it has enough margin: For contracts with instrument.multiplier > 0: Math.abs(orderQty * instrument.multiplier * price) * position.initMarginReq < margin.excessMargin For contracts with instrument.multiplier < 0: Math.abs(orderQty * instrument.multiplier / price) * position.initMarginReq < margin.excessMargin
①400系エラーが返るときにリトライし続けるとAPIからBANされる
②WebSocketでmarginトピックを購読しmargin.excessMargin > 0の時だけ注文すること
③絶対にorderQty=0で注文してはいけない
④充分な証拠金がある時のみ注文すること https://t.co/dqqluoiBLp— $lqfc (@liquidfunc) 2018年6月9日
特に①の400系エラーに対する処理が一番優先っぽいです。
ドテン君に限らず、bot開発者・ユーザーのみなさんで共有していきたい問題ですね。
※こちらの記事も読まれています↓