まずは、ベースとなる四角形と文字列をOnInit()の中で作ります。
この部分は、何度も記事で書いているので省略します。
参考記事:「
オブジェクトで四角形を描いて装飾をする」。
また、今までは四角形とか文字列を1つ1つコードを書いて作っていましたが、同じ処理は、for文とかを使うとコードが短くなってスッキリします。
for文を使ったコードの書き方は、また今度、別の記事で紹介していきたいと思います。
今回は、start()内でサインの条件などを紹介しながら説明していきます。
5分足のサインを表示させる方法を例に説明します。
①double f_ma = iMA(NULL,5,F_MA_Period,0,0,0,0);
②double s_ma = iMA(NULL,5,S_MA_Period,0,0,0,0);
③ObjectCreate("5m_sign",OBJ_LABEL,0,0,0,0,0);
④ObjectSet("5m_sign",OBJPROP_CORNER,CORNER_LEFT_LOWER);
⑤ObjectSet("5m_sign",OBJPROP_XDISTANCE,230);
⑥ObjectSet("5m_sign",OBJPROP_YDISTANCE,255);
⑦if(f_ma < s_ma)
{
⑧ObjectSetText("5m_sign",CharToStr(222),30,"Wingdings",Red);
⑨}else if(f_ma > s_ma)
{
⑩ObjectSetText("5m_sign",CharToStr(221),30,"Wingdings",DeepSkyBlue);
⑪}else{
⑫ObjectSetText("5m_sign",CharToStr(220),30,"Wingdings",Gray);
}
こんな感じのコードになります。
以下から細かく説明していきます。
■MAの値を取得
移動平均線の値を取得する方法は、以前にも紹介しましたが、簡単に説明します。
常に最新の値を取得して、さらに整数として表示したいので以下のようにコードを書いていきます。
①double f_ma = iMA(NULL,5,F_MA_Period,0,0,0,0);
②double s_ma = iMA(NULL,5,S_MA_Period,0,0,0,0);
参考ページ:
インジゲーター「CROSS MA01」
参考記事:
Blog「現在の足からインジゲーターを表示させていく方法」
今回は、2本の移動平均線(短期移動平均線と長期移動平均線)のクロスでゴールデンクロスとデッドクロスの判定をしていくので、2つの変数にそれぞれの値を代入していきます。
参考記事:
Blog「移動平均線を利用した手法について」
①double f_ma = iMA(NULL,5,F_MA_Period,0,0,0,0);
double型の変数「f_ma」に短期移動平均線の値を代入します。移動平均線の値は
iMAを使って取得します。
ここでは、現在のチャートの通貨ペア、5分足、期間(パラメーターで変更可能)、シフト数「0」、算出方法「SMA」、適正価格「終値」、現在の値という設定にします。
②double s_ma = iMA(NULL,5,S_MA_Period,0,0,0,0);
double型の変数「s_ma」に長期移動平均線の値を代入します。上記と同じように必要な設定をします。
■オブジェクトの処理
表示させる矢印ランプのオブジェクトの設定をします。
③ObjectCreate("5m_sign",OBJ_LABEL,0,0,0,0,0);
④ObjectSet("5m_sign",OBJPROP_CORNER,CORNER_LEFT_LOWER);
⑤ObjectSet("5m_sign",OBJPROP_XDISTANCE,230);
⑥ObjectSet("5m_sign",OBJPROP_YDISTANCE,255);
③~⑥
オブジェクトの名前、種類、表示位置などを指定します。今回は説明を省略します。
■ゴールデンクロスとデッドクロスの判定処理
デッドクロスの判定は以下のようになります。
⑦if(f_ma < s_ma)
{
⑧ObjectSetText("5m_sign",CharToStr(222),30,"Wingdings",Red);
}
⑦if(f_ma < s_ma)
f_ma(短期移動平均線)がs_ma(長期移動平均線)より小さければ(下)、デッドクロスという条件文。
⑧ObjectSetText("5m_sign",CharToStr(222),30,"Wingdings",Red);
デッドクロス中の下向き矢印ランプサインの設定をします。
ここでは、Wingdingsコード「222(下向き矢印)」、サイズ「30」、色「Red(赤)」と設定をします。
ゴールデンクロスの判定は以下のようになります。
⑨else if(f_ma > s_ma)
{
⑩ObjectSetText("5m_sign",CharToStr(221),30,"Wingdings",DeepSkyBlue);
}
⑨else if(f_ma > s_ma)
f_ma(短期移動平均線)がs_ma(長期移動平均線)より大きければ(上)、ゴールデンクロスという条件文。
⑩ObjectSetText("5m_sign",CharToStr(221),30,"Wingdings",DeepSkyBlue);
ゴールデンクロス中の上向き矢印ランプサインの設定をします。
ここでは、Wingdingsコード「221(上向き矢印)」、サイズ「30」、色「DeepSkyBlue(薄い青)」と設定をします。
最後に、あまり見られないケースになりますが、2本の移動平均線の値が同じときの処理について。
⑪else{
⑫ObjectSetText("5m_sign",CharToStr(220),30,"Wingdings",Gray);
}
⑪else{
ゴールデンクロス中・デッドクロス中ではないときの条件文。
⑫ObjectSetText("5m_sign",CharToStr(220),30,"Wingdings",Gray);
右向き矢印ランプサインの設定をします。
ここでは、Wingdingsコード「220(右向き矢印)」、サイズ「30」、色「Gray(灰色)」と設定をします。
残りの時間足も上記と同じように必要な設定をしていきます。
今回は、残りの説明は省略します。
参考記事:「
MQLのオブジェクトで円(丸)を描く」。
それでは、コンパイルして実行してみます。