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

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

MQL5で開発を行う際、「実行中のプログラム自体がどのような環境に置かれているか」を知る必要がある場面が多々あります。MQLInfoString関数は、現在実行されているEA(エキスパートアドバイザー)、インジケーター、またはスクリプトに関する「プログラム自身の属性情報」を文字列で取得するための組み込み関数です。

実務開発において、初心者が特につまずきやすいのが「ファイルの保存場所」や「プログラム名の動的な取得」です。例えば、ログファイルを出力する際に保存先のフルパスをコード内に直書き(ハードコーディング)してしまうと、他のPCやVPS環境に移した途端に動作しなくなります。

プロのクオンツエンジニアは、MQLInfoStringを活用して実行環境に依存しない柔軟なコードを書きます。プログラム名やパスを動的に取得することで、プログラムをリネームしてバックテストを並列走らせる際の管理や、特定のディレクトリ構造に基づいた独自のログ出力システムの構築が可能になります。

2. 構文と戻り値

MQLInfoString関数の構造は非常にシンプルです。

string MQLInfoString(
   int property_id      // プロパティ識別子
);

パラメーター

引数のproperty_idには、ENUM_MQL_INFO_STRING列挙型で定義された以下の識別子を指定します。

  • MQL_PROGRAM_NAME: 実行中のプログラム名(ファイル名から拡張子を除いたもの)を返します。
  • MQL_PROGRAM_PATH: 実行中のプログラムのフルパスを返します。

戻り値

指定した識別子に対応するstring型(文字列)の値を返します。

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

以下に、EAの初期化時(OnInit)に自身のプログラム名と保存パスをログに出力し、デバッグや環境確認に役立てる実践的なコード例を示します。

//+------------------------------------------------------------------+
//|                                              SampleMQLInfo.mq5   |
//|                                  Copyright 2024, Quant Engineer  |
//+------------------------------------------------------------------+
#property strict

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   // 1. 実行中のプログラム名を取得
   // 例: "SampleMQLInfo"
   string programName = MQLInfoString(MQL_PROGRAM_NAME);

   // 2. 実行中のプログラムのフルパスを取得
   // 例: "C:\Users\Name\AppData\Roaming\MetaQuotes\Terminal\...\MQL5\Experts\SampleMQLInfo.ex5"
   string programPath = MQLInfoString(MQL_PROGRAM_PATH);

   // ターミナルの操作履歴(エキスパートタブ)に出力
   Print("--- 起動プログラム情報 ---");
   Print("プログラム名: ", programName);
   Print("実行パス: ", programPath);

   // 実務的な活用例: プログラム名を含めた独自ログの作成などに利用
   string logFileName = programName + "_History.csv";
   Print("生成予定のログファイル名: ", logFileName);

   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
   // 終了時の処理
}

void OnTick()
{
   // 取引ロジック
}

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

開発時に注意すべき点は、「取得できるのは実行中のプログラムの情報であり、MetaTrader 5自体の情報ではない」ということです。

  • よくある勘違い: MT5のインストールフォルダや、データフォルダ全体のパスを取得しようとしてMQLInfoStringを使ってしまうケースです。これらはTerminalInfoString関数の役割であり、MQLInfoStringはあくまで「実行されているそのmq5/ex5ファイル」に焦点を当てた情報を返します。
  • ファイル操作の罠: MQL_PROGRAM_PATHで取得できるパスは、Windowsの絶対パスです。しかし、MQL5のFileOpenなどの関数でファイルを扱う場合、セキュリティ上の理由から「MQL5\Files」フォルダ以下の相対パスしか受け付けない制約があります。取得した絶対パスをそのままファイル操作関数に渡すとエラーになるため、パスの加工が必要になる点に注意してください。

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

アルゴリズムトレードにおいて、MQLInfoStringなどで環境を最適化しても、物理的なネットワーク環境が脆弱であればすべてが無意味になります。自宅のPCや一般的な光回線を利用した自動売買は、プロのクオンツから見れば非常にリスクが高い行為です。家庭用回線ではパケットロスや数ミリ秒〜数百ミリ秒のレイテンシ(遅延)が頻繁に発生し、これが発注時の「スリッページ」を引き起こして、バックテストでは勝てていたロジックを期待期待値以下の「損失を生むコード」へと変貌させてしまいます。

FX取引のサーバーは通常、世界的なデータセンター(ロンドンやニューヨークなど)に設置されています。これに対し、物理的に離れた日本の自宅PCから信号を送ることは、物理的な距離による圧倒的な不利を背負っていることを意味します。コンマ数秒を争うスキャルピングはもちろん、デイトレードであっても、約定スピードを極限まで高め、安定した稼働率を確保するためには、取引サーバーの至近距離に位置する専用のVPS(仮想専用サーバー)の利用が不可欠です。インフラを軽視するエンジニアは、最終的なパフォーマンスで決してプロに勝つことはできません。

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

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

コメント

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