bitmex用botのBAN条件と対策

Bitmexで自動でトレードする場合の対策

https://www.bitmex.com/

最近mmbot(MarketMakeBot[板に並ぶことで手数料を稼ぐbot])が流行ったりドテン君が流行ったりしている仮想通貨

2018年初頭から仮想通貨が駄々下がっているのでみなさん色々なやり方を模索しています

その中でBitmexにBANされる方が出てきたので基準を確認します

ドテン君で有名なAKAGAMIさんがサイトに問合せを行い明確な基準を示していただいたため(さらっと画像の英語が読めないのでGoogle)翻訳してみました

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
1.ボットが4xxエラーを受け取った場合、 400,401,402,403,404,429の場合は、コードが悪いことを意味します。Botはリクエストを再試行しないでください。エラーが発生した場合は、ボットを停止させてください。悪質なリクエストを送信し続けると、ユーザーはAPIの禁止を取得します
間違ったコードでエラーを出し続けているとBAN
400 Parameter Error[パラメーターミス]
401 Unauthorized[操作の許可が無い(認証エラー等)]
402 [アクセスを拒否されているかも]
403 [アクセスを拒否されているかも]
404 Not Found[サーバーが見つからない]
429 [アクセスを拒否されているかも]
2.The bot should subscribe to margin via Websocket and only submit orders when margin.excessMargin > 0
2.ボットはWebsocket経由でマージンを購読し、margin.excessMargin> 0
口座残高と証拠金要件はREST APIではなくWebsocketを利用して取得
[margin.excessMarginは現在の証拠金残高]
証拠金0の時に取得しすぎるとBAN?
3.The bot should never send an order with orderQty = 0
3. botはorderQty = 0で注文を送信するべきではありません。
オーダーの数量を0で送信をしすぎるとBAN?
4.The bot should only submit orders when it has enough margin:
For contracts with instrument.multiplier > 0: Math.abs(orederQty * instrument.multiplier * price) * position.initMarginReq < margin.excessMargin
For contracts with instrument.multiplier < 0: Math.abs(orederQty * instrument.multiplier / price) * position.initMarginReq < margin.excessMargin
4.ボットは十分なマージンがある場合のみ注文を出すべきです:
instrument.multiplier > 0の契約の場合:Math.abs(orederQty * instrument.multiplier * price)* position.initMarginReq < margin.excessMargin
instrument.multiplier <0:Math.abs(orederQty * instrument.multiplier / price)* position.initMarginReq <margin.excessMarginの契約の場合
最後が非常に分かりづらい
証拠金が不足にならないようなレバレッジにしましょうという事だと思うのですが
どういう意味なのかできる限り確認してみます
OrderQty = 注文の数量
instrument = 注文して約定した注文と、約定していない注文を取得する関数
contracts = 契約
multiplier = 乗数
これの意味がよくわからなかったので調べました
XBTUSDのmultiplierを取得すると「-100000000」が取得できます
ETHM18や他の通貨だと「100000000」
計算に使う数字というだけなのかも?
XBTUSD以外の通貨がBTC建で0.000001111のような数値だからかもしれません
abs = 絶対値(マイナスを抜いた数)
excess = 過剰
position.initMarginReq  = リクエストしたポジションのレバレッジ?
実際に何回か注文して確認してみました
レバレッジを1倍にすると「1」
レバレッジを2倍にすると「0.5」
レバレッジを3倍にすると「0.3333333333333333」
という数値になります
ここから[initMarginReq=1÷レバレッジ]で求められるということが分かります
margin.excessMargin = [これがわからない・・・API Explorerで見当たらない]

※追記 websocketのmarginにありました

availableMarginとwithdrawableMarginも同じ数値になっていました レバトレードに使える余剰金の数字っぽい?

BTC以外の場合
Math.abs(orederQty * instrument.multiplier / price)* position.initMarginReq < margin.excessMargin
 絶対値(注文の数量×100000000×価格)×(1÷レバレッジ) < 余剰金
仮に10倍のレバレッジ0.00002402の価格で100枚注文だとすると
絶対値(0.00002402×100000000×100)×(1÷10)=(240200)×(0.1)=24020
BTCの場合
Math.abs(orederQty * instrument.multiplier * price)* position.initMarginReq < margin.excessMargin
絶対値(注文の数量×-100000000÷価格)×(1÷レバレッジ) < 余剰金
仮に10倍のレバレッジ6400の価格で640枚注文だとすると
絶対値(6400×-100000000÷640)×(1÷10)=絶対値(-100000000)×(0.1)=10000000
という計算ができます
万全を期すならwebsocketでmargin.excessMarginを取得するのが良さそうです

具体的な解決策

基本的にプログラムのミスを無くしたりチェックでどうにかなりそうです

4についてはmargin.excessMarginを取得して計算してレバレッジの調整を行うのが良さそう

websocketの利用無しでccxt、apiで調整する方法を公開してくださってる方も居ます わかりやすいです

BitMEX の IP BAN アクセス制限を回避する方法〈発注管理〉Pythonコード

他、APIを利用する時に気にしなければいけないこと

BitMEX APIのレート制限は、5分間隔(平均1 /秒)ごとに300要求

1秒に1回を超えるとダメです

以上です

シェアする

  • このエントリーをはてなブックマークに追加

フォローする