1. TerminalInfoInteger関数の概要と実務での活用法
MQL5の TerminalInfoInteger 関数は、現在EAが動作しているMetaTrader 5(MT5)端末自体の状態や設定情報を取得するための非常に重要な関数です。
実務開発において、初心者が最初につまずきやすいのが「口座情報(AccountInfo)」と「端末情報(TerminalInfo)」の混同です。例えば、「自動売買が許可されているか」を確認する際、口座側の設定だけでなく、MT5端末自体の「アルゴリズム取引」ボタンがONになっているかを確認する必要があります。これを判定するのが TerminalInfoInteger です。
実務での主な活用シーン:
* 稼働環境のチェック: ネットワークが接続されているか、アルゴリズム取引が端末レベルで許可されているかを監視する。
* パフォーマンスの最適化: 端末のビルド番号(バージョン)を確認し、特定の機能が使えるかどうかを判定する。
* 通信品質の可視化: ブローカーのサーバーとのレイテンシ(Ping値)を取得し、約定遅延のリスクを評価する。
この関数を使いこなすことで、予期せぬ接続切れや設定ミスによる「トレードチャンスの逸失」や「意図しないエラー」を未然に防ぐ堅牢なシステムを構築できます。
2. 構文と戻り値
TerminalInfoInteger 関数の基本構文は以下の通りです。
long TerminalInfoInteger(
int property_id // プロパティ識別子
);
パラメーター
- property_id: 取得したい情報の種類を
ENUM_TERMINAL_INFO_INTEGER列挙型から指定します。
戻り値
- 指定されたプロパティの値を
long型で返します。 - 真偽値(bool)を返すプロパティの場合、
0が偽(false)、1が真(true)として扱われます。
よく使われる識別子(ENUM_TERMINAL_INFO_INTEGER)
TERMINAL_CONNECTED: サーバーに接続されているか(1なら接続中)。TERMINAL_TRADE_ALLOWED: 端末レベルでEAの取引が許可されているか。TERMINAL_PING_LAST: サーバーとの直近のPing値(マイクロ秒単位)。TERMINAL_CODEPAGE: 端末の使用言語コード。
3. 具体的な使い方・実践サンプルコード
以下に、EAの初期化時(OnInit)に取引環境をセルフチェックする実践的なコード例を示します。
//+------------------------------------------------------------------+
//| エキスパートアドバイザー初期化関数 |
//+------------------------------------------------------------------+
int OnInit()
{
// 1. サーバーへの接続状態を確認
bool isConnected = (bool)TerminalInfoInteger(TERMINAL_CONNECTED);
if(!isConnected)
{
Print("【警告】サーバーに接続されていません。");
}
// 2. 端末の「アルゴリズム取引」ボタンの状態を確認
bool isTradeAllowed = (bool)TerminalInfoInteger(TERMINAL_TRADE_ALLOWED);
if(!isTradeAllowed)
{
Print("【設定ミス】MT5の「アルゴリズム取引」許可ボタンがOFFになっています。");
}
// 3. サーバーとのレイテンシ(遅延)を取得
long ping = TerminalInfoInteger(TERMINAL_PING_LAST);
PrintFormat("現在のネットワーク遅延: %d ms", ping / 1000); // マイクロ秒をミリ秒に変換
// 4. MT5のビルド番号を確認(特定の機能が古いビルドで動かないのを防ぐため)
long build = TerminalInfoInteger(TERMINAL_BUILD);
PrintFormat("MT5ビルド番号: %d", build);
// 環境が整っていない場合でも、監視を続けるためにINIT_SUCCEEDEDを返す
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| ティック時処理 |
//+------------------------------------------------------------------+
void OnTick()
{
// 取引実行前に動的に接続確認を行う
if(!TerminalInfoInteger(TERMINAL_CONNECTED))
{
// 接続が切れている場合は処理を中断
return;
}
// ここにエントリーロジックを記述
}
4. 使用上の注意点とよくあるエラー
-
戻り値の型変換に注意:
TerminalInfoIntegerは常にlong型を返します。接続状態などをbool型として扱いたい場合は、(bool)TerminalInfoInteger(...)のように明示的にキャスト(型変換)を行うとコードの可読性が上がります。 -
TERMINAL_TRADE_ALLOWED の勘違い:
これは「MT5上部のアルゴリズム取引ボタン」の状態を示すものであり、「口座自体の取引許可」や「EA設定内の取引許可」を指すものではありません。取引ができない原因を探る際は、AccountInfoInteger(ACCOUNT_TRADE_ALLOWED)などと併用してチェックする必要があります。 -
Ping値の単位:
TERMINAL_PING_LASTで取得できる値はマイクロ秒(1/1000,000秒)です。一般的なミリ秒(1/1000秒)として表示・計算したい場合は、値を1000で割る必要があることを忘れないでください。 -
リアルタイム性の限界:
接続状態やPing値は、取得した瞬間の情報です。ネットワークは常に変動するため、チェックした直後に切断される可能性も考慮したエラーハンドリング(リトライ処理など)が実戦では求められます。
5. 【重要】自動売買における約定スピードと環境の罠
アルゴリズムトレードにおいて、ロジックの優位性と同じくらい、あるいはそれ以上に重要なのが「実行環境」です。多くの初心者は自宅のPCや一般的な光回線でEAを動かそうとしますが、これはプロの視点から見ると極めてリスクの高い行為です。家庭用回線はネットワークの経路が複雑で、数ミリ秒から数百ミリ秒のレイテンシ(遅延)が突発的に発生します。
この数ミリ秒の遅延が、スリッページを引き起こし、バックテストでは利益が出ていたロジックを「勝てないロジック」へと変貌させます。特にボラティリティが高い局面では、一瞬の遅延が致命的な損失に直結します。約定スピードを極限まで高め、物理的な距離による遅延を最小限に抑えるためには、ブローカーのデータセンターに近い場所に位置する自動売買専用のVPS(仮想専用サーバー)の導入が不可欠です。安定した電源と強固なバックボーンを持つプロ仕様の環境を整えることこそが、クオンツエンジニアとしてマーケットで生き残るための第一歩となります。
💡 この記事の内容を実運用で活かすには?
この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント