- Binance JEXはBinance Futures(先物取引)とは別のサービスです。
- Binance JEXの出来高が少なくなっており、現状まともなサービスは提供されていません。
Binance JEXのAPIでハマりやすいポイントをまとめました。
「Binance JEX」のAPI認証が通らず困っている方は参考にしてみてください。
以下の記事でETHでレバレッジ取引をしたい方、日本の取引所FXが使いづらいと感じている方向けにBinance JEXの特徴、APIの使い方の概要を解説しています。
https://kennejs.com/entry/binance-jex-futures
https://kennejs.com/entry/binance-jex-api
Contents
Binance JEX Signed Endpoint Security(認証ありAPI)のサンプルコード
まずはサンプルコードを載せておきます。こちらをコピペすれば実行できます。
なお、以下のサイトを一部参考にさせてもらっています。
Python Connect to Binance API using requests | Lua Software Code
Binance API用のコードですが、非常に参考になりました。
(Binance JEXのAPIはBinanceのAPIに似ているためBinanceの情報が参考になります)
#API KeyとSecret Keyを設定 apikey = xxxxx secret = yyyyy
#注文用の関数を定義 def sendOrder(side, price, quantity): path = '/api/v1/contract/order'; method = 'POST'; timestamp = round(datetime.now().timestamp() * 1000) data = { "symbol": "ETHUSDT", "side": side, "type": "LIMIT", "quantity": quantity, "price": price, "recvWindow": 5000, "timestamp": timestamp } query_string = urlencode(data) signature = hmac.new(bytearray(secret.encode('utf-8')), query_string.encode('utf-8') , digestmod = hashlib.sha256 ).hexdigest() data['signature'] = signature headers = { 'X-JEX-APIKEY': apikey } url = 'https://www.jex.com' + path res = requests.post(url, headers=headers, params=data) print(json.loads(res.text))
#注文用の関数を実行 sendOrder("BUY", 150, 0.01)
Binance JEXでハマりやすいポイント
続いて私がハマった2件のエラーの原因を解説していきます。
エラーメッセージ(Invalid API-key, IP, or permissions for action)
API key、IPアドレス、権限のいづれかが無効だというメッセージです。
まずは、API Keyが間違っていないこと、(IPアドレスで制限をかけた場合)のIPアドレスが正しいこと、「利用する機能」にチェックされていることをJEXのAPI管理画面から確認しましょう。
上記の3点が正しい場合、認証の設定値が誤っている場合がありますので、次の観点で確認してみてください。
jex-official-api-docs/rest-api.md at master · JexApi/jex-official-api-docs · GitHubを参照
- endpointがhttps://testnet.jex.com(テストサイトだとエラーになる)
- パラメータをapplication/x-www-form-urlencoded形式で渡していない(JSONで渡すとエラーとなる)
- tokenをheaderのX-JEX-APIKEYに設定していない
- 作成したsignatureをパラメータにいれていない
なお、APIドキュメントはできると読み取れますが、パラメータをURLのパラメータに設定するとうまく動きませんでした。
サンプルコードの「query_string = urlencode(data)」のようにurlencode形式で設定すると認証が通りました。
エラーメッセージ(Timestamp for this request is outside of the recvWindow)
JEXではタイムスタンプをミリ秒まで設定する必要があります。
なので、通常のPythonでのタイムスタンプ(秒までのUnixtime)の値を設定すると上記のメッセージが出力されます。
もっとも簡単な対策はミリ秒(3桁の数字)を付与することです。
サンプルコードでは1000倍することで000を付与しています。
(「timestamp = round(datetime.now().timestamp() * 1000)」の箇所です)
まとめ
Binance JEXのAPI認証でハマりやすいポイントを解説しました。
うまく認証できない方は参照してみてください。
Binanceはこちらから登録できます。紹介プログラムで10%のcommission feeを付与しましたのでお得に取引できます。→Binance口座開設
コメントを残す