接続中断とリクエスト制限への対処。
端末の復旧は API に任せ、クライアントを適切に制御。
手順を読む
- 0:00
接続中断とリクエスト制限への対処。
このチュートリアルでは、MT5 の接続中断とリクエスト制限への対処を説明します。API の復旧を待ち、配信を再開し、読み取りを安全に再試行します。デモ口座の実際の応答を使います。
- 0:21
既存のセッションを確認。
mt5.mrpc.pro を開き、API キーと保存済みの端末 id を保持します。この ConnectState の記録では、状態は Connected、isConnected、isAlive、apiIsAlive はすべて true です。端末は正常です。ブラウザーの切断や一度のリクエスト失敗だけで、新しい端末が必要になるわけではありません。
- 0:49
自動復旧を待つ。
MetaRPC は端末の状態を監視し、復旧条件を満たすアクティブなセッションを自動的に復元しようとします。端末 id は変わりません。アプリは影響する処理を停止し、Reconnect や ConnectEx を繰り返す代わりに復旧を待ちます。間隔を空けて状態を確認し、AccountSummary で口座へのアクセスを確かめてから再開します。復旧には時間がかかり、すべての失敗直後に完了するわけではありません。
- 1:26
原因に応じて対応。
意図的な切断、セッションの期限切れ、利用停止、無効な認証情報には、それぞれ対応が必要です。報告された原因を読み、認証情報の更新や口座の問題解決を行います。Reconnect と ConnectByToken は明示的な復旧用ツールであり、毎回のリクエストの再試行ループには組み込みません。復旧対象のセッションが使えないままなら、処理を停止したままエラーコードと時刻をサポートへ伝えます。
- 2:04
アプリの WebSocket を再接続。
端末とアプリの WebSocket は別の接続です。口座の読み取りが正常になったら、不調なソケットを閉じ、保存済み id と API キーで OnSymbolTick を開きます。必要な銘柄の購読を再開します。実際の EURUSD メッセージには bid、ask、タイムスタンプがあります。新しいデータが届くことを確認し、配信の重複を避けます。正常な既存の配信は開いたままで構いません。
- 2:39
実際の制限エラーを確認。
これは回数を限定した読み取りテストで取得した、実際の AccountSummary の拒否応答です。HTTP Status Code 200 は API が応答を返したことを示します。null ではない error に TERMINAL_RATE_LIMIT_EXCEEDED が入り、呼び出しは実行されなかったと説明されています。観測時の上限は端末ごとに直近一分間で非取引呼び出し三百回、全クライアントで共有です。この数値を固定せず、現在の制限を確認してください。
- 3:21
サーバーが示す時間を待つ。
この応答の error.properties には RetryAfterSeconds というキーと値の組があり、値は 1 です。少なくとも一秒待ち、少しランダムな遅延を加えてから読み取りを再試行します。同じ端末の枠を使う他のワーカーも停止します。再び拒否されたら新しい待機時間を使います。HTTP Status Code 429 では Retry-After ヘッダーにも従います。
- 3:55
徐々にリクエストを再開。
待機後の実際の読み取りは成功しました。HTTP Status Code 200、API エラーなし、デモ口座のデータが返っています。溜まった読み取りを一度に送らず、段階的に再開します。重複する情報をキャッシュし、ワーカー間で頻度を調整し、リアルタイム価格には OnSymbolTick を使います。制限に達したら待機します。端末の再接続は必要ありません。
- 4:30
再試行の条件と回数を限定。
付属の Python 例は AccountSummary 専用です。明示的な制限またはビジー応答に有効な待機時間がある場合だけ、ランダムな遅延を加えて再試行し、三回で終了します。その他のエラーは呼び出し元に返します。認証情報は環境変数に保存します。接続中断には別の上限付き方針を用意し、この読み取り関数を接続コマンドや取引メソッドへ流用しないでください。
- 5:08
結果不明の取引を先に確認。
取引リクエストの応答が失われても、ブローカーはすでに処理した可能性があります。自動復旧だけではその取引の結果は分かりません。アクセスが戻ったら OpenedOrders と DealsHistory を確認します。注文や約定のチケットがあれば使い、銘柄、方向、数量、時刻を照合します。似た取引は判別が難しいため、結果が不明なリクエストを自動再送せず停止状態に保ちます。
- 5:45
セッションを正しく終了。
意図的にセッションを終了するときは、購読を止めて Disconnect を呼びます。今回のデモ配信は停止し、端末も切断しました。取引は変更していません。対象端末の復旧は MetaRPC に任せ、必要ならアプリのソケットを復元します。制限時は待ち、取引結果が不明なら確認してから次の取引を送信します。