MT5のタイムフレームをMT4で使う場合の注意点

前回の記事でMT5のタイムフレームをMT4で使うためのライブラリを紹介しました。

最近は、互換性のないMT4とMT5で、いかに互換性のあるソースファイルが作れるかが研究テーマ(?)となっていますが、今回のライブラリの仕組みは次のようになっています。

モメンタムを算出するテクニカル指標関数 iMomentum()の引数を iMomentum(PERIOD_M10, MomPeriod, 1)のように変えたのは、MQL4/MQL5の組み込み関数を直接呼び出すのではなく、別に定義した関数を呼び出すためです。

追加したライブラリLibTF5.mqhには、次のような関数の定義が書かれています。

MQL4/MQL5では、関数のオーバーロードの機能があり、同じ関数名でも引数の数が違えば、別の関数として定義できるのです。なので、iMomentum()の引数の数が5個であれば、組み込み関数(MQL5の場合、LibMQL4.mqhで定義した関数)が呼ばれるのですが、今回のように3個にすれば、このライブラリの関数が呼ばれるのです。

symbolの引数を省略したのは、通常チャート上のシンボル_Symbolを使うことが多いからです。またapplied_priceの引数を省略したのは、テクニカル指標を算出するデータを終値に限定したからです。

それで、このライブラリで定義したiMomentum()関数では、同じくライブラリ中のCheckTF()という関数の戻り値により、組み込み関数のiMomentum()と、iMomentumOnArray()のどちらを呼ぶかを場合分けしています。

ここで、CheckTF()は、引数のタイムフレームがMT4,MT5でそれぞれ対応しているかどうかをチェックする関数で、対応していればtrueを返すので、そのまま組み込みのテクニカル指標関数を呼び出します。

今回のライブラリでは、タイムフレームが対応していない場合の処理が重要ですが、ちょっと強引な方法をとっています。あとあまりコードが複雑にもならないようにもしているので、実行効率はよくありません。

簡単にいうと、タイムフレームが対応していない場合、1分足の終値を使って指定したタイムフレームの終値の配列を作成します。そして、その配列に対してモメンタムを算出するiMomentumOnArray()を使って、指定したタイムフレームでのテクニカル指標値を求めているのです。

ということなので、テクニカル指標といっても、配列に対して算出できる関数があるものしか現状では対応できないということになります。つまり、MQL4で使えるのは、iBandsOnArray(), iCCIOnArray(), iEnvelopesOnArray(), iMomentumOnArray(), iMAOnArray(), iRSIOnArray(), iStdDevOnArray()の7つということになります。これ以外のテクニカル指標に対応させたい場合は、自作する必要があるでしょう。

あと、終値配列を毎回作成するので、結構時間がかかります。売買ルールが単純であれば、EA実行に支障をきたすことはありませんが、ストラテジーテスターでのバックテストは時間がかかりすぎて実用的ではありません。1分足の終値の配列サイズをRATES_SIZEという定数で1000に指定してあり、それを小さくすることで多少速くできるかもしれませんが、逆に小さくすると、大きいタイムフレームの終値のサイズが少なくなり、テクニカル指標が算出できないという問題も生じます。

以上、色々と使用上の注意点があるので、それらを解決できるまでは、このライブラリはβ版のままかもしれません。

とりあえず、興味のある方は使える範囲でお使いください。



コメントは受け付けていません