【MQL5】TerminalInfoDouble関数の使い方と自動売買実装コード

1. TerminalInfoDouble関数の概要と実務での活用法

MQL5のTerminalInfoDoubleは、MetaTrader 5(MT5)クライアントターミナルの動作環境に関する「浮動小数点数(double型)」の情報を取得するための関数です。

実務レベルの開発において、この関数が最も力を発揮するのは「ネットワーク遅延(レイテンシ)の監視」「MQL5コミュニティの残高確認」です。特にスキャルピングやHFT(高周波取引)に近いロジックを組む際、現在のネットワーク状況を数値として把握することは、予期せぬスリッページや注文拒否(リクオート)を回避するために不可欠です。

初心者の方は「口座残高を取得する関数」と混同しがちですが、TerminalInfoDoubleは「口座(Account)」ではなく、あくまで「ツールとしてのMT5本体(Terminal)」の状態を取得するものだと理解しましょう。

2. 構文と戻り値

TerminalInfoDouble関数の構文は非常にシンプルです。

double TerminalInfoDouble(
   int property_id      // プロパティ識別子
);

パラメーター

引数には、取得したい情報を指定する識別子(ENUM_TERMINAL_INFO_DOUBLE)を渡します。主な識別子は以下の通りです。

識別子 内容
TERMINAL_COMMUNITY_BALANCE MQL5.community アカウントの残高(シグナル購読等に利用)
TERMINAL_RETR_MS_LATENCY 取引サーバーへの直近のネットワーク遅延(ミリ秒)

戻り値

指定したプロパティの値をdouble型で返します。情報の取得に失敗した場合は「0」が返ります。

3. 具体的な使い方・実践サンプルコード

以下のコードは、EA(エキスパートアドバイザー)の稼働中にネットワーク遅延を監視し、遅延が許容範囲を超えた場合に警告を出す実戦的なサンプルです。

//+------------------------------------------------------------------+
//|                                           LatencyMonitorSample.mq5|
//|                                  Copyright 2023, クオンツエンジニア|
//+------------------------------------------------------------------+
#property strict

// 遅延の許容しきい値(ミリ秒)
input double MaxAllowedLatency = 100.0; 

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
    // 現在の取引サーバーへのネットワーク遅延を取得
    double currentLatency = TerminalInfoDouble(TERMINAL_RETR_MS_LATENCY);

    // MQL5コミュニティの残高も取得可能(参考)
    double mql5Balance = TerminalInfoDouble(TERMINAL_COMMUNITY_BALANCE);

    // ログに出力
    PrintFormat("現在のレイテンシ: %.2f ms, MQL5残高: %.2f USD", currentLatency, mql5Balance);

    // 遅延が大きすぎる場合の処理
    if(currentLatency > MaxAllowedLatency)
    {
        // ネットワーク環境が悪いため、新規エントリーを制限する等のリスク回避ロジック
        Alert("警告:ネットワーク遅延が大きすぎます。現在のレイテンシ: ", currentLatency, "ms");
    }
    else
    {
        // 正常な実行ロジックへ
        ExecuteStrategy();
    }
}

//+------------------------------------------------------------------+
//| 戦略実行用関数                                                   |
//+------------------------------------------------------------------+
void ExecuteStrategy()
{
    // ここにメインの取引ロジックを記述
}

4. 使用上の注意点とよくあるエラー

開発時に陥りやすいミスとして、以下の2点が挙げられます。

  1. 整数型プロパティとの混同
    MT5のバージョン情報やビルド番号、CPUのコア数などはTerminalInfoIntegerで取得します。何でもTerminalInfoDoubleで取れるわけではないため、リファレンスを確認する癖をつけましょう。
  2. レイテンシは「スナップショット」である
    TERMINAL_RETR_MS_LATENCYで取得できる値は、直近の通信に基づいた数値です。ネット回線の瞬断や一時的な負荷によって急変動するため、一度の取得結果だけで判断せず、数回分の平均を取るなどの工夫が実務では求められます。
  3. 初期化不足
    ターミナル起動直後などはデータがまだ準備できておらず、0.0を返すことがあります。起動直後の数秒間は判定から除外するなどの配慮が必要です。

5. 【重要】自動売買における約定スピードと環境の罠

自動売買の世界において、プログラムのロジック以上に収益を左右するのが「物理的な通信環境」です。自宅のPCや一般的な光回線でEAを運用することは、プロの視点から見ると非常にリスクが高い行為と言わざるを得ません。家庭用回線は他の家電の干渉やプロバイダーの混雑を受けやすく、TerminalInfoDoubleで監視していても防げないレベルの急激なレイテンシ増加が頻繁に発生します。

約定スピードを極限まで高め、スリッページによる「隠れた損失」を最小化するためには、FX取引サーバーが設置されているデータセンターに近い専用のVPS(仮想専用サーバー)の利用が必須です。ミリ秒単位の遅延が利益を削り取るシストレの世界では、24時間安定した高速通信が保証されるVPS環境を構築することこそが、勝てるトレーダーへの第一歩となります。

💡 この記事の内容を実運用で活かすには?

この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント

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