ソースコード完成例
各処理の説明
■プロパティの設定
①#property indicator_chart_window
②#property indicator_buffers 4
③#property indicator_color1 DodgerBlue
④#property indicator_color2 HotPink
⑤#property indicator_color3 Blue
⑥#property indicator_color4 Red
①#property indicator_chart_window
インジゲータをチャートウインドウに表示する。
②#property indicator_buffers 4
インジゲータのバッファを格納する。今回は4つ。
③#property indicator_color1 DodgerBlue
インジゲータの色を指定する。短期移動平均線の色。今回はDodgerBlueを使用。
④#property indicator_color2 HotPink
インジゲータの色を指定する。長期移動平均線の色。今回はHotPinkを使用。
⑤#property indicator_color3 Blue
インジゲータの色を指定する。ゴールデンクロス時の上矢印の色。今回はBlueを使用。
⑥#property indicator_color4 Red
インジゲータの色を指定する。デッドクロス時の下矢印の色。今回はRedを使用。
■変数の設定
①double BufMA01[];
②double BufMA02[];
③double BufBuy[];
④double BufSell[];
⑤extern int MA01_Period = 20;
⑥extern int MA02_Period = 100;
①double BufMA01[];
double型の変数を指定。ここでは、短期移動平均線用にBufMA01という配列を指定。
②double BufMA02[];
double型の変数を指定。ここでは、長期移動平均線用にBufMA02という配列を指定。
③double BufBuy[];
double型の変数を指定。ここでは、上矢印用にBufBuyという配列を指定。
④double BufSell[];
double型の変数を指定。ここでは、下矢印用にBufSellという配列を指定。
⑤extern int MA01_Period = 20;
外部パラメーターの設定。短期移動平均線の期間を20に設定。パラメーターで変更可能。
⑥extern int MA02_Period = 40;
外部パラメーターの設定。長期移動平均線の期間を40に設定。パラメーターで変更可能。
■初期化関数の設定
int init()
{
①SetIndexBuffer(0,BufMA01);
②SetIndexBuffer(1,BufMA02);
③SetIndexBuffer(2,BufBuy);
④SetIndexBuffer(3,BufSell);
⑤SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID,5,Blue);
⑥SetIndexArrow(2,233);
⑦SetIndexStyle(3,DRAW_ARROW,STYLE_SOLID,5,Red);
⑧SetIndexArrow(3,234);
return(0);
}
①SetIndexBuffer(0,BufMA01);
インジケーターバッファーをインジケーターバッファー領域に割り当てる。
ここでは、0番目のインデックスを指定し、BufMa01という配列を指定。
②SetIndexBuffer(1,BufMA02);
インジケーターバッファーをインジケーターバッファー領域に割り当てる。
ここでは、1番目のインデックスを指定し、BufMa02という配列を指定。
③SetIndexBuffer(2,BufBuy);
インジケーターバッファーをインジケーターバッファー領域に割り当てる。
ここでは、2番目のインデックスを指定し、BufBuyという配列を指定。
④SetIndexBuffer(3,BufSell);
インジケーターバッファーをインジケーターバッファー領域に割り当てる。
ここでは、3番目のインデックスを指定し、BufSellという配列を指定。
⑤SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID,5,Blue);
描画スタイルを指定する。ここでは、2番目のインデックスに指定したBufBuyの設定を指定する。
⑥SetIndexArrow(2,233);
記号を表示させる。ここでは、2番目のインデックスに指定したBufBuyの設定を指定する。
⑦SetIndexStyle(3,DRAW_ARROW,STYLE_SOLID,5,Red);
描画スタイルを指定する。ここでは、3番目のインデックスに指定したBufSellの設定を指定する。
⑧SetIndexArrow(3,234);
記号を表示させる。ここでは、3番目のインデックスに指定したBufSellの設定を指定する。
■指標計算関数の設定
int start()
{
①int counted_bar = IndicatorCounted();
②int limit = Bars-counted_bar;
③if(counted_bar == 0) limit -= MA02_Period-1;
④for (int i = limit-1; i>=0; i--)
{
⑤BufMA01[i] = iMA(NULL,0,MA01_Period,0,MODE_EMA,PRICE_CLOSE,i);
⑥BufMA02[i] = iMA(NULL,0,MA02_Period,0,MODE_EMA,PRICE_CLOSE,i);
}
⑦if(counted_bar == 0) limit -= 2;
⑧for (i = limit-1; i>=0; i--)
{
⑨BufBuy[i] = EMPTY_VALUE;
⑩if(BufMA01[i+2] <= BufMA02[i+2] && BufMA01[i+1] > BufMA02[i+1])
⑪BufBuy[i] = Low[i]-10*Point;
⑫BufSell[i] = EMPTY_VALUE;
⑬if(BufMA01[i+2] >= BufMA02[i+2] && BufMA01[i+1] < BufMA02[i+1])
⑭BufSell[i] = High[i]+10*Point;
}
return(0);
}
①int counted_bar = IndicatorCounted();
int型の変数counted_barにバー(確定値が計算されたバー(現在のバー以外))の本数を代入。
②int limit = Bars-counted_bar;
int型の変数limitに表示されているバーの本数からcounted_barを引いた値を代入。
③if(counted_bar == 0) limit -= MA02_Period-1;
if文。
④for (int i = limit-1; i>=0; i--)
for文。
⑤BufMA01[i] = iMA(NULL,0,MA01_Period,0,MODE_EMA,PRICE_CLOSE,i);
BurMA01[i]にiMAの値を代入。
⑥BufMA02[i] = iMA(NULL,0,MA02_Period,0,MODE_EMA,PRICE_CLOSE,i);
BurMA02[i]にiMAの値を代入。
⑦if(counted_bar == 0) limit -= 2;
if文。
⑧for (i = limit-1; i>=0; i--)
for文。
⑨BufBuy[i] = EMPTY_VALUE;
BufBuy[i]にEMPTY_VALUEを代入。つまり空っぽにする。
⑩if(BufMA01[i+2] <= BufMA02[i+2] && BufMA01[i+1] > BufMA02[i+1])
if文。
⑪BufBuy[i] = Low[i]-10*Point;
安値の1pips下に上矢印を表示させる。
⑫BufSell[i] = EMPTY_VALUE;
BufSell[i]にEMPTY_VALUEを代入。つまり空っぽにする。
⑬if(BufMA01[i+2] >= BufMA02[i+2] && BufMA01[i+1] < BufMA02[i+1])
if文。
⑭BufSell[i] = High[i]+10*Point;
高値の1pips上に下矢印を表示させる。