始値 - 終値の引き算をして、実体の幅(ローソク足の大きさ)から大陽線と大陰線の判定をして、実体の幅をPipsに変換させて表示させるだけのインジゲータ。
何本前の足にするかと、大陽線と大陰線の基準となる実体の幅を指定できるパラメーター付。
ソースコード完成例
各処理の説明
■プロパティの設定
①#property indicator_chart_window
①#property indicator_chart_window
インジゲータをチャートウインドウに表示する。
■グローバル変数の設定
①extern int shift = 1;
②extern int judg = 20;
①extern int shift = 1;
外部パラメーターの設定。何本前の足にするか設定。パラメーターで変更可能。初期値は1を指定。
②extern int judg = 20;
外部パラメーターの設定。大陽線と大陰線の基準幅を設定。パラメーターで変更可能。初期値は20を指定。
■初期化関数の設定
int OnInit()
{
①double a = Open[shift];
②double b = Close[shift];
③double c = a-b;
④string d = DoubleToStr(NormalizeDouble((c/(10*Point)),3),3);
⑤double e = StrToDouble(d);
⑥if(e < 0){
⑦e = -e;
}
⑧if(a < b && e >= judg){
⑨Comment("↑大陽線です。\n"+"実体の幅:"+e+"Pips");
}
⑩if(a > b && e >= judg){
⑪Comment("↓大陰線です。\n"+"実体の幅:"+e+"Pips");
}
⑫if(e < judg){
⑬Comment(judg+"Pips以下です。\n"+"実体の幅:"+e+"Pips");
}
return(INIT_SUCCEEDED);
}
①double a = Open[shift];
double型の変数aに1本前の足の始値を代入。
②double b = Close[shift];
double型の変数bに1本前の足の終値を代入。
③double c = a - b;
double型の変数cにa - b(始値 - 終値)の結果を代入。
④string d = DoubleToStr(NormalizeDouble((c/(10*Point)),3),3);
string型の変数dを指定。
NormalizeDoubleでcの値を(10*Point)で割って小数点以下3桁で四捨五入。
その結果をDoubleToStrで小数点以下3桁で文字列に変換。
⑤double e = StrToDouble(d);
double型の変数eにstring型の変数dをdouble型に変換した値を代入。
⑥if(e < 0){}
陽線のときは、eの値がマイナスになるので、if文を使って判定します。
今回は、eの値が0以下のときという条件文にします。
⑦e = -e;
double型の変数eをプラスにした値を代入。
⑧if(a < b && e >= judg){
陽線(始値より終値が大きい)のとき、かつ、実体の幅がjudg以上のとき。
⑨Comment("↑大陽線です。\n"+"実体の幅:"+e+"Pips");
Commentで判定結果と実体の幅を表示。
⑩if(a > b && e >= judg){
陰線(始値より終値が小さい)のとき、かつ、実体の幅がjudg以上のとき。
⑪Comment("↓大陰線です。\n"+"実体の幅:"+e+"Pips");
Commentで判定結果と実体の幅を表示。
⑫if(e < judg){
実体の幅を判定。今回はjudg pips以下の場合という条件。
⑬Comment(judg+"Pips以下です。\n"+"実体の幅:"+e+"Pips");
Commentで判定結果と実体の幅を表示。