【移植#43】プロファイル指定でMT5を起動 — ワークスペースを8項目で監査する¶

この記事の3行まとめ
- MT5では
/profile:で既存プロファイル、/config:で詳細な起動設定を指定できます - 原典の
MarketWatch=をそのまま使わず、Symbol Setの保存と起動後の実状態監査に分けます - 配布インジケーターは通貨サフィックスを許容し、チャートや接続状態を8項目で検査します
今回の原典は「用途ごとのMT4を一発で開く」¶
投稿日順で次に当たる2010年2月1日の記事は、保存済みProfileを指定してMT4を起動する方法を紹介していました。
元記事「Profile を指定して MT4 を起動する。」を読む
原典の手順は、特定のEAとチャートをまとめたProfileを保存し、次のような設定を書いたテキストファイルをターミナルへ渡すというものです。
目的は、毎回チャートを開き、時間足を選び、EAを載せ直す手間を減らすことでした。何を起動するかを先に保存しておく発想は、現在のMT5でも変わりません。
ただし、起動オプションと設定ファイルの書式はMT5の現行仕様に読み替える必要があります。今回は起動方法だけを紹介して終わらず、「期待した状態で本当に起動したか」をMQL5インジケーターで監査します。
MT5は/profileと/configを使い分ける¶
MetaTrader 5公式ヘルプのPlatform Startでは、コマンドラインから既存プロファイルを指定する/profile:と、代替設定ファイルを指定する/config:が案内されています。
保存済みプロファイルを選ぶだけなら、考え方はシンプルです。
通貨、時間足、テンプレート、EAなどを細かく指定したい場合は、設定ファイルを使います。
パスに空白がある場合は、実行ファイルや設定ファイルのパスを引用符で囲みます。指定したプロファイル名や設定ファイルが無効な場合、公式ヘルプでは既定値が使われると説明されています。
つまり、プロセスが起動しただけでは「指定が成功した」とは限りません。起動後の通貨や時間足を確認する工程が必要です。
設定ファイルは役割ごとのブロックに分かれる¶
MT5の設定ファイルは、[Charts]、[Experts]、[StartUp]などのブロックに分かれます。認証情報を含めない最小例は次のようになります。
[Charts]
ProfileLast=Analysis
MaxBars=10000
[Experts]
Enabled=1
AllowLiveTrading=0
AllowDllImport=0
[StartUp]
Symbol=EURUSD
Period=H1
Template=green-on-black.tpl
主な役割は次のとおりです。
| ブロック | 項目 | 役割 |
|---|---|---|
[Charts] | ProfileLast | 起動時のプロファイル |
[Charts] | MaxBars | チャートへ保持する最大バー数 |
[Experts] | Enabled | EAの使用可否 |
[Experts] | AllowLiveTrading | EAによる売買の許可 |
[Experts] | AllowDllImport | DLL呼び出しの許可 |
[StartUp] | Symbol | 起動時に追加するチャートの通貨 |
[StartUp] | Period | 追加チャートの時間足 |
[StartUp] | Template | 適用するチャートテンプレート |
公式ヘルプでは、[StartUp]にExpertやExpertParametersを加え、指定チャートへEAを載せることもできます。
ただし、自動売買を有効にする設定は、単なる画面復元より影響が大きくなります。まずAllowLiveTrading=0で表示と監査だけを確認し、売買を許可するかは別の判断にした方が安全です。
ProfileとTemplateは同じものではない¶
MetaTrader 5公式ヘルプのTemplates and Profilesでは、二つの役割が分けられています。
- Templateは、一つのチャートの色、縮尺、インジケーター、EA、描画物などを保存します
- Profileは、開いている複数チャート、その位置と大きさ、適用中のTemplateをまとめます
「EURUSDのH1へこの表示を適用したい」ならTemplateが中心です。「監視用、裁量用、検証用で複数チャートの組み合わせを切り替えたい」ならProfileが中心になります。
ProfileへEAを含むTemplateを保存した場合、Profile切替時のEA停止設定にも注意が必要です。画面が同じに見えても、EAが稼働中とは限りません。
MarketWatch指定はMT4の行をそのまま写さない¶
原典は起動設定へMarketWatch=EURUSD.setと書いていました。しかし、現行MT5の公式起動設定一覧には、この名前の項目は掲載されていません。
MT5のMarket Watchでは、表示銘柄と列の組み合わせをSymbol Setとして保存し、画面上から切り替える方法が案内されています。
そのため、#43では次のように役割を分けました。
- 起動設定はProfile、Symbol、Period、Templateを担当する
- Market Watchの組み合わせはSymbol Setとして保存する
- 起動後、MQL5から選択銘柄数と現在チャートの選択状態を監査する
Market Watchから隠した銘柄は、MQL5プログラムやストラテジーテスターから利用できない場合があります。負荷を減らすために銘柄数を絞るとしても、EAが必要とする通貨まで外してはいけません。
サフィックスを許容して通貨を照合する¶
配布インジケーターの初期値は、期待する通貨のベース名をEURUSDとしています。
ブローカーによってはEURUSD.aやmEURUSDのような接頭辞・接尾辞が付くため、完全一致だけでは誤判定になります。そこで、完全一致に加えて、実際の通貨名にベース名が含まれる場合も合格としました。
bool SymbolMatchesBase(const string symbol_name,
const string expected_base)
{
if(symbol_name == expected_base)
return true;
return StringFind(symbol_name, expected_base) >= 0;
}
これはどんな別名も自動解決する機能ではありません。ベース名が実際のシンボル名に残る一般的な接頭辞・接尾辞を対象にしています。
起動後に観測できる8項目を検査する¶
配布インジケーターは、プロファイル名や設定ファイル名を推測しません。MQL5から実際に観測できる次の8項目を検査します。
- 現在チャートの通貨が期待するベース名と一致する
- 現在チャートの時間足が期待値と一致する
- 開いているチャート数が許容範囲に入る
- Market Watchの選択銘柄数が1〜5000に入る
- 現在チャートの通貨がMarket Watchで選択されている
- ターミナルが取引サーバーへ接続されている
- 現在チャートの履歴が最低本数以上ある
- 監査インジケーターがチャートへ追加されている
開いているチャートは、MQL5公式のChartFirstとChartNextで列挙します。
long chart_id = ChartFirst();
int count = chart_id < 0 ? 0 : 1;
while(chart_id >= 0 && count < 100)
{
chart_id = ChartNext(chart_id);
if(chart_id < 0)
break;
++count;
}
Market Watchの選択銘柄数はSymbolsTotal(true)、現在通貨の選択状態はSYMBOL_SELECT、接続状態はTERMINAL_CONNECTEDで確認します。
起動設定経由の専用MT5で検証する¶
検証では専用MT5を設定ファイル経由で起動し、[StartUp]相当の指定でEURUSD・H1チャート上へ検証EAを載せました。検証EAは配布インジケーターを追加し、14本の診断バッファを独立に読み取っています。
| 検証項目 | 実測結果 |
|---|---|
| 配布インジケーターのコンパイル | 0エラー・0警告 |
| 検証EAのコンパイル | 0エラー・0警告 |
| MetaTrader 5 | build 5836 |
| 通貨 | EURUSD |
| 時間足 | H1 |
| 開いているチャート | 18 |
| Market Watch選択銘柄 | 12 |
| 現在通貨の選択 | 有効 |
| サーバー接続 | オンライン |
| EURUSD H1の履歴 | 10,069本 |
| チャート上のインジケーター | 1 |
| 起動後チェック | 8 / 8合格 |
| パネルオブジェクト | 11個一致 |
| 実画面キャプチャー | 成功 |
| 売買注文 | なし |
| 外部ファイルの作成・更新 | なし |
この結果は「Analysisという名前のProfileを読めた」という証明ではありません。指定した起動経路のあとで、期待した通貨、時間足、Market Watch、接続、履歴が観測できたという証拠です。
14本の診断バッファ¶
診断用バッファは次の内容です。
- 全体合格フラグ
- 通貨名の照合結果
- 時間足の照合結果
- 開いているチャート数
- チャート数の範囲判定
- Market Watchの選択銘柄数
- 現在通貨の選択フラグ
- サーバー接続フラグ
- 現在チャートの履歴本数
- 履歴本数の判定
- 現在チャートのインジケーター数
- 合格したチェック数
- ターミナルのビルド番号
- パネル用オブジェクト数
検証EAは各バッファをCopyBuffer()で1件ずつ読み、チャート列挙、SymbolsTotal(true)、SYMBOL_SELECT、TERMINAL_CONNECTED、Bars()の直接値と照合しました。
ダウンロードと使い方¶
43_MT5_Startup_Workspace_Audit_v1_00.mq5 をダウンロード
MT5のIndicatorsへ保存してコンパイルし、起動後に確認したいチャートへ適用してください。
初期値は期待通貨EURUSD、時間足H1、最低履歴100本、最大チャート100枚です。用途に合わせて変更できます。
パネルの8項目がすべて合格すれば、少なくとも観測可能なワークスペース状態は期待値を満たしています。不合格の場合は、通貨、時間足、Market Watch、接続、履歴を個別に確認してください。
使えないこと・注意点¶
- 配布版は、現在のプロファイル名や起動に使った設定ファイル名を判定しません。
- ProfileやTemplateが読み込まれた経路そのものは証明できません。
- チャート数とMarket Watch銘柄数は利用環境ごとに異なります。
- Market Watchの銘柄名一覧やSymbol Set名までは照合しません。
- 通貨名の判定は、ベース名を含む一般的な接頭辞・接尾辞を対象にしています。
- 接続済みでも、自動売買や発注が許可されているとは限りません。
- 起動設定ファイルへ口座番号、パスワード、プロキシ認証情報を不用意に保存しないでください。
- 売買ロジックはなく、取引成績を評価するものではありません。
ロジック評価の結論¶
Profile指定起動の価値は、毎回の画面操作を減らし、用途ごとの作業環境を再現しやすくすることです。この考え方は2010年のMT4から現在のMT5まで残っています。
一方、自動起動は「設定を書いたから成功したはず」という思い込みも生みます。名前の間違いが既定値へ置き換われば、ターミナルは起動しても期待した環境ではありません。
そこで、起動設定と起動後監査を一組にします。Profileは環境を復元し、監査インジケーターは復元された結果を確認する。この二段構えなら、昔の便利な小技を、現在の運用で少し堅く使えます。
前後の記事¶
前: 【移植#42】口座種別をDLLなしで判定 — 標準APIと表示プライバシーを検証する
次: 【移植#44】Homeキー連打を卒業 — MT5のM1履歴を3通貨ずつ順番に同期する