上記で、設計図を作ったのでそのとおりに作っていきます。
まずは、OnInit()の中の処理から作ります。
外枠の白い線と上の文字は今まで作ったようにオブジェクトで作ります。
int OnInit()
{
ObjectsDeleteAll();
// 外枠の四角形
ObjectCreate(0,"box",OBJ_RECTANGLE_LABEL,0,0,0);
ObjectSetInteger(0,"box", OBJPROP_CORNER, CORNER_RIGHT_UPPER);
ObjectSetInteger(0,"box", OBJPROP_XDISTANCE, 250);
ObjectSetInteger(0,"box", OBJPROP_YDISTANCE, 100);
ObjectSetInteger(0,"box", OBJPROP_XSIZE, 200);
ObjectSetInteger(0,"box", OBJPROP_YSIZE, 70);
ObjectSetInteger(0,"box", OBJPROP_BGCOLOR, EMPTY_VALUE);
ObjectSetInteger(0,"box", OBJPROP_BACK, false);
ObjectSetInteger(0,"box", OBJPROP_BORDER_TYPE, BORDER_FLAT);
ObjectSetInteger(0,"box", OBJPROP_COLOR, clrWhite);
ObjectSetInteger(0,"box", OBJPROP_STYLE, STYLE_SOLID);
ObjectSetInteger(0,"box", OBJPROP_WIDTH, 3);
//左丸
ObjectCreate("sign_dwn01",OBJ_LABEL,0,0,0,0,0);
ObjectSet("sign_dwn01",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
ObjectSet("sign_dwn01",OBJPROP_XDISTANCE,170);
ObjectSet("sign_dwn01",OBJPROP_YDISTANCE,100);
ObjectSetText("sign_dwn01",CharToStr(108),50,"Wingdings",Gray);
//右丸
ObjectCreate("sign_up01",OBJ_LABEL,0,0,0,0,0);
ObjectSet("sign_up01",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
ObjectSet("sign_up01",OBJPROP_XDISTANCE,70);
ObjectSet("sign_up01",OBJPROP_YDISTANCE,100);
ObjectSetText("sign_up01",CharToStr(108),50,"Wingdings",Gray);
//RSI SIGNの文字
ObjectCreate( "title",OBJ_LABEL,0,0,0);
ObjectSet("title",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
ObjectSet("title",OBJPROP_XDISTANCE,110);
ObjectSet("title",OBJPROP_YDISTANCE,70);
ObjectSetText("title","RSI SIGN" ,15,"MS ゴシック",clrWhite);
return(INIT_SUCCEEDED);
}
こんな感じのコードになります。
説明は、省略しますが、これだけ作ってコンパイルしてから実行すれば、以下のようにベースとなる部分が表示されます。
参考記事:「
オブジェクトで四角形を描いて装飾をする」。
参考記事:「
MQLのオブジェクトで円(丸)を描く」。
次に、start()の中の処理について簡単に書いていきます。
■RSIの値を取得
前回と同じようにRSIの値を使っていきます。
常に最新の値を取得して、さらに整数として表示したいので以下のようにコードを書いていきます。
double n_rsi = iRSI(NULL,0,rsi_period,0,0);
double i_rsi = NormalizeDouble(n_rsi,0);
参考記事:「
MQLのオブジェクトでメーターを作る【簡易版】」。
■オブジェクトの処理
点灯と消灯をRSIの値で判定するために、条件文のif文で判定する処理を作ります。
RSIの値が40より小さいときは、左の丸(ランプ)が赤く点灯するようにして、40以上のときは、消灯するようにしていきます。
if(i_rsi < 40)
{
ObjectCreate("sign_dwn02",OBJ_LABEL,0,0,0,0,0);
ObjectSet("sign_dwn02",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
ObjectSet("sign_dwn02",OBJPROP_XDISTANCE,170);
ObjectSet("sign_dwn02",OBJPROP_YDISTANCE,100);
ObjectSetText("sign_dwn02",CharToStr(108),50,"Wingdings",Red);
}else{
ObjectDelete("sign_dwn02");
}
次に、RSIの値が60以上のときは、右の丸(ランプ)が青く点灯するようにして、60未満のときは、消灯するようにしていきます。
if(i_rsi >= 60)
{
ObjectCreate("sign_up02",OBJ_LABEL,0,0,0,0,0);
ObjectSet("sign_up02",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
ObjectSet("sign_up02",OBJPROP_XDISTANCE,70);
ObjectSet("sign_up02",OBJPROP_YDISTANCE,100);
ObjectSetText("sign_up02",CharToStr(108),50,"Wingdings",Blue);
}else{
ObjectDelete("sign_up02");
}
最後に、RSIの値を表示する処理は以下のようになります。
ObjectCreate( "RSI",OBJ_LABEL,0,0,0);
ObjectSet("RSI",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
ObjectSet("RSI",OBJPROP_XDISTANCE,130);
ObjectSet("RSI",OBJPROP_YDISTANCE,120);
ObjectSetText("RSI",i_rsi,20,"MS ゴシック",clrWhite);
参考記事:「
MQLのオブジェクトでメーターを作る【簡易版】」。
これで完成です。コンパイルして実行してみます。