ソースコード完成例
各処理の説明
■プロパティの設定
①#property indicator_chart_window
②#property indicator_buffers 8
①#property indicator_chart_window
インジゲータをチャートウインドウに表示する。
②#property indicator_buffers 8
インジゲータのバッファを格納する。
■変数の設定
①double BufSTC_MAIN[];
②double BufUP_STC[];
③double BufDOWN_STC[];
④double BufUP[];
⑤double BufCenter[];
⑥double BufDOWN[];
⑦double BufUP_Arrow[];
⑧double BufDOWN_Arrow[];
①double BufSTC_MAIN[];
double型の変数を指定。ここでは、BufSTC_MAINという配列を指定(ストキャスティクスの値用)。
②double BufUP_STC[];
double型の変数を指定。ここでは、BufUP_STCという配列を指定(ストキャスティクスの上矢印用)。
③double BufDOWN_STC[];
double型の変数を指定。ここでは、BufDOWN_STCという配列を指定(ストキャスティクスの下矢印用)。
④double BufUP[];
double型の変数を指定。ここでは、BufUPという配列を指定(ボリンジャーバンドの上バンド用)。
⑤double BufCenter[];
double型の変数を指定。ここでは、BufCenterという配列を指定(ボリンジャーバンドの中央バンド用)。
⑥double BufDOWN[];
double型の変数を指定。ここでは、BufDOWNという配列を指定(ボリンジャーバンドの下バンド用)。
⑦double BufUP_Arrow[];
double型の変数を指定。ここでは、BufUP_Arrowという配列を指定(ボリンジャーバンドの上矢印用)。
⑧double BufDOWN_Arrow[];
double型の変数を指定。ここでは、BufDOWN_Arrowという配列を指定(ボリンジャーバンドの下矢印用)。
■外部パラメーターの設定
①extern int BB_Period = 20;
②extern int UP_LINE = 80;
③extern int DOWN_LINE = 20;
①extern int BB_Period = 20;
int型の変数を指定。ここでは、BB_Periodという変数を指定(ボリンジャーバンドの中間線の値を計算する期間)。
②extern int UP_LINE = 80;
int型の変数を指定。ここでは、UP_LINEという変数を指定(ストキャスティクスのレベルライン)。
③extern int DOWN_LINE = 20;
int型の変数を指定。ここでは、BB_Periodという変数を指定(ストキャスティクスのレベルライン)。
■初期化関数の設定
int init()
{
①SetIndexBuffer(0, BufSTC_MAIN);
②SetIndexBuffer(1, BufUP_STC);
③SetIndexBuffer(2, BufDOWN_STC);
④SetIndexBuffer(3, BufUP);
⑤SetIndexBuffer(4, BufCenter);
⑥SetIndexBuffer(5, BufDOWN);
⑦SetIndexBuffer(6, BufUP_Arrow);
⑧SetIndexBuffer(7, BufDOWN_Arrow);
⑨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);
⑭SetIndexStyle(6,DRAW_ARROW,STYLE_SOLID,4,Green);
⑮SetIndexArrow(6,233);
⑯SetIndexStyle(7,DRAW_ARROW,STYLE_SOLID,4,Yellow);
⑰SetIndexArrow(7,234);
return(0);
}
①SetIndexBuffer(0,BufSTC_MAIN);
インジケーターバッファーをインジケーターバッファー領域に割り当てる。
ここでは、0番目のインデックスを指定し、BufSTC_MAINという配列を指定。
②SetIndexBuffer(1,BufUP_STC);
1番目のインデックスを指定し、BufUP_STCという配列を指定。
③SetIndexBuffer(2,BufDOWN_STC);
2番目のインデックスを指定し、BufDOWN_STCという配列を指定。
④SetIndexBuffer(3,BufUP);
3番目のインデックスを指定し、BufUPという配列を指定。
⑤SetIndexBuffer(4,BufCenter);
4番目のインデックスを指定し、BufCenterという配列を指定。
⑥SetIndexBuffer(5,BufDOWN);
5番目のインデックスを指定し、BufDOWNという配列を指定。
⑦SetIndexBuffer(6,BufUP_Arrow);
6番目のインデックスを指定し、BufUP_Arrowという配列を指定。
⑧SetIndexBuffer(7,BufDOWN_Arrow);
7番目のインデックスを指定し、BufDOWN_Arrowという配列を指定。
⑨SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,EMPTY_VALUE);
描画スタイルを指定する。ここでは、0番目のインデックスに指定したBufSTCの設定を指定する。
⑩SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,2,Blue);
描画スタイルを指定する。ここでは、1番目のインデックスに指定したBufUP_STCの設定を指定する。
⑪SetIndexArrow(1,233);
記号を表示させる。ここでは、1番目のインデックスに指定したBufUP_STCの設定を指定する。
⑫SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID,2,Red);
描画スタイルを指定する。ここでは、2番目のインデックスに指定したBufDOWN_STCの設定を指定する。
⑬SetIndexArrow(2,234);
記号を表示させる。ここでは、2番目のインデックスに指定したBufDOWN_STCの設定を指定する。
⑭SetIndexStyle(6,DRAW_ARROW,STYLE_SOLID,4,Green);
描画スタイルを指定する。ここでは、6番目のインデックスに指定したBufUP_Arrowの設定を指定する。
⑮SetIndexArrow(6,233);
記号を表示させる。ここでは、6番目のインデックスに指定したBufUP_Arrowの設定を指定する。
⑯SetIndexStyle(7,DRAW_ARROW,STYLE_SOLID,4,Yellow);
描画スタイルを指定する。ここでは、7番目のインデックスに指定したBufDOWN_Arrowの設定を指定する。
⑰SetIndexArrow(7,234);
記号を表示させる。ここでは、7番目のインデックスに指定したBufDOWN_Arrowの設定を指定する。
■指標計算関数の設定
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--)
{
⑤BufSTC_MAIN[i] = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,i);
⑥BufUP[i] = iBands(NULL,0,BB_Period,3,0,PRICE_CLOSE,1,i);
⑦BufCenter[i] = iBands(NULL,0,BB_Period,3,0,PRICE_CLOSE,0,i);
⑧BufDOWN[i] = iBands(NULL,0,BB_Period,3,0,PRICE_CLOSE,2,i);
}
⑨if(counted_bar == 0) limit -= 2;
⑩for (i = limit-1; i>=0; i--)
{
⑪BufDOWN_STC[i] = EMPTY_VALUE;
if(BufSTC_MAIN[i+1] > UP_LINE && BufSTC_MAIN[i] <= UP_LINE)
{
BufDOWN_STC[i] = High[i]+20*Point;
}
⑫BufUP_STC[i] = EMPTY_VALUE;
if(BufSTC_MAIN[i+1] < DOWN_LINE && BufSTC_MAIN[i] >= DOWN_LINE)
{
BufUP_STC[i] = Low[i]-20*Point;
}
⑬if(BufUP[i] < High[i]){
BufDOWN_Arrow[i] = EMPTY_VALUE;
BufDOWN_Arrow[i] = High[i]+30*Point;
}
⑭if(BufDOWN[i] > Low[i]){
BufUP_Arrow[i] = EMPTY_VALUE;
BufUP_Arrow[i] = Low[i]-30*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文。
⑤BufSTC_MAIN[i] = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,i);
配列BufSTC_MAINにiStochasticの値を代入。
⑥BufUP[i] = iBands(NULL,0,BB_Period,3,0,PRICE_CLOSE,1,i);
配列BufUPにiBandsの値を代入。ここでは、上バンドの値を取得。
⑦BufCenter[i] = iBands(NULL,0,BB_Period,3,0,PRICE_CLOSE,0,i);
配列BufCenterにiBandsの値を代入。ここでは、中央バンドの値を取得。
⑧BufDOWN[i] = iBands(NULL,0,BB_Period,3,0,PRICE_CLOSE,2,i);
配列BufDOWNにiBandsの値を代入。ここでは、下バンドの値を取得。
⑨if(counted_bar == 0) limit -= 2;
if文。
⑩for (i = limit-1; i>=0; i--)
for文。
⑪ストキャスティクスの下矢印サイン処理
ストキャスティクスの下矢印を表示させる条件と処理。
⑫ストキャスティクスの上矢印サイン処理
ストキャスティクスの上矢印を表示させる条件と処理。
⑬ボリンジャーバンドの下矢印サイン処理
ボリンジャーバンドの下矢印を表示させる条件と処理。
⑬ボリンジャーバンドの上矢印サイン処理
ボリンジャーバンドの上矢印を表示させる条件と処理。
⑪BufUP_Arrow[i] = EMPTY_VALUE;
BufUP_Arrow[i]を空にする。