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++;// カウンタを増加させることを忘れない
    }
 }
//+------------------------------------------------------------------+

参照

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