オブジェクトを検索したい!

オブジェクトの検索

MQL4によるプログラムでは、チャート上にオブジェクトが存在するかどうか、また存在する場合はどのウィンドウ(メインチャートや各種サブウィンドウ)に表示されているのか、という情報を取得することが出来ます。この情報を使用することで、例えば「チャートに水平線が表示されている場合」や「矢印が表示されている場合」というような条件を判断し、オブジェクトが存在する場合のみ何らかの処理を行うことが可能となります。

オブジェクトの検索を行うObjectFind関数

オブジェクトを検索するには、MQL4で提供されているObjectFind関数を使用します。

int ObjectFind(
    long   chart_id,        // chart ID
    string object_name      // object name
);

引用元:ObjectFind – MQL4 Reference

引数

chart_id

第一引数であるchart_idには、検索対象となるチャートIDを指定します。MQL4プログラムが設定されたチャートの場合はChartID関数でチャートIDを取得できるためChartID関数の戻り値、または「0」を指定します。それ以外のチャートの場合は検索対象のオブジェクトが表示されているチャートIDを取得して指定します。

object_name

第二引数であるobject_nameには、検索対象となるオブジェクトの名前を指定します。

戻り値

指定した名前のオブジェクトが存在する場合は、表示されているウィンドウの番号が返却されます。ローソク足が表示されているメインウィンドウにオブジェクトが存在する場合は「0」、サブウィンドウに存在する場合はサブウィンドウの番号(一番上のサブウィンドウが「1」)となります。なお、存在しない場合は「-1(EMPTY)」が返却されます。

使用例

1.オブジェクトがチャートに存在するかどうかを判断

if (ObjectFind(ChartID(), "TREND") != EMPTY)
{
    PlaySound("alert.wav");
}

「TREND」という名前のオブジェクトがチャート上(メインウィンドウまたはサブウィンドウのいづれか)に存在するかどうかを判定し、存在する場合は音を鳴らします。

2.オブジェクトが2番目のサブウィンドウに存在するかどうかを判断

if (ObjectFind(ChartID(), "TREND") == 2)
{
    PlaySound("alert.wav");
}

「TREND」という名前のオブジェクトが2番目のサブウィンドウに存在するかどうかを判定し、存在する場合は音を鳴らします。

チャートIDの省略

ObjectFind関数では、第一引数であるチャートIDを省略することが出来ます。省略した場合は、MQL4プログラムが設定されたチャートからオブジェクトを検索します。つまり、第一引数にChartID関数の戻り値、または「0」を指定した場合と同じ動作となります。

まとめ

オブジェクトを検索するにはObjectFind関数を使用する
第一引数は検索するオブジェクトが表示されているチャートのID
第二引数は検索するオブジェクトの名前
戻り値はオブジェクトが存在するウィンドウ番号
オブジェクトが存在しない場合は「-1(EMPTY)」が返却される

参考URL

ObjectFind – MQL4 Reference
https://docs.mql4.com/objects/objectfind