【MQL4テクニック】チャートに文字列を表示する方法。ラベルとテキストの違いとは?
今回はチャート上に任意の文字列を表示する方法をご紹介いたします。
文字列を表示する方法は2種類ありますので、それぞれの特徴と共に紹介していきます。
テキストオブジェクトを表示する
string objName = "textObj";
string text = "表示したいテキスト";
ObjectCreate(objName, OBJ_TEXT, 0, Time[5], Close[5]);
ObjectSetText(objName, text, 12, "Meiryo UI", clrYellow);
それでは順番にコードの意味を解説していきます。
ObjectCreate(objName, OBJ_TEXT, 0, Time[5], Close[5]);
オブジェクトタイプを『OBJ_TEXT』と指定することで、テキストオブジェクトを作成します。
また第4引数に時間、第5引数に価格を指定することで、ある時間帯のある価格をアンカーポイントとしたテキストを設置します。
Time[5],Close[5]の場合では、オブジェクト作成時点で5本前の足の終値に表示するという意味です。
ObjectSetText(objName, text, 12, "Meiryo UI", clrYellow);
ObjectSetText()
関数を使用することで、
・表示したいテキスト
・フォントサイズ
・フォントの種類
・フォントカラー
をまとめて設定することができます。
他にも以下のやり方がありますが、
string objName = "textObj";
string text = "表示したいテキスト";
ObjectSetString(0, objName, OBJPROP_TEXT, text);
ObjectSetString(0, objName, OBJPROP_FONT, "Meiryo UI");
ObjectSetInteger(0, objName, OBJPROP_FONTSIZE, 12);
ObjectSetInteger(0, objName, OBJPROP_COLOR, clrWhite);
ObjectSetText()
関数を使えば1行で済むのでオススメです。
ラベルオブジェクトを表示する
string objName = "textObj";
string text = "表示したいテキスト";
ObjectCreate(objName, OBJ_LABEL, 0, 0, 0);
ObjectSetText(objName, text, 12, "Meiryo UI",clrYellow);
ObjectSetInteger(0, objName, OBJPROP_XDISTANCE, 50);
ObjectSetInteger(0, objName, OBJPROP_YDISTANCE, 50);
それでは順番にコードの意味を解説していきます。
ObjectCreate(objName, OBJ_LABEL, 0, 0, 0);
オブジェクトタイプを『OBJ_LABEL』と指定することで、ラベルオブジェクトを作成します。
ObjectSetText(objName, text, 12, "Meiryo UI", clrWhite);
ObjectSetText()
関数を使用することで、
・表示したいテキスト
・フォントサイズ
・フォントの種類
・フォントカラー
をまとめて設定することができます。
ObjectSetInteger(0, objName, OBJPROP_XDISTANCE, 50);
ObjectSetInteger(0, objName, OBJPROP_YDISTANCE, 50);
ラベルオブジェクトを表示する、X座標とY座標を指定します。
テキストオブジェクトとラベルオブジェクトの違い
どちらもチャート上に文字列を表示するためのオブジェクトですが、
・テキストは価格と時刻を指定して配置
・ラベルは座標を指定して配置
という明確な違いがあります。
ラベルオブジェクトはアンカーポイントに時刻を含みますので、新しくチャートが形成されるにつれて文字列が左に流れて(チャートに付随して)いきます。
それに対しテキストオブジェクトは座標で固定しますので、新しくチャートが形成されても常に同じ位置に文字列が表示されます。
- チャートの特定の場所にメモなどをする場合にはテキストオブジェクト
- 勝率を表示する場合など、文字列を常に同じ位置に表示したい場合にはラベルオブジェクト
と使い分けましょう。