【移植#107】DLLの許可状態を点検する — MT5の端末設定とプログラム設定を分けて見る¶

この記事の3行まとめ
- 2010年の「ダイバージェンス」は他ブログの紹介が中心で、移植するコードや仕様がありません。次の技術記事「初めてのDLL(1)」を題材にします。
- DLLを実際に読み込む前に、端末全体とこのプログラムの許可状態を標準APIで確認できます。
- 許可フラグは安全性の証明ではありません。出所と必要な機能を確認できないDLLは許可しないでください。
元記事から今回の題材へ¶
2010年6月12日の記事は、ストキャスティクスのダイバージェンスを説明する別ブログを紹介し、指標の反転だけを売買判断にしないよう述べた「雑談」です。移植できるインジケーターの式やソースコードは示されていません。
そこで番号は飛ばさず、翌日の「初めてのDLL(1)/環境準備篇」を選びました。原記事はMQL4からDLLを作る環境を整える導入です。今回は現行MT5で最初に確認したい「端末と個別プログラムのDLL許可状態」を表示する小さな監査EAへ置き換えます。DLL作成・読込・関数呼び出しは行いません。
ダウンロード¶
107_Dll_Permission_Auditor_v1_00.mq5 をダウンロード
何を確認するか¶
MT5には、端末全体のDLL許可を返すTERMINAL_DLLS_ALLOWEDと、現在実行中のMQLプログラムのDLL許可を返すMQL_DLLS_ALLOWEDがあります。EAは両方の値を読み、チャートとエキスパートログへ表示します。
表示がBLOCKEDなら、このEAはDLLを使えない設定です。端末側が許可されていても、プログラム単位の許可が無ければDLLを使えるとは限りません。設定変更が必要な場合は、端末全体へ一括で許可を広げず、信頼できるプログラムだけに限定してください。
試し方¶
- EAをチャートへ適用します。
- チャート上で端末とプログラムそれぞれの状態を確認します。
- 同じ内容をエキスパートログの
DLL_AUDIT行でも確認します。 - 表示確認後にEAをチャートから外します。
このEAはDLLをインポートせず、注文、ポジション変更、ファイル書込み、外部通信も行いません。DLL許可をオンにする必要はありません。
この表示で分かること・分からないこと¶
この表示で分かるのは、MT5が報告する許可フラグの状態です。DLLの配布元、署名、処理内容、他の依存DLL、MT5とのABI互換性、32/64bitの一致は検査しません。ALLOWEDは「安全」や「正しく動く」という意味ではありません。
DLLを使うプログラムを導入するときは、配布元とソース、必要な関数と引数、依存関係、実行権限を別途確認してください。テスターの実行条件も通常チャートとは異なる場合があるため、この表示だけでバックテストや最適化の実行可否を判断しないでください。
実機確認¶
専用のMT5 Build 6230で実行し、端末とプログラムの両フラグが無効であることを確認しました。ログにはビルド番号、アーキテクチャ、dll_called=falseが記録されます。画像はEAの表示を撮影したもので、DLLをロードした画面ではありません。
参考資料¶
- MQL5 Reference: Call of Imported Functions
- MQL5 Reference: Client Terminal Properties
- MQL5 Reference: Importing Functions (#import)
前: 【移植#106】MetaEditorでブレークポイントと変数を確認する 次: 【移植#108】MQL5からDLL関数を呼び出す — .NETの静的メソッドを小さく試す