今回、ご縁があってMetaTrader4の外部DLLを作成するお仕事をいただきました。
普段ふれることが少ないツールのDLLを作成するなかで確認できたことを書いておきます。
MetaTrader4とは?
FX(外貨証拠金取引)において自動売買を手伝ってくれるツールです。通称はMT4のようですね。その中で自動売買のサインやタイミングを知らせるEA(Expert Advisor)をオリジナルで作ることができます。
MT4にはMQLと呼ばれるプログラム言語が搭載されていますので、MT4単独でオリジナルEAを作成することができます。MQLはC++ライクな言語らしく、言語表現もC++に似ています。また、C/C++で作成したDLLをインポートする機能も備わっています。
DLLインポートは、処理速度を要求される課題(もしくはMQL単独では解決し難い課題)において、C++で作成したDLLをリンクして処理するようです。
はまったこと
MQLのリファレンスを読みますと作成したDLLの配置場所は[…\MQL\Experts/Libraries」になっています。しかし、こちらに作成したDLLを配置してもDLLに含まれる関数をCALLした時点で
「Unhandled Exception」が発生したり、「Cannnot Load …」や「Cannot Call …」などで怒られちゃったりします。どうしてでしょう?
いろいろ調べる内に解決策を見つけました。もう7年も前の記事です。
»参考にしたサイト
内容をかいつまむと「MQLの実行環境にDLLを配置しないと動かないよ」と言うことでした。
早速、該当DLLをMT4インストールフォルダに配置すると…動きました。
注意点
今回はC#で作成したDLLをC++/CLIのDLLでラップしました。つまり、DLLが二つある状態です。
MQL -> DLL(C++/CLI) -> DLL(C#)
なので、DLLは両方ともMT4のインストールフォルダに配置してくださいね。