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

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

SignalInfoGetIntegerは、MetaTrader 5(MT5)が提供する「シグナルサービス(コピートレード)」に関する設定や状態を取得するための関数です。

実務開発において、初心者が最もつまずきやすいポイントは「この関数はテクニカル指標のサイン(買いシグナルなど)を取得するものではない」という点です。あくまで、MQL5.comが提供する公式のシグナル配信サービスを利用している際に、その購読状態や設定情報をプログラム側から確認するために使用します。

例えば、自作の管理用ツールやEA(エキスパートアドバイザー)の中で、「現在シグナル購読が有効になっているか?」「規約に同意済みか?」をチェックし、条件を満たしていない場合に警告を出すといった、安全装置(セーフティ機能)の実装に活用されます。

2. 構文と戻り値

この関数の構文は非常にシンプルで、取得したい情報の識別子(プロパティID)を引数に渡します。

構文

long  SignalInfoGetInteger(
   ENUM_SIGNAL_INFO_INTEGER  property_id      // プロパティ識別子
   );

パラメーター

  • property_id: 取得したい情報の種類を ENUM_SIGNAL_INFO_INTEGER 型の定数で指定します。

主なプロパティID

定数 説明
SIGNAL_INFO_ID 購読しているシグナルのID
SIGNAL_INFO_SUBSCRIPTION_ENABLED シグナル購読が有効かどうか(true/false)
SIGNAL_INFO_TERMS_AGREE シグナル利用規約に同意しているか(true/false)
SIGNAL_INFO_CONFIRMATIONS_DISABLED 同期時の確認ダイアログが無効化されているか
SIGNAL_INFO_COPY_SLTP ストップロスとテイクプロフィットをコピーするか

戻り値

指定したプロパティの値を long 型で返します。論理値(true/false)の場合は、1または0が返されます。

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

以下は、EAの初期化時(OnInit)に現在のシグナル購読設定を確認し、正しく設定されていない場合にログで警告を出す実用的なコード例です。

//+------------------------------------------------------------------+
//| エキスパート初期化関数                                             |
//+------------------------------------------------------------------+
int OnInit()
{
   // シグナル購読が有効かどうかを確認
   bool isEnabled = (bool)SignalInfoGetInteger(SIGNAL_INFO_SUBSCRIPTION_ENABLED);

   // 利用規約に同意しているかを確認
   bool isAgreed = (bool)SignalInfoGetInteger(SIGNAL_INFO_TERMS_AGREE);

   // シグナルIDを取得
   long signalID = SignalInfoGetInteger(SIGNAL_INFO_ID);

   // ログ出力による確認
   Print("--- シグナル設定チェック開始 ---");

   if(signalID == 0)
   {
      Print("警告: 現在シグナルは購読されていません。");
   }
   else
   {
      Print("購読中のシグナルID: ", signalID);

      if(!isAgreed)
      {
         Print("警告: シグナル利用規約への同意が完了していません。");
      }

      if(!isEnabled)
      {
         Print("注意: シグナルコピー設定が無効になっています。設定画面を確認してください。");
      }
      else
      {
         Print("確認: シグナルコピーは正常に有効化されています。");
      }
   }

   Print("--- シグナル設定チェック終了 ---");

   return(INIT_SUCCEEDED);
}

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

開発時に注意すべき点は以下の3点です。

  1. データ型のキャスト: SignalInfoGetIntegerlong 型を返します。有効か無効かのフラグを確認する場合は、上記サンプルのように (bool) で型変換(キャスト)を行うと、その後の条件分岐がスムーズになります。
  2. シグナル未購読時の挙動: シグナルを何も購読していない状態で SIGNAL_INFO_ID を取得しようとすると 0 が返ります。これがエラーなのか、意図的な未購読状態なのかを判別するロジックが必要です。
  3. 書き換えはできない: この関数は「取得」専用です。プログラムからシグナル購読を強制的に有効化(セット)したい場合は、SignalInfoSetInteger 関数を使用する必要があります。読み取りと書き込みを混同しないよう注意しましょう。

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

自動売買の世界において、プログラムのロジック以上に収益を左右するのが「実行環境の物理的距離」です。自宅のPCや一般的な光回線でEAを稼働させる場合、プロバイダー経由のネットワーク遅延(レイテンシ)が発生し、MT5上で注文が出されてから証券会社のサーバーに届くまでに数十〜数百ミリ秒のロスが生じます。このわずかな遅延が、スリッページを引き起こし、バックテストでは勝てているロジックを実運用で破綻させる致命的な原因となります。

プロレベルのクオンツエンジニアにとって、取引サーバーの目と鼻の先に位置するデータセンター内の「専用VPS(仮想専用サーバー)」を利用することは、もはやオプションではなく必須条件です。約定スピードを極限まで高めることは、手数料を削るのと同等、あるいはそれ以上に期待値を押し上げます。ネットワーク遅延による「見えない損失」を排除し、アルゴリズムの真のポテンシャルを発揮させるためには、24時間安定稼働し、かつ証券会社サーバーへの低レイテンシが保証されたプロ仕様のVPS環境を必ず用意してください。

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

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

コメント

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