https://s3-us-west-2.amazonaws.com/secure.notion-static.com/965d7fcf-ded8-4d1f-8632-de4e3c9fce74/USDJPY_iM30.png

過去の一定期間の最高値、最安値を結んだラインの指標です。MQL4/MQL5の組み込みテクニカル指標関数としては用意されていませんが、EAでも利用する場面がよくあるので、カスタム指標として作っておくと便利です。

コード

HLBand.mq5

💡MQL4用にはファイルの拡張子をmq4にしてダウンロードしてください。

プログラムのプロパティ

//MQL4互換ライブラリ(MQL5のみ)
#include "LibMQL4.mqh"

//プログラムのプロパティ
#property indicator_chart_window      //チャートウィンドウに表示
#property indicator_buffers 3         //使用する指標バッファの数
#property indicator_plots   3         //プロットする指標バッファの数
#property indicator_type1   DRAW_LINE //指標0の種類:実線
#property indicator_type2   DRAW_LINE //指標1の種類:実線
#property indicator_type3   DRAW_LINE //指標2の種類:実線
#property indicator_color1  clrBlue   //指標0の色:Blue
#property indicator_color2  clrRed    //指標1の色:Red
#property indicator_color3  clrRed    //指標2の色:Red

チャートウィンドウに3本のラインを表示するための設定です。

指標バッファ用の配列の宣言

double BufMed[];  //中央ライン
double BufHigh[]; //上位ライン
double BufLow[];  //下位ライン

上位ライン、下位ラインと、その二つの平均をとった中央ラインのための配列の宣言です。

外部パラメータ

input int BandPeriod = 20; //期間
input int BandShift = 0; //バンドシフト
input ENUM_STO_PRICE PriceField = STO_LOWHIGH; //高値・安値の価格

BandPeriodは、最高値、最安値を算出する期間を表します。

BandShiftは、バンドを時間方向にシフトさせるバーの数を表します。

PriceFieldは、高値の最高値、安値の最安値を求めるか、終値の最高値、最安値を求めるかの選択を行います。iStochastic()で使われる定数を利用します。高値・安値を使う場合、STO_LOWHIGHを、終値・終値を使う場合、STO_CLOSECLOSEを指定します。

初期化関数

int OnInit()
{
   //配列を指標バッファに関連付ける
   SetIndexBuffer(0, BufMed, INDICATOR_DATA);
   SetIndexBuffer(1, BufHigh, INDICATOR_DATA);
   SetIndexBuffer(2, BufLow, INDICATOR_DATA);
   //時系列配列に設定
   ArraySetAsSeries(BufMed, true);
   ArraySetAsSeries(BufHigh, true);
   ArraySetAsSeries(BufLow, true);
   //プロット開始位置の設定
   SetIndexDrawBegin(0, BandPeriod);
   SetIndexDrawBegin(1, BandPeriod);
   SetIndexDrawBegin(2, BandPeriod);
   return(INIT_SUCCEEDED);
}

SetIndexBuffer()で、上で宣言した3つの配列を指標バッファに関連付けます。さらにArraySetAsSeries()で、それぞれの配列を時系列配列に設定します。

指標計算関数