1. MT5Version関数の概要と実務での活用法
MQL5開発における「MT5のバージョン取得」は、プログラムの互換性と動作の安定性を担保するために非常に重要な役割を果たします。厳密には、MQL5では TerminalInfoInteger(TERMINAL_BUILD) という関数を用いて、現在実行されているメタトレーダー5(MT5)のビルド番号を取得します。
なぜバージョンチェックが必要か
MT5は頻繁にアップデートが行われ、新しい関数が追加されたり、既存の挙動が修正されたりします。
実務開発では、以下のようなケースでバージョン確認が不可欠です。
- 新機能の利用制限: 最新のビルドで導入された命令(例:行列・ベクトル演算や新しい標準ライブラリ)を使用している場合、古いビルドでEAを動かそうとすると予期せぬエラーやクラッシュを引き起こす可能性があります。
- バグ回避: 特定のビルドで発生していた不具合を回避するため、EAの実行時に「ビルド3000以上であることを確認する」といったガードレールを設置します。
- サポートとログ: ユーザーから「EAが動かない」という問い合わせがあった際、ログにMT5のビルド番号を出力しておくことで、環境依存の問題かどうかを即座に判断できます。
初心者がつまずきやすい点は、MT5本体のバージョン(5.0)とビルド番号(例:4150)を混同することです。開発者が意識すべきは常に「ビルド番号」の方です。
2. 構文と戻り値
MT5のバージョン(ビルド番号)を取得するには、以下の関数と識別子を使用します。
構文
int build_version = TerminalInfoInteger(TERMINAL_BUILD);
パラメーター
- TERMINAL_BUILD: ターミナルのビルド番号を取得するための識別子(ENUM_TERMINAL_INFO_INTEGER型)。
戻り値
- int型: 現在のMT5ターミナルのビルド番号を整数値で返します(例:
4150)。
また、バージョンに関する文字列情報を取得する場合は以下のようになります。
* TerminalInfoString(TERMINAL_NAME):プログラム名(通常は “MetaTrader 5″)
* TerminalInfoString(TERMINAL_PATH):実行ファイルのパス
3. 具体的な使い方・実践サンプルコード
以下のサンプルコードは、EAの初期化時に現在のMT5ビルド番号を確認し、特定のバージョン未満であれば警告を出して動作を停止させる実用的な例です。
//+------------------------------------------------------------------+
//| CheckMT5Version.mq5 |
//| Copyright 2024, Quant Engineer |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property strict
// 動作を許可する最小のビルド番号(例として4000以上に設定)
input int MinRequiredBuild = 4000;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// 現在のMT5ビルド番号を取得
int currentBuild = (int)TerminalInfoInteger(TERMINAL_BUILD);
// ターミナルの名前を取得
string terminalName = TerminalInfoString(TERMINAL_NAME);
// ログに出力
PrintFormat("実行環境: %s (Build: %d)", terminalName, currentBuild);
// バージョンチェックのロジック
if(currentBuild < MinRequiredBuild)
{
// 古いバージョンであれば警告を表示して初期化失敗を返す
Alert("エラー: MT5のバージョンが古すぎます。");
Alert("必要ビルド: ", MinRequiredBuild, " / 現在のビルド: ", currentBuild);
// INIT_FAILEDを返すとEAはチャートから削除されます
return(INIT_FAILED);
}
Print("バージョンチェック完了。EAを開始します。");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
// メインロジックをここに記述
}
4. 使用上の注意点とよくあるエラー
ビルド番号の「巻き戻り」は存在しない
MT5のビルド番号は基本的に増え続けます。開発時に「ビルド4000以上で動作する」と記述した場合、それ以降の4100や4200でも動作するのが一般的ですが、稀にメジャーアップデートで関数の仕様が変更(非推奨化)されることがあります。新ビルドのリリース時は、常に公式のリリースノートを確認する習慣をつけましょう。
サーバーとクライアントの差異
MT5には「クライアントターミナル(あなたのPC)」と「取引サーバー(証券会社側)」の2つのバージョンが存在します。TerminalInfoInteger(TERMINAL_BUILD) で取得できるのは、あくまであなたのPC(またはVPS)で動いているMT5のバージョンです。サーバー側の機能制限とは別物であることを理解してください。
開発環境(MetaEditor)のバージョン
EAをコンパイルするMetaEditorのバージョンも重要です。最新のMetaEditorでコンパイルした実行ファイル(.ex5)は、極端に古いMT5ターミナルでは「unknown program version」として読み込めない場合があります。配布用EAを作成する場合は、なるべく標準的な最新ビルドでコンパイルすることを推奨します。
5. 【重要】自動売買における約定スピードと環境の罠
アルゴリズムトレードにおいて、ロジックの優位性と同じ、あるいはそれ以上に重要なのが「実行環境のレイテンシ(遅延)」です。自宅のデスクトップPCや一般的なノートPCでEAを稼働させることは、プロのクオンツの視点からは非常にリスクが高いと言わざるを得ません。家庭用インターネット回線は、数ミリ秒から数百ミリ秒の揺らぎ(ジッター)が常に発生しており、このわずかな遅延が、本来取れるはずだった利益をスリッページによって損失に変えてしまいます。
特に、ボラティリティが急増する指標発表時やマーケットの急変時、ネットワークの遅延は致命的です。1秒間に何度も価格が更新される環境下で、自宅PCからの注文がサーバーに届く頃には、価格はすでに数ピップス先へ移動しています。この「環境の罠」を回避し、システムのポテンシャルを最大限に引き出すためには、取引サーバーに物理的に近いデータセンター内に設置された専用のVPS(仮想専用サーバー)を利用することが必須条件です。極限まで約定スピードを高めることは、もはやテクニックではなく、自動売買を事業として成立させるための最低限のインフラ投資なのです。
💡 この記事の内容を実運用で活かすには?
この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント