MQL4のチャートイベントの順番とは?

チャートイベントに実行される順番を知ってるだお?

今回は、標準の順番を紹介します。

CHARTEVENT_KEYDOWN0
CHARTEVENT_OBJECT_CLICK1
CHARTEVENT_OBJECT_DRAG2
CHARTEVENT_OBJECT_ENDEDIT3
CHARTEVENT_CLICK4
CHARTEVENT_OBJECT_DELETE6
CHARTEVENT_OBJECT_CREATE7
CHARTEVENT_OBJECT_CHANGE8
CHARTEVENT_CHART_CHANGE9
CHARTEVENT_MOUSE_MOVE10

このような順番に、OnChartEvent関数が実行されます。
複数のイベントを扱う場合は、この順番を気を付けて使ってください。

例えば、下記のように書きました。

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {

    static int s_count = 0;
    s_count++;
    if(id == CHARTEVENT_CLICK)
    {
        Print("CLICK : ", s_count);
    }

    if(id == CHARTEVENT_OBJECT_CLICK)//オブジェクトをクリック
    {
        Print("OBJECT_CLICK : ", s_count);
    }
}

さて、この状態でオブジェクトをクリックすると、s_countはどのように加算されていくでしょうか?

直感的に言えば、オブジェクトをクリックするたびに、

CLICK : 1
OBJECT_CLICK : 2

このようになると思っていませんか?

残念ながら、順番は逆で、

OBJECT_CLICK : 1
CLICK : 2

このような順番で出力されます。

他にもCHARTEVENT_MOUSE_MOVEが動いたりしてしますので、
順番通りには出力されず、もっと大きな数字になります。

少しでも意図した動きをさせるように、詳しく調べていきましょう!

明日も書いていくのお楽しみにだお!

Twitterでフォローしよう

おすすめの記事