MQL4/MQL5共通EAライブラリ(171202版)

新メタトレ実践本用のMQL4/MQL5共通EAライブラリを更新しました。ライブラリファイルは、以下からダウンロードできます。

今回変更したのは、MQL5でMQL4と同じ形式でテクニカル指標関数を使えるようにする LibMQL4.mqh です。オーダー系のライブラリは修正していません。

MQL4からMQL5への対応は、ちょっと無理やりなところがあるので、MQL5で動かす際に不具合が生じることがあります。そのため、各テクニカル指標関数でエラーが生じたときに、エラーメッセージを出力させるようにしました。

今回のライブラリの改訂で、カスタム指標プログラムをMQL4とMQL5で共通化させることができました。ただし、テクニカル指標関数を使った簡単なものだけです。

以下のプログラムは、ボリンジャーバンドの関数を使ったカスタム指標プログラムの一例です。一応、このソースファイルのまま拡張子をmq4とmq5にすることで、それぞれMT4、MT5でコンパイル・実行させることができます。

kindle本の新MT4入門書で解説したカスタム指標プログラムと書き方が異なるところを説明しておきます。

MQL4では、指標の種類の指定はラインの場合不要でしたが、MQL5では必須となるので追加してあります。MQL4の過去のアップデートでも、指標の種類の指定をしないと表示が不安定になることがあったので、入れておいた方がいいでしょう。

LibMQL4.mqh はMQL5の場合のみ必要となります。MQL4でそのファイルがなくてもエラーが出ないように、MQL5の場合のみ LibMQL4.mqh をインクルードするようにしています。

指標バッファ用の配列を時系列配列に設定する命令で、MQL5では必須です。MQL4の場合、デフォルトで時系列配列になっているので、この行は不要です。

指標を表示する範囲のための変数で、チャートの書き始めの部分でBandsPeriodだけずらしてあります。こうしておかないと、MQL5では何も表示されないことがあります。MQL4では、この行はなくても構いません。

MQL5では、指標ハンドルを作成するコードと、指標を配列にコピーするコードを別タイミングで行うことを想定しているようですが、本ライブラリでは同じタイミングで行っています。そのためか、プログラムをチャートに挿入した直後で指標値が計算されないことがあります。今回のライブラリの改訂で、指標値が計算されていない場合、EMPTY_VALUEという値を返すようにしました。このエラーを無視してしまうと、最新のバーにしか指標が表示されないことがあるので、指標値が計算できていない場合、指標を表示できていないということで、0を返すようにしています。MQL4では不要です。

とりあえず、単純にテクニカル指標関数のみを使うカスタム指標プログラムは、以上の点に注意することで、MQL4/MQL5でコードを共通にすることができます。

あと、よくある書き方として、表示用の指標バッファとは別に計算用の指標バッファを使うケースがあります。ただ、この場合、MQL4とMQL5でコードの書き方が決定的に違うので、今のところコード共通化の対応はできません。ご了承ください。


*追記*(2017-12-04)
48行目で、limitをlimitとrates_total-BandsPeriodの小さい方に設定し直す命令は、プログラムをチャートに挿入した直後(limit=rates_totalになっているとき)にチャートの開始位置をずらすためのものなので、次のように書いてもOKです。

厳密には、チャートの最初からBandsPeriod-1だけずらせばよいので、

あるいは、

でもOKです。

 



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