(‘both’, ‘MQL4 / MQL5 両対応’)イベントハンドラパネル操作
目次
OnChartEventクリック・ドラッグ・キー入力のたびに呼ばれる
チャート上のクリック・オブジェクトのドラッグ・キー入力等が起きるたびに呼ばれる。自作のボタン・パネルを操作可能にするには、ほぼ必ずここに処理を書く。
1書式
void OnChartEvent( const int id, // イベントの種類 const long &lparam, // 整数の付加情報 const double &dparam, // 小数の付加情報 const string &sparam // 文字列の付加情報 );
書式はMQL4・MQL5で同じ。lparam/dparam/sparamは参照渡し(&)で宣言する(下記の罠を参照)。
2引数
| 引数 | 内容 |
|---|---|
| id | イベントの種類。CHARTEVENT_CLICK(チャートのクリック)・CHARTEVENT_OBJECT_CLICK(オブジェクトのクリック)等 |
| lparam / dparam / sparam | イベントの種類ごとに意味が変わる付加情報。オブジェクトクリックならsparamにオブジェクト名が入る |
3戻り値
戻り値は無し(void)。
4使用例
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
if(id == CHARTEVENT_OBJECT_CLICK && sparam == "mybutton")
{
Print("ボタンが押されました");
ObjectSetInteger(0, "mybutton", OBJPROP_STATE, false);
}
}
MetaEditorでコンパイル0エラー・0警告を確認済み。
6よくある罠
⚠ 実務で踏んだもの
lparam・dparam・sparamを参照渡し(&)で宣言し忘れると、コンパイルは警告止まりで通ってしまうのに、実行時に一度も呼ばれない。(実機で確認済み:値渡しのままだと warning 70 が出て、クリックしても反応しない)- ボタン(
OBJ_BUTTON)は押すとON状態のまま固定される。ObjectSetIntegerでOBJPROP_STATEをfalseに戻す処理を書かないと、見た目が押しっぱなしのままになる。 sparamでオブジェクト名を比較するとき、前方一致で済ませるつもりが完全一致になっていて反応しない、といった取り違えが起きやすい。
7関連する関数
MORNING BRIEF平日 毎朝7時までに更新
今日はどこを見ればいいか。
ドル円とユーロドルの主要ライン・予想高値安値を、平日の朝に図1枚にまとめています。
朝刊を見る→9/25 8:27 時点ドル円158.78▼-7 pipsドル円 予想レンジ158.41 〜 159.23ドル円 上の節目158.90▲ドル円 下の節目157.80▼ユーロドル1.1378▼-2 pipsユーロドル 予想レンジ1.1351 〜 1.1408ユーロドル 上の節目1.1403▲ユーロドル 下の節目1.1359▼きょうの指標重要指標なし