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

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

MQL5のSignalInfoGetDouble関数は、現在購読(コピー)しているトレーディングシグナルに関する数値データ(double型)を取得するための関数です。具体的には、コピー時のボリューム比率や最大スリッページ設定、証拠金の制限値といった、シグナル購読の設定状況や統計情報をプログラム側で把握するために使用します。

実務での活用シーン

シグナル配信を利用した自動売買(コピートレード)では、配信者と購読者の間で約定価格の乖離(スリッページ)や資金管理の不一致が起こりやすく、これが原因で収支が大きく変わることがあります。
実務開発では、以下のような目的で活用されます。
リスク管理の動的チェック: 許容されているスリッページの最大値を取得し、現在の相場環境に対して安全かどうかを判断する。
資金配分の監視: 購読設定で指定したボリュームのパーセンテージを確認し、想定外のロットで注文が出ないようガードをかける。

初心者の方が特につまずきやすいのは、この関数が「シグナル配信のデータベース(検索用)」ではなく、「現在自分が設定・購読しているシグナルの詳細情報」を取得するものであるという点です。シグナルを購読していない状態で呼び出しても意味のある数値は返ってこないため、注意が必要です。


2. 構文と戻り値

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

double SignalInfoGetDouble(
   ENUM_SIGNAL_INFO_DOUBLE  property_id    // プロパティ識別子
);

パラメーター

引数のproperty_idには、取得したい項目に応じて以下の識別子を指定します。

識別子 内容
SIGNAL_INFO_CONFIRMATIONS_PERCENT 約定確認のパーセンテージ(コピー成功率の目安)
SIGNAL_INFO_EQUITY_LIMIT 購読を停止する有効証拠金の限界値
SIGNAL_INFO_SLIPPAGE_MAX 設定されている最大許容スリッページ(ポイント単位)
SIGNAL_INFO_VOLUME_PERCENT コピーするボリュームの比率(%)

戻り値

指定したプロパティの値をdouble型で返します。データの取得に失敗した場合は0.0を返し、詳細なエラーコードはGetLastError()関数で確認できます。


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

以下のコードは、現在購読しているシグナルの設定情報を取得し、ログに出力するシンプルなスクリプトです。EAの初期化時(OnInit)に設定ミスがないかチェックするようなケースを想定しています。

//+------------------------------------------------------------------+
//|                                           SignalInfoReporter.mq5 |
//+------------------------------------------------------------------+
void OnStart()
{
   // 1. 最大許容スリッページの設定を取得
   double maxSlippage = SignalInfoGetDouble(SIGNAL_INFO_SLIPPAGE_MAX);

   // 2. コピーボリュームの比率を取得
   double volumePercent = SignalInfoGetDouble(SIGNAL_INFO_VOLUME_PERCENT);

   // 3. 有効証拠金のストップ制限値を取得
   double equityLimit = SignalInfoGetDouble(SIGNAL_INFO_EQUITY_LIMIT);

   // 取得した情報をターミナルの「操作履歴」に出力
   Print("--- 現在のシグナル購読設定 ---");

   if(volumePercent > 0)
   {
      PrintFormat("最大許容スリッページ: %.1f points", maxSlippage);
      PrintFormat("コピーボリューム比率  : %.1f %%", volumePercent);
      PrintFormat("証拠金ストップ制限    : %.2f", equityLimit);
   }
   else
   {
      // シグナルが有効でない、または購読されていない場合
      Print("現在、有効なシグナル購読設定が見つかりません。");
   }
}

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

開発時にハマりやすいポイントを整理します。

  1. 「0」が返ってくるケース
    シグナルを購読していない、あるいはMetaTrader 5のオプションで「シグナル」設定が有効になっていない場合、この関数は0を返します。値が0だからといって必ずしもエラーとは限りませんが、期待した設定値が取れない場合はまずMT5自体のシグナル設定タブを確認してください。
  2. 型変換の意識
    戻り値は常にdouble型です。スリッページ(通常は整数)であってもdoubleで返されるため、比較演算や表示の際には適切な型変換やフォーマット指定(PrintFormatなど)を行うとデバッグがスムーズになります。
  3. 情報の即時性
    この関数で取得できるのは「現在のローカル設定」です。シグナル配信者がサーバー側で設定を変更したとしても、自身のMT5端末に同期されるまでは古い値が返る可能性がある点に留意してください。

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

クオンツエンジニアの視点から断言しますが、MQL5でシグナル配信やEA運用を行う際、コードの最適化以上に収益を左右するのが「ネットワーク遅延(レイテンシ)」です。自宅のPCや一般的なWi-Fi環境で自動売買を行うことは、F1レースに軽自動車で参戦するようなものです。シグナル配信者が注文を出してから、あなたのMT5がその信号を受信し、証券会社のサーバーへ注文を届けるまでの数ミリ秒の遅れが、大きなスリッページとなって利益を削り取ります。

特にシグナルトレードでは、配信者と同じ価格で約定させることが大原則です。この約定スピードを極限まで高め、物理的な距離によるロスを排除するには、証券会社のサーバーに近いデータセンターに設置された「FX専用VPS」の導入が必須です。24時間安定稼働させるための電源確保はもちろん、1ミリ秒を争うトレード環境において、専用VPSは単なるツールではなく、プロとして勝つための「最低限のインフラ」であることを忘れないでください。

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

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

コメント

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