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点を紹介します。
- オブジェクトの名前は63文字以内にすること。
- 同じオブジェクト名をつけないこと。
- 引数を取り違えないこと。
まず、オブジェクトの名前は最大で63文字までに制限されています。それ以上の文字数ではエラーが発生してしまいますので注意しましょう。
次に、同じオブジェクト名を複数回使用すると正しく動作しないので、オブジェクト名を重複させないように工夫しましょう。たとえば、ナンバリングを使って識別する方法などがあります。
最後に、objectcreate関数は多くの引数を持っていますので、引数を間違えないように注意深く設定しましょう。
コメントを残す