【MT4】mql4での自作プログラムの作り方(その3)
今回の記事がローソク足が陽線だったら上矢印、陰線だったら下矢印を表示させるプログラムを直近10本表示させるというプログラムを作成していきます。
今回主に使っていくのは、バッファー2つ(↑矢印と↓矢印)と配列、変数、条件分岐と繰り返しです。
とりあえず作ってみよう。
#propertyの部分
#property indicator_buffers 2
double BufDown_Arrow[],BufUp_Arrow[];
上記の2行は上矢印と下矢印を入れる配列とバッファーを作成しています。
OnInit()の部分
//下矢印
SetIndexBuffer(0,BufDown_Arrow);
SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,2,Yellow);//矢印を使う設定と色の設定
SetIndexArrow(0,234);//下矢印のコード
//上矢印
SetIndexBuffer(1,BufUp_Arrow);
SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,2,Yellow);//矢印を使う設定と色の設定
SetIndexArrow(1,233);//上矢印のコード
配列とバッファーをリンクさせて色や画像、大きさ等を設定しています。
OnCalculateの部分
以下のコードを打ち込んでコンパイルしてください。
for(int i = 9 ; i >= 0 ; i--)//10回繰り返し
{
if(Close[i] - Open[i] > 0)//陽線だったら
{
BufUp_Arrow[i] = High[i] + 5*Point;//上矢印を高値の少し上に表示
BufDown_Arrow[i] = EMPTY_VALUE;//下矢印を削除
}
else//陽線じゃなかったら
{
BufDown_Arrow[i] = Low[i] - 5*Point;//下矢印を安値の少し下に表示
BufUp_Arrow[i] = EMPTY_VALUE;//上矢印を削除
}
}
矢印表示する条件を記述しています。
上記が今回のメインです。
以下で1行ずつ説明していきます。
for(int i = 9 ; i >= 0 ; i--){~}
この部分は繰り返し処理(for文)というところです。
int i = 9;
まずはint型「i」を作成して、9を代入しています。
i >= 0 ;
iが0以上なら{~}の処理をするように指示しています。
i--)
for文の最後まで来ると自動的に変数iの数値を1引きます。
if(Close[i] - Open[i] > 0){~}
高値-始値の計算結果が0より大きい場合に{~}の処理を行います。
BufDown_Arrow[i] = EMPTY_VALUE;
下矢印のi個目の下矢印を消す作業をしています。(数値なし)EMPTY_VALUEが数字なしを入力しています。
意味わからないと思いますが、数字なしの数字があります。その数字を入れています。確か21474796521とかそんな感じの数字です笑確認したい場合は
printf((string)EMPTY_VALUE);と入力してもらえればエキスパートに数値が表示されると思います。
}else{
これはif文の条件に満たない場合に処理されます。
今回の場合は陽線じゃない場合に実行されます。(十字線の時にも実行されるので正確にはもう一つ条件を書かなければいけません。)
最後に
この3つの記事を使いこなせば、任意のポイントに矢印を表示させることが可能です。
あとはRSIを自動で計算してくれるiRSI関数等を使って一定の条件に一致する場合にアローを表示させるプログラムを作ればいいだけです。
3回にわたってとてもシンプルですが、プログラムを作成してみました。これを足掛かりにインジゲーターを作れる方が増えるといいなと思っています。
ここがわからない等ありましたら自分の立ち上げているサークル等にコメントしてください。できる限り回答させていただきます。