オブジェクトを作りたい!

オブジェクトって何?

オブジェクトとはチャート上に表示する様々な図形のことで、代表的なオブジェクトは垂直線や水平線、トレンドラインなどが挙げられます。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
);

引用元:ObjectCreate – MQL4 Reference

引数

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
角度によるトレンドライン OBJ_TRENDBYANGLE
サイクルライン OBJ_CYCLES
平行チャネル OBJ_CHANNEL
標準偏差チャネル OBJ_STDDEVCHANNEL 2(日時のみ)
線形回帰チャネル OBJ_REGRESSION 2(日時のみ)
アンドリューズピッチフォーク OBJ_PITCHFORK
ギャンライン OBJ_GANNLINE
ギャンファン OBJ_GANNFAN
ギャングリッド OBJ_GANNGRID
フィボナッチリトレースメント OBJ_FIBO
フィボナッチタイムゾーン OBJ_FIBOTIMES
フィボナッチファン OBJ_FIBOFAN
フィボナッチアーク OBJ_FIBOARC
フィボナッチチャネル OBJ_FIBOCHANNEL
フィボナッチエクスパンション OBJ_EXPANSION
長方形 OBJ_RECTANGLE
三角形 OBJ_TRIANGLE
楕円 OBJ_ELLIPSE
サムズアップ OBJ_ARROW_THUMB_UP
サムズダウン OBJ_ARROW_THUMB_DOWN
上向き矢印 OBJ_ARROW_UP
下向き矢印 OBJ_ARROW_DOWN
ストップサイン OBJ_ARROW_STOP
チェックサイン OBJ_ARROW_CHECK
価格を左に表示 OBJ_ARROW_LEFT_PRICE
価格を右に表示 OBJ_ARROW_RIGHT_PRICE
買いサイン OBJ_ARROW_BUY
売りサイン OBJ_ARROW_SELL
テキスト OBJ_TEXT
テキストラベル OBJ_LABEL 0(座標指定)
ボタン OBJ_BUTTON 0(座標指定)
ビットマップ OBJ_BITMAP
ビットマップラベル OBJ_BITMAP_LABEL 0(座標指定)
テキストボックス OBJ_EDIT 0(座標指定)
イベント OBJ_EVENT 1(日時のみ)
四角形ラベル OBJ_RECTANGLE_LABEL 0(座標指定)

オブジェクトの表示タイミング

オブジェクトが表示されるタイミングはObjectCreate関数を実行した時点ではなく、1回の価格変動で動作する一連のプログラムの実行が全て完了してから表示となります。そのため、ObjectCreate関数を実行した後に時間がかかる処理を行った場合、チャート上にオブジェクトが表示されるまでにタイムラグが発生してしまいます。ChartRefresh関数によるチャートの再表示を行うことで、それまでに作成されたオブジェクトがチャートに表示されますので、タイムラグを回避したい場合はオブジェクトの作成が完了した時点でChartRefresh関数を実行しましょう。

まとめ

オブジェクトを作るにはObjectCreate関数を使用する
第一引数はオブジェクトを表示するチャートのID
第二引数はオブジェクトの名前
第三引数はオブジェクトの種類
第四引数はオブジェクトを表示するウィンドウ番号
第五引数はオブジェクトを表示する位置(横軸)
第六引数はオブジェクトを表示する位置(縦軸)
第七引数以降が必要かどうかは作成するオブジェクトの種類による
XY座標が必要な場合はObjectSetInteger関数で指定する
オブジェクトをすぐに表示するにはChartRefresh関数を使用する

参考URL

ObjectCreate – MQL4 Reference
https://docs.mql4.com/objects/objectcreate

Object Types – MQL4 Reference
https://docs.mql4.com/constants/objectconstants/enum_object