OBJECT 関数一覧

MT4 オブジェクト操作フル版チートシート

0) まずは全体像

  • 作るObjectCreate
  • 設定ObjectSetInteger / ObjectSetDouble / ObjectSetString
  • 取得ObjectGetInteger / ObjectGetDouble / ObjectGetString
  • 動かすObjectMove(座標ポイントを移動)
  • 探すObjectFind(名前で存在確認)
  • 消すObjectDelete / ObjectsDeleteAll
  • 列挙ObjectsTotal / ObjectName
  • イベントOnChartEventOBJ_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_COLORint(color)
OBJPROP_STYLEint線種(STYLE_SOLID/DASH/DOT/DASHDOT/DASHDOTDOT
OBJPROP_WIDTHint線の太さ(1〜5)
OBJPROP_BACKbool背面描画(背景に回す)
OBJPROP_SELECTABLEbool選択可能
OBJPROP_SELECTEDbool初期選択状態
OBJPROP_HIDDENboolオブジェクトリストに表示しない
OBJPROP_ZORDER*int前後関係(大きいほど前面) *一部ビルドのみ

座標系(時間・価格)

定数説明
OBJPROP_TIME1datetime第1ポイントの時間
OBJPROP_PRICE1double第1ポイントの価格
OBJPROP_TIME2datetime第2ポイントの時間
OBJPROP_PRICE2double第2ポイントの価格
OBJPROP_TIME3datetime第3ポイントの時間(必要なOBJのみ)
OBJPROP_PRICE3double第3ポイントの価格

例:OBJ_HLINE は通常 PRICE1 のみ、OBJ_VLINETIME1 のみ使用。


4) ライン/図形系 個別プロパティ

トレンドライン系(OBJ_TREND, OBJ_TRENDBYANGLE など)

定数説明
OBJPROP_RAYbool右方向に無限延長(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_TEXTstring表示テキスト
OBJPROP_FONTstringフォント名
OBJPROP_FONTSIZEintフォントサイズ
OBJPROP_COLORcolor文字色
OBJPROP_ANCHORintアンカー位置(ANCHOR_LEFT_UPPER 等)
OBJPROP_TOOLTIPstringツールチップ(マウスオーバー)

ラベル(OBJ_LABEL:画面座標固定)

定数説明
OBJPROP_CORNERint基準コーナー(CORNER_LEFT_UPPER 等)
OBJPROP_XDISTANCEint基準コーナーからのX距離(px)
OBJPROP_YDISTANCEint基準コーナーからのY距離(px)
OBJPROP_TEXT / FONT / FONTSIZE / COLOR同上
OBJPROP_BGCOLORcolor背景色(ビルドにより対応)
OBJPROP_TOOLTIPstringツールチップ

ボタン(OBJ_BUTTON

定数説明
OBJPROP_XSIZEint横幅(px)
OBJPROP_YSIZEint高さ(px)
OBJPROP_TEXTstringボタンラベル
OBJPROP_BGCOLOR / COLOR / FONTSIZE / FONT見た目
OBJPROP_STATEbool押下状態(トグル)

クリックは OnChartEvent(CHARTEVENT_OBJECT_CLICK, …, sparam==name)

ビットマップ(OBJ_BITMAP, OBJ_BITMAP_LABEL

定数説明
OBJPROP_BMPFILE*string画像ファイル名(MQL4/Images など)*ビルド依存
OBJPROP_XSIZE / YSIZEint表示サイズ(LABELの方で主に使用)

ラベル矩形(OBJ_RECTANGLE_LABEL:背景ボックス)

定数説明
OBJPROP_CORNER / XDISTANCE / YDISTANCE位置
OBJPROP_XSIZE / YSIZEint幅/高さ
OBJPROP_BGCOLOR / OBJPROP_COLORcolor塗り/枠色

6) 矢印・記号系

共通

定数説明
OBJPROP_ARROWCODEintWingdings等のコード(OBJ_ARROW など)
OBJPROP_COLOR / WIDTH色/太さ

OBJ_ARROW_UP / DOWN / CHECK / STOP / THUMB_* はプリセット記号。
汎用 OBJ_ARROWARROWCODE で任意記号を指定。


7) フィボナッチ/ギャン/ピッチフォーク

フィボ共通(OBJ_FIBO, OBJ_FIBOFAN, OBJ_FIBOARC, OBJ_FIBOTIMES など)

定数説明
OBJPROP_LEVELSintレベル数
OBJPROP_FIRSTLEVELdoubleレベル0の値
OBJPROP_LEVELVALUE(i)doublei番目レベル値
OBJPROP_LEVELTEXT(i)stringi番目レベル表示テキスト
OBJPROP_LEVELCOLOR / STYLE / WIDTHレベル線の見た目

ギャン(OBJ_GANNLINE, OBJ_GANNFAN, OBJ_GANNGRID)/ ピッチフォーク(OBJ_PITCHFORK

  • いずれも基準ポイントの設定と ObjectMove による調整がメイン
  • 線の色/幅/スタイルは共通プロパティで制御

8) 取得専用によく使うもの

定数説明
OBJPROP_TYPEintオブジェクトタイプ(OBJ_...
OBJPROP_TIME1/2/3 / PRICE1/2/3座標確認
OBJPROP_SELECTEDbool選択状態の確認

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) よくある落とし穴・ベストプラクティス

  • 名前は一意:再作成前に ObjectFindObjectDelete で衝突回避
  • 削除の掃除OnDeinit() で作成した全オブジェクトを確実に削除
  • 再描画のちらつき対策:大量オブジェクトは更新前に差分更新(全部消して全部作るのを避ける)
  • スクリーン座標 vs チャート座標OBJ_LABEL/OBJ_RECTANGLE_LABEL/OBJ_BUTTON は画面固定、OBJ_TEXT は時間・価格に追随
  • イベント駆動:ボタンは OnChartEvent を使う
  • フィボのレベル:作成後に LEVELS を設定してから LEVELVALUE/LEVELTEXT を順に入れる

コメント

タイトルとURLをコピーしました