新メタトレ実践本用のMQL4/MQL5共通EAライブラリを更新しました。
iCustom()を使ったEAのプログラムがMT4とMT5で共通化できるようになりました。ライブラリファイルは、以下からダウンロードできます。
LibEA171116.zip 15.68 KB
使い方ですが、例えば、MT4、MT5にそれぞれ「HLBand」というカスタム指標が入っているとします。一定期間の高値と安値を結んだよくある指標です。簡単のため、期間をパラメータとし、モードが0で高値ライン、モードが1で安値ラインを返すものとします。
長期のHLバンドをブレイクしたときにエントリー、短期のHLバンドをブレイクしたときにエグジットという典型的なブレイクアウトシステムのEAプログラムは、このライブラリを使うと次のように書けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
//本書ライブラリ #include "LibEA.mqh" input int FastPeriod = 20; //HLバンドのパラメータ(短期) input int SlowPeriod = 40; //HLバンドのパラメータ(長期) input double Lots = 0.1; //売買ロット数 //ティック時実行関数 void Tick() { int sig_entry = EntrySignal(); //仕掛けシグナル int sig_exit = ExitSignal(); //手仕舞いシグナル //成行売買 MyOrderSendMarket(sig_entry, sig_exit, Lots); } //仕掛けシグナル関数 int EntrySignal() { //2本前のHLバンド double HH = iCustom(_Symbol, 0, "HLBand", SlowPeriod, 0, 2); double LL = iCustom(_Symbol, 0, "HLBand", SlowPeriod, 1, 2); int ret = 0; //シグナルの初期化 //買いシグナル if(Close[2] <= HH && Close[1] > HH) ret = 1; //売りシグナル if(Close[2] >= LL && Close[1] < LL) ret = -1; return ret; //シグナルの出力 } //手仕舞いシグナル関数 int ExitSignal() { //2本前のHLバンド double HH = iCustom(_Symbol, 0, "HLBand", FastPeriod, 0, 2); double LL = iCustom(_Symbol, 0, "HLBand", FastPeriod, 1, 2); int ret = 0; //シグナルの初期化 //買いシグナル if(Close[2] <= HH && Close[1] > HH) ret = 1; //売りシグナル if(Close[2] >= LL && Close[1] < LL) ret = -1; return ret; //シグナルの出力 } |
ここでiCustom()は、MQL4標準の書式で呼び出しています。このソースファイルが修正なしにMT5でコンパイルでき、EAとして実行できるようになったというのが、今回のライブラリの更新点です。
ただiCustom()は、MQL5にも同じ関数があり、それぞれ可変長の引数を取るので、そのままオーバーライドすることができませんでした。ライブラリを見てもらうとわかると思いますが、iCustom()をiMyCustom()に読み替えて、iMyCustom()をパラメータが0個から8個まで個別に作成しています。
なので、これを使うためには、以下の制約があります。
- カスタム指標のパラメータの数が8個まで
- カスタム指標のパラメータがint,doubleの数値のみ
その他の注意事項は、過去の記事をご参照ください。