bitmexトレーディングbotを本番環境に移した際に気を付けるべき事項やエラー等

pc関連tips

bitmexは日本人は新しくは使用できなくなりました;以下は記録としてのみ残しておきます

はじめに

botライフ楽しんでいますか?
私はまあまあ楽しんでいます。
最近は裁量も楽しいんですが、時間ばかり食うので…
やっぱりbotで放置したいですね。
#まだマイナスなんですが

というわけで、私はbitmexでbotを放置しています。
まずはじめにbotを作る必要があり、その際には大体の方が
bitmexテストネットで稼働させると思います。
で、うまくいけば本番環境にうつし、稼働を始めると思います。
私の場合、テストネットでうまくいっていたのに本番環境でできなかったことが
ぼちぼちありました。
ので、どのようなことが起こりうるか、メモとして残しておこうと思います。

・botを作りたい方はこちら→bitmex用トレーディングbotを初心者が作ってみた
・取引所bitmexはこちら。なんとメアドだけで登録できます。
 BITMEX ←こちらから登録すると、手数料6ヶ月間マイナス10%! 
 BITMEX TESTNET ←テストネットはこちら(本体とは完全別登録です)

本番環境に移して問題が出たこと

403エラーで死ぬ。

これは、テストネットから移して割とすぐでした。笑
私のbotの接続にすべて「403エラー」が返ってくるようになってしまい…
取引が全然できなくなってしまいました。
原因:つなぎ過ぎ
Bitmexは、過負荷を未然に防ぐためか、ログインしていない状態でのREST APIでの接続回数を「5分間で150回まで」に制限しています。
例えばですが、「https経由で最新のbidやaskの値段を取る」という処理を5秒に1回ループさせるとすると、5分間では60回使用することになります。
で、移動平均線などの判断のために、bitmexからローソク足も取るとしましょう。
すると同じだけループさせると計120回になります。
ときおり注文なんかもしますよね。これもカウントされます。
…というわけで、正直余裕は、ある、と思っていたんですが、私のケースだとあふれてしまったようです!
botを止めて1日放置しておいたら403は解除されたので安心しましたが、そのままBANになったりすると怖いので、一度403くらったらbotを調整してから立ち上げなおしましょう…。
対策:
①アクセスの頻度を下げる(身もふたもないですが)。Loop頻度を下げるだけなので楽ちんですね。
②RESTAPIには制限がありますが…WebSocketという技術を使うと、そういった制限にかからずに「最新のbidやaskの値段」を取得することができます。
なんなら0.1秒に1回たたいてもOKらしい。
私は、これでREST処理の半分をWebSocket化し、問題なく接続しつづけるようにできました。
こちらのnoteを参考に処理追加させていただきました(ありがとうございます)!
BitMEX自動売買bot(python)でWebSocket高速通信をする(ポジション情報なども取れる!)
・ちなみに、WebSocketも無敵ではなくたまに接続が切れますので、リトライを仕込むことをお勧めします。
・価格がたまに遅延することを確認しています…が、背に腹は代えられぬ。(RESTの信頼性が一番高そうなんですけど制限がね…トレードオフというやつでしょうか)
★参考までに、botではなくWebにログインして作業する場合には5分あたり300回まで行けるそうです。
 上限は上がりましたが制限はありますので、F5連打しているとWebからも403されるということだと思います。

50Xエラーで死ぬ。

これは私のbotのエラー処理も悪かったのですが…
テストネットではほぼほぼ発生しなかったのですが、本番環境ですと、以下の処理が503等の
エラーで蹴られることが発生しました。
「ローソク足のデータをhttpsで取得」
「注文処理を実行」
で、例外を吐いて死んでいる…ということがありました…
原因:相手側の過負荷
価格が大きく動いた際など、大量の人が群がると、サーバ側が重くなってしまい発生するようです。
ユーザには防ぐ術はありません。
8月にも、ガーンと下がった時に発生していましたね…
この時たまたまWebオンしていたのですが、Webページの方にも入れなくなってました。
ロスカ食らった人も多いんじゃないかなー。
困ったらtwitterなどで「mex 入れない」とかで検索すると周りの状況がわかるかもです。
対策:
サーバ側の過負荷なので、ユーザがどうにかしたら入れるというものではありません。
#逆ポジをもっていて超決済したくてもどうしようもありません
せめて、botが例外死しないように「try: except」等のエラー処理をきちんと行いましょう。
503エラーを吐いても処理が続行できるように書けば、過負荷をやりすごして稼働続行ができると思います。
また、それでも拾いきれない例外があったりしたので、私はbotを監視して停止したらLINEに通知する処理を仕込みました。
 →botが停止しているのをLINEへ通知するスクリプト

指値が通らない

技術的なことというよりは、使用感ですね。
前提として、bitmexは、板に出ているものを成行などで購入すると、手数料を取られます。
逆に、指値で板にのせたものを誰かが成行などで使ってくれると、手数料をもらえます。
だから、できるだけ指値で板に乗るような注文をするようにbotを組んでいたのですが…、
これがまあうまくいかない。
例えば現在の価格を参照してすぐに8500買いでサッと出したのに、
既に価格は8503になっていて、そのまま上がってしまい約定しないとかね。
損した気分ですね。
原因:本気の殴り合い
本番環境はさすがに人が多いし値動きが圧倒的に早い。
…テストネットだとほぼ指値が通っていたので、手数料ゲットしまくりだったのですが。
なんなら同値撤退手数料ゲットbotでもよかったのですが。
(巷ではこういうのをMMbotというらしいですね!私は今のところ開発に成功していません…)
対策:
大きな波をとらえ損ねては意味が無い…ので、一旦成行に戻してみました。
成行にすると手数料覚悟になるわけですから、トレードの頻度は下げ、それなりに大きな波をとらえるように組むべきなんですかね。
考慮の余地ありです。
もちろん指値箇所の工夫で何とか通す、というのもありでしょう。
突き詰めればmmbotが作れるかもしれません!!

まとめ

というわけで、bitmex本番環境に移って困ったことをまとめてみました。
今後も何かありましたらこのページに追記していきます!
皆様のbotライフの一助になれば幸いです。

・botを作りたい方はこちら→bitmex用トレーディングbotを初心者が作ってみた
・取引所bitmexはこちら。なんとメアドだけで登録できます。
 BITMEX ←こちらから登録すると、手数料6ヶ月間マイナス10%! 
 BITMEX TESTNET ←テストネットはこちら(本体とは完全別登録です)

コメント

タイトルとURLをコピーしました