Node.jsで暗号資産アービトラージ

ビットコイントレード中心にNode.jsで実際に作るためのレシピ

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

※この記事は10/3に作成されました。

こんにちは、ケネです。

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

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

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

Binance JEXの仮想通貨FX(Futures)の特徴 - Node.jsで暗号資産アービトラージ

Binance JEXでAPIを使う手順 - Node.jsで暗号資産アービトラージ

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

www.kennejs.com

www.kennejs.com