オブジェクトの種類ごとに取得できる情報のチェック
公開日:2019/03/21
今日は時間があったので、インジゲーターの開発と検証などを行っていました。
最近、Pythonの勉強ばかりで、MQLのコードをあまり書いていなかったせいか、
構文エラーが目立ちます...。
やっぱり、Pythonはコードが省略されて書かれているので、MQLで書き忘れてしまいます。。
まあ、PythonとMQLの連動をしてみたいので、しばらく我慢ですね。
少し話がそれてしまいましたが、今回は、
オブジェクトの種類ごとに情報を取得して、取得した情報のチェックをしていきます。
今まで、オブジェクトを利用したインジゲーターの作り方や、
オブジェクトの値などを取得する方法をいくつかご紹介してきました。
今回は、オブジェクトの種類、作り方によって取得したい情報がしっかり取得できるかを、
それぞれのオブジェクトの簡易的な作り方とその情報の取得について、紹介しながら検証していきます。
理解している方にとっては、必要のない情報かもしれませんが、
備忘録として残しておきます。
以下から作成過程などを説明していきます。
オブジェクトの作成
今回は、3つのオブジェクトを例として使うために作ってみました。
1.矢印のオブジェクト
2.四角形のオブジェクト
3.文字(テキスト)のオブジェクト
1つずつ、作り方とどういう表示になるかを実行しながら見ていきます。
■1.矢印のオブジェクト
ます、1つ目のオブジェクトは、定番の矢印のオブジェクトです。
矢印のオブジェクトの作り方は以前、ご紹介したので、ここでは簡単に説明します。
string obj_name1 = "obj_name1"
ObjectCreate(obj_name1,OBJ_ARROW,0,0,0);
ObjectMove(obj_name1,0,Time[1],Low[1]);
ObjectSet(obj_name1, OBJPROP_ARROWCODE, 233);
ObjectSet(obj_name1, OBJPROP_WIDTH,5);
ObjectSet(obj_name1, OBJPROP_COLOR, Red);
コードはこんな感じで簡単に作ることができます。
参考記事:
オブジェクトでインジゲーターを作る方法【矢印サイン版】
表示結果は、以下のようになります。
今回は、1本前の足の安値の下に上向きの赤い矢印オブジェクトを作ってみました。
■2.四角形のオブジェクト
2つ目のオブジェクトも最近よく使っていますが、四角形のオブジェクトです。
作成コードは以下のようになります。
string obj_name2 = "obj_name2";
ObjectCreate(0,obj_name2,OBJ_RECTANGLE_LABEL,0,0,0);
ObjectSetInteger(0,obj_name2,OBJPROP_CORNER,CORNER_LEFT_UPPER);
ObjectSetInteger(0,obj_name2,OBJPROP_XDISTANCE,30);
ObjectSetInteger(0,obj_name2,OBJPROP_YDISTANCE,30);
ObjectSetInteger(0,obj_name2,OBJPROP_XSIZE,200);
ObjectSetInteger(0,obj_name2,OBJPROP_YSIZE,200);
ObjectSetInteger(0,obj_name2,OBJPROP_BGCOLOR,clrBlue);
参考記事:
オブジェクトで四角形を描いて装飾をする
表示結果は以下のようになります。
チャートウインドウの左上を基点にX座標とY座標を指定して四角形を作りました。
■3.文字(テキスト)のオブジェクト
3つ目のオブジェクトもよく使いますが、文字(テキスト)のオブジェクトです。
こちらのコードは以下のようになります。
string obj_name3 = "obj_name3";
ObjectCreate( obj_name3,OBJ_LABEL,0,0,0);
ObjectSetInteger(0,obj_name3,OBJPROP_CORNER,CORNER_LEFT_LOWER);
ObjectSet(obj_name3,OBJPROP_XDISTANCE,30);
ObjectSet(obj_name3,OBJPROP_YDISTANCE,30);
ObjectSetText(obj_name3,"test",20,"MS ゴシック",clrWhite);
参考記事:
オブジェクトでスプレッドをチャートに表示させる
参考記事:
オブジェクトの表示位置を指定する
表示結果は以下のようになります。
こちらは、チャートウインドウの左下を基点にX座標とY座標を指定して表示しました。
以上が今回、例として使うオブジェクトになります。
オブジェクトの情報を取得する
次に上記で作ったオブジェクトの情報を取得する方法についてです。
同じ処理になるので、for文とかで繰り返させた方が楽なんですけど、
わかりやすいように、1つずつ、説明していきます。
今回もオブジェクトの情報を取得するファイルはEAファイルとして作成していきます。
■1.矢印のオブジェクト情報
まず、1つ目の矢印オブジェクトの情報を取得していきます。
コードは以下のようになります。
今回、利用する変数は共通で用意しておきます。
datetime obj_time1=0;
double obj_price1=0;
color obj_color1=0;
int obj_style1=0;
int obj_width1=0;
int obj_code1=0;
int obj_fontsize1=0;
color obj_bgcolor=0;
string obj_text=0;
ここから、1つ目の矢印オブジェクトの情報を取得するコードになります。
obj_time1=ObjectGet("obj_name1",OBJPROP_TIME1); //オブジェクトの時間
obj_price1=ObjectGet("obj_name1",OBJPROP_PRICE1); //オブジェクトの価格
obj_color1=ObjectGet("obj_name1",OBJPROP_COLOR); //オブジェクトの色の値
obj_style1=ObjectGet("obj_name1",OBJPROP_STYLE); //オブジェクトの線種
obj_width1=ObjectGet("obj_name1",OBJPROP_WIDTH); //オブジェクトの線の幅
obj_code1=ObjectGet("obj_name1",OBJPROP_ARROWCODE); //オブジェクトのアローコード
obj_fontsize1=ObjectGet("obj_name1",OBJPROP_FONTSIZE); //オブジェクトのフォントサイズ
obj_bgcolor=ObjectGet("obj_name1",OBJPROP_BGCOLOR); //オブジェクトの背景色
obj_text=ObjectDescription("obj_name1"); //オブジェクトの情報
Print("時間:"+obj_time1);
Print("価格:"+obj_price1);
Print("色:"+obj_color1);
Print("線種:"+obj_style1);
Print("線幅:"+obj_width1);
Print("アローコード:"+obj_code1);
Print("フォントサイズ:"+obj_fontsize1);
Print("背景色:"+obj_bgcolor);
Print("情報"+obj_text);
このような感じでコードを書きました。
参考記事:
オブジェクトの名前や値を取得する方法
上部で、ObjectGetを利用して、オブジェクトの各情報を取得して、
下部で、取得した情報をPrintでログに表示します。
2つ目と3つ目のオブジェクト情報を取得する方法もオブジェクト名以外、
上記と同じになるので、省略させていただきます。
それでは、作成したオブジェクトのインジゲーターとオブジェクトの情報を取得するEAを動かしていきます。
実行結果
まず、最初にオブジェクトを表示するインジゲーターを起動すると以下のように、
チャート上に3つのオブジェクトが表示されます。
次に、オブジェクトの情報を取得するEAを動かすとログに以下のように表示されます。
1.矢印オブジェクトの情報
下から見ていくと、
時間:矢印オブジェクトが表示されている時間
価格:矢印オブジェクトが表示されている価格
色:矢印オブジェクトの色(赤色)
線種:今回は指定していない
線幅:矢印オブジェクトの太さ(大きさ、幅)
アローコード:上向き矢印は233
フォントサイズ:今回は指定していない
背景色:今回は指定していないが、clrBlackが入っている...
情報:今回は指定してない
というようにオブジェクトの情報を取得できました。
今回、指定してない情報もありましたが、取得できなかったものは、
変数を宣言している部分で0を入れてあるか、空っぽにしてあるので、そのまま情報が表示されています。
2.四角形オブジェクトの情報
時間:今回は指定していない
価格:今回は指定していない
色:四角形オブジェクトの線の色。今回指定してないが、clrGrayが入っている...
線種:今回は指定していない
線幅:四角形オブジェクトの線の太さ(幅)
アローコード:今回は指定していない
フォントサイズ:今回は指定していないが、10が入っている...
背景色:オブジェクトの背景色(青色)
情報:今回は指定していないが、RectangleLabel(四角形)を取得している...
3.文字(テキスト)オブジェクトの情報
時間:今回は指定していない
価格:今回は指定していない
色:文字テキストオブジェクトの線の色(白色)
線種:今回は指定していない
線幅:今回は指定していないが、1が入っている
アローコード:今回は指定していない
フォントサイズ:フォントサイズ、20を取得
背景色:オブジェクトの背景色。今回は指定していないが、clrBlackが入っている...
情報:インジゲーターで、"test"と指定しているので、ちゃんと取得できている
このように、各オブジェクトの情報を取得できました。
ただ、疑問に思う部分もいくつかありました。
例えば、インジゲーターで指定していない情報が勝手に入っているということ。
指定しないと、自動的にデフォルト値みたいなものが入ってしまうのかな?
EA化するときには、自分でほしい情報が取得できれば問題ないと思うので、
これの追求については、今回スルーします。
あとは、注意する点として、
色情報を取得するときは、取得したいオブジェクトが何で作られているかを知る必要がありそうです。
今回の例でいうと、矢印オブジェクトと文字テキストオブジェクトの色は、
OBJPROP_COLORで色情報(赤色と白色)を取得していましたが、
四角形オブジェクトでは、
OBJPROP_BGCOLORで色情報(青色)を取得しているので、
EAなどで情報を取得するときは、気をつけたほうが良さそうです。
参考記事:
オブジェクトのメーターの状態を色情報でチェックする
まとめ
いかがだったでしょうか?
今回は、オブジェクトの種類ごとに情報を取得してみましたが、
それぞれ、どのような情報が取得できるかをチェックすることができました。
とくに色情報については、注意が必要なので、今回、検証できてよかったです。
今後、EA化するときの参考になるかと思います。
次回以降、また気づいたことや作成したインジゲーターなどを紹介していきたいと思います。
それでは、また。
今回使用したMQL一覧
関連ページ