オブジェクトって何?
オブジェクトとはチャート上に表示する様々な図形のことで、代表的なオブジェクトは垂直線や水平線、トレンドラインなどが挙げられます。MetaTrader4上部メニューにある「挿入」メニューからオブジェクトを手動でチャートに設定することが可能ですが、MQL4プログラムの場合はボタンやテキストボックスなど、手動では設定することが出来ないオブジェクトもチャートに表示することが出来ます。
オブジェクトを作成するObjectCreate関数
オブジェクトを作成するには、MQL4で提供されているObjectCreate関数を使用します。
bool ObjectCreate( long chart_id, // chart ID string object_name, // object name ENUM_OBJECT object_type, // object type int sub_window, // window index datetime time1, // time of the first anchor point double price1, // price of the first anchor point ... datetime timeN = 0, // time of the N-th anchor point double priceN = 0 // price of the N-th anchor point );
引数
chart_id
第一引数のchart_idには、オブジェクトを作成するチャートのIDを指定します。MQL4プログラムが設定されたチャートの場合はChartID関数でチャートIDを取得できるためChartID関数の戻り値、または「0」を指定します。それ以外のチャートの場合はオブジェクトを作成したいチャートIDを取得して指定します。
object_name
第二引数のobject_nameには、作成するオブジェクトの名前を指定します。オブジェクトの名前は一意になる必要があるため、既にチャート上に設定されているオブジェクトの名前を指定することは出来ません。
object_type
第三引数のobject_typeには、作成するオブジェクトの種類を指定します。MQL4では事前にオブジェクトの種類が定数として用意されており、その定数を指定することになります。オブジェクトの種類と定数については後述の「オブジェクトの種類」をご参照ください。
sub_window
第四引数のsub_windowには、作成するオブジェクトを表示するウィンドウを指定します。ローソク足が表示されているメインウィンドウにオブジェクトを作成する場合は「0」、サブウィンドウに表示する場合はサブウィンドウの番号を指定します。なお、サブウィンドウの番号は上から順に1、2、3・・・となります。
time1
第五引数であるtime1には、作成するオブジェクトを表示する位置(横軸)を指定します。チャートの横軸は「日時」であるため、オブジェクトの横軸の指定も「日時」となります。
price1
第六引数であるprice1には、作成するオブジェクトを表示する位置(縦軸)を指定します。チャートの縦軸は「価格」であるため、オブジェクトの縦軸の指定も「価格」となります。サブウィンドウの場合は縦軸が価格ではなくサブウィンドウに表示されている内容に依存しますので、オブジェクトの縦軸もそれに合わせて指定します。
…、timeN、priceN
第七引数以降の指定が必要かどうかは作成するオブジェクトに依存します。オブジェクトの作成に必要な座標が1つ(矢印等)の場合は指定が不要ですが、必要な座標が2つ(トレンドライン等)の場合は「日時」と「価格」を第七引数と第八引数にそれぞれ指定します。必要な座標の最大数は3(アンドリューズピッチフォーク等)となり、その場合は第九引数と第十引数まで指定が必要ということになります。オブジェクトの種類ごとに必要な座標数については後述の「オブジェクトの種類」をご参照ください。
戻り値
オブジェクトの作成に成功した場合はtrue、失敗した場合はfalseが返却されます。
使用例
1.買いサインを表示
// 現在のローソク足 datetime x1 = Time[0]; // 現在の価格 double y1 = Close[0]; // メインウィンドウに買いサインを表示 ObjectCreate(ChartID(), "BUY", OBJ_ARROW_BUY, 0, x1, y1);
このプログラムを実行した時点の価格の位置に買いサインを表示します。
2.トレンドラインを表示
// 1本前の高値 datetime x1 = Time[1]; double y1 = High[1]; // 現在の高値 datetime x2 = Time[0]; double y2 = High[0]; // メインウィンドウにトレンドラインを表示 ObjectCreate(ChartID(), "TREND", OBJ_TREND, 0, x1, y1, x2, y2);
「1本前の高値」「現在の高値」の2点を結ぶトレンドラインを表示します。
オブジェクトの種類
MQL4で作成可能なオブジェクトの一覧です。必要な座標数が「1(日時のみ)」となっているオブジェクトの場合、価格は「0」を指定します。「0(座標指定)」のオブジェクトの場合、座標は「日時」「価格」ではなく「チャート左上からのXY座標」で指定するため、ObjectCreate関数の「日時」「価格」は「0」でオブジェクトを作成し、ObjectSetInteger関数を使用してXY座標を指定する必要があります。
種類 | オブジェクト定数 | 必要な座標数 |
---|---|---|
垂直線 | OBJ_VLINE | 1(日時のみ) |
水平線 | OBJ_HLINE | 1(価格のみ) |
トレンドライン | OBJ_TREND | 2 |
角度によるトレンドライン | OBJ_TRENDBYANGLE | 2 |
サイクルライン | OBJ_CYCLES | 2 |
平行チャネル | OBJ_CHANNEL | 3 |
標準偏差チャネル | OBJ_STDDEVCHANNEL | 2(日時のみ) |
線形回帰チャネル | OBJ_REGRESSION | 2(日時のみ) |
アンドリューズピッチフォーク | OBJ_PITCHFORK | 3 |
ギャンライン | OBJ_GANNLINE | 2 |
ギャンファン | OBJ_GANNFAN | 2 |
ギャングリッド | OBJ_GANNGRID | 2 |
フィボナッチリトレースメント | OBJ_FIBO | 2 |
フィボナッチタイムゾーン | OBJ_FIBOTIMES | 2 |
フィボナッチファン | OBJ_FIBOFAN | 2 |
フィボナッチアーク | OBJ_FIBOARC | 2 |
フィボナッチチャネル | OBJ_FIBOCHANNEL | 3 |
フィボナッチエクスパンション | OBJ_EXPANSION | 3 |
長方形 | OBJ_RECTANGLE | 2 |
三角形 | OBJ_TRIANGLE | 3 |
楕円 | OBJ_ELLIPSE | 2 |
サムズアップ | OBJ_ARROW_THUMB_UP | 1 |
サムズダウン | OBJ_ARROW_THUMB_DOWN | 1 |
上向き矢印 | OBJ_ARROW_UP | 1 |
下向き矢印 | OBJ_ARROW_DOWN | 1 |
ストップサイン | OBJ_ARROW_STOP | 1 |
チェックサイン | OBJ_ARROW_CHECK | 1 |
価格を左に表示 | OBJ_ARROW_LEFT_PRICE | 1 |
価格を右に表示 | OBJ_ARROW_RIGHT_PRICE | 1 |
買いサイン | OBJ_ARROW_BUY | 1 |
売りサイン | OBJ_ARROW_SELL | 1 |
テキスト | OBJ_TEXT | 1 |
テキストラベル | OBJ_LABEL | 0(座標指定) |
ボタン | OBJ_BUTTON | 0(座標指定) |
ビットマップ | OBJ_BITMAP | 1 |
ビットマップラベル | OBJ_BITMAP_LABEL | 0(座標指定) |
テキストボックス | OBJ_EDIT | 0(座標指定) |
イベント | OBJ_EVENT | 1(日時のみ) |
四角形ラベル | OBJ_RECTANGLE_LABEL | 0(座標指定) |
オブジェクトの表示タイミング
オブジェクトが表示されるタイミングはObjectCreate関数を実行した時点ではなく、1回の価格変動で動作する一連のプログラムの実行が全て完了してから表示となります。そのため、ObjectCreate関数を実行した後に時間がかかる処理を行った場合、チャート上にオブジェクトが表示されるまでにタイムラグが発生してしまいます。ChartRefresh関数によるチャートの再表示を行うことで、それまでに作成されたオブジェクトがチャートに表示されますので、タイムラグを回避したい場合はオブジェクトの作成が完了した時点でChartRefresh関数を実行しましょう。
まとめ
参考URL
ObjectCreate – MQL4 Reference
https://docs.mql4.com/objects/objectcreate
Object Types – MQL4 Reference
https://docs.mql4.com/constants/objectconstants/enum_object