オブジェクトのプロパティを操作したい!

オブジェクトのプロパティ

MQL4プログラムで表示したオブジェクトには様々なプロパティ設定を行うことが可能です。代表的なプロパティであるオブジェクトの色や表示位置をはじめ、オブジェクトの選択状態やツールチップ(オブジェクトにマウスカーソルを当てると表示される文字情報)のように少々特殊なプロパティまで用意されています。これらのプロパティをMQL4プログラムから設定または取得することが出来ますが、プロパティの内容によって使用する関数が異なり、また特定のオブジェクトの種類にしか適用されないプロパティも存在するため、そのあたりを整理しつつ紹介していきます。

オブジェクトプロパティの種類

MQL4プログラムで扱うことが出来るオブジェクトプロパティの一覧です。冒頭でも少し触れましたが、プロパティによっては特定のオブジェクトの種類にしか適用出来ないものもありますのでご注意ください。

整数型

色(OBJPROP_COLOR)
オブジェクトの色の設定です。
線種(OBJPROP_STYLE)
オブジェクトで表示するラインの線種の設定です。垂直線や水平線、トレンドラインなど、ラインを表示するオブジェクトで有効な設定となります。
太さ(OBJPROP_WIDTH)
オブジェクトで表示するラインの太さの設定です。垂直線や水平線、トレンドラインなど、ラインを表示するオブジェクトで有効な設定となります。
背景表示(OBJPROP_BACK)
オブジェクトを背景として表示するかどうかの設定です。このプロパティはbool値による設定となり、trueを設定するとローソク足やチャートに設定したインジケーターよりも後ろにオブジェクトが表示されます。
イベント優先度(OBJPROP_ZORDER)
クリックイベントにおける優先度の設定です。複数のオブジェクトが重なっている状態でクリックした場合、この設定値が大きいオブジェクトから順にクリックイベントが発生します。
隠し項目(OBJPROP_HIDDEN)
チャートの右クリックメニューに表示される「表示中のライン等」を選択すると、チャートに表示しているオブジェクトの一覧が表示されますが、この設定がtrueになっているオブジェクトは初期状態では一覧に表示されず、「すべて」というボタンを押すことで一覧に表示されます。
選択状態(OBJPROP_SELECTED)
オブジェクトの選択状態の設定です。trueはオブジェクト選択状態、falseはオブジェクト非選択状態となります。
読み取り専用(OBJPROP_READONLY)
テキストボックスのみ有効な設定となり、テキストボックスの内容が編集可能かどうかという設定となります。
オブジェクトの種類(OBJPROP_TYPE)
オブジェクトの種類の設定です。この設定は読み取り専用となりますので、変更することは出来ません。
日時(OBJPROP_TIME)
オブジェクトを表示している横軸(日時)の設定です。XY座標で位置を決めるオブジェクトでは無効となります。
選択可否(OBJPROP_SELECTABLE)
オブジェクトを選択することが出来るかどうかの設定です。trueの場合はマウスでオブジェクトをダブルクリックすることで選択状態にすることが出来ますが、falseの場合は不可となります。
作成日時(OBJPROP_CREATETIME)
オブジェクトの作成日時の設定です。この設定は読み取り専用となりますので、変更することは出来ません。
レベル(OBJPROP_LEVELS)
オブジェクトで扱うレベル数の設定です。フィボナッチリトレースメントのようなレベルラインを扱うオブジェクトで有効な設定となります。
レベルラインの色(OBJPROP_LEVELCOLOR)
オブジェクトで扱うレベルラインの色の設定です。フィボナッチリトレースメントのようなレベルラインを扱うオブジェクトで有効な設定となります。
レベルラインの線種(OBJPROP_LEVELSTYLE)
オブジェクトで扱うレベルラインの線種の設定です。フィボナッチリトレースメントのようなレベルラインを扱うオブジェクトで有効な設定となります。
レベルラインの太さ(OBJPROP_LEVELWIDTH)
オブジェクトで扱うレベルラインの太さの設定です。フィボナッチリトレースメントのようなレベルラインを扱うオブジェクトで有効な設定となります。
表示方向(OBJPROP_ALIGN)
テキストボックスのみ有効な設定となり、テキストボックスの左寄せ/中央表示/右寄せの設定となります。
フォントサイズ(OBJPROP_FONTSIZE)
フォントサイズの設定です。文字を表示するオブジェクトで有効な設定となります。
ラインの延長(OBJPROP_RAY_RIGHT)
トレンドラインのみ有効な設定となり、trueはトレンドラインの右側を延長して表示、falseは延長されません。
楕円表示(OBJPROP_ELLIPSE)
フィボナッチアークのみ有効な設定となり、trueの場合は完全な楕円を表示、falseの場合は半円表示となります。
矢印コード(OBJPROP_ARROWCODE)
矢印のみ有効な設定となり、表示する矢印における矢印コードの設定となります。
時間足(OBJPROP_TIMEFRAMES)
オブジェクトの表示を許可する時間足の設定です。
起点(OBJPROP_ANCHOR)
オブジェクトの起点の設定です。起点とは指定した表示位置がオブジェクトのどの部分に該当するかを示す設定となり、矢印オブジェクトやラベルオブジェクトで有効な設定となります。
X座標(OBJPROP_XDISTANCE)
ボタン/ラベル/テキストボックスで有効な設定となり、チャート上の四隅を起点としてオブジェクトを表示するX座標の設定となります。
Y座標(OBJPROP_YDISTANCE)
ボタン/ラベル/テキストボックスで有効な設定となり、チャート上の四隅を起点としてオブジェクトを表示するY座標の設定となります。
押下状態(OBJPROP_STATE)
ボタンの押下状態の設定です。trueは押下状態、falseは非押下状態となります。
横幅(OBJPROP_XSIZE)
オブジェクトの横幅の設定です。この設定はラベル、ボタン、ビットマップ、ビットマップラベル、テキストボックス、四角形ラベルで有効となります。
縦幅(OBJPROP_YSIZE)
オブジェクトの縦幅の設定です。この設定はラベル、ボタン、ビットマップ、ビットマップラベル、テキストボックス、四角形ラベルで有効となります。
横方向の表示開始位置(OBJPROP_XOFFSET)
左上を起点とした横方向における表示開始位置の設定です。この設定はビットマップとビットマップラベルで有効となります。
縦方向の表示開始位置(OBJPROP_YOFFSET)
左上を起点とした縦方向における表示開始位置の設定です。この設定はビットマップとビットマップラベルで有効となります。
背景色(OBJPROP_BGCOLOR)
背景色の設定です。この設定はテキストボックス、ボタン、四角形ラベルで有効となります。
コーナー(OBJPROP_CORNER)
表示位置を決めるためのコーナーをチャートの四隅から指定します。
ボーダーラインの形状(OBJPROP_BORDER_TYPE)
四角形ラベルのみ有効な設定となり、ボーダーラインの形状の設定となります。
ボーダーラインの色(OBJPROP_BORDER_COLOR)
四角形ラベルのみ有効な設定となり、ボーダーラインの色の設定となります。

浮動小数点数型

価格(OBJPROP_PRICE)
オブジェクトを表示している縦軸(価格)の設定です。XY座標で位置を決めるオブジェクトでは無効となります。
レベル(OBJPROP_LEVELVALUE)
レベルラインの設定です。フィボナッチリトレースメントのようなレベルラインを扱うオブジェクトで有効な設定となります。
スケール(OBJPROP_SCALE)
スケールの設定です。この設定はギャンライン、ギャンファン、ギャングリッド、フィボナッチアーク、楕円で有効な設定となります。
角度(OBJPROP_ANGLE)
角度によるトレンドラインで有効な設定となり、表示するラインの角度の設定となります。
偏差(OBJPROP_DEVIATION)
標準偏差チャネルのみ有効な設定となり、表示する偏差の設定となります。

文字列型

名前(OBJPROP_NAME)
オブジェクトの名前の設定です。
説明(OBJPROP_TEXT)
オブジェクトの説明の設定です。
ツールチップ(OBJPROP_TOOLTIP)
ツールチップの設定です。ツールチップはマウスカーソルをオブジェクトに当てた際に表示されます。
レベルテキスト(OBJPROP_LEVELTEXT)
レベルラインに表示するテキスト情報の設定です。
フォント(OBJPROP_FONT)
文字情報を表示する際のフォントの設定です。
ビットマップファイル(OBJPROP_BMPFILE)
ビットマップラベルで有効な設定となり、表示するビットマップファイルの設定です。

オブジェクトプロパティを設定する関数

オブジェクトのプロパティを設定するにはMQL4で提供されている関数を使用しますが、設定するプロパティの種類に応じて3種類の関数が用意されています。

整数型

bool ObjectSetInteger(
    long   chart_id,        // chart identifier
    string object_name,     // object name
    int    prop_id,         // property
    int    prop_modifier,   // modifier
    long   prop_value       // value
);

引用元:ObjectSetInteger – MQL4 Reference

浮動小数点数型

bool ObjectSetDouble(
    long   chart_id,        // chart identifier
    string object_name,     // object name
    int    prop_id,         // property
    int    prop_modifier,   // modifier
    double prop_value       // value
);

引用元:ObjectSetDouble – MQL4 Reference

文字列型

bool ObjectSetString(
    long   chart_id,        // chart identifier
    string object_name,     // object name
    int    prop_id,         // property
    int    prop_modifier,   // modifier
    string prop_value       // value
);

引用元:ObjectSetString – MQL4 Reference

引数

chart_id

第一引数であるchart_idには、プロパティを設定するオブジェクトが表示されているチャートIDを指定します。MQL4プログラムが設定されたチャートの場合はChartID関数でチャートIDを取得できるためChartID関数の戻り値、または「0」を指定します。それ以外のチャートの場合は設定対象のオブジェクトが表示されているチャートIDを取得して指定します。

object_name

第二引数であるobject_nameには、プロパティを設定するオブジェクトの名前を指定します。

prop_id

第三引数であるprop_idには、設定するプロパティの定数を指定します。

prop_modifier

第四引数であるprop_modifierには、設定するプロパティの要素番号を指定します。要素番号の指定が不要となるプロパティもあり、その場合はこの引数は省略することが出来ます。

prop_value

第五引数であるprop_valueには、設定するプロパティの値を指定します。

戻り値

設定が正しくオブジェクトに送信された場合はtrue、失敗した場合はfalseが返却されます。オブジェクトの種類に対して無効なプロパティの場合でも戻り値はtrueとなりますので、戻り値でプロパティが有効かどうかを判断することは出来ません

使用例

1.オブジェクトに色(赤)を設定する

ObjectSetInteger(ChartID(), "OBJ", OBJPROP_COLOR, clrRed);

2.オブジェクトの2番目の価格に現在価格を設定する

ObjectSetDouble(ChartID(), "OBJ", OBJPROP_PRICE, 1, Close[0]);

3.オブジェクトの説明に「ABC」と設定する

ObjectSetString(ChartID(), "OBJ", OBJPROP_TEXT, "ABC");

オブジェクトプロパティを取得する関数

オブジェクトのプロパティを取得する関数についても、プロパティを設定する関数と同様にプロパティの種類に応じて3種類の関数が用意されています。

整数型

long ObjectGetInteger(
    long   chart_id,        // chart identifier
    string object_name,     // object name
    int    prop_id,         // property
    int    prop_modifier    // modifier
);

引用元:ObjectGetInteger – MQL4 Reference

浮動小数点数型

double ObjectGetDouble(
    long   chart_id,        // chart identifier
    string object_name,     // object name
    int    prop_id,         // property
    int    prop_modifier    // modifier
);

引用元:ObjectGetDouble – MQL4 Reference

文字列型

string ObjectGetString(
    long   chart_id,        // chart identifier
    string object_name,     // object name
    int    prop_id,         // property
    int    prop_modifier    // modifier
);

引用元:ObjectGetString – MQL4 Reference

chart_id

第一引数であるchart_idには、プロパティを取得するオブジェクトが表示されているチャートIDを指定します。

object_name

第二引数であるobject_nameには、プロパティを取得するオブジェクトの名前を指定します。

prop_id

第三引数であるprop_idには、取得するプロパティの定数を指定します。

prop_modifier

第四引数であるprop_modifierには、取得するプロパティの要素番号を指定します。要素番号の指定が不要となるプロパティもあり、その場合はこの引数は省略することが出来ます。

戻り値

設定されている指定したプロパティの値が返却されます。

使用例

1.オブジェクトの色を取得する

color c = (color) ObjectGetInteger(ChartID(), "OBJ", OBJPROP_COLOR);

2.オブジェクトの2番目の価格を取得する

double price = ObjectSetDouble(ChartID(), "OBJ", OBJPROP_PRICE, 1);

3.オブジェクトの説明を取得する

string text = ObjectSetString(ChartID(), "OBJ", OBJPROP_TEXT);

まとめ

オブジェクトのプロパティは整数型、浮動小数点数型、文字列型の3種類
整数型のプロパティを設定するにはObjectSetInteger関数を使用する
浮動小数点数型のプロパティを設定するにはObjectSetDouble関数を使用する
文字列型のプロパティを設定するにはObjectSetString関数を使用する
整数型のプロパティを取得するにはObjectGetInteger関数を使用する
浮動小数点数型のプロパティを取得するにはObjectGetDouble関数を使用する
文字列型のプロパティを取得するにはObjectGetString関数を使用する
プロパティの種類によって設定や取得を行う関数が異なる

参考URL

Object Properties – MQL4 Reference
https://docs.mql4.com/constants/objectconstants/enum_object_property

ObjectSetInteger – MQL4 Reference
https://docs.mql4.com/objects/objectsetinteger

ObjectSetDouble – MQL4 Reference
https://docs.mql4.com/objects/objectsetdouble

ObjectSetString – MQL4 Reference
https://docs.mql4.com/objects/objectsetstring

ObjectGetInteger – MQL4 Reference
https://docs.mql4.com/objects/objectgetinteger

ObjectGetDouble – MQL4 Reference
https://docs.mql4.com/objects/objectgetdouble

ObjectGetString – MQL4 Reference
https://docs.mql4.com/objects/objectgetstring