『新メタトレ入門本』カスタム指標:新規ファイルの作成・基本プログラム


新MT4対応 FXメタトレーダープログラミング入門』(新メタトレ入門本)連動企画です。

今回より第2章「カスタム指標のプログラミング」に入ります。この記事では、「3-1 新規ファイルの作成」と「3-2 カスタム指標の基本プログラム」を扱います。

【目次】
第1章 メタトレーダーの紹介
第2章 スクリプトのプログラミング
第3章 カスタム指標のプログラミング
  3-1 新規ファイルの作成
  3-2 カスタム指標の基本プログラム
  3-3 指標の色や線種を変える
  3-4 指標の計算式の書き方
  3-5 繰り返しを使ったチャート全体へのプロット
  3-6 組み込みテクニカル指標関数の使い方
  3-7 独自のテクニカル指標の作り方
  3-8 カスタム指標のデバッグ
第4章 エキスパートアドバイザー(EA)のプログラミング

本書アップデート情報

このセクションでは、本書内容のアップデートはありません

関連するMT5情報

新規ファイルの作成

メタエディターの新規作成で作成されたカスタム指標のプログラムは、MQL4とMQL5とでほぼ同じです。

1行違うのは、スクリプトのときと同様、「#property strict」の有無です。MQL5では、「#property strict」は必要ありません。

基本プログラム

サンプルプログラムex1_ind.mq4は、拡張子を「mq5」に変えただけでは、コンパイルでエラーが出ます。

エラーの原因は、MQL5では、Open[]、High[]、Low[]、Close[]といった四本値の定義済み配列がないためです。MQL5では、Close[]ではなく、OnCalculate()関数の引数であるclose[]を使います。
先頭文字が大文字か小文字化かの違いですが、プログラム上は全く違う変数と見なされるので、注意してください。

この修正で、コンパイルは通りますが、実行しても何も表示されません。MQL4とMQL5とで標準の仕様が異なるため、いくつか命令を追加する必要があります。

まず、プリプロセッサ命令として以下の3文を追加します。

   #property indicator_plots 1 //表示させる指標バッファの数
   #property indicator_type1 DRAW_LINE //指標の種類
   #property indicator_color1 clrBlack //ラインの色

MQL5では、使用するバッファの数のほかに、表示させる指標バッファの数を指定する必要があります。「#property indicator_plots 1」で、表示させる指標バッファが1個であることを指定します。

#property indicator_type1」と「#property indicator_color1」は、指標の種類と色の指定です。MQL4ではこれを指定しなくても指標の種類が「ライン」で色が「黒」になっていましたが、MQL5では何も指定しないと何も表示されません。この命令の詳細は、次のセクションで取り上げます。

もう一つ、追加する必要があるのは、Buf[]close[]といった配列を時系列配列にセットすることです。

MQL4では標準で時系列配列になっていたので、何も指定する必要はなかったのですが、MQL5では指定しないと配列は非時系列配列となっています。

つまり、Buf[0]close[0]が、チャート上の一番左側のバーを表すことになり、表示する位置がまったく逆になってしまうのです。

そのため、ArraySetAsSeries()という関数を使って、配列を時系列配列に変換する必要があるのです。

サンプルプログラムex1_ind.mq4をMQL5用に書き換えたプログラムを以下に示します。

追加した箇所は、3行目から5行目のプリプロセッサ命令と、Buf[]close[]を時系列配列に設定した13行目と29行目です。

ArraySetAsSeries()は、最初の引数に配列名を指定し、2番目の引数は時系列配列にする場合「true」を入れます。
これは、プログラム中に1回だけ実行すればよいので、関数の外部で宣言されているBuf[]に対しては、OnInit()関数に書いておけばいいです。
ただし、close[]OnCaluculate()関数の引数で、その関数内のみで有効なので、OnCalculate()関数内に記述しなくてはいけません。

なお、今回の記事では、MQL4のサンプルプログラムをMQL5用に修正しましたが、修正したMQL5のプログラムは、拡張子を「mq4」に戻すとMT4でコンパイル、動作させることができます。

つまり、MQL4では暗黙の了解だった部分をMQL5では明記しなくてはいけなかっただけで、MQL5で追加した部分はMQL4として間違いというわけではないということです。

前へ

『新メタトレ入門本』スクリプト:トレード関数の使い方(決済注文)

次へ

『新メタトレ入門本』カスタム指標:色や線種を変える・計算式の書き方