ソースコード完成例
各処理の説明
■プロパティの設定
①#property indicator_chart_window
②#property indicator_buffers 3
③#property indicator_color2 Blue
④#property indicator_color3 Red
①#property indicator_chart_window
インジゲータをチャートウインドウに表示する。
②#property indicator_buffers 3
インジゲータのバッファを格納する。
③#property indicator_color2 Blue
2つ目のインジゲータ(上向き矢印)の色を指定する。今回は青(Blue)。
④#property indicator_color3 Red
3つ目のインジゲータ(下向き矢印)の色を指定する。今回は赤(Red)。
■変数の設定
①double BufSAR[];
②double BufBuy[];
③double BufSell[];
①double BufSAR[];
double型の変数を指定。ここでは、BufSARという配列を指定(パラボリックSARの値用)。
④double BufBuy[];
double型の変数を指定。ここでは、BufBuyという配列を指定(上矢印用)。
⑤double BufSell[];
double型の変数を指定。ここでは、BufSellという配列を指定(下矢印用)。
■初期化関数の設定
int init()
{
①SetIndexBuffer(0,BufSAR);
②SetIndexBuffer(1,BufBuy);
③SetIndexBuffer(2,BufSell);
④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,BufSAR);
インジケーターバッファーをインジケーターバッファー領域に割り当てる。
ここでは、0番目のインデックスを指定し、BufSARという配列を指定。
②SetIndexBuffer(1,BufBuy);
1番目のインデックスを指定し、BufBuyという配列を指定。
③SetIndexBuffer(2,BufSell);
2番目のインデックスを指定し、BufSellという配列を指定。
④SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,2,Blue);
描画スタイルを指定する。ここでは、1番目のインデックスに指定したBufBuyの設定を指定する。
⑤SetIndexArrow(1,233);
記号を表示させる。ここでは、1番目のインデックスに指定したBufBuyの設定を指定する。
⑥SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID,2,Red);
描画スタイルを指定する。ここでは、2番目のインデックスに指定したBufSellの設定を指定する。
⑦SetIndexArrow(2,234);
記号を表示させる。ここでは、2番目のインデックスに指定したBufSellの設定を指定する。
■指標計算関数の設定
int start()
{
①int counted_bar = IndicatorCounted();
②int limit = Bars-counted_bar;
③if(counted_bar == 0) limit -= 1;
④for (int i = limit-1; i>=0; i--)
{
⑤BufSAR[i] = iSAR(NULL,0,0.02,0.2,i);
}
⑥if(counted_bar == 0) limit -= 2;
⑦for (i = limit-1; i>=0; i--)
{
⑧BufBuy[i] = EMPTY_VALUE;
⑨if(BufSAR[i+1] >= Close[i+1] && BufSAR[i] <= Close[i])
{
⑩BufBuy[i] = Low[i]-20*Point;
}
⑪BufSell[i] = EMPTY_VALUE;
⑫if(BufSAR[i+1] <= Close[i+1] && BufSAR[i] >= Close[i])
{
⑬BufSell[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 -= 1;
if文。
④for (int i = limit-1; i>=0; i--)
for文。
⑤BufSAR[i] = iSAR(NULL,0,0.02,0.2,i);
配列BufSARにiSARの値を代入。ここでは、パラボリックの値を取得。
⑥if(counted_bar == 0) limit -= 2;
if文。
⑦for (int i = limit-1; i>=0; i--)
for文。
⑧BufBuy[i] = EMPTY_VALUE;
BufDOWN_Arrow[i]を空にする。
⑨if(BufSAR[i+1] >= Close[i+1] && BufSAR[i] <= Close[i])
if文。ここでは、パラボリックの位置がローソク足の上から下に移動したらという条件。
⑩BufBuy[i] = Low[i]-20*Point;
安値の20ポイント下に上矢印を表示する。
⑪BufSell[i] = EMPTY_VALUE;
BufSell[i]を空にする。
⑫if(BufSAR[i+1] <= Close[i+1] && BufSAR[i] >= Close[i])
if文。ここでは、パラボリックの位置がローソク足の下から上に移動したらという条件。
⑬BufSell[i] = High[i]+20*Point;
高値の20ポイント上に下矢印を表示する。