GMMAインジケーターをMT4で自作してみよう!MQLのサンプルコードや書き方あり

GMMA-インジケーター

GMMA(Guppy Multi Moving Average:複合型移動平均線)とは、ダリル・ガッピー(Daryl Guppy)氏が開発したインジケーターで、12本の指数移動平均線(EMA:Exponential Moving Average)を表示させることによって、それらの位置関係や形状から、トレンドの発生の有無や強さを視覚的に分かりやすく判断できるようにするために使用するものです。

GMMAは、6本の短期指数移動平均線と、6本の長期指数移動平均線とで構成されています。

それぞれの指数移動平均線の計算期間は、以下のとおりです。

  • 短期指数移動平均線
    「3」、「5」、「8」、「10」、「12」、「15」
  • 長期指数移動平均線
    「30」、「35」、「40」、「45」、「50」、「60」

GMMA-インジケーター

1.全体像

MetaTrader4(MT4)でインジケーターを作成するには、以下の手順に従ってプログラムを書いていくことになります。

  1. #property命令を記述する。
  2. インジケーターバッファーの宣言を行う。
  3. 変数の宣言を行う。
  4. init()関数内にインジケーターの基本的な設定を記述する。
  5. start()関数内に具体的な処理内容を記述する。

以下のサンプルコードをダウンロードして記事を読み進めてください。

GMMA-Code

2.#property命令の記述

#property命令とは、インジケーターの色、ラインの太さ、インジケーターを表示する場所などの、プログラム全体にかかわる設定を行うものです。

#property命令の詳細については「こちら」を参照してください。

「GMMA.mq4」における、#property命令を記述した部分の解釈を示すと、以下のようになります。

property-GMMA

⑴ チャートウィンドウに表示させる

# property indicator_chart_window命令によって、「GMMA.mq4」は、チャートウィンドウに表示されます。

⑵ 12種類のデータを表示させる

「GMMA.mq4」では、以下の12本の指数移動平均線を表示させます。

  • 6本の短期指数移動平均線
  • 6本の長期指数移動平均線

したがって、#property indicator_buffers命令には、「12」を指定します。

⑶ 色を指定する

「GMMA.mq4」で表示される、短期指数移動平均線と長期指数移動平均線の表示色を指定します。

  • #property indicator_color1~6 Aqua
    1番目から6番目のインジケーターとして短期指数移動平均線を指定する(後述)ので、#property indicator_color命令には「1(~6)」を指定し、表示色を「Aqua」に指定しています。
  • #property indicator_color7~12 Magenta
    7番目から12番目のインジケーターとして長期指数移動平均線を指定する(後述)ので、#property indicator_color命令には「7(~12)」を指定し、表示色を「Magenta」に指定しています。

3.インジケーターバッファーの宣言

インジケーターバッファーとは、インジケーターの計算に使用するデータを格納しておく配列のことをいいます。

インジケーターバッファーの詳細については「こちら」を参照してください。

「GMMA.mq4」における、インジケーターバッファーを宣言した部分の解釈を示すと、以下のようになります。

Declaration-of-Indicator-Buffer-GMMA

⑴ double Fast_EMA_1(~6)[];

6本の短期指数移動平均線の値を格納していく配列です。

⑵ double Slow_EMA_7(~12)[];

6本の長期指数移動平均線の値を格納していく配列です。

4.変数の宣言

「GMMA.mq4」では、以下の項目をパラメーターとして指定します。

  • 短期指数移動平均線の計算期間
  • 長期指数移動平均線の計算期間
  • 移動平均線の種類
  • 移動平均線の計算に使う価格データ

上記の項目は、インジケーターをチャートに適用した際に任意の値に設定することができるようにするため、以下に示すように「外部変数」として宣言します。

  • extern int Fast_EMA_1(~6)_Period
    短期指数移動平均線の計算期間
  • extern int Slow_EMA_1(~6)_Period
    長期指数移動平均線の計算期間
  • extern int MA_Mode
    移動平均線の種類
    以下の表に従って指定します。

    種 類
    定 数
    内 容
    MODE_SMA
    単純移動平均線
    MODE_EMA
    指数移動平均線
    MODE_SMMA
    平滑移動平均線
    MODE_LWMA
    線形加重移動平均線
  • extern int Applied_Price
    移動平均線の計算に使う価格データ
    以下の表に従って指定します。

    種 類
    定 数
    内 容
    PRICE_CLOSE
    終 値
    PRICE_OPEN
    始 値
    PRICE_HIGH
    高 値
    PRICE_LOW
    安 値
    PRICE_MEDIAN
    中央値
    (高値+安値)÷2
    PRICE_TYPICAL
    代表値
    (高値+安値+終値)÷3
    PRICE_WEIGHTED
    加重終値
    (高値+安値+終値+終値)÷4

5.基本設定の記述

「GMMA.mq4」におけるOnInit()関数内に記述したコードについて解説します(なお、OnInit()関数はvoid型なので、init()関数とは異なり、最後に記述するreturn()文は、「return(0);」ではなく「return;」と記述します。)。

Initialization-GMMA

⑴ SetIndexBuffer()とは

SetIndexBuffer()とは、MQL4であらかじめ定義されている関数で、各インジケーターバッファーを、インジケーターバッファー領域(データを一時的に蓄えるデータ領域)に割り当てるものです。

SetIndexBuffer()関数の詳細については「こちら」を参照してください。

⑵ SetIndexLabel()とは

SetIndexLabel()とは、MQL4であらかじめ定義されている関数で、データウィンドウにインジケーターの描画線の説明を表示させるものです。

SetIndexLabel()関数の詳細については「こちら」を参照してください。

⑶ SetIndexStyle()とは

SetIndexStyle()とは、MQL4であらかじめ定義されている関数で、インジケーターの描画スタイル(線orヒストグラム、色など)を設定するものです。

SetIndexStyle()関数の詳細については「こちら」を参照してください。

⑷ SetIndexDrawBegin()とは

SetIndexDrawBegin()とは、MQL4であらかじめ定義されている関数で、インジケーターの描画を開始するバーの位置を指定するものです。

SetIndexDrawBegin()関数の詳細については「こちら」を参照してください。

6.具体的な処理内容

「GMMA.mq4」のstart()関数内に記述したコードについて解説します。

Execution-GMMA

⑴ int limit = ……について

「limt」という変数を、「Bars-IndicatorCounted()」を初期値として宣言しています。

当該コードの詳細については「こちら」を参照してください。

⑵ for()文による繰り返し処理

for()文によって、SetIndexDrawbegin()関数で設定したバーから、現在のバーまでの12本の指数移動平均線の値を順次算出するようにしています。

for()文の詳細については「こちら」を参照してください。

⑶ 移動平均線の値の計算

iMA()関数を使用して、12本の指数移動平均線の値を算出しています。

iMA()関数の詳細については「こちら」を参照してください。