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

ザフナーラボブログ

ATRバンドとは、以下の2つのラインで構成されるインジケーターです。

  • 「現在の終値+ATRの値×乗数」で算出された値を示すライン(上部バンド)
  • 「現在の終値-ATRの値×乗数」で算出された値を示すライン(下部バンド)

ATR(Avrage True Range)の詳細については「こちら」を参照してください。

以下では、真の値幅の指数移動平均(EMA:Exponential Moving Average)として算出されるATR(詳細は「こちら」を参照してください。)を用いたATRバンド(ATR Band.mq4)の作成方法について解説します。

ATR-Band

ATR Band

1.全体像

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

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

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

ATR-Band-Code

2.#property命令の記述

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

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

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

property-ATR-Band

#property命令

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

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

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

「ATR Band.mq4」では、以下の2つのデータを表示させます。

  • 上部バンド
  • 下部バンド

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

⑶ 色を指定する

「ATR Band.mq4」で表示される2つのデータの表示色を指定します。

  • #property indicator_color1 Magenta
    1番目のインジケーターとしてATRバンドの上部バンドを示すラインを指定する(後述)ので、#property indicator_color命令には「1」を指定し、表示色を「Magenta」に指定しています。
  • #property indicator_color2 Aqua
    2番目のインジケーターとしてATRバンドの下部バンドを示すラインを指定する(後述)ので、#proerty indicator_color命令には「2」を指定し、表示色を「Aqua」に指定しています。

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

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

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

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

indicator-buffer-ATR-Band

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

⑴ double Upper[];

上部バンドの値を格納していく配列(詳細については「こちら」を参照してください。)です。

⑵ double Lower[];

下部バンドの値を格納していく配列です。

4.変数の宣言

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

「ATR Band.mq4」においては、以下の項目をパラメーターとして指定します。

  • ATRの計算期間
  • ATRの値を算出するのに用いる移動平均の種類
  • 乗数(=ATRの値に乗じる値)

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

  • extern int ATR_Period
    ATRの計算期間
  • extern int MA_Mode
    ATRの値を算出するのに用いる移動平均の種類
  • extern int Multiplier
    乗数

5.基本設定の記述

「ATR Band.mq4」におけるinit()関数内に記述したコードについて解説します。

Initialization-Function-ATR-Band

⑴ SetIndexBuffer()とは

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

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

⑵ SetIndexLabel()とは

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

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

6.具体的な処理内容

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

Start-Function-ATR-Band

⑴ int limit = ……について

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

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

⑵ 真の値幅

ア for()とは

for()とは、同様の計算を繰り返して行うために使用するものです。

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

イ 上部バンドの計算

上部バンドは、以下の計算式により算出されます。

現在の終値+ATRの値×乗数

したがって、以下の手順により、上部バンドの値を算出し、順次、配列Upper[]に格納していくようにしています。

  1. 配列Close[](詳細は「こちら」を参照してください。)を使用して、現在の終値を取得する。
    Close[i]
    
  2. iCustom()関数(詳細は「こちら」を参照してください。)を使用して「Wilders ATR.mq4」(詳細は「こちら」を参照してください。)の値を取得し、当該値に乗数を乗じる。
    iCustom(NULL,0,"Wilders ATR",ATR_Period,MA_Mode,0,i) * Multiplier
    
  3. 上記1.の値に2.の値を加算し、配列Upper[]に格納する。
    Upper[i] = Close[i] +
    iCustom(NULL,0,"Wilders ATR",ATR_Period,MA_Mode,0,i) * Multiplier;
    
イ 下部バンドの計算

下部バンドは、以下の計算式により算出されます。

現在の終値-ATRの値×乗数

したがって、以下の手順により、下部バンドの値を算出し、順次、配列Lower[]に格納していくようにしています。

  1. 配列Close[]を使用して、現在の終値を取得する。
    Close[i]
    
  2. iCustom()関数を使用して「Wilders ATR.mq4」の値を取得し、当該値に乗数を乗じる。
    iCustom(NULL,0,"Wilders ATR",ATR_Period,MA_Mode,0,i) * Multiplier
    
  3. 上記1.の値に2.の値を減算し、配列Lower[]に格納する。
    Lower[i] = Close[i] -
    iCustom(NULL,0,"Wilders ATR",ATR_Period,MA_Mode,0,i) * Multiplier;