Binance JEX APIで認証が通らない対処法とハマりやすいポイント(Python)

疑問 自動トレード(取引所API)
2020/1/19追記
・BinanceのFutures(レバレッジ取引)はBinance本体、Binance JEX(グループ会社)で提供されています。この記事はBinance JEXを対象にしています。
・残念ながらBinanceから日本向けサービスを制限する方針がアナウンスされました。日本からはBinanceのレバレッジ取引は今後できなくなる可能性が高いです。

Binance JEXのAPIでハマりやすいポイントをまとめました。

「Binance JEX」のAPI認証が通らず困っている方は参考にしてみてください。

以下の記事でETHでレバレッジ取引をしたい方日本の取引所FXが使いづらいと感じている方向けにBinance JEXの特徴、APIの使い方の概要を解説しています。

Binance JEXの仮想通貨FX(Futures)の特徴
2020/1/19追記・BinanceのFutures(レバレッジ取引)はBinance本体、Binance JEX(グループ会社)で提供されています。この記事はBinance JEXを対象にしています。・残念ながらBinanceから日...
Binance JEXでAPIを使う手順
2020/1/19追記・BinanceのFutures(レバレッジ取引)はBinance本体、Binance JEX(グループ会社)で提供されています。この記事はBinance JEXを対象にしています。・残念ながらBinanceから日...
スポンサーリンク

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管理画面から確認しましょう。

API Key Setting

上記の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口座開設

Binance JEXの仮想通貨FX(Futures)の特徴
2020/1/19追記・BinanceのFutures(レバレッジ取引)はBinance本体、Binance JEX(グループ会社)で提供されています。この記事はBinance JEXを対象にしています。・残念ながらBinanceから日...
Binance JEXでAPIを使う手順
2020/1/19追記・BinanceのFutures(レバレッジ取引)はBinance本体、Binance JEX(グループ会社)で提供されています。この記事はBinance JEXを対象にしています。・残念ながらBinanceから日...

おすすめ記事

APIを自作したらVPSで稼働させてみよう。

外部サーバで稼働させるにはさくらVPSが手軽でおすすめです。

国内仮想通貨取引所の選び方はこちら

コメント

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