【移植#48】アイコン改造をやめて端末識別バッジへ — 複数MT5を色と別名で見分ける¶

この記事の3行まとめ
- 端末のアイコンファイルを置換せず、MT5チャートへ任意の別名と色を大きく表示します
- 口座種別、接続、端末・口座・実行プログラムの売買許可を標準APIから確認できます
- 口座番号とサーバー名は初期状態で隠し、実機では10バッファと12個の表示部品を独立検証しました
今回の原典は「複数のMT4をアイコンで見分ける」¶
投稿日順で次に当たる2010年2月6日の記事は、複数のMT4を起動したときに、タスクバー上で端末を見分ける方法を紹介していました。
原典の相談内容は、タイトルバーに表示される口座番号を、任意の文字列や口座名へ置き換えたいというものでした。しかしMT4側がタイトルを元へ戻してしまうため、記事ではterminal.icoを別のアイコンへ置換する方法を選んでいます。
目的は見た目の装飾ではありません。複数端末の取り違えを減らすことです。
今回はその目的を引き継ぎます。ただし、端末のアイコン、実行ファイル、リソースは変更しません。MQL5の標準機能だけで、現在開いているチャートへ識別情報を表示します。
なぜアイコンファイルを置き換えないのか¶
インストール済みソフトのアイコンや実行ファイルを直接変更すると、次の問題が起こり得ます。
- 端末更新で元へ戻る
- ファイルの配置や形式が変わると手順が使えなくなる
- 複数端末へ同じ変更を適用して、かえって区別できなくなる
- 実行ファイルの書換えは署名や整合性確認へ影響する可能性がある
- バックアップと復元方法を別に管理する必要がある
また、標準のMQL5プログラムから、WindowsのタスクバーアイコンやMT5本体のタイトルを自由に変更する移植にはしていません。
配布インジケーターが識別できるのは、選択して開いた後のチャートです。タスクバー上で選ぶ前から区別したい場合は、OS側で端末ごとのショートカット名やアイコンを管理する必要があります。
端末ごとの「別名」を大きく表示する¶
初期設定の別名は次のとおりです。
たとえば、複数端末へ次のように別の名前と色を設定します。
| 用途 | 別名の例 | 色の例 |
|---|---|---|
| 検証用デモ | OPS-DEMO-A | オレンジ |
| 裁量確認用 | MANUAL-CHECK | 青 |
| 自動売買の監視 | EA-MONITOR | 緑 |
画面では、左側の縦線と見出しを設定色で描き、別名をその直下へ大きく表示します。
別名は利用者が決める文字列であり、口座番号から自動生成しません。スクリーンショットを共有する可能性があるなら、個人名、会社の内部ID、口座番号などを別名へ含めないでください。
口座種別と接続状態を標準APIから取得する¶
口座情報は、MQL5のAccountInfoInteger()とAccountInfoString()から取得します。
バッジが表示する口座種別は次の3種類です。
| 表示 | MQL5の値 |
|---|---|
DEMO | ACCOUNT_TRADE_MODE_DEMO |
CONTEST | ACCOUNT_TRADE_MODE_CONTEST |
REAL | ACCOUNT_TRADE_MODE_REAL |
接続状態はTerminalInfoInteger()のTERMINAL_CONNECTEDから確認します。
g_connected =
(bool)TerminalInfoInteger(TERMINAL_CONNECTED);
g_account_mode =
(ENUM_ACCOUNT_TRADE_MODE)
AccountInfoInteger(ACCOUNT_TRADE_MODE);
ONLINEは取引サーバーへ接続中、OFFLINEは未接続を表します。ただし、接続中であることと、注文できることは同じではありません。
売買許可を3つの層に分けて見る¶
配布版は「自動売買がONか」を1個の表示だけで済ませず、次の層を分けています。
| 表示行 | 取得する状態 | 意味 |
|---|---|---|
TERMINAL TRADE | TERMINAL_TRADE_ALLOWED | 端末設定で売買が許可されているか |
ACCOUNT TRADE | ACCOUNT_TRADE_ALLOWED | 現在の口座で売買が許可されているか |
ACCOUNT EXPERT | ACCOUNT_TRADE_EXPERT | 口座側でEA取引が許可されているか |
PROGRAM TRADE | MQL_TRADE_ALLOWED | 現在動いているMQLプログラムに取引許可があるか |
実行プログラムの状態は、MQLInfoInteger()から取得します。
これらは、どれか1つがALLOWEDなら注文できるという意味ではありません。実際の注文には、プログラム種別、銘柄の取引状態、セッション、証拠金、数量、ブローカー制限など、さらに多くの条件があります。
今回の配布物は表示専用インジケーターです。注文関数を持たず、権限表示がALLOWEDでも注文、変更、取消を実行しません。
口座番号とサーバー名は初期状態で隠す¶
原典では、タイトルバーの口座番号が端末を区別する手掛かりでした。しかし、記事画像や画面共有へ実口座番号を出す必要はありません。
配布版の初期設定は次のとおりです。
InpShowLoginLast4を有効にすると、口座番号の末尾4桁だけを****1234の形式で表示できます。InpShowServerを有効にすると、接続中のサーバー名を表示します。
どちらも初期値はfalseです。末尾4桁やサーバー名であっても、他の情報と組み合わせると識別材料になる場合があります。画面を外部へ共有する用途では、初期値のまま使う方が安全です。
顧客名を返すACCOUNT_NAMEは、配布版では取得も表示もしません。
2秒タイマーで状態を更新する¶
接続や売買許可は、インジケーターを起動した後に変わる可能性があります。
そこでEventSetTimer()を使い、初期設定では2秒ごとに状態を読み直します。
表示更新後はChartRedraw()を呼び、変更したラベルをチャートへ反映します。終了時にはEventKillTimer()を呼び、作成した表示オブジェクトも削除します。
更新間隔は1〜60秒の範囲です。識別表示なのでミリ秒単位の監視は必要ありません。
10バッファを別経路で照合した¶
画面が見えることだけを合格条件にせず、配布インジケーターは10本の診断バッファを公開します。
- 表示状態を取得済みか
- サーバーへ接続中か
- 端末の売買許可
- 口座の売買許可
- 口座のEA売買許可
- 実行プログラムの売買許可
- 口座種別
- MT5 Build
- 更新回数
- バッジのオブジェクト数
検証EAは、接続、端末許可、口座許可、口座種別、Buildを同じ公式APIから独立に取得し、対応するバッファと照合しました。
MQL_TRADE_ALLOWEDは「現在実行中のプログラム」に固有の値です。検証EAとインジケーターで同値とは限らないため、インジケーターのバッファが0または1であることと、その値に対応してパネルがBLOCKEDまたはALLOWEDになっていることを確認しています。
さらに全ラベルを読み直し、次を検査しました。
- 別名が
OPS-DEMO-Aである LOGIN HIDDENと表示されるSERVER HIDDENと表示される- 実口座番号の全文を含まない
- 実サーバー名を含まない
- オレンジの識別線が設定されている
- バッジを構成するオブジェクトが12個ある
DISPLAY ONLY / NO ORDERS / NO DLLが表示される
実行条件¶
| 項目 | 値 |
|---|---|
| MT5 Build | 5836 |
| 通貨・時間足 | EURUSD・H1 |
| 端末別名 | OPS-DEMO-A |
| 口座種別 | DEMO |
| 更新間隔 | 2秒 |
| サーバー名表示 | OFF |
| 口座番号末尾表示 | OFF |
検証結果¶
| 確認項目 | 結果 |
|---|---|
| 配布インジケーターのコンパイル | 0エラー・0警告 |
| 独立検証EAのコンパイル | 0エラー・0警告 |
| サーバー接続 | ONLINE |
| 端末の売買許可 | ALLOWED |
| 口座の売買許可 | ALLOWED |
| 口座のEA売買許可 | ALLOWED |
| インジケーターのプログラム許可 | BLOCKED |
| 口座番号・サーバー名 | 非表示 |
| 診断バッファ | 10本一致 |
| パネルオブジェクト | 12 |
| 実画面キャプチャー | 成功 |
| 注文・DLL呼出し | なし |
ダウンロードと使い方¶
48_Terminal_Identity_Badge_v1_00.mq5 をダウンロード
MT5のIndicatorsへ保存してコンパイルし、端末を開いたときに最初に見るチャートへ適用してください。
入力パラメーターは次のとおりです。
| パラメーター | 初期値 | 役割 |
|---|---|---|
InpTerminalAlias | OPS-DEMO-A | 端末を識別する任意の別名 |
InpAccentColor | オレンジ | 見出しと識別線の色 |
InpRefreshSeconds | 2 | 状態の更新間隔 |
InpShowServer | false | サーバー名を表示する |
InpShowLoginLast4 | false | 口座番号の末尾4桁を表示する |
InpShowPanel | true | 識別バッジを表示する |
端末ごとに別名と色を変え、チャートテンプレートへ保存しておくと再利用しやすくなります。
使えないこと・注意点¶
- WindowsのタスクバーアイコンやMT5本体のタイトルは変更しません。
- バッジを見るには、対象端末のチャートを開く必要があります。
- 別名は端末固有情報から自動生成されません。端末ごとに手動設定してください。
- 同じ別名と色を複数端末へ設定すると、識別効果が下がります。
- 接続や許可の表示は取得時点の状態で、将来の状態を保証しません。
ALLOWED表示は、注文成功や売買可能時間を保証しません。PROGRAM TRADEは現在のインジケーター固有の状態で、同じチャート上の別EAの権限を表しません。- 口座番号末尾とサーバー名も識別情報になり得ます。外部共有時は非表示を推奨します。
- 口座名、残高、証拠金、ポジション、注文は表示しません。
- 表示オブジェクト名が同じ別バージョンを、同一チャートへ重複適用しないでください。
- このインジケーターは表示専用で、注文、変更、取消、ポジション管理を行いません。
- DLLを読み込まず、端末ファイルや実行ファイルを書き換えません。
ロジック評価の結論¶
原典のアイコン置換は、複数のMT4をタスクバー上で見分けるための、分かりやすい工夫でした。タイトルを無理に書き換えても端末側に戻されるため、識別しやすい場所を変えるという判断にも筋があります。
今回の移植では、OSや端末のファイルへ手を入れる代わりに、利用者が管理できる別名と色をチャートへ表示しました。さらに、現在の口座種別、接続、売買許可を同じ場所へまとめています。
一方、MQL5の標準範囲ではタスクバー上の識別を置き換えられません。そこは原典より機能が狭くなっています。その代わり、端末更新で壊れにくく、実行ファイルを変更せず、共有画像へ口座番号を出さない設計になりました。
複数端末の誤操作対策では、口座番号をそのまま目印にするより、「用途を表す別名」「一目で分かる色」「現在の接続と許可」をまとめて見る方が運用しやすい場面があります。
端末を見分けるために、端末そのものを改造しないこと。識別情報は利用者が設定でき、不要な個人情報は初期状態で隠すこと。それが、今回のアイコンカスタマイズから引き継げる教訓です。
前後の記事¶
前: 【移植#47】生のHSTを読まずに履歴を一括CSV化 — 3通貨×500本をCopyRatesで書き出す