【MQL4】自作「ボタン」の処理をプログラムする方法

前回は、ボタンを作成する方法をご紹介しました。

今回は、ボタンの「処理」をプログラムする方法をご紹介します。

そもそも、ボタンを作成するメリットは「処理を自動化できる」ことにあります。

複数の処理を一括して自動化することも可能です。

これを機に、面倒だった手作業を自動化しちゃいましょう。

スポンサーリンク

OnChartEventでボタンの処理をプログラム

OnChartEvent関数は、チャートに何かしらの変更があった場合に実行されます。

ボタンを押した(クリック)ときにも、OnChartEventが実行されます。

void OnChartEvent(
   const int id,          // イベントID
   const long &lparam,    // long型イベントパラメータ
   const double &dparam,  // double型イベントパラメータ
   const string &sparam   // string型イベントパラメータ
);

このOnChartEvent関数に、ボタンを押されたときに実行したい処理を記述してあげればOKです。

ボタンが押されたときの処理コード

OnChartEvent関数は、チャートに何か変化があった場合に実行されるとお伝えしました。

クリック以外にも、マウスを動かしたとき、キーボードが押されたときなどにも実行されます。

そのため、どんな操作が行われたか判断する必要があります。

コード例)

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

   if( id == CHARTEVENT_OBJECT_CLICK )  // オブジェクトがクリックされたか判定
   {

       if( sparam == "BUYbtn" ){  // クリックされたのが、自作「ボタン」か判定


           //
           // ここに実行したい処理を記述
           //


           Sleep(80);
           ObjectSetInteger(0,sparam,OBJPROP_STATE,0);  // ボタン戻す
       }
   }
}

「id」で、どんな操作がされたかを判定します。
「sparam」で、オブジェクト名から「ボタン」を特定します。

実は、押されたボタンは、押されたままの状態になっています。
そこで、ボタンを戻してあげる必要があります。

「ObjectSetInteger」で、ボタンが押されていない状態に戻します。

Sleep関数を使って、少し時間をおいてから戻すのがポイントです。
時間をおかないと、ボタンが押されたことが分からないほど、瞬間的にボタンが戻るからです。

OnChartEventのイベントID

オブジェクトのクリックイベント以外にも、下記の操作が行われた場合、OnChartEvent関数が実行されます。

CHARTEVENT_KEYDOWNチャートウィンドウがフォーカスされている時のキー押下
CHARTEVENT_MOUSE_MOVEマウスの移動、マウスボタンクリック
CHARTEVENT_OBJECT_CREATEグラフィックオブジェクトの作成
CHARTEVENT_OBJECT_CHANGEプロパティダイアログを介してのオブジェクトプロパティ変更
CHARTEVENT_OBJECT_DELETEグラフィックオブジェクト削除
CHARTEVENT_CLICKチャートのクリック
CHARTEVENT_OBJECT_CLICKチャートに属するグラフィックオブジェクトでのマウスクリック
CHARTEVENT_OBJECT_DRAGマウスを使用してのグラフィカルオブジェクトのドラッグ
CHARTEVENT_OBJECT_ENDEDITグラフィックオブジェクトの入力ボックスのテキスト編集
CHARTEVENT_CHART_CHANGEチャート変更

ボタン以外にも必要な操作で処理を実行できるので、試してみると良いですね。

タイトルとURLをコピーしました