【MQL4】 簡単なチャートオブジェクトラベル
ラベルなどチャートのオブジェクトを作るのが難しくて解読できないので。簡単なものから作っていって試したいと思います。
最小限の構成で作成します。
終了処理
void OnDeinit(const int reason)
{
if(reason == REASON_REMOVE || reason == REASON_CHARTCLOSE)
{
ObjectsDeleteAll(ChartID());
}
OnDeinitは終了処理です。終了時にオブジェクトを削除しないと残ってしまうので終了時にオブジェクトを削除します。
const int reasonは勝手に渡される引数のようなのですが、このreasonにはOnDeinitが発動した理由が入るようです。
REASON_PROGRAM 0
EAがExpertRemove関数を呼び出して操作を終了しました。
REASON_REMOVE 1
プログラムがチャートから削除されました。
REASON_RECOMPILE 2
プログラムが再コンパイルされました。
REASON_CHARTCHANGE 3
通貨ペアか時間足が変更されました。
REASON_CHARTCLOSE 4
チャートが閉じられました。
REASON_PARAMETERS 5
パラメータがユーザ—によって変更されました。
REASON_ACCOUNT 6
別のアカウントが有効化されるか、アカウントの設定変更によってサーバへの再接続が発生しました。
REASON_TEMPLATE 7
新しいテンプレートが適用されました。
REASON_INITFAILED 8
OnInit関数がゼロ以外の値を返しました。
REASON_CLOSE 9
MT4のターミナルが閉じられた。
ですので今回の場合は
if(reason == REASON_REMOVE || reason == REASON_CHARTCLOSE)
ということでEAが取り除かれたとき、チャートが閉じられたときということになります。
ObjectsDeleteAll()ですべてのオブジェクトを削除、ChartID()でEA適応中のチャートということになります。
メインプログラム
void OnTick()
{
ObjectCreate("Bid" , OBJ_LABEL,0,0,0);
ObjectSetText("Bid","Bid Price: " + DoubleToStr(Bid,Digits),20,"Arial",Red);
ObjectSet("Bid",OBJPROP_CORNER,4);
ObjectSet("Bid",OBJPROP_XDISTANCE,60);
ObjectSet("Bid",OBJPROP_YDISTANCE,60);
}
ここからが実際のプログラムになります。まずオブジェクトを作成してそのオブジェクトに対して位置やテキストなどの設定をする順序になります。
ObjectCreate("Bid" , OBJ_LABEL,0,0,0);
これでオブジェクトを設定します。
”Bid"という名前を付けてその後はこの"Bid"に対して設定をしていきます。
OBJ_LABELはラベルオブジェクトを作りますという意味。そのあとの0,0,0は現在のチャートに、X方向、Y方向、ということです。位置は後で設定するのでここでは設定しません。
ObjectSetText("Bid","Bid Price: " + DoubleToStr(Bid,Digits),20,"Arial",Red);
これでテキストを設定します。
"Bid"オブジェクトに対してですよということ。
"Bid Price: " + DoubleToStr(Bid,Digits)が実際のテキストです。現在のBid
後ろの20,"Arial",Red はフォントサイズ、フォント、色
ObjectSet("Bid",OBJPROP_CORNER,CORNER_LEFT_UPPER);
これでどの角の位置かを設定します。
CORNER_LEFT_UPPER ①
CORNER_LEFT_LOWER②
CORNER_RIGHT_LOWER③
CORNER_RIGHT_UPPER④
以下の位置になります。
ObjectSet("Bid",OBJPROP_XDISTANCE,60);
ObjectSet("Bid",OBJPROP_YDISTANCE,60);
そしてこの二つでその角からのX,Y位置を決定します。
ただらのラベル作成で結構面倒ですね。