「Test_ChartEvent.mq4」エキスパートアドバイザーは、様々な種類のChartEventを示す例です。キーボードのキーイベント、マウスのクリックや移動イベント、カスタムイベントが含まれています。ヘルプを表示するには「H」キーを押し、マウス移動イベントモードに入るには「M」キーを押してください。
このソースコードはMetaTrader 4とMetaTrader 5の両方で動作します。
関数プロトタイプ
- bool Obj_Create()
- bool Obj_Delete()
- bool Obj_Move(int hSens,int vSens) - オブジェクトを移動します。
- void Print_Info() - オブジェクトに関する情報を表示します。
- int MouseMove(int aXX,int aYY,string sState) - マウス移動イベントを処理します。
グローバル変数
- int gChartNo=0
- int gSubWinNo=0
- string gsObj_Name_selected="" - 現在選択されているオブジェクトの名前。
カスタムイベント
以下の3種類のカスタムイベントが定義されています:
- #define cMyEvent_1 0
- #define cMyEvent_2 1
- #define cMyEvent_3_broadcast 2
OnTimer()関数
この関数はカスタムChartEventを定期的に作成します。特に、cMyEvent_3_broadcastイベントはすべてのオープンチャートウィンドウに対して生成されます。
クラスの例
クラス「CObjectMan」はチャート上のオブジェクトの機能を処理するために作成されました。このクラスのインスタンス(変数)が2つ宣言されています:gObjectMan1とgObjectMan2。
これらの2つのインスタンスにリンクされたグラフィックオブジェクトの名前は、それぞれ「グリーンボタン」と「イエローボタン」です。
イベント処理
void OnChartEvent():
「CHARTEVENT_KEYDOWN」イベント:
- 4方向キー(矢印)またはデジタルパネルの4方向キーで選択されたオブジェクトを移動します。
- 「H」: ヘルプ情報を表示します(エキスパートログウィンドウに)。
- 「I」: 2つのオブジェクトの位置情報を表示します。
- 「M」: MOUSE_MOVEイベントをアクティブにします。
カスタムイベント
これらのイベントに関する情報を表示します。特にMyEvent_3_broadcastイベントについてです。
オブジェクトイベント
- CHARTEVENT_OBJECT_CHANGE, CHARTEVENT_OBJECT_DRAG, CHARTEVENT_OBJECT_DELETE - 対応するオブジェクトの名前を表示します。
- CHARTEVENT_OBJECT_CLICK - クリックされたオブジェクトの名前を表示し、方向キーで移動できるようにします。
マウスイベント
- CHARTEVENT_CLICK - クリックされたバーの情報を表示します:価格(始値、終値)とバーの時間。
- CHARTEVENT_MOUSE_MOVE - カバーされた間隔の情報を表示します:バーの数、価格変動。

デモンストレーション
次のテストを実行できます:
- 2つのオブジェクト(ボタン)のいずれかをクリックして選択し、矢印キーを使用して選択したオブジェクトを移動します。
- グラフィックバーをクリックし、ログタブにバーの情報を表示します(メッセージ)。
- 「M」キーを押してMOUSE_MOVEイベントモードに入ります。Ctrl+Fを押してクロスヘアを表示し、ドラッグ&ドロップ操作を行います。ログメッセージが表示されない場合は、入力パラメーター「iLogLevel」を変更してください。