『新メタトレ入門本』カスタム指標:独自のテクニカル指標の作り方・デバッグ
『新MT4対応 FXメタトレーダープログラミング入門』(新メタトレ入門本)連動企画です。
今回は、第2章「カスタム指標のプログラミング」の最後のセクション「3-7 独自のテクニカル指標の作り方」と「3-8 カスタム指標のデバッグ」について説明します。
【目次】
第1章 メタトレーダーの紹介
第2章 スクリプトのプログラミング
第3章 カスタム指標のプログラミング
3-1 新規ファイルの作成
3-2 カスタム指標の基本プログラム
3-3 指標の色や線種を変える
3-4 指標の計算式の書き方
3-5 繰り返しを使ったチャート全体へのプロット
3-6 組み込みテクニカル指標関数の使い方
3-7 独自のテクニカル指標の作り方
3-8 カスタム指標のデバッグ
第4章 エキスパートアドバイザー(EA)のプログラミング
本書アップデート情報
このセクションでは、本書内容のアップデートはありません。
関連するMT5情報
テクニカル指標の平滑化
MQL4では、既存のテクニカル指標を平滑化するために、配列データに移動平均をかけるiMAOnArray()という関数を利用しました。
しかし、MQL5ではiMAOnArray()関数がありません。そこで、別の方法を使う必要があります。
別の方法とは、移動平均を求めるときに利用したiMA()です。
MQL5のテクニカル指標関数では、最後の引数「applied_price」に、チャート上の4本値だけでなく、別のテクニカル指標の指標ハンドルを指定することができます。
つまり、iMA()の「applied_price」の引数に指標ハンドルを指定すると、その指標データに対して、移動平均を適用させることができるのです。
今回のサンプルプログラムex9_ind.mq4は、モメンタムに対して移動平均をとり平滑化した指標を求めるものです。
このような指標は、MQL5では、iMomentum()で求めた指標ハンドルをiMA()の最後の引数に渡すという形で実現できます。
int hMom = iMomentum(_Symbol, 0, MomPeriod, PRICE_CLOSE); //モメンタムの初期化
hMA = iMA(_Symbol, 0, Smooth, 0, MODE_SMA, hMom); //モメンタムの移動平均の初期化
そして、指標ハンドル「hMA」のバッファをCopyBuffer()で配列にコピーすることで指標値が取得できます。
サンプルプログラムex9_ind.mq4に、上のような方法を適用し、MQL5で動くよう修正を加えたコードを以下に示します。
モメンタムの指標ハンドル「hMom」は、直後にiMA()に渡すだけなので、外部変数として宣言する必要はありません。また「hMom」のバッファを配列にコピーする必要もないので、指標バッファは一つで済みます。
テクニカル指標の適応化
本書では、指数移動平均を利用したテクニカル指標の適応化を紹介しています。ただし、パラメータを変化させるため、iMA()関数は使わず、直接計算式を記述します。
指数移動平均の計算式の部分はMQL4と同じものが使えます。ただ、パラメータの算出に使うモメンタムはiMmentum()で求めるので、指標バッファをもう一つ用意する必要があります。
つまり、指標バッファは二つ使い、表示させる指標は一つというケースになります。
MQL5では、使用するバッファの個数は「#property indicator_buffers」で指定し、表示させるバッファの個数は「#property indicator_plots」で指定します。
今回のケースでは、以下のような命令になります。
#property indicator_buffers 2 //指標バッファの数
#property indicator_plots 1 //表示させる指標バッファの数
まずは、iMomentum()を使ってMom[]という配列に終値のモメンタムを求めます。
そして、Mom[]を使って適応化した移動平均をBuf[]に求め、プロットします。
サンプルプログラムex10_ind.mq4を、上述の手順でMQL5用に修正したコードを示します。
MQL4と共通なコードの部分の説明は省略しましたが、詳しくは本書の説明をご参照ください。
カスタム指標のデバッグ
カスタム指標のデバッグに関しては、本書の説明がそのままMT5でも適用できます。