ソースコード完成例
各処理の説明
■プロパティの設定
①#property indicator_chart_window
②#property indicator_buffers 3
③#property indicator_color1 Black
④#property indicator_color2 Blue
⑤#property indicator_color3 Red
①#property indicator_chart_window
インジゲータをチャートウインドウに表示する。
②#property indicator_buffers 3
インジゲータのバッファを格納する。
③#property indicator_color1 Black
1つ目のインジゲータの色を指定する。今回は黒(実際は表示させない)。
④#property indicator_color2 Blue
2つ目のインジゲータの色を指定する。今回は青(Blue)。
⑤#property indicator_color3 Red
3つ目のインジゲータの色を指定する。今回は黒(Red)。
■変数の設定
①double BufCCI[];
②double BufUp[];
③double BufDown[];
①double BufCCI[];
double型の変数を指定。ここでは、BufCCIという配列を指定。
②double BufUp[];
double型の変数を指定。ここでは、BufUpという配列を指定。
③double BufDown[];
double型の変数を指定。ここでは、BufDownという配列を指定。
■外部パラメーターの設定
①extern int CCI_Period = 20;
②extern int UP_Line = 100;
③extern int Down_Line = 100;
①extern int CCI_Period = 20;
int型の変数CCI_Periodを指定。初期値は20。
②extern int UP_Line = 100;
int型の変数UP_Lineを指定。初期値は100。
③extern int Down_Line = 100;
int型の変数Down_Lineを指定。初期値は100。
ここでは、マイナス表記ができないため、条件文内でマイナスにする。
■初期化関数の設定
int init()
{
①SetIndexBuffer(0,BufCCI);
②SetIndexBuffer(1,BufUp);
③SetIndexBuffer(2,BufDown);
④SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,EMPTY_VALUE);
⑤SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,2,Blue);
⑥SetIndexArrow(1,233);
⑦SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID,2,Red);
⑧SetIndexArrow(2,234);
return(0);
}
①SetIndexBuffer(0,BufCCI);
インジケーターバッファーをインジケーターバッファー領域に割り当てる。
ここでは、0番目のインデックスを指定し、BufCCIという配列を指定。
②SetIndexBuffer(1,BufUp);
1番目のインデックスを指定し、BufUpという配列を指定。
③SetIndexBuffer(0,BufDown);
2番目のインデックスを指定し、BufDownという配列を指定。
④SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,EMPTY_VALUE);
描画スタイルを指定する。ここでは、0番目のインデックスに指定したBufCCIの設定を指定する。
⑤SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,2,Blue);
描画スタイルを指定する。ここでは、1番目のインデックスに指定したBufUpの設定を指定する。
⑥SetIndexArrow(1,233);
記号を表示させる。ここでは、1番目のインデックスに指定したBufArrowの設定を指定する。
⑦SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID,2,Red);
描画スタイルを指定する。ここでは、2番目のインデックスに指定したBufDownの設定を指定する。
⑧SetIndexArrow(2,234);
記号を表示させる。ここでは、2番目のインデックスに指定したBufDownの設定を指定する。
■指標計算関数の設定
int start()
{
① int counted_bar = IndicatorCounted();
②int limit = Bars-counted_bar;
③ if(counted_bar == 0) limit -= CCI_Period-1;
④for (int i = limit-1; i>=0; i--)
{
⑤BufCCI[i] = iCCI(NULL,0,CCI_Period,5,i);
}
⑥ if(counted_bar == 0) limit -= 2;
⑦for (i = limit-1; i>=0; i--)
{
⑧BufUp[i] = EMPTY_VALUE;
⑨if(BufCCI[i+1] < UP_Line && BufCCI[i] > UP_Line)
{
⑩BufUp[i] = Low[i]-20*Point;
}
⑪BufDown[i] = EMPTY_VALUE;
⑫if(BufCCI[i+1] > -Down_Line && BufCCI[i] < -Down_Line)
{
⑬BufDown[i] = High[i]+20*Point;
}
}
return(0);
}
①int counted_bar = IndicatorCounted();
int型の変数counted_barにバー(確定値が計算されたバー(現在のバー以外))の本数を代入。
②int limit = Bars-IndicatorCounted();
int型の変数limitにBars-IndicatorCounted()を代入。
Barsは、
表示されているバーの本数を格納しているint型の変数。
IndicatorCounted()は、インジケーターの確定値が計算されたバー(現在のバー以外)の本数を取得する関数。
③if(counted_bar == 0) limit -= CCI_Period-1;
if文。
④for (int i = limit-1; i>=0; i--)
for文。
⑤BufCCI[i] = iCCI(NULL,0,CCI_Period,5,i);
配列BufCCIにiCCIの値を代入。
ここでは、現在のチャートの通貨ペア、時間足、期間はパラメーターで変更可能(CCI_Period)、代表値、i番前の足を指定。
⑥ if(counted_bar == 0) limit -= 2;
if文。
⑦for (i = limit-1; i>=0; i--)
for文。
⑧BufUp[i] = EMPTY_VALUE;
BufUpの値を空にする。
⑨if(BufCCI[i+1] < UP_Line && BufCCI[i] > UP_Line)
CCIの条件文。2本前のCCIの値がUP_Line以下で、1本前のCCIの値がUP_Line以上のとき。
⑩BufUp[i] = Low[i]-20*Point;
安値の20ポイント下に上矢印を表示する。
⑪BufDown[i] = EMPTY_VALUE;
BufDownの値を空にする。
⑫if(BufCCI[i+1] > -Down_Line && BufCCI[i] < -Down_Line)
CCIの条件文。2本前のCCIの値がDown_Line以上で、1本前のCCIの値がDown_Line以下のとき。
⑬BufDown[i] = High[i]+20*Point;
高値の20ポイント上に下矢印を表示する。