本記事では、私がbot開発して自動売買している仮想通貨デリバティブ取引所「Bybit(バイビット)」のbot開発トラブルシューティングをまとめています。
Bybitは「安定した売買」「100倍レバレッジ」「追証なし」「超強力なボーナス」「資金が無くてもボーナスで体験取引」が魅力で、シンガポールに本拠地を置く世界屈指の取引所ですが、bot開発に必要となるAPIにはクセもあり、開発につまずいている方も多いのではないかと思います。
私が実際に自動売買プログラムを作成するにあたり、悩んだ点・迷った点などを備忘録的にまとめています。
初心者向けの丁寧な説明は記載しておりませんのでご容赦ください。なお、プログラミングをしない方には難しい内容となりますので読まない方が良いかと思います。
事前に以下が完了している前提となります。
証拠金4万円から65万円の利益。難しい環境設定なし。Bybit取引所×お手持ちのPCで今すぐ動かせる自動売買トレードbot無料配布しています。
プログラムの詳細・ダウンロードはこちらです。
「100倍レバレッジ」「追証なし」「超強力なボーナス」でレバレッジ規制も取引ストレスもありません。Bybitはこちらから30秒で登録可能です。キャンペーン情報はコチラ。
Bybit(バイビット)のAPIは「API管理」のメニューから「新しいキーの作成」のボタンをクリックすると設定画面が表示されます。
Bybit(バイビット)は、API発行時、ホワイトリストのIPアドレスの入力が必須となっています。
これは指定されたサーバ・PCからでのみAPIを実行可能とすることでセキュリティを高める仕組みになっているのですが、テスト的に利用したい場合や固定IPでない環境でシステムを動かしたい場合には不便です。
そこでAPIキーを「APIトランザクション」ではなく「サードパーティアプリ紐づけ」とし、「TradingView」用のキーを作成しましょう。
こちらのAPIキーはIPアドレスの入力なしで使用可能ですし、名目的には「TradingView」用となっていますが、pythonなどで作った自作プログラムでも問題なく利用可能です。
ただし、指定した環境以外からでも実行できてしまいますので、セキュリティの安全性は下がります。APIキーが他人にバレることがないように気を付けましょう。
このエラーで真っ先に疑うべきはsignatureが正しく生成されていないケースです。
公式サイトにサンプル結果が掲載されていますので、結果が一致するかどうか確認すると良いでしょう(signatureの生成ロジックが正しく動作しているかの確認)。
次に気を付けることは「URLパラメータ部分がa~z順でないとエラーになる」という点です。
非常にハマりやすいポイントなので注意しましょう。
例えば、以下のようなコードではエラーとなります(pythonの場合)。
----------------------------------------------
timestamp = int(time.time() * 1000)
url = self.api_endpoint + '/user/leverage/save'
param = {
'api_key':self.token_id,
'symbol':'BTCUSD',
'leverage':leverage,
'timestamp':timestamp
}
param_str = urllib.parse.urlencode(param)
sign = hmac.new(self.api_secret.encode('utf-8'), param_str.encode('utf-8'), hashlib.sha256).hexdigest()
param['sign'] = sign
param_str = urllib.parse.urlencode(param)
url = url + '?' + param_str
r = requests.post(url, headers=self.api_headers)
----------------------------------------------
以下のようなエラーレスポンスが返ってきます。
{"ret_code":10004,"ret_msg":"error sign!","ext_code":"","result":null,"ext_info":null,"time_now":"1558015469.792535","rate_limit_status":599}
これはparamの部分がsymbol→leverageとabc順になっていないためです。以下のように修正する必要があります。
----------------------------------------------
param = {
'api_key':self.token_id,
'leverage':leverage,
'symbol':'BTCUSD',
'timestamp':timestamp
}
----------------------------------------------
BybitのAPIはプログラム実行環境のタイムスタンプとBybitのサーバ環境のタイムスタンプが一定以上乖離しているとエラーになる仕組みとなっています。
{'ret_code': 10002, 'ret_msg': 'invalid request, please check your timestamp and recv_window param.', 'ext_code': '', 'result': None, 'ext_info': None, 'time_now': '1562585088.784385'}
このエラーとなる乖離幅は「recv_window」のパラメータで指定が可能です。デフォルトでは、送信タイムスタンプとサーバー時間(UTC)の間の時間差が 5000milisecond に設定されています。
サーバ環境では時間がずれることはないと思いますが、ローカルPCなどはズレていることもありますので、その場合はrecv_windowを大きく設定しましょう。
さらに実はrecv_windowの値を大きく設定しても問題が解決しないことがあります。時間差機能でエラーにならない詳細条件は以下となっています。
{timestamp < server_time + 1000 && (server_time - timestamp) <= recv_window}
つまり・・・
ということです。
これもハマりやすいポイントで、「recv_window」が効かない場合は送信時間が遅れているケースを疑いましょう。
どうしても動作が安定しない場合は、以下のように「PG的に送信時間を遅らせる」&「recv_windowをそれ以上に大きく設定する」で動かすこともできます。
ただしrecv_windowもセキュリティを高めるための仕組みです。やり過ぎてしまうとセキュリティ上の問題となる可能性があることを考慮して製作する必要があります。注意して設定してください。
----------------------------------------------
timestamp = int(time.time() * 1000) - 100000
url = self.api_endpoint + '/position/list'
param = {
'api_key':self.token_id,
'recv_window':500000,
'timestamp':timestamp
}
----------------------------------------------
証拠金4万円から65万円の利益。難しい環境設定なし。Bybit取引所×お手持ちのPCで今すぐ動かせる自動売買トレードbot無料配布しています。
プログラムの詳細・ダウンロードはこちらです。
「100倍レバレッジ」「追証なし」「超強力なボーナス」でレバレッジ規制も取引ストレスもありません。Bybitはこちらから30秒で登録可能です。
Copyright © itp-meikan.com 2019-2024