ハイローバンド(High-Low Band)とは、アメリカのテクニカル分析の大家であるリチャード・ドンチアン(Richard Donchian)が開発したインジケーターです。
「ハイローバンドの作成」では、最高値と最安値を判定する期間を同一にした、通常のハイローバンドの作成法について解説しましが、以下では、最高値と最安値を判定する期間を異ならせたハイローバンド(High Low Band ver.02.mq4)の作成方法について解説します。
1.全体像
「High Low Band ver.02.mq4」は、「ハイローバンドの作成」で解説した「High Low Band.mq4」に所要の変更を加えることによって作成します。
以下がサンプルコードになりますので、ダウンロードしてコードを見ながら読み進めてください。
2.変数の宣言の変更
「High Low Band ver.02.mq4」では、最高値を判定する期間と、最安値を判定する期間を異ならせるので、「ハイローバンドの作成」の場合とは異なり、
- 最高値を判定する期間
- 最安値を判定する期間
の2つの変数(詳細は「こちら」を参照してください。)を外部変数(詳細は「こちら」を参照してください。)として宣言します。
//変数の宣言
//最高値を判定する期間
extern int Band_Period_HL = 50;
//最安値を判定する期間
extern int Band_Period_LL = 25;
3.基本設定の記述の変更
「High Low Band ver.02.mq4」では、最高値を判定する期間と、最安値を判定する期間を異ならせるので、それに応じて、init()関数内における以下の箇所を変更します。
- 一定期間における最高値を示すラインのラベルを設定している箇所
- 一定期間における最安値を示すラインのラベルを設定している箇所
具体的には、以下のように変更します。
//インジケーターのラベル
//一定期間における最高値を示すラインのラベル
SetIndexLabel(1,"High("+(string)Band_Period_HL+")");
//一定期間における最安値を示すラインのラベル
SetIndexLabel(2,"Low("+(string)Band_Period_LL+")");
SetIndexLabel()関数の詳細については「こちら」を参照してください。
なお、SetIndexLabel()関数の第二引数はstring型であるため、「Band_Period_HL」等の直前に(string)と記述してint型からstring型に型変換(詳細は「こちら」を参照してください。)を行っています。
4.具体的な処理内容の変更
「High Low Band ver.02.mq4」では、最高値を判定する期間と、最安値を判定する期間を異ならせるので、それに応じて、start()関数内における以下の箇所を変更します。
- 一定期間における最高値を示すラインの値を計算している箇所
- 一定期間における最安値を示すラインの値を計算している箇所
具体的には、以下のように変更します。
//一定期間における最高値を示すラインの値を計算
HL[i] = High[iHighest(NULL,0,MODE_HIGH,Band_Period_HL,i)];
//一定期間における最安値を示すラインの値を計算
LL[i] = Low[iLowest(NULL,0,MODE_LOW,Band_Period_LL,i)];