オブジェクトの名前や値を取得する方法
公開日:2018/11/28
前回、矢印サインがオブジェクトで表示されるインジゲーター「CROSS MA」を作成しました。
これができるようになったので、インジゲーターを作るときは同じロジックでも、2種類のインジゲーターを作ることができるようになりました。
一般的な、iCustomで値が取得できるインジゲーターと、
iCustomでは値が取得できないオブジェクトで矢印サインなどを表示させるインジゲーターです。
参考記事:
オブジェクトでインジゲーターを作る方法【矢印サイン版】
ここで、問題発生です。
iCustomで値が取得できれば、自分でEA化することができるようになりましたが、
オブジェクトで作ったインジゲーターの矢印サインなどの値は取得できません。
作り方が違うものは同じやり方で値を取得できないんです。
なかなか厄介です。
そこで、今回やってみようと思ったことが、
オブジェクトの名前と値を取得する
ということです。
これができるようになると、基本的にどんなインジゲーターでも値が取得できるようになるので、
EA化することができるようになります。
一般的に無料で配布されているものや有料で販売されているインジゲーターは、
ロジックがブラックボックスのものもありますけど、
どのインジゲーターもチャート上に何かを表示しなければ、
インジゲーターとしての機能を果たすことができませんので、
この方法さえ知っていれば、EAがなくても自分で作ることができます。
完璧ですね。
ということで、早速、オブジェクトの名前や値を取得してみたいと思います。
以下から作成過程などを説明していきます。
オブジェクトの名前を取得する
今回は、前回オブジェクトで作成した「CROSS MA」を参考例として使っていきます。
まず、オブジェクトの名前を取得してみます。
CROSS MAは自分で作ったので、オブジェクトの名前は分かりますが、分からない場合は以下のようなコードで取得していきます。
①for(int i = 0; i < ObjectsTotal(); i++)
{
②string obj_name = ObjectName(i);
③Print(obj_name);
}
①for (int i=0; i < ObjectsTotal(); i++)
for文でオブジェクトの数分繰り返し処理します。ObjectTotalで表示されているオブジェクトの総数をチェックしています。
②string obj_name = ObjectName(i);
string型の変数「obj_name」にObjectName()でオブジェクト名を取得して代入します。
③Print(obj_name);
取得したオブジェクト名をPrintを使ってログに表示します。
すごく短いコードですが、以上です。
これをコンパイルして実行すると以下のような結果になります。
参考MQL:
ObjectsTotal
参考MQL:
ObjectName
参考MQL:
Print
実行結果
ログに取得したオブジェクト名が表示されました。
CROSS MAのオブジェクト名は、「obj」という文字列と、
オブジェクトが表示されている足が現在の足から何本目かを合体させた名前になっています。
例:現在の足なら、「obj0」、5本前の足なら「obj6」という名前になります。
このときのチャートは以下のようになっています。
ちなみに取得するオブジェクト名は、チャート上に表示されているオブジェクトの名前だけを取得します。
オブジェクトの指定した値を取得する
次に、オブジェクトの値を取得してみたいと思います。
今回は、オブジェクトの価格を取得して、ログに表示していきます。
先ほどの、オブジェクト名を取得するコードに以下のようなコードを追加します。
①double obj_price = ObjectGet(obj_name,OBJPROP_PRICE1);
②Print(obj_price);
①double obj_price = ObjectGet(obj_name,OBJPROP_PRICE1);
double型の変数「obj_price」にObjectGetで取得した値を代入します。ここでは、価格を指定しています。
②Print(obj_price);
取得したオブジェクトの値(価格)をPrintを使ってログに表示します。
こちらもすごく短いコードですが、以上です。
とりあえず、ここまでをコンパイルして実行してみます。
参考MQL:
ObjectGet
参考MQL:
Print
実行結果
オブジェクト名とオブジェクトの値(価格)がログに表示されました。
このときのチャートは以下のようになっています。
まとめ
いかがだったでしょうか?
今回は、オブジェクトの名前と値(価格)を取得してログに表示させてみました。
思ったよりも簡単に短いコードで書くことができました。
これで、オブジェクトで作成されているインジゲーターの値も取得できるようになったので、
あとは条件文や注文、決済処理を追加していけば、EA化することができます。
もう、なんでもEA化できちゃいそうですね。
ということで、次回は、オブジェクトのインジゲーターをEA化してみたいと思います。
そろそろインジゲーターの作成に戻りたいですが...
ここまで来たので、頑張ってEA化します。
それでは、また。
今回使用したMQL一覧
関連ページ