移動平均乖離率の作成

 移動平均乖離率とは、レートが移動平均線からどのくらい離れて(=乖離して)いるのかを見るためのインジケーターです。

 移動平均乖離率の計算式は、以下のとおりです。

  • 移動平均乖離率
    =(レート - 移動平均線の値) ÷ 移動平均線の値 × 100

 以下では、移動平均乖離率(MA-Dev-R.mq4)の作成方法について解説します。

  1. 全体像
  2. #property命令の記述
  3. インジケーターバッファーの宣言
  4. 変数の宣言
  5. 基本設定の記述
  6. 具体的な処理内容
  7. 関連インジケーター
  8. 関連ツール
MA-Dev-R
移動平均乖離率

1.全体像

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

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

 具体的には、以下のようになります。

Download (PDF, 656KB)

>>目次に戻る

2.#property命令の記述

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

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

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

#property in MA-Dev-R
#property命令

⑴ サブウィンドウに表示させる

 #property indicator_separate_window命令によって、「MA-Dev-R.mq4」は、サブウィンドウに表示されます。

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

 「MA-Dev-R.mq4」は、移動平均乖離率を表す1本のラインのみで構成されているので、#property indicator_buffers命令には、「」を指定します。

⑶ 色を指定する

 「MA-Dev-R.mq4」では、1番目のインジケーターとして移動平均乖離率を表すライン指定するので、#property indicator_color命令には「」を指定し、表示色を「SpringGreen」に指定しています。

⑷ 線の太さを指定する

 「MA-Dev-R.mq4」では、1番目のインジケーターとして移動平均乖離率を表すライン指定するので、#property indicator_width命令には「」を指定し、線の太さを「1」に指定しています。

⑸ レベルを設定する

 移動平均乖離率は、レートが移動平均線からどのくらい離れているのかを見るためのものなので、レートが移動平均線に接していることを意味するの位置に、#property indicator_level命令によって、レベルラインを表示するように設定しています。

>>目次に戻る

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

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

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

 「MA-Dev-R.mq4」においては、サブウィンドウに表示されるラインと計算に使用する配列は1つで足りるので、移動平均乖離率の値を格納していく配列を、以下のように1つだけ宣言しています。


//インジケーターバッファーの宣言
double MA-Dev-R[];

>>目次に戻る

4.変数の宣言

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

 「MA-Dev-R.mq4」では、以下のように変数を宣言しています。


extern int MA_Period        = 25;
extern int MA_Method        = 0;
extern int MA_Applied_Price = 0;
extern int Applied_Price    = 0;

 それぞれの意味は、以下のとおりです。

  • int MA_Period
    移動平均線の計算期間を指定します。
  • int MA_Method
    移動平均線の種類を指定します。
    「0」:単純移動平均線(SMA)
    「1」:指数移動平均線(EMA)
    「2」:平滑移動平均線(SMMA)
    「3」:線形加重移動平均線(LWMA)
  • int MA_Applied_Price
    移動平均線の値の算出に使用する価格データの種類を指定します。
    「0」:終値
    「1」:始値
    「2」:高値
    「3」:安値
    「4」:(高値+安値)÷2
    「5」:(高値+安値+終値)÷3
    「6」:(高値+安値+終値+終値)÷4
  • int Applied_Price
    移動平均線との乖離率を測る価格データの種類を指定します。
    「0」:終値
    「1」:始値
    「2」:高値
    「3」:安値
    「4」:(高値+安値)÷2
    「5」:(高値+安値+終値)÷3
    「6」:(高値+安値+終値+終値)÷4

 なお、それぞれの変数は、インジケーターをチャートに適用した際に任意の値に設定することができるようにするため、「外部変数」として宣言しています。

>>目次に戻る

5.基本設定の記述

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

Initialization Function in MA-Dev-R
基本設定の記述

⑴ SetIndexBuffer()とは

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

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

⑵ SetIndexLabel()とは

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

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

⑶ IndicatorShortName()とは

 IndicatorShortName()とは、MQL4であらかじめ定義されている関数で、データウィンドウとサブウィンドウに表示されるインジケーターの名前等を表示させるものです。

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

⑷ SetIndexStyle()とは

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

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

⑸ SetIndexDrawBegin()とは

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

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

>>目次に戻る

6.具体的な処理内容

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

Download (PDF, 493KB)

⑴ 描画開始のチェック

 移動平均乖離率は、指定した期間の移動平均線の値が算出されていることを前提とします。

 そこで、チャートウィンドウ上のバーの本数が、指定した移動平均線の計算期間分のバーの本数よりも少なかった場合は、プログラムを終了するようにしています。

⑵ int limit = ……について

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

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

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

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

⑷ 移動平均線の値を算出

 iMA()関数を使用して移動平均線の値を算出し、当該値を、インジケーターを適用するチャートにおける通貨ペアの提示レートの小数点以下の桁数で四捨五入しています。

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

⑸ 0divideの回避

 移動平均乖離率は、移動平均線の値を分母として算出されます。

 したがって、分母となる移動平均線の値がであれば、移動平均乖離率の値を算出することはできません

 そこで、移動平均乖離率の算出過程において、「0」で割る(=0divideといいます。)という場合が生じないように、if()文(詳細は「こちら」を参照してください。)を用いて「移動平均線の値が0でなかったら」という条件を付加しています。

⑹ switch()文による条件分岐

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

⑺ 終値による移動平均乖離率の算出

 変数Applied_Priceの値がの場合には、変数Valueに終値を格納し、移動平均乖離率を算出しています。

 そのうえで、当該値をインジケーターを適用するチャートにおける通貨ペアの提示レートの小数点以下の桁数で四捨五入しています。

  • Close[]の詳細については「こちら」を参照してください。
  • NormalizeDouble()関数の詳細については「こちら」を参照してください。
  • Symbol()関数の詳細については「こちら」を参照してください。

⑻ 始値による移動平均乖離率の算出

 変数Applied_Priceの値がの場合には、変数Valueに始値を格納し、移動平均乖離率を算出しています。

 そのうえで、当該値をインジケーターを適用するチャートにおける通貨ペアの提示レートの小数点以下の桁数で四捨五入しています。

  • Open[]の詳細については「こちら」を参照してください。
  • NormalizeDouble()関数の詳細については「こちら」を参照してください。
  • Symbol()関数の詳細については「こちら」を参照してください。

⑼ 高値による移動平均乖離率の算出

 変数Applied_Priceの値がの場合には、変数Valueに高値を格納し、移動平均乖離率を算出しています。

 そのうえで、当該値をインジケーターを適用するチャートにおける通貨ペアの提示レートの小数点以下の桁数で四捨五入しています。

  • High[]の詳細については「こちら」を参照してください。
  • NormalizeDouble()関数の詳細については「こちら」を参照してください。
  • Symbol()関数の詳細については「こちら」を参照してください。

⑽ 安値による移動平均乖離率の算出

 変数Applied_Priceの値がの場合には、変数Valueに安値を格納し、移動平均乖離率を算出しています。

 そのうえで、当該値をインジケーターを適用するチャートにおける通貨ペアの提示レートの小数点以下の桁数で四捨五入しています。

  • Low[]の詳細については「こちら」を参照してください。
  • NormalizeDouble()関数の詳細については「こちら」を参照してください。
  • Symbol()関数の詳細については「こちら」を参照してください。

⑾ 中央値による移動平均乖離率の算出

 変数Applied_Priceの値がの場合には、変数Valueに中央値値(=(高値 + 安値) ÷ 2)を格納し、移動平均乖離率を算出しています。

 そのうえで、当該値をインジケーターを適用するチャートにおける通貨ペアの提示レートの小数点以下の桁数で四捨五入しています。

  • High[]の詳細については「こちら」を参照してください。
  • Low[]の詳細については「こちら」を参照してください。
  • NormalizeDouble()関数の詳細については「こちら」を参照してください。
  • Symbol()関数の詳細については「こちら」を参照してください。

⑿ 代表値による移動平均乖離率の算出

 変数Applied_Priceの値がの場合には、変数Valueに代表値値(=(高値 + 安値 + 終値) ÷ 2)を格納し、移動平均乖離率を算出しています。

 そのうえで、当該値をインジケーターを適用するチャートにおける通貨ペアの提示レートの小数点以下の桁数で四捨五入しています。

  • High[]の詳細については「こちら」を参照してください。
  • Low[]の詳細については「こちら」を参照してください。
  • Close[]の詳細については「こちら」を参照してください。
  • NormalizeDouble()関数の詳細については「こちら」を参照してください。
  • Symbol()関数の詳細については「こちら」を参照してください。

⒀ 加重終値による移動平均乖離率の算出

 変数Applied_Priceの値がの場合には、変数Valueに加重終値(=(高値 + 安値 + 終値 + 終値) ÷ 2)を格納し、移動平均乖離率を算出しています。

 そのうえで、当該値をインジケーターを適用するチャートにおける通貨ペアの提示レートの小数点以下の桁数で四捨五入しています。

  • High[]の詳細については「こちら」を参照してください。
  • Low[]の詳細については「こちら」を参照してください。
  • Close[]の詳細については「こちら」を参照してください。
  • NormalizeDouble()関数の詳細については「こちら」を参照してください。
  • Symbol()関数の詳細については「こちら」を参照してください。

>>目次に戻る

7.関連インジケーター

MAの乖離率と短期MAと長期MAのクロスする瞬間、反転しやすい場面でシグナルを表示するインジケーター
MAの乖離率とクロスを用いた反転シグナル表示インジケーター
MAの乖離率とクロスを用いた反転シグナル表示インジケーター | fx-on.com

MAの乖離率とクロスを用いた反転シグナル表示インジケーター
MAの乖離率とクロスを用いた反転シグナル表示インジケーター | fx-on.com

 上記インジケーターの詳細については「こちらMAの乖離率とクロスを用いた反転シグナル表示インジケーター | fx-on.com」を参照してください。

>>目次に戻る

8.関連ツール

MQL言語の学習ができ、裁量トレーダーもEA開発が可能になる!
『EAつくーる』
『EAつくーる』 | fx-on.com

『EAつくーる』
『EAつくーる』 | fx-on.com

 上記ツール(EAつくーる『EAつくーる』 | fx-on.com)の詳細については「こちら『EAつくーる』 | fx-on.com」を参照してください。

インジケーターつくーる
インジケーターつくーる
インジケーターつくーる | fx-on.com

インジケーターつくーる
インジケーターつくーる | fx-on.com

 上記ツール(インジケーターつくーるインジケーターつくーる | fx-on.com)の詳細については「こちらインジケーターつくーる | fx-on.com」を参照してください。

EAつくーる&インジケーターつくーるセット販売
EAつくーる&インジケーターつくーるセット販売
EAつくーる&インジケーターつくーるセット販売 | fx-on.com

EAつくーる&インジケーターつくーるセット販売
EAつくーる&インジケーターつくーるセット販売 | fx-on.com

 上記ツール(EAつくーる&インジケーターつくーるセット販売EAつくーる&インジケーターつくーるセット販売 | fx-on.com)の詳細については「こちらEAつくーる&インジケーターつくーるセット販売 | fx-on.com」を参照してください。

>>目次に戻る


MT4の使い方からプログラミングまで、わかりやすく解説