【MQL4】ObjectCreate関数の使い方!オブジェクトを作成する方法

MT4のEA(自動売買)をプログラミングするために使用されるプログラミング言語はMQL4です。

この言語を使って、ラベルなどのオブジェクトを作成することも可能です。

そのために利用される関数がobjectcreateです。

今回は、objectcreate関数について、概要、書き方、戻り値や引数について知っておくべきことなどを解説します。

また、簡単なサンプルコードも紹介し、objectcreate関数がどのようなものかを説明します。

これらを読むことで、ラベルなどのオブジェクトを表示できるobjectcreate関数について理解することができるでしょう。

ObjectCreate関数とは

objectcreate関数は、オブジェクトを作成または生成するために使用される関数です。

オブジェクトとは、操作や処理の対象となる実体を指します。MQL4では、以下のようなオブジェクトが利用されます。

  • 図形
  • 文字

これらのオブジェクトには、名前や描画のタイプ、初期位置(座標を指定するX軸やY軸)などの情報を設定することができます。

EAでは、設定や動作などをしてもオブジェクトがないと、ユーザーが確認できません。

そのため、視覚的な描画を行うための重要な関数であると言えます。

ObjectCreate関数の書き方

objectcreate関数の基本的な書き方は次のとおりです。

bool ObjectCreate(引数);

このobjectcreate関数には、チャートIDがあるタイプとチャートIDがないタイプの2つの書き方があります。

チャートIDとは、MT4の各チャートに割り当てられた数字であり、チャートIDを指定することで他のチャートにオブジェクトを表示したり、テンプレートを適用したりすることができます。

ただし、実際にobjectcreate関数を使用する場合、チャートIDがないタイプをよく使用することが多いため、チャートIDがないタイプの使い方を覚えておくことをおすすめします。

両者の違いは引数の数にあります。

チャートIDがある場合、引数の数が1つ多くなります。

大きな違いではありませんが、引数が少ない方が管理しやすいと感じるかもしれません。

ObjectCreate関数の戻り値

objectcreate関数の戻り値や返り値について解説します。

戻り値や返り値は同じ意味を持つ言葉で、objectcreate関数などの関数を実行した結果として表示される値(文字列)のことです。

objectcreate関数の返り値は以下のようになります。

  • オブジェクトが作成された場合:true
  • オブジェクトが作成できなかった場合やエラーが発生した場合:false

つまり、objectcreate関数の返り値はtrueまたはfalseという文字列情報として表示される仕組みです。

なお、falseが返された場合、GetLastError関数を使用することで具体的なエラー内容を表示できます。

int GetLastError();

上記のような記述をすることで、直近のエラーコードが表示されます。

たとえば、次のようなものが挙げられます。(コード:IDで表示)

  • 0:ERR_NO_ERROR→エラーなし
  • 131:ERR_INVALID_TRADE_VOLUME→無効な取引量
  • 4106:ERR_UNKNOWN_SYMBOL→不明な通貨ペア

これらは例示であり、他にも様々なエラーコードが存在します。

objectcreate関数の大まかな仕組みが分かったところで、次にobjectcreate関数の引数について解説します。

ObjectCreate関数の引数

objectcreate関数の引数は、次のような形で入力されます。

  • bool ObjectCreate(①,②,③,④,⑤,⑥,…); //チャートIDありの場合
  • bool ObjectCreate(②,③,④,⑤,⑥,…); //チャートIDなしの場合

引数に入れていくものとして次のようなものになります(入れる番号と引数名:データ型、概要で紹介)。

①chart_id:long チャートID設定。。
②object_name:string オブジェクト名の設定。63文字以内で他のオブジェクト名と重複しない半角英数文字。
③object_type:ENUM オブジェクトタイプの設定。ENUM_OBJECT 列挙値から指定します。
④sub_window:int チャートウィンドウの番号。0はチャートメインウィンドウでチャートサブウィンドウは 1から開始。
⑤time1:datetime 1番目のアンカーポイントの時間座標(X軸位置)。
⑥price1:double 1番目のアンカーポイントの価格座標(Y軸位置)。
… timeN:datetime 以後⑤⑥をN番目として設定した引数分繰り返す。N番目のアンカーポイントの時間座標。
… priceN:double N番目のアンカーポイントの価格座標。

これらについて解説しましょう。

chart_id long

これは、チャートIDありにするときのみに使用する引数です。

チャートIDを指定するもので、0にすると現在のチャートを指定できる仕組みです。

object_name string

オブジェクト名を指定します。

63文字以内で設定し、他のオブジェクト名と重複しないようにします。

object_type ENUM

オブジェクトタイプの設定をします。

指定するのは次の定数からです。

  • OBJ_VLINE 垂直線
  • OBJ_HLINE 水平線
  • OBJ_TREND トレンドライン
  • OBJ_TRENDBYANGLE 角度によるトレンドライン
  • OBJ_CYCLES サイクルライン
  • OBJ_CHANNEL チャネル
  • 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_ARROW 矢印
  • OBJ_TEXT テキスト
  • OBJ_LABEL ラベル
  • OBJ_BUTTON ボタン
  • OBJ_BITMAP ビットマップ
  • OBJ_BITMAP_LABEL ビットマップラベル
  • OBJ_EDIT 編集枠
  • OBJ_EVENT 経済指標カレンダーに反応するイベントオブジェクト
  • OBJ_RECTANGLE_LABEL カスタムグラフィカルインターフェースの作成やデザインするオブジェクト
  • OBJ_STDDEVCHANNEL 標準偏差チャネル
  • OBJ_REGRESSION 線形回帰
  • OBJ_PITCHFORK アンドリュース・ピッチフォーク
  • OBJ_GANNLINE ギャンライン
  • OBJ_GANNFAN ギャンファン
  • OBJ_GANNGRID ギャングリッド
  • OBJ_FIBO フィボナッチリトレースメント
  • OBJ_FIBOTIMES フィボナッチタイムゾーン
  • OBJ_FIBOFAN フィボナッチファン
  • OBJ_FIBOARC フィボナッチ円弧
  • OBJ_FIBOCHANNEL フィボナッチチャネル
  • OBJ_EXPANSION フィボナッチ拡張

とても多くあるので、リストを見ながら選択するのがおすすめです。

sub_window int

オブジェクトを描画するウィンドウの番号を指定する引数です。

メインのチャートウィンドウに描画したい場合は「0」とします。

ただし、指定したウィンドウが存在しない場合、戻り値としてfalseが返されます。

time1 datetime

オブジェクトの1点目の位置(X軸の位置)を時間で指定する引数です。

price1 double

オブジェクトの1点目の位置(Y軸の位置)を価格で指定する引数です。

timeN datetime

以後⑤⑥をN番目として設定した引数分繰り返します。

オブジェクトのN点目の位置(X軸の位置)を時間で指定します。

priceN double

N番目のアンカーポイント位置(Y軸の位置)を価格で指定します。

ObjectCreate関数の使い方

objectcreate関数の使い方について、簡単なサンプルコードを紹介します。

記述例1:オブジェクトIDを「obj1」としてメインウィンドウに水平線を引く

ObjectCreate("obj1", OBJ_HLINE, 0, 0, Ask);

記述例2:オブジェクトIDを「obj2」としてサブウィンドウに垂直線を引く

ObjectCreate("obj2", OBJ_VLINE, 1, Time[5], 0);

それぞれ、OBJ_VLINE(垂直線)およびOBJ_HLINE(水平線)を記述します。

実際に運用する場合の記述例を以下のように紹介します。

#property strict

void OnInit() {
ObjectsDeleteAll(); // オブジェクトを全削除する記述
ObjectCreate("obj1", OBJ_HLINE, 0, 0, Ask); // 記述例1
ObjectCreate("obj2", OBJ_VLINE, 1, Time[5], 0); // 記述例2
}

void OnDeinit(const int reason) {
ObjectsDeleteAll();
}

objectcreate関数の引数を変えながら、記述してその仕組みを覚えてみましょう。

ObjectCreate関数の注意点

最後にobjectcreate関数の注意点として以下の3点を紹介します。

  1. オブジェクトの名前は63文字以内にすること。
  2. 同じオブジェクト名をつけないこと。
  3. 引数を取り違えないこと。

まず、オブジェクトの名前は最大で63文字までに制限されています。それ以上の文字数ではエラーが発生してしまいますので注意しましょう。

次に、同じオブジェクト名を複数回使用すると正しく動作しないので、オブジェクト名を重複させないように工夫しましょう。たとえば、ナンバリングを使って識別する方法などがあります。

最後に、objectcreate関数は多くの引数を持っていますので、引数を間違えないように注意深く設定しましょう。

弊さいとが独自に開発した「FXオリジナルインジケーター」を無料でプレゼント!

インターネット上に存在しないインジケーター、他では高額な金額で販売されているようなインジケーターも無料で配布する期間限定のプレゼント企画!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です