【未解決→解決】作成したDLLをMT4で動かしたいが、動かない
「C言語でのDLLの作成」でどうしてDLLを作成したかというと全てはMT4で動かすため。
MT4のバージョンが600系になった頃だったか、自作EAで動かないものが少しずつでてきた(※仕事が忙しくてだいぶ放置しているのが現状なので、正確に覚えていないけど)。
DLLも、そのうちの1つ。
正直なところ、Metatraderの最新情報を定期的にキャッチアップしていないし、ソースコードとMT4の構成管理もしていないので、動いていた時といなかった時の違いを比較できない。ただ、久しぶりに動かそうと思って動かなかったので現時点の状況を纏めておく。
やることは次の通り。
1.作成したDLLを動かすMT4のサンプルソースコードの作成
2.DLLとサンプルソースコードのMT4への配備
3.DLLが動くかの確認
4.各OSとMT4での動作確認
それでは始める。
1.作成したDLLを動かすMT4のサンプルソースコードの作成
#property copyright "Copyright 2013, graySpace999." #property link "http://d.hatena.ne.jp/graySpace/" #property version "1.00" #property strict #import "libtest.dll" double movingAverages(double,double,double,double); #import //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- double testNum = movingAverages(1,2,3,4); Print("***************",testNum); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+
2.DLLとサンプルソースコードのMT4への配備
「MT4を起動→ファイル→データフォルダを開く」と進む。
まず、「MQL4\Experts」に1で作成したDLLを動かすMT4のサンプルソースコード(EA)を配置する。
次に、「MQL4\Libraries」にDLL(libtest.dllという名前にしている)を配置する。
3.DLLが動くかの確認
バックテストを動かす。作成したEAの名前は「dllTest」。
まず、DLLの使用を許可するために「ツール→オプション→エキスパートアドバイザー」から「DLLの使用を許可する」にチェックを入れる。
次にバックテストを実行する。
最後に結果を確認する。
失敗した。
エラーメッセージは「2014.10.12 05:54:46.540 2014.01.02 04:55 Cannot call 'libtest.dll::movingAverages', 'libtest.dll' is not loaded」。
なお、この結果は、Metaquotes社の公式ページからダウンロードしたMT4で、バージョンは4.00でBuild711のもの。実行環境は「windows8 64bit」。
4.各OSとMT4での動作確認
「バージョン4.00、Build711のMetaquotes社公式MT4@windows8(64bit)」では動作しなかったDLLだが、「バージョン4.00、Build670のMetaquotes社公式MT4@windows7(64bit)」では動作した。
いくつかのパターンで実施したので纏めておく。
Windows8で失敗しているので、権限やセキュリティ設定の問題かな・・・。
なお、実行失敗はいずれも「Cannot call 'libtest.dll::movingAverages', 'libtest.dll' is not loaded」。
Windows7での結果。
OSの種類 | MT4提供会社 | MT4のバージョン | MT4のbuild番号 | DLL実行結果 | 備考 |
Windows7.0 64bit | Metaquotes | 4.00 | 670 | 実行成功 | versionアップされないので、670でテストできた。 |
Windows7.0 64bit | Metaquotes | 4.00 | 711 | 未実施 | versionアップされたら実施。 |
Windows7.0 64bit | FXCM | 4.00 | 625 | 実行失敗 | versionアップされる前にテストした。version戻せないと再テスト不可能? |
Windows7.0 64bit | FXCM | 4.00 | 711 | 実行成功 | versionアップされた後でテスト。 |
Windows7.0 64bit | CyberAgent | 4.00 | 625 | 実行失敗 | versionアップされる前にテストした。version戻せないと再テスト不可能? |
Windows7.0 64bit | CyberAgent | 4.00 | 711 | 実行成功 | versionアップされた後でテスト。 |
Windows8での結果。
OSの種類 | MT4提供会社 | MT4のバージョン | MT4のbuild番号 | DLL実行結果 | 備考 |
Windows8.1 64bit | Metaquotes | 4.00 | 670 | 未実施 | このバージョンのMT4を持っていない。 |
Windows8.1 64bit | Metaquotes | 4.00 | 711 | 実行失敗 | - |
Windows8.1 64bit | FXCM | 4.00 | 625 | 未実施 | このバージョンのMT4を持っていない。 |
Windows8.1 64bit | FXCM | 4.00 | 711 | 実行失敗 | - |
Windows8.1 64bit | CyberAgent | 4.00 | 625 | 未実施 | このバージョンのMT4を持っていない。 |
Windows8.1 64bit | CyberAgent | 4.00 | 711 | 実行失敗 | - |
(追記)2014.10.13
DLLをmingwを使用してlinuxで作成するのではなく、Visual C++を使用してWindows8.1(MT4動作環境と同じマシン)で作成したら、Windows8.1 64bitで、Metaquotes社、CyberAgent、FXCM全てのMT4で実行に成功した。
「Visual C++ 2010 ExpressでDLLを作成する 〜 DLLをMetatrader4(MT4)で使用する」にメモした。