ハイローバンド(High-Low Band)とは、アメリカのテクニカル分析の大家であるリチャード・ドンチアン(Richard Donchian)が開発したインジケーターです。
具体的には、一定期間における最高値示すラインと、最安値を示すライン、及びそれらの中間値を示すラインを表示させるものです(ドンチアンチャネル(Donchian Channel)とも呼ばれます。)。
ハイローバンドを用いた取引手法としては、ドンチアン・ルール(ブレイクアウト手法)が有名ですが、その詳細については、「伝説のトレーダー集団 タートル流投資の魔術」に記述されているので、参考にしてみてください。
以下では、ハイローバンド(High Low Band.mq4)の作成方法について解説します。
1.全体像
MT4でインジケーターを作成するには、以下の手順に従ってプログラムを書いていくことになります。
- #property命令を記述する。
- インジケーターバッファーの宣言を行う。
- 変数の宣言を行う。
- init()関数内にインジケーターの基本的な設定を記述する。
- start()関数内に具体的な処理内容を記述する。
2.#property命令の記述
#property命令とは、インジケーターの色、ラインの太さ、インジケーターを表示する場所などの、プログラム全体にかかわる設定を行うものです。
#property命令の詳細については「こちら」を参照してください。
「High Low Band.mq4」における、#property命令を記述した部分の解釈を示すと、以下のようになります。
⑴ チャートウィンドウに表示させる
#property_indicator_chart_window命令によって、「High Low Band.mq4」は、サブウィンドウに表示されます。
⑵ 3種類のデータを表示させる
「High Low Bnad.mq4」は、以下の3つのデータを表示させます。
- 一定期間における最高値と最安値の中間値を示すライン
- 一定期間における最高値を示すライン
- 一定期間における最安値を示すライン
したがって、#property indicator_buffers命令には、「3」を指定します。
⑶ 色を指定する
「High Low Band.mq4」で表示される3つのデータの表示色を指定します。
- #property indicator_color1 White
1番目のインジケーターとして一定期間における最高値と最安値の中間値を示すラインを指定する(後述の5.⑴を参照)ので、#property indicator_color命令には「1」を指定し、表示色を「White」に指定しています。 - #property indicator_color2 Magenta
2番目のインジケーターとして一定期間における最高値を示すラインを指定する(後述の5.⑴を参照)ので、#property indicator_color命令には「2」を指定し、表示色を「Magenta」に指定しています。 - #property indicator_color3 Aqua
3番目のインジケーターとして一定期間における最安値を示すラインを指定する(後述の5.⑴を参照)ので、#property indicator_color命令には「3」を指定し、表示色を「Aqua」に指定しています。
3.インジケーターバッファーの宣言
インジケーターバッファーとは、インジケーターの計算に使用するデータを格納しておく配列のことをいいます。
配列の詳細については「こちら」を参照してください。
「High Low Band.mq4」における、インジケーターバッファーを宣言した部分の解釈を示すと、以下のようになります。
⑴ double ML[];
一定期間における最高値と最安値の中間値を格納していく配列です。
⑵ double HL[];
一定期間における最高値を格納していく配列です。
⑶ double LL[];
一定期間における最安値を格納していく配列です。
4.変数の宣言
「High Low Band.mq4」においては、以下の項目をパラメーターとして指定します。
- 最高値及び最安値を判断する期間
上記項目は、インジケーターをチャートに適用した際に任意の値に設定することができるようにするため、以下に示すように、「外部変数」(詳細については「こちら」を参照してください。)として宣言します。
extern int Band_Period = 50;
5.基本設定の記述
「High Low Band.mq4」におけるinit()関数内に記述したコードについて解説します。
Initialization-Function-HL-Band
⑴ SetIndexBuffer()とは
SetIndexBuffer()とは、MQL4であらかじめ定義されている関数で、各インジケーターバッファーを、インジケーターバッファー領域(データを一時的に蓄えるデータ領域)に割り当てるものです。
SetIndexBuffer()関数の詳細については「こちら」を参照してください。
⑵ SetIndexLabel()とは
SetIndexLabel()とは、MQL4であらかじめ定義されている関数で、データウィンドウにインジケーターの描画線の説明を表示させるものです。
SetIndexLabel()関数の詳細については「こちら」を参照してください。
なお、SetIndexLabel()関数の第二引数はstring型であるため、「Band_Period」の直前に(string)と記述してint型からstring型に型変換(詳細は「こちら」を参照してください。)を行っています。
6.具体的な処理内容
「High Low Band.mq4」のstart()関数内に記述したコードについて解説します。
⑴ int limit = ……について
「limt」という変数を、「Bars - IndicatorCounted()」を初期値として宣言しています。
当該コードの詳細については「こちら」を参照してください。
⑵ 各ラインの計算
ア for()とは
for()とは、同様の計算を繰り返して行うために使用するものです。
for()文の詳細については「こちら」を参照してください。
イ 最高値の計算
一定期間における最高値は、以下の手順に従うことで取得することができます。
- 一定期間内における最高値を示現したバーのインデックスを、iHighest()関数(詳細は「こちら」を参照してください。)を使用して取得する。
- iHighest()関数で取得したバーのインデックスを、配列High[](詳細は「こちら」を参照してください。)に格納する。
そこで、「High Low Band.mq4」においては、以下のように記述して、上記手順によって取得した一定期間における最高値を、配列HL[]に順次格納していくようにしています。
HL[i] = High[iHighest(NULL,0,MODE_HIGH,Band_Period,i)];
イ 最高値の計算
一定期間における最安値は、以下の手順に従うことで取得することができます。
- 一定期間内における最安値を示現したバーのインデックスを、iLowest()関数(詳細は「こちら」を参照してください。)エお使用して取得する。
- iLowest()関数で取得したバーのインデックスを、配列Low[](詳細は「こちら」を参照してください。)に格納する。
そこで、「High Low Band.mq4」においては、以下のように記述して、上記手順によって取得した一定期間における最高値を、配列LL[]に順次格納していくようにしています。
LL[i] = Low[iLowest(NULL,0,MODE_LOW,Band_Period,i)];
ウ 中間値の計算
一定期間における最高値と最安値の中間値は、以下の計算式により算出されます。
中間値 = 最高値 ÷ 最安値
そこで、「High Low Band.mq4」においては、以下のように記述して、一定期間における最高値と最安値の中間値を、配列ML[]に順次格納していくようにしています。
ML[i] = (HL[i] + LL[i]) / 2;