アルーンインジケーター(Aroon Indicator)とは、トレンドの有無・強弱を判断するために使用するインジケーターです(なお、「Aroon」とは、サンスクリット語で「夜明けの光」という意味です。)。
アルーンインジケーターの計算式は、以下のとおりです。
- アルーンアップ
=(n日間-n日間中の最高値からの経過日数)÷n日間×100 - アルーンダウン
=(n日間-n日間中の最安値からの経過日数)÷n日間×100
換言すれば、アルーンインジケーターは、「全計算期間中における、計算期間の初めから最高(安)値までの期間が占めている割合」を計算するもの、ということができます。
アルーンインジケーターによる一般的な取引ルールは、以下のとおりです。
- 買いシグナル
アルーンアップがアルーンダウンを下から上に上抜いたとき。
アルーンアップの値が「70~100」で、アルーンダウンの値が「0~30」であれば、強い上昇トレンドにあると判断。
アルーンダウンが「50」を下回ったときに、下降トレンドの終わりが近いと判断。 - 売りシグナル
アルーンダウンがアルーンアップを下から上に上抜いたとき。
アルーンダウンの値が「70~100」で、アルーンアップの値が「0~30」であれば、強い下降トレンドにあると判断。
アルーンアップが「50」を下回ったときに、上昇トレンドの終わりが近いと判断。
1.全体像
MetaTrader4(MT4)でインジケーターを作成するには、以下の手順に従ってプログラムを書いていくことになります。
- #property命令を記述する。
- インジケーターバッファーの宣言を行う。
- 変数の宣言を行う。
- init()関数内にインジケーターの基本的な設定を記述する。
- start()関数内に具体的な処理内容を記述する。
具体的には、以下のようになります。
2.#property命令の記述
#property命令とは、インジケーターの色、ラインの太さ、インジケーターを表示する場所などの、プログラム全体にかかわる設定を行うものです。
#property命令の詳細については「こちら」を参照してください。
「Arron Indicator.mq4」における、#property命令を記述した部分の解釈を示すと、以下のようになります。
⑴ サブウィンドウに表示させる
#property indicator_separate_window命令によって、「Aroon Indicator.mq4」は、サブウィンドウに表示されます。
⑵ 2種類のデータを表示させる
「Aroon Indicator.mq4」では、以下の2つのデータを表示させます。
- アルーンアップ
- アルーンダウン
したがって、#property indicator_buffers命令には、「2」を指定します。
⑶ 色を指定する
「Aroon Indicator.mq4」で表示される2つのデータの表示色を指定します。
- #property indicator_color1 Magenta
1番目のインジケーターとしてアルーンアップを示すラインを指定する(後述の5.⑴を参照)ので、#property indicator_color命令には「1」を指定し、表示色を「Magenta」に指定しています。 - #property indicator_color2 Aqua
2番目のインジケーターとしてアルーンダウンを示すラインを指定する(後述の5.⑴を参照)ので、#property indicator_color命令には「2」を指定し、表示色を「Aqua」に指定しています。
⑷ 線の太さを指定する
「Aroon Indicator.mq4」で表示される2つのデータの線の太さを指定します。
- #property indicator_width1 1
1番目のインジケーターとしてアルーンアップを示すラインを指定する(後述の5.⑴を参照)ので、#property indicator_width命令には「1」を指定し、線の太さを「1」に指定しています。 - #property indicator_width2 1
2番目のインジケーターとしてアルーンダウンを示すラインを指定する(後述の5.⑴を参照)ので、#property indicator_width命令には「2」を指定し、線の太さを「2」に指定しています。
⑸ インジケーターの最大値・最小値を指定する
「Aroon Indicator.mq4」で表示されるデータは、「0」%から「100」%の間で推移するので、#property indicator_maximum命令には「100」を指定して、最大値を「100」に設定し、また、#property indicator_minimum命令には「0」を指定して、最小値を「0」に設定しています。
⑹ レベルを設定する
アルーンインジケーターは、アルーンアップ(ダウン)が、「70」を超えたり、「30」を下回った場合をトレンド判断の基準の1つとします。
そこで、アルーンインジケーターの値が「70」と「30」を示す位置に、#property indicator_level命令によって、レベルラインを表示するように設定しています。
⑺ レベルラインの色を指定する
#property indicator_levelcolor命令によって、レベルラインの表示色を「White」に指定しています。
⑻ レベルラインの線種を指定する
#property indicator_levelstyle命令によって、レベルラインの線種を「STYLE_DOT(=短音線)」に指定しています。
⑼ レベルラインの太さを指定する
#property indicator_levelwidth命令によって、レベルラインの太さを「1」に指定しています。
3.インジケーターバッファーの宣言
インジケーターバッファーとは、インジケーターの計算に使用するデータを格納しておく配列のことをいいます。
配列の詳細については「こちら」を参照してください。
「Aroon Indicator.mq4」における、インジケーターバッファーを宣言した部分の解釈を示すと、以下のようになります。
⑴ double Aroon_Up[];
アルーンアップの値を格納していく配列です。
⑵ double Aroon_Down[];
アルーンダウンの値を格納していく配列です。
4.変数の宣言
「Aroon Indicator.mq4」では、アルーンインジケーターの計算期間をパラメーターとして指定します。
アルーンインジケーターの計算期間は、インジケーターをチャートに適用した際に任意の値に設定することができるようにするため、以下に示すように、「外部変数」として宣言します。
extern int Aroon_Period = 14;
5.基本設定の記述
「Aroon Indicator.mq4」におけるinit()関数内に記述したコードについて解説します。
⑴ SetIndexBuffer()とは
SetIndexBuffer()とは、MQL4であらかじめ定義されている関数で、各インジケーターバッファーを、インジケーターバッファー領域(データを一時的に蓄える領域)に割り当てるものです。
SetIndexBuffer()関数の詳細については「こちら」を参照してください。
⑵ SetIndexLabel()とは
SetIndexLabel()とは、MQL4であらかじめ定義されている関数で、データウィンドウにインジケーターの描画線の説明を表示させるものです。
SetIndexLabel()関数の詳細については「こちら」を参照してください。
⑶ IndicatorShortName()とは
IndicatorShortName()とは、MQL4であらかじめ定義されている関数で、データウィンドウとサブウィンドウに表示されるインジケーターの名前等を表示させるものです。
IndicatorShortName()関数の詳細については「こちら」を参照してください。
なお、IndicatorShortName()関数の引数はstring型であるため、「Aroon_Period」の直前に(string)と記述してint型からstring型に型変換(詳細は「こちら」を参照してください。)を行っています。
⑷ SetIndexStyle()とは
SetIndexStyle()とは、MQL4であらかじめ定義されている関数で、インジケーターの描画スタイル(線orヒストグラム、色など)を設定するものです。
SetIndexStyle()関数の詳細については「こちら」を参照してください。
⑸ SetIndexDrawBegin()とは
SetIndexDrawBegin()とは、MQL4であらかじめ定義されている関数で、インジケーターの描画を開始するバーの位置を指定するものです。
SetIndexDrawBegin()関数の詳細については「こちら」を参照してください。
⑹ IndicatorDigits()とは
IndicatorDigits()とは、MQL4であらかじめ定義されている関数で、インジケーターの値を、小数点以下何桁まで表示させるかを指定するものです。
IndicatorDigits()関数の詳細については「こちら」を参照してください。
6.具体的な処理内容
「Aroon Indicator.mq4」のstart()関数内に記述したコードについて解説します。
⑴ int limit = ……について
「limit」という変数を、「Bars-IndicatorCounted()」を初期値として宣言しています。
当該コードの詳細については「こちら」を参照してください。
⑵ for()文による繰り返し処理
for()文の詳細については「こちら」を参照してください。
⑶ アルーンアップの計算
ア 最高値からのバーの形成本数を算出する
iHighest()関数(詳細は「こちら」を参照してください。)を使用して、「Aroon_Period」の期間内で最高値を示現したバーの位置を取得し、その値から「i」に格納されている値を減ずることによって、最高値から「i」番目のバーまでに、何本バーが形成されているかを算出しています。
この値が、上述した「n日間中の最高値からの経過日数」に応答することになります。
そして、当該値を変数「Aroon_Up_Difference」に代入しています。
イ アルーンアップの値を算出する
- (100 ÷ Aroon_Period)×(Aroon_Up_Difference)を計算することによって、「全計算期間中における、最高値から『i』番目のバーまでの期間の占める割合(%)」を算出しています。
(Aroon_Up_Difference ÷ Aroon_Period)×(100)としないのは、最高値を示現したバーが現在のバーであれば、「Aroon_Up_Difference」の値が「0」となり、「Aroon_Period」で割ることができなくなることを避けるためです。 - アルーンアップの値は、「全計算期間中における、計算期間の初めから最高値を示現したバーまでの期間の占める割合(%)」なので、「100(%)」から上記「1.」で算出した値を控除しています。
⑷ アルーンダウンの計算
ア 最安値からのバーの形成本数を算出する
iLowest()関数(詳細は「こちら」を参照してください。)を使用して、「Aroon_Period」の期間内で最安値を示現したバーの位置を取得し、その値から「i」に格納されている値を減ずることによって、最安値から「i」番目のバーまでに、何本バーが形成されているかを算出しています。
この値が、上述した「n日間中の最安値からの経過日数」に応答することになります。
そして、当該値を変数「Aroon_Down_Difference」に代入しています。
イ アルーンダウンの値を算出する
- (100 ÷ Aroon_Period)×(Aroon_Down_Difference)を計算することによって、「全計算期間中における、最高値から『i』番目のバーまでの期間の占める割合(%)」を算出しています。
(Aroon_Down_Difference ÷ Aroon_Period)×(100)としないのは、最安値を示現したバーが現在のバーであれば、 「Aroon_Down_Difference」の値が「0」となり、「Aroon_Period」で割ることができなくなることを避けるためです。 - アルーンアップの値は、「全計算期間中における、計算期間の初めから最安値を示現したバーまでの期間の占める割合(%)」なので、「100(%)」から上記「1.」で算出した値を控除しています。