イベント関数

EventSetMillisecondTimer

この関数はクライアント端末にこのエキスパートアドバイザーまたは指標のためのタイマー イベントは1秒未満の間隔で生成されるべきだと示します。

bool  EventSetMillisecondTimer(
int  milliseconds      // ミリ秒数
);

パラメータ

milliseconds

[in]  タイマーイベントの頻度を定義するミリ秒数

戻り値

実行成功の場合は true、それ以外の場合は falseエラーコードを受け取るには GetLastError() 関数が呼ばれるべきです。

注意事項

この機能は、高分解能タイマーが必要な場合のために設計されています。言い換えると、タイマーイベントは1秒に1回よりも頻繁に受信する必要があります。1秒以上の時間軸を持つ従来のタイマーが充分である場合 EventSetTimer() が使用されます。

ストラテジーテスターでは、最小で1000ミリ秒の間隔が使用されます。一般的に、タイマー期間が減少する際にはタイマーイベントのハンドラがより頻繁に呼び出されるようにテスト時間が増加します。リアルタイムモードで操作している場合、タイマーイベントは、ハードウェアの制約のために10〜16ミリ秒に1回以下で生成されます。

通常、この関数は OnInit() 関数またはクラスコンストラクタで呼ばれるべきです。タイマーからのイベントを処理するには、エキスパートアドバイザーまたは指標は OnTimer() 関数を持つべきです。

それぞれのエキスパートアドバイザーと指標は独自のタイマーを操作しそのタイマーのみからイベントを受信します。MQL5 プログラムが停止した場合、作成されて EventKillTimer() 関数で無効にされていないタイマーは強制的に破壊されます。

1 つのプログラムでは 1 つのタイマーのみが起動出来ます。各MQL5アプリケーションとチャートは、新たに到着したイベントが配置される独自のイベントキューを持っています。キューにすでにタイマーイベントがある、またはこのイベントが処理段階にある場合、新しいタイマーイベントは MQL5 アプリケーションキューには追加されません。

EventSetTimer

この関数はクライアント端末にこのエキスパートアドバイザーまたは指標のためのタイマーイベントは指定された時間軸で生成するべきだと示します。

bool  EventSetTimer(
int  seconds      // 秒数
);

パラメータ

seconds

[in] タイマーイベントの発生頻度を決定する秒数

戻り値

成功の場合は true、それ以外の場合は false。エラーコードを受け取るには GetLastError() 関数が呼ばれるべきです。

注意事項

通常、この関数は OnInit() 関数またはクラスコンストラクタで呼ばれるべきです。タイマーからくるイベントを処理するために,エキスパートアドバイザーはOnTimer() 関数を持つべきです。

エキスパートアドバイザーならびに指標は、全て独自のタイマーで動作しそこからのみイベントを受けとります。作成されたタイマーは EventKillTimer() 関数で無効にされていない限り MQL5 プログラムの操作の終了時に強制的に破壊されます。

プログラムでは複数のタイマーを実行することは出来ません。各MQL5アプリケーションとチャートは、新たに到着したイベントが配置されるイベントの独自のキューを持っています。タイマーイベントがキューに存在するまたは処理中の場合、新しいタイマーイベントは MQL5 プログラムのキューに加えられません。

EventKillTimer

Timer イベントの発生を停止する必要があるクライアント端末を指定します。

void  EventKillTimer();

戻り値

なし

注意事項

この関数は、一般的に、EventSetTimer() 関数がOnInit() 関数から呼ばれた場合、OnDeinit().関数から呼ばれなければなりません。EventSetTimer() 関数がクラスのコンストラクタで呼び出されている場合、この関数はデストラクタからも呼び出せます。

エキスパートアドバイザーならびに指標は、全て独自のタイマーで動作しそこからのみイベントを受けとります。作成されたタイマーは EventKillTimer() 関数で無効にされていない限り MQL5 プログラムの操作の終了時に強制的に破壊されます。

EventChartCustom

この関数は指定されたチャートのカスタムイベントを生成します。

bool  EventChartCustom(
long    chart_id,            // イベントを受け取るチャートの識別子
ushort  custom_event_id,    // イベント識別子
long    lparam,              // long 型のパラメータ
double  dparam,              // double型のパラメータ
string  sparam              // イベントの string パラメータ
);

パラメータ

chart_id

[in] チャート識別子( 0 は現在のチャート)

custom_event_id

[in] ユーザイベントの ID。この識別子は自動的に CHARTEVENT_CUSTOM 値に足され、整数型に変換されます。

lparam

[in] OnChartEvent 関数に渡される long 型のイベントパラメータ

dparam

[in] OnChartEvent 関数に渡される double 型のイベントパラメータ

sparam

[in] OnChartEvent 関数に渡される string 型のイベントパラメータ(文字列が 63 文字より長い場合は切り捨てられます)

戻り値

カスタムイベントがイベントを受信するチャートのイベントキューに正常に配置された場合は true を返します。失敗の場合 false を返します。エラーコードを取得するには GetLastError() を使用します。

注意事項

エキスパートアドバイザや特定のチャートに付属する指標は OnChartEvent(int event_id, long& lparam, double& dparam, string& sparam) を使用してイベントを処理します。

OnChartEvent() 関数の入力パラメータはイベントの種類ごとにイベント処理に必要とされる一定の値を有しています。パラメータで受け渡しされるイベントと値は以下の表に記載されています。

イベント

id パラメータ値

lparam パラメータ値

dparam パラメータ値

sparam パラメータ値

キーストロークイベント

CHARTEVENT_KEYDOWN

押されたキーのコード

繰り返し回数(ユーザのキーの長押しがキーストロークの繰り返しとみなされた場合の繰り返し回数)

キーボードボタンの状態を記述するビットマスクの文字列値

マウスイベント (チャートに CHART_EVENT_MOUSE_MOVE=true プロパティが設定されている場合)

CHARTEVENT_MOUSE_MOVE

X 座標

Y 座標

マウスボタンの状態を記述するビットマスクの文字列の値

グラフィックオブジェクトの作成イベント (CHART_EVENT_OBJECT_CREATE=true がチャートに設定された場合)

CHARTEVENT_OBJECT_CREATE

作成したグラフィックオブジェクトの名称

プロパティダイアログでのオブジェクトプロパティ変更イベント

CHARTEVENT_OBJECT_CHANGE

変更したグラフィックオブジェクトの名称

グラフィックオブジェクト削除イベント(チャートに CHART_EVENT_OBJECT_DELETE=true が設定された場合)

CHARTEVENT_OBJECT_DELETE

削除したグラフィックオブジェクトの名称

チャート上でのマウスクリックイベント

CHARTEVENT_CLICK

X 座標

Y 座標

チャートに属するグラフィックオブジェクトでのマウスクリックイベント

CHARTEVENT_OBJECT_CLICK

X 座標

Y 座標

イベントが発生したグラフィック•オブジェクトの名称

マウスを使用してグラフィックオブジェクトのドラッグイベント

CHARTEVENT_OBJECT_DRAG

移動したグラフィックオブジェクトの名称

LabelEdit グラフィックオブジェクトの入力ボックスでのテキスト編集完成のイベント

CHARTEVENT_OBJECT_ENDEDIT

テキスト編集が完成した LabelEdit グラフィックオブジェクトの名称

チャートでの変更イベント

CHARTEVENT_CHART_CHANGE

N 番号を使用したユーザイベントID

CHARTEVENT_CUSTOM+N

EventChartCustom() 関数で設定された値

EventChartCustom() 関数で設定された値

EventChartCustom() 関数で設定された値

例:

//+——————————————————————+
//|                                            ButtonClickExpert.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                             https://www.MQL5.com |
//+——————————————————————+
#property copyright “2009, MetaQuotes Software Corp.”
#property link     “https://www.mql5.com”
#property version   “1.00”

string buttonID=“Button”;
string labelID=“Info”;
int broadcastEventID=5000;
//+——————————————————————+
//| エキスパート初期化に使用される関数                                        |
//+——————————————————————+
int OnInit()
{
//— カスタムイベントを送信するボタンを作成する
ObjectCreate(0,buttonID,OBJ_BUTTON,0,100,100);
ObjectSetInteger(0,buttonID,OBJPROP_COLOR,clrWhite);
ObjectSetInteger(0,buttonID,OBJPROP_BGCOLOR,clrGray);
ObjectSetInteger(0,buttonID,OBJPROP_XDISTANCE,100);
ObjectSetInteger(0,buttonID,OBJPROP_YDISTANCE,100);
ObjectSetInteger(0,buttonID,OBJPROP_XSIZE,200);
ObjectSetInteger(0,buttonID,OBJPROP_YSIZE,50);
ObjectSetString(0,buttonID,OBJPROP_FONT,“Arial”);
ObjectSetString(0,buttonID,OBJPROP_TEXT,“Button”);
ObjectSetInteger(0,buttonID,OBJPROP_FONTSIZE,10);
ObjectSetInteger(0,buttonID,OBJPROP_SELECTABLE,0);

//— 情報を表示するラベルを作成する
ObjectCreate(0,labelID,OBJ_LABEL,0,100,100);
ObjectSetInteger(0,labelID,OBJPROP_COLOR,clrRed);
ObjectSetInteger(0,labelID,OBJPROP_XDISTANCE,100);
ObjectSetInteger(0,labelID,OBJPROP_YDISTANCE,50);
ObjectSetString(0,labelID,OBJPROP_FONT,“Trebuchet MS”);
ObjectSetString(0,labelID,OBJPROP_TEXT,“No information”);
ObjectSetInteger(0,labelID,OBJPROP_FONTSIZE,20);
ObjectSetInteger(0,labelID,OBJPROP_SELECTABLE,0);

//—
return(INIT_SUCCEEDED);
}
//+——————————————————————+
//| エキスパート初期化解除に使用される関数                                     |
//+——————————————————————+
void OnDeinit(const int reason)
{
//—
ObjectDelete(0,buttonID);
ObjectDelete(0,labelID);
}
//+——————————————————————+
//| エキスパートティック関数                                                 |
//+——————————————————————+
void OnTick()
{
//—

}
//+——————————————————————+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//— マウスボタンを押してイベントをチェックする
if(id==CHARTEVENT_OBJECT_CLICK)
{
string clickedChartObject=sparam;
//— buttonID の名称のオブジェクトをクリックした場合
if(clickedChartObject==buttonID)
{
//— ボタンの状態—押されたか放された
bool selected=ObjectGetInteger(0,buttonID,OBJPROP_STATE);
//— デバッグメッセージをログする
Print(“Button pressed = “,selected);
int customEventID; // 送信するカスタムイベントの数
string message;   // イベントで送られるメッセージ
//— ボタンが押された場合
if(selected)
{
message=“Button pressed”;
customEventID=CHARTEVENT_CUSTOM+1;
}
else // ボタンが押されていない
{
message=“Button in not pressed”;
customEventID=CHARTEVENT_CUSTOM+999;
}
//— カスタムイベントを「自分の」チャートに送る
EventChartCustom(0,customEventID-CHARTEVENT_CUSTOM,0,0,message);
///— メッセージを全てのチャートに送る
BroadcastEvent(ChartID(),0,“Broadcast Message”);
//— デバッグメッセージ
Print(“Sent an event with ID = “,customEventID);
}
ChartRedraw();// チャートオブジェクトの強制再描画
}

//— イベントがユーザイベントだとチェック
if(id>CHARTEVENT_CUSTOM)
{
if(id==broadcastEventID)
{
Print(“Got broadcast message from a chart with id = “+lparam);
}
else
{
//— イベントのテキストメッセージを読む
string info=sparam;
Print(“Handle the user event with the ID = “,id);
//— メッセージをラベルで表示する
ObjectSetString(0,labelID,OBJPROP_TEXT,sparam);
ChartRedraw();// チャートオブジェクトの強制再描画
}
}
}
//+——————————————————————+
//| 全ての開いているチャートにブロードキャストイベントを送信                           |
//+——————————————————————+
void BroadcastEvent(long lparam,double dparam,string sparam)
{
int eventID=broadcastEventID-CHARTEVENT_CUSTOM;
long currChart=ChartFirst();
int i=0;
while(i<CHARTS_MAX)                 // 開いているチャートは確実に CHARTS_MAX 以内
{
EventChartCustom(currChart,eventID,lparam,dparam,sparam);
currChart=ChartNext(currChart); // 前に新しいチャートを受け取った
if(currChart==-1) break;       // チャートリストの最後に達した
i++;// カウンタを増加させることを忘れない
}
}
//+——————————————————————+

参照

クライアント端末イベント、イベント処理関数

Originally posted 2019-07-30 09:45:12.

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">