
MQL4MQL5 イベント関数
OnChartEvent()
- できること
- クリック・キー入力などチャート上の操作があると呼ばれる
- 対応
- MQL4・MQL5
OnChartEvent() とは
チャート上でのクリック、キー入力、オブジェクトのクリック・ドラッグなどが起きたときに呼ばれる関数です。ボタン(OBJ_BUTTON)を押したら注文する、といった操作パネルを作るときに使います。EA とインジケーターで使えます。
OnChartEvent() の書式と引数
void OnChartEvent(
const int id,
const long &lparam,
const double &dparam,
const string &sparam
)| 引数 | 型 | 省略時 | 説明 |
|---|---|---|---|
id | const int | 必須 | イベントの種類。CHARTEVENT_OBJECT_CLICK(オブジェクトのクリック)、CHARTEVENT_KEYDOWN(キー入力)、CHARTEVENT_CLICK(チャートのクリック)など。 |
lparam | const long & | 必須 | イベントの種類ごとの値(long)。クリックならX座標、キー入力ならキーコード。 |
dparam | const double & | 必須 | イベントの種類ごとの値(double)。クリックならY座標。 |
sparam | const string & | 必須 | イベントの種類ごとの値(string)。オブジェクトのイベントならオブジェクト名。 |
戻り値
なし
OnChartEvent() の使い方(コード例)
MQL4・MQL5 共通
int OnInit()
{
ObjectCreate(0, "BtnHello", OBJ_BUTTON, 0, 0, 0);
ObjectSetInteger(0, "BtnHello", OBJPROP_XDISTANCE, 20);
ObjectSetInteger(0, "BtnHello", OBJPROP_YDISTANCE, 30);
ObjectSetInteger(0, "BtnHello", OBJPROP_XSIZE, 120);
ObjectSetInteger(0, "BtnHello", OBJPROP_YSIZE, 30);
ObjectSetString(0, "BtnHello", OBJPROP_TEXT, "押してください");
return INIT_SUCCEEDED;
}
void OnDeinit(const int reason)
{
ObjectDelete(0, "BtnHello");
}
void OnTick()
{
}
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
if(id == CHARTEVENT_OBJECT_CLICK && sparam == "BtnHello")
{
Print("ボタンが押されました");
ObjectSetInteger(0, "BtnHello", OBJPROP_STATE, false); // 押された状態を戻す
ChartRedraw();
}
}MetaEditor でコンパイルできることを確認済みです。
OnChartEvent() の注意点
- マウスの移動(CHARTEVENT_MOUSE_MOVE)を受け取るには、ChartSetInteger(0, CHART_EVENT_MOUSE_MOVE, true) を先に呼んでおく必要があります。
- ボタンは押すと押された状態(OBJPROP_STATE が true)のままになります。押したあとに ObjectSetInteger(0, 名前, OBJPROP_STATE, false) で戻します。
- ストラテジーテスターではチャートイベントは発生しません。












