1. MT5TerminalInfo関数の概要と実務での活用法
MQL5における「TerminalInfo」系関数(TerminalInfoInteger, TerminalInfoDouble, TerminalInfoString)は、実行中のMetaTrader 5(MT5)端末そのものの状態や設定、実行環境のスペックを取得するための関数群です。
実務開発において、初心者が最初につまずきやすいのは「口座情報(AccountInfo)」と「端末情報(TerminalInfo)」の混同です。例えば、「自動売買が許可されているか」を確認する際、口座レベルでの許可設定と、MT5端末の「アルゴリズム取引」ボタンの押し忘れは別物です。TerminalInfo関数を使えば、後者の「ユーザーがボタンを押し忘れてEAが動かない」という物理的なミスをプログラム側で検知できます。
また、中級以上の開発では、VPSのメモリ空き容量やCPUのコア数、ネットワークの接続状態を監視し、異常時にLINEやメールで通知を飛ばす「システムの死活監視」の実装に欠かせない関数となります。
2. 構文と戻り値
MT5TerminalInfoには、取得したいデータの型に応じて3つのバリエーションがあります。
TerminalInfoInteger
端末の整数型(bool, int, long)のプロパティを取得します。
long TerminalInfoInteger(int property_id);
- 主なプロパティID:
TERMINAL_CONNECTED: サーバーとの接続状態(1なら接続中)TERMINAL_TRADE_ALLOWED: 端末側で自動売買が許可されているかTERMINAL_CPU_CORES: CPUのコア数(並列処理の最適化に利用)TERMINAL_DISK_SPACE: ディスクの空き容量(MB単位)
TerminalInfoDouble
端末の浮動小数点型のプロパティを取得します。
double TerminalInfoDouble(int property_id);
- 主なプロパティID:
TERMINAL_COMMUNITY_BALANCE: MQL5.communityの残高(有料シグナル等を利用する場合)
TerminalInfoString
端末の文字列型のプロパティを取得します。
string TerminalInfoString(int property_id);
- 主なプロパティID:
TERMINAL_DATA_PATH: データフォルダのパス(ログファイル等の保存先特定に便利)TERMINAL_COMMUNITY_ACCOUNT: MQL5.communityのアカウント名TERMINAL_NAME: 端末名(”MetaTrader 5″など)
3. 具体的な使い方・実践サンプルコード
以下のコードは、EAの初期化時(OnInit)に取引環境をチェックし、もし自動売買ボタンがオフだったり、サーバーとの接続が切れていたりする場合に警告を出す実戦的なスクリプトです。
//+------------------------------------------------------------------+
//| 取引環境チェックEAサンプル |
//+------------------------------------------------------------------+
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. 実行環境のスペックとパスを表示
string dataPath = TerminalInfoString(TERMINAL_DATA_PATH);
int cpuCores = (int)TerminalInfoInteger(TERMINAL_CPU_CORES);
int diskSpace = (int)TerminalInfoInteger(TERMINAL_DISK_SPACE);
PrintFormat("実行パス: %s", dataPath);
PrintFormat("CPUコア数: %d, ディスク空き容量: %d MB", cpuCores, diskSpace);
// もし致命的な問題があれば、INIT_FAILEDを返してEAを停止させることも可能
if(!isTradeAllowed) return(INIT_PARAMETERS_INCORRECT);
return(INIT_SUCCEEDED);
}
void OnTick()
{
// ティック毎の処理
}
4. 使用上の注意点とよくあるエラー
- 情報の即時性:
TERMINAL_CONNECTED(接続状態)などは、ネットワークの瞬断に対してわずかにタイムラグが生じる場合があります。厳密な約定可否の判定には、OnTick内でも定期的にチェックすることをお勧めします。 - 型変換(キャスト):
TerminalInfoIntegerはlong型を返します。これをboolやintとして扱う場合は、上記のサンプルコードのように明示的にキャストを行うと、コンパイル時の警告(Warning)を防ぐことができ、コードの可読性が高まります。 - 権限不足:
TERMINAL_DATA_PATHなどのパス情報を取得してファイル操作を行う際、Windowsのユーザー権限設定によっては、MT5がファイル書き込みを拒否されることがあります。開発時は「管理者権限」でMT5を実行するか、データフォルダの書き込み権限を確認してください。
5. 【重要】自動売買における約定スピードと環境の罠
自動売買において、ロジックの優位性と同じくらい重要なのが「実行環境の低レイテンシ(遅延の少なさ)」です。多くの初心者が自宅のPCでEAを稼働させようとしますが、これは極めて危険な選択です。家庭用インターネット回線は、物理的な距離やプロバイダーの混雑により、ブローカーの取引サーバーとの間に数十〜数百ミリ秒の遅延(ピング)を発生させます。スキャルピングや急変時の決済において、この遅延はスリッページを増大させ、バックテストでは勝てていたはずの戦略を「勝てないロジック」へと変えてしまいます。
プロレベルの約定スピードを実現するには、ブローカーのサーバーが設置されているデータセンター(ロンドンやニューヨークなど)の目と鼻の先に位置する、専用のVPS(仮想専用サーバー)を利用することが不可欠です。物理的な距離をゼロに近づけることで、ネットワーク遅延による機会損失を最小限に抑え、EAのポテンシャルを最大限に引き出すことができます。安定した電源、24時間の稼働保証、そして超低遅延なネットワーク環境。これらへの投資を惜しむことは、結果としてそれ以上の損失をマーケットに支払うことと同義なのです。
💡 この記事の内容を実運用で活かすには?
この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント