MT4 オブジェクト操作フル版チートシート
0) まずは全体像
- 作る:
ObjectCreate
- 設定:
ObjectSetInteger / ObjectSetDouble / ObjectSetString
- 取得:
ObjectGetInteger / ObjectGetDouble / ObjectGetString
- 動かす:
ObjectMove
(座標ポイントを移動) - 探す:
ObjectFind
(名前で存在確認) - 消す:
ObjectDelete / ObjectsDeleteAll
- 列挙:
ObjectsTotal / ObjectName
- イベント:
OnChartEvent
(OBJ_BUTTON
クリック等)
1) オブジェクト関数 一覧
作成・削除・探索・列挙
bool ObjectCreate(long chart_id, string name, int type, int sub_window,
datetime time1, double price1, datetime time2=0, double price2=0,
datetime time3=0, double price3=0);
bool ObjectDelete(long chart_id, string name);
int ObjectsDeleteAll(long chart_id, int sub_window=-1, int type=-1);
int ObjectFind(long chart_id, string name); // 見つかればインデックス、無ければ -1
int ObjectsTotal(long chart_id, int sub_window=-1, int type=-1);
string ObjectName(long chart_id, int index);
プロパティ(設定・取得)
bool ObjectSetInteger(long chart_id, string name, int property_id, long value);
bool ObjectSetDouble (long chart_id, string name, int property_id, double value);
bool ObjectSetString (long chart_id, string name, int property_id, string value);
long ObjectGetInteger(long chart_id, string name, int property_id);
double ObjectGetDouble (long chart_id, string name, int property_id);
string ObjectGetString (long chart_id, string name, int property_id);
位置変更
bool ObjectMove(long chart_id, string name, int point_index, datetime time, double price);
// 例:トレンドライン等の第1点(point_index=0)、第2点(point_index=1)を移動
2) オブジェクトタイプ(OBJ_)主要一覧
(MT4で一般的に使うもの)
- ライン/図形:
OBJ_VLINE
,OBJ_HLINE
,OBJ_TREND
,OBJ_TRENDBYANGLE
,OBJ_RECTANGLE
,OBJ_TRIANGLE
,OBJ_ELLIPSE
- チャネル/回帰:
OBJ_CHANNEL
,OBJ_STDDEVCHANNEL
,OBJ_REGRESSION
- テキスト/UI:
OBJ_TEXT
(価格・時間に追随),OBJ_LABEL
(画面座標固定),OBJ_BUTTON
- 画像:
OBJ_BITMAP
,OBJ_BITMAP_LABEL
- 矢印/記号:
OBJ_ARROW
,OBJ_ARROW_UP
,OBJ_ARROW_DOWN
,OBJ_ARROW_STOP
,OBJ_ARROW_CHECK
,OBJ_ARROW_THUMB_UP
,OBJ_ARROW_THUMB_DOWN
- フィボ:
OBJ_FIBO
,OBJ_FIBOTIMES
,OBJ_FIBOFAN
,OBJ_FIBOARC
- ギャン:
OBJ_GANNLINE
,OBJ_GANNFAN
,OBJ_GANNGRID
- ピッチフォーク:
OBJ_PITCHFORK
- ラベル矩形:
OBJ_RECTANGLE_LABEL
(画面座標の背景ボックス)
3) 共通プロパティ(多くのOBJで共通)
定数 | 型 | 説明 |
---|---|---|
OBJPROP_COLOR | int(color) | 色 |
OBJPROP_STYLE | int | 線種(STYLE_SOLID/DASH/DOT/DASHDOT/DASHDOTDOT ) |
OBJPROP_WIDTH | int | 線の太さ(1〜5) |
OBJPROP_BACK | bool | 背面描画(背景に回す) |
OBJPROP_SELECTABLE | bool | 選択可能 |
OBJPROP_SELECTED | bool | 初期選択状態 |
OBJPROP_HIDDEN | bool | オブジェクトリストに表示しない |
OBJPROP_ZORDER * | int | 前後関係(大きいほど前面) *一部ビルドのみ |
座標系(時間・価格)
定数 | 型 | 説明 |
---|---|---|
OBJPROP_TIME1 | datetime | 第1ポイントの時間 |
OBJPROP_PRICE1 | double | 第1ポイントの価格 |
OBJPROP_TIME2 | datetime | 第2ポイントの時間 |
OBJPROP_PRICE2 | double | 第2ポイントの価格 |
OBJPROP_TIME3 | datetime | 第3ポイントの時間(必要なOBJのみ) |
OBJPROP_PRICE3 | double | 第3ポイントの価格 |
例:
OBJ_HLINE
は通常PRICE1
のみ、OBJ_VLINE
はTIME1
のみ使用。
4) ライン/図形系 個別プロパティ
トレンドライン系(OBJ_TREND
, OBJ_TRENDBYANGLE
など)
定数 | 型 | 説明 |
---|---|---|
OBJPROP_RAY | bool | 右方向に無限延長(true) |
矩形/三角形/楕円(OBJ_RECTANGLE
, OBJ_TRIANGLE
, OBJ_ELLIPSE
)
- いずれも
TIME/PRICE
の2〜3点指定で形状を定義 - 塗り潰しは チャートのプロパティ設定依存。MT4では専用
FILL
プロパティは基本なし
チャネル/回帰(OBJ_CHANNEL
, OBJ_STDDEVCHANNEL
, OBJ_REGRESSION
)
- ベースとなるトレンドラインと平行線/幅を内部的に保持
- 主要操作は基準2点(+ 幅用の調整点)を
ObjectMove
で調整
5) テキスト・UI・画像系
テキスト(OBJ_TEXT
:チャート座標)
定数 | 型 | 説明 |
---|---|---|
OBJPROP_TEXT | string | 表示テキスト |
OBJPROP_FONT | string | フォント名 |
OBJPROP_FONTSIZE | int | フォントサイズ |
OBJPROP_COLOR | color | 文字色 |
OBJPROP_ANCHOR | int | アンカー位置(ANCHOR_LEFT_UPPER 等) |
OBJPROP_TOOLTIP | string | ツールチップ(マウスオーバー) |
ラベル(OBJ_LABEL
:画面座標固定)
定数 | 型 | 説明 |
---|---|---|
OBJPROP_CORNER | int | 基準コーナー(CORNER_LEFT_UPPER 等) |
OBJPROP_XDISTANCE | int | 基準コーナーからのX距離(px) |
OBJPROP_YDISTANCE | int | 基準コーナーからのY距離(px) |
OBJPROP_TEXT / FONT / FONTSIZE / COLOR | — | 同上 |
OBJPROP_BGCOLOR | color | 背景色(ビルドにより対応) |
OBJPROP_TOOLTIP | string | ツールチップ |
ボタン(OBJ_BUTTON
)
定数 | 型 | 説明 |
---|---|---|
OBJPROP_XSIZE | int | 横幅(px) |
OBJPROP_YSIZE | int | 高さ(px) |
OBJPROP_TEXT | string | ボタンラベル |
OBJPROP_BGCOLOR / COLOR / FONTSIZE / FONT | — | 見た目 |
OBJPROP_STATE | bool | 押下状態(トグル) |
クリックは
OnChartEvent(CHARTEVENT_OBJECT_CLICK, …, sparam==name)
ビットマップ(OBJ_BITMAP
, OBJ_BITMAP_LABEL
)
定数 | 型 | 説明 |
---|---|---|
OBJPROP_BMPFILE * | string | 画像ファイル名(MQL4/Images など)*ビルド依存 |
OBJPROP_XSIZE / YSIZE | int | 表示サイズ(LABELの方で主に使用) |
ラベル矩形(OBJ_RECTANGLE_LABEL
:背景ボックス)
定数 | 型 | 説明 |
---|---|---|
OBJPROP_CORNER / XDISTANCE / YDISTANCE | — | 位置 |
OBJPROP_XSIZE / YSIZE | int | 幅/高さ |
OBJPROP_BGCOLOR / OBJPROP_COLOR | color | 塗り/枠色 |
6) 矢印・記号系
共通
定数 | 型 | 説明 |
---|---|---|
OBJPROP_ARROWCODE | int | Wingdings等のコード(OBJ_ARROW など) |
OBJPROP_COLOR / WIDTH | — | 色/太さ |
OBJ_ARROW_UP / DOWN / CHECK / STOP / THUMB_*
はプリセット記号。
汎用OBJ_ARROW
はARROWCODE
で任意記号を指定。
7) フィボナッチ/ギャン/ピッチフォーク
フィボ共通(OBJ_FIBO
, OBJ_FIBOFAN
, OBJ_FIBOARC
, OBJ_FIBOTIMES
など)
定数 | 型 | 説明 |
---|---|---|
OBJPROP_LEVELS | int | レベル数 |
OBJPROP_FIRSTLEVEL | double | レベル0の値 |
OBJPROP_LEVELVALUE(i) | double | i番目レベル値 |
OBJPROP_LEVELTEXT(i) | string | i番目レベル表示テキスト |
OBJPROP_LEVELCOLOR / STYLE / WIDTH | — | レベル線の見た目 |
ギャン(OBJ_GANNLINE
, OBJ_GANNFAN
, OBJ_GANNGRID
)/ ピッチフォーク(OBJ_PITCHFORK
)
- いずれも基準ポイントの設定と
ObjectMove
による調整がメイン - 線の色/幅/スタイルは共通プロパティで制御
8) 取得専用によく使うもの
定数 | 型 | 説明 |
---|---|---|
OBJPROP_TYPE | int | オブジェクトタイプ(OBJ_... ) |
OBJPROP_TIME1/2/3 / PRICE1/2/3 | — | 座標確認 |
OBJPROP_SELECTED | bool | 選択状態の確認 |
9) 実用テンプレ(コピペOK)
9-1) 水平線を引く
void DrawHLine(string name, double price, color c=clrRed, int style=STYLE_DASH, int width=1)
{
if(ObjectFind(0, name) != -1) ObjectDelete(0, name);
ObjectCreate(0, name, OBJ_HLINE, 0, 0, price);
ObjectSetInteger(0, name, OBJPROP_COLOR, c);
ObjectSetInteger(0, name, OBJPROP_STYLE, style);
ObjectSetInteger(0, name, OBJPROP_WIDTH, width);
}
9-2) 背景ボックス+テキスト(情報パネル)
void MakePanel(string box, string lbl, int x, int y, int w, int h, string text)
{
// 背景
if(ObjectFind(0, box) != -1) ObjectDelete(0, box);
ObjectCreate(0, box, OBJ_RECTANGLE_LABEL, 0, 0, 0);
ObjectSetInteger(0, box, OBJPROP_CORNER, CORNER_LEFT_UPPER);
ObjectSetInteger(0, box, OBJPROP_XDISTANCE, x);
ObjectSetInteger(0, box, OBJPROP_YDISTANCE, y);
ObjectSetInteger(0, box, OBJPROP_XSIZE, w);
ObjectSetInteger(0, box, OBJPROP_YSIZE, h);
ObjectSetInteger(0, box, OBJPROP_BGCOLOR, clrDimGray);
ObjectSetInteger(0, box, OBJPROP_COLOR, clrDimGray);
// テキスト
if(ObjectFind(0, lbl) != -1) ObjectDelete(0, lbl);
ObjectCreate(0, lbl, OBJ_LABEL, 0, 0, 0);
ObjectSetInteger(0, lbl, OBJPROP_CORNER, CORNER_LEFT_UPPER);
ObjectSetInteger(0, lbl, OBJPROP_XDISTANCE, x+8);
ObjectSetInteger(0, lbl, OBJPROP_YDISTANCE, y+6);
ObjectSetInteger(0, lbl, OBJPROP_FONTSIZE, 11);
ObjectSetInteger(0, lbl, OBJPROP_COLOR, clrWhite);
ObjectSetString (0, lbl, OBJPROP_TEXT, text);
}
9-3) ボタン+クリック切替
void CreateButton(string name, string caption, int x, int y, int w=80, int h=20)
{
if(ObjectFind(0, name) != -1) ObjectDelete(0, name);
ObjectCreate(0, name, OBJ_BUTTON, 0, 0, 0);
ObjectSetInteger(0, name, OBJPROP_CORNER, CORNER_LEFT_UPPER);
ObjectSetInteger(0, name, OBJPROP_XDISTANCE, x);
ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y);
ObjectSetInteger(0, name, OBJPROP_XSIZE, w);
ObjectSetInteger(0, name, OBJPROP_YSIZE, h);
ObjectSetInteger(0, name, OBJPROP_BGCOLOR, clrDodgerBlue);
ObjectSetInteger(0, name, OBJPROP_COLOR, clrWhite);
ObjectSetString (0, name, OBJPROP_TEXT, caption);
}
void OnChartEvent(const int id,const long &l,const double &d,const string &s)
{
if(id==CHARTEVENT_OBJECT_CLICK && s=="MyToggle")
{
// ここで表示ON/OFFなどをトグル
}
}
10) よくある落とし穴・ベストプラクティス
- 名前は一意:再作成前に
ObjectFind
→ObjectDelete
で衝突回避 - 削除の掃除:
OnDeinit()
で作成した全オブジェクトを確実に削除 - 再描画のちらつき対策:大量オブジェクトは更新前に差分更新(全部消して全部作るのを避ける)
- スクリーン座標 vs チャート座標:
OBJ_LABEL/OBJ_RECTANGLE_LABEL/OBJ_BUTTON
は画面固定、OBJ_TEXT
は時間・価格に追随 - イベント駆動:ボタンは
OnChartEvent
を使う - フィボのレベル:作成後に
LEVELS
を設定してからLEVELVALUE/LEVELTEXT
を順に入れる
コメント