記事「MQL5入門(第37回):MQL5のAPIとWebRequest関数の習得(XI)」についてのディスカッション

 

新しい記事「MQL5入門(第37回):MQL5のAPIとWebRequest関数の習得(XI)」はパブリッシュされました:

MQL5を使用してBinance APIに認証付きリクエストを送信し、アカウント内の全資産の残高情報を取得する方法を解説します。APIキー、サーバー時刻、署名を利用して安全にアカウント情報へアクセスし、そのレスポンスをファイルへ保存して後で活用する方法を学びます。

前回の記事で説明したように、Binance向けの安全な署名を生成するためには、メッセージと秘密鍵の2つが必要です。今回のケースでは、メッセージとして使用するのがタイムスタンプです。ただし、このタイムスタンプはローカルPCの時刻ではなく、Binanceサーバーの現在時刻でなければなりません。 タイムスタンプはリクエストのセキュリティを確保する上で重要な役割を果たします。各リクエストを一意にし、第三者によるリプレイ攻撃を防止するためです。タイムスタンプは常に変化するため、リクエストが送信された正確な時刻を示します。Binanceはミリ秒単位のタイムスタンプを使用しており、認証付きリクエストの正確な検証を可能にしています。残高照会や注文発注などのプライベートエンドポイントへアクセスする際、正しいサーバー時刻を使用することで、生成した署名がBinance側で有効と認識されます。

サーバー時刻を取得するためには、まずBinance APIにリクエストを送信する必要があります。ローカルPCの時計は設定やタイムゾーンによって誤差が生じる可能性がありますが、Binanceサーバー時刻はBinanceがすべての認証処理で利用する公式な基準時刻です。そのため、MQL5プログラムは署名を生成する前にBinanceサーバーへ接続し、現在のサーバー時刻を取得しなければなりません。この手順を省略すると、生成したタイムスタンプがBinanceの期待値と一致せず、署名は無効として拒否されてしまいます。 現在のサーバー時刻を取得するには、特定のBinance APIエンドポイントへGETリクエストを送信します。このエンドポイントは認証不要の公開APIであるため、誰でもアクセス可能です。リクエストに対してBinanceはJSONオブジェクトを返し、その中に現在のサーバー時刻(ミリ秒単位)が含まれています。MQL5スクリプトでは、このレスポンスからタイムスタンプ値を抽出し、署名生成時のメッセージとして使用します。


作者: ALGOYIN LTD