【MQL5】ENUM_CHART_EVENT列挙型について

列挙と構造体
スポンサーリンク
スポンサーリンク
  1. ENUM_CHART_EVENT列挙型とは
  2. CHARTEVENT_KEYDOWN
    1. 説明
    2. lparam パラメータ値
    3. dparam パラメータ値
    4. sparam パラメータ値
  3. CHARTEVENT_MOUSE_MOVE
    1. 説明
    2. lparam パラメータ値
    3. dparam パラメータ値
    4. sparam パラメータ値
  4. CHARTEVENT_MOUSE_WHEEL
    1. 説明
    2. lparam パラメータ値
    3. dparam パラメータ値
    4. sparam パラメータ値
  5. CHARTEVENT_OBJECT_CREATE
    1. 説明
    2. lparam パラメータ値
    3. dparam パラメータ値
    4. sparam パラメータ値
  6. CHARTEVENT_OBJECT_CHANGE
    1. 説明
    2. lparam パラメータ値
    3. dparam パラメータ値
    4. sparam パラメータ値
  7. CHARTEVENT_OBJECT_DELETE
    1. 説明
    2. lparam パラメータ値
    3. dparam パラメータ値
    4. sparam パラメータ値
  8. CHARTEVENT_CLICK
    1. 説明
    2. lparam パラメータ値
    3. dparam パラメータ値
    4. sparam パラメータ値
  9. CHARTEVENT_OBJECT_CLICK
    1. 説明
    2. lparam パラメータ値
    3. dparam パラメータ値
    4. sparam パラメータ値
  10. CHARTEVENT_OBJECT_DRAG
    1. 説明
    2. lparam パラメータ値
    3. dparam パラメータ値
    4. sparam パラメータ値
  11. CHARTEVENT_OBJECT_ENDEDIT
    1. 説明
    2. lparam パラメータ値
    3. dparam パラメータ値
    4. sparam パラメータ値
  12. CHARTEVENT_CHART_CHANGE
    1. 説明
    2. lparam パラメータ値
    3. dparam パラメータ値
    4. sparam パラメータ値
  13. CHARTEVENT_CUSTOM
    1. 説明
    2. lparam パラメータ値
    3. dparam パラメータ値
    4. sparam パラメータ値
  14. CHARTEVENT_CUSTOM_LAST
    1. 説明
    2. lparam パラメータ値
    3. dparam パラメータ値
    4. sparam パラメータ値
    5. カスタムイベントの使用
  15. ENUM_CHART_EVENT列挙型を利用したサンプルコード
    1. 定数定義部分
      1. 定数定義の役割
      2. 各定数の説明
    2. OnInit関数部分
    3. 解説
    4. OnChartEvent関数その1
    5. 解説
      1. CHARTEVENT_CLICKイベント
      2. CHARTEVENT_OBJECT_CLICKイベント
    6. OnChartEvent関数その2
    7. 解説
      1. CHARTEVENT_KEYDOWNイベントの処理
    8. OnChartEvent関数その3
    9. 解説
      1. CHARTEVENT_OBJECT_DELETEイベント
      2. CHARTEVENT_OBJECT_CREATEイベント
      3. CHARTEVENT_OBJECT_DRAGイベント
      4. CHARTEVENT_OBJECT_ENDEDITイベント

ENUM_CHART_EVENT列挙型とは

ENUM_CHART_EVENT列挙型は、MQL5においてチャート上で発生するさまざまなイベントを表す定数を集めた列挙型です。これらのイベントは、ユーザーの操作やシステムの動作に応じて発生し、エキスパートアドバイザーEA)やインジケータがそれらのイベントに応答するために使用されます。

具体的には、キーボードのキー入力やマウスの移動、グラフィックオブジェクトの作成や削除、チャートのクリックなど、チャート上で起こる様々なアクションに対応するイベントIDが定義されています。これにより、プログラムは特定のイベントに対して適切な処理を実行できるようになります。

ENUM_CHART_EVENT列挙型の各イベント識別子は、OnChartEvent関数を通じて取得され、そのイベントに関連する詳細情報を引数として受け取ることで、柔軟なイベント処理が可能になります。

各イベント識別子は以下のように定義づけられています。

CHARTEVENT_KEYDOWN

説明

CHARTEVENT_KEYDOWNは、キーボードのキーが押されたときに発生するイベントです。このイベントは、OnChartEvent関数でキャッチされ、押されたキーのコードやその他の詳細情報を取得するために使用されます。このイベントを処理することで、特定のキー入力に対するカスタム動作を実装することができます。

lparam パラメータ値

lparamは、押されたキーのコードを表します。これは、キーの仮想キーコード(特定のキーに割り当てられた一意のコード)であり、どのキーが押されたかを識別するために使用されます。

dparam パラメータ値

dparamは、繰り返し回数を表します。ユーザーがキーを長押しした場合、dparamにはそのキーが繰り返し押された回数が含まれます。

sparam パラメータ値

sparamは、キーボードボタンの状態を記述するビットマスク(複数のビットを用いて複数の状態を一度に表す方法)の文字列値を表します。これは、特定の修飾キー(例えば、ShiftキーやCtrlキー)が押されているかどうかを示します。

これにより、CHARTEVENT_KEYDOWNイベントは、キーボード入力を詳細にキャッチし、それに応じた処理を行うことが可能になります。

CHARTEVENT_MOUSE_MOVE

説明

CHARTEVENT_MOUSE_MOVEは、マウスの移動やクリックが発生したときに発生するイベントです。このイベントは、チャートで CHARTEVENT_MOUSE_MOVEtrue に設定されている場合に有効になります。CHARTEVENT_MOUSE_MOVEイベントを処理することで、マウスの動きやクリックに応じたカスタム動作を実装することができます。

lparam パラメータ値

lparamは、マウスのX座標を表します。マウスがチャート上で移動したとき、またはクリックされたときのX座標の位置が含まれます。

dparam パラメータ値

dparamは、マウスのY座標を表します。マウスがチャート上で移動したとき、またはクリックされたときのY座標の位置が含まれます。

sparam パラメータ値

sparamは、キーボードとマウスボタンの状態に関する情報を含む文字列です。以下のビットがその状態を示します。

  • ビット1: マウスの左ボタンの状態
    • 押されている場合は1、押されていない場合は0です。
  • ビット2: マウスの右ボタンの状態
    • 押されている場合は1、押されていない場合は0です。
  • ビット3: SHIFTボタンの状態
    • 押されている場合は1、押されていない場合は0です。
  • ビット4: CTRLボタンの状態
    • 押されている場合は1、押されていない場合は0です。
  • ビット5: マウスの中央ボタンの状態
    • 押されている場合は1、押されていない場合は0です。
  • ビット6: マウスの追加ボタン1の状態
    • 押されている場合は1、押されていない場合は0です。
  • ビット7: マウスの追加ボタン2の状態
    • 押されている場合は1、押されていない場合は0です。

例えば、sparamの値が「00000101」の場合、ビット1とビット3が1になっているため、マウスの左ボタンとSHIFTボタンが押されていることを意味します。他のビットが0であるため、他のボタンは押されていないことがわかります。

これにより、CHARTEVENT_MOUSE_MOVEイベントは、マウスの移動やクリックだけでなく、キーボードやマウスボタンの状態の詳細もキャッチし、それに応じた処理を行うことが可能になります。
CHARTEVENT_MOUSE_MOVEイベントの挙動を確認できるサンプルコードについては↓の記事で解説していますのでご参照ください。

CHARTEVENT_MOUSE_WHEEL

説明

CHARTEVENT_MOUSE_WHEELは、マウスホイールの押下やスクロールが発生したときに発生するイベントです。このイベントは、チャートでCHARTEVENT_MOUSE_WHEELtrue に設定されている場合に有効になります。CHARTEVENT_MOUSE_WHEELイベントを処理することで、マウスホイールの操作に応じたカスタム動作を実装することができます。

lparam パラメータ値

lparamは、マウスボタンとホイールの状態を含むビットマスク(複数のビットを用いて複数の状態を一度に表す方法)です。ビットマスクは、Ctrlキー、Shiftキー、マウスボタンの状態を表します。また、下位16ビットはX座標、次の16ビットはY座標を示します。

dparam パラメータ値

dparamは、マウスホイールのスクロールの合計値を表します。通常、この値は+120または-120で、正の値はスクロールアップ、負の値はスクロールダウンを示します。

sparam パラメータ値

通常、このイベントではsparamは使用されません。

CHARTEVENT_MOUSE_WHEELの挙動が確認できるサンプルコードについては下記の記事をご参照ください↓

CHARTEVENT_OBJECT_CREATE

説明

CHARTEVENT_OBJECT_CREATEは、グラフィックオブジェクトが作成されたときに発生するイベントです。このイベントは、チャートでCHARTEVENT_OBJECT_CREATEtrue に設定されている場合に有効になります。CHARTEVENT_OBJECT_CREATEイベントを処理することで、新しく作成されたオブジェクトに対するカスタム動作を実装することができます。

lparam パラメータ値

lparamは、このイベントでは特に使用されません。通常、このイベントではlparamの値は0となります。

dparam パラメータ値

dparamも、このイベントでは特に使用されません。通常、このイベントではdparamの値は0.0となります。

sparam パラメータ値

sparamは、作成されたオブジェクトの名前を表します。これにより、どのオブジェクトが作成されたかを特定し、そのオブジェクトに対する処理を行うことができます。

これにより、CHARTEVENT_OBJECT_CREATEイベントは、新しく作成されたグラフィックオブジェクトの詳細をキャッチし、それに応じた処理を行うことが可能になります。

CHARTEVENT_OBJECT_CHANGE

説明

CHARTEVENT_OBJECT_CHANGEは、グラフィックオブジェクトのプロパティがプロパティダイアログを通じて変更されたときに発生するイベントです。このイベントは、オブジェクトの特性や属性がユーザーによって編集された場合にトリガーされます。CHARTEVENT_OBJECT_CHANGEイベントを処理することで、変更されたオブジェクトのプロパティに基づいたカスタム動作を実装することができます。

lparam パラメータ値

lparamは、このイベントでは特に使用されません。通常、このイベントではlparamの値は0となります。

dparam パラメータ値

dparamも、このイベントでは特に使用されません。通常、このイベントではdparamの値は0.0となります。

sparam パラメータ値

sparamは、変更されたオブジェクトの名前を表します。これにより、どのオブジェクトのプロパティが変更されたかを特定し、そのオブジェクトに対する処理を行うことができます。

これにより、CHARTEVENT_OBJECT_CHANGEイベントは、グラフィックオブジェクトのプロパティ変更をキャッチし、それに応じた処理を行うことが可能になります。

CHARTEVENT_OBJECT_DELETE

説明

CHARTEVENT_OBJECT_DELETEは、グラフィックオブジェクトが削除されたときに発生するイベントです。このイベントは、チャートでCHARTEVENT_OBJECT_DELETEがtrueに設定されている場合に有効になります。CHARTEVENT_OBJECT_DELETEイベントを処理することで、削除されたオブジェクトに対するカスタム動作を実装することができます。

lparam パラメータ値

lparamは、このイベントでは特に使用されません。通常、このイベントではlparamの値は0となります。

dparam パラメータ値

dparamも、このイベントでは特に使用されません。通常、このイベントではdparamの値は0.0となります。

sparam パラメータ値

sparamは、削除されたオブジェクトの名前を表します。これにより、どのオブジェクトが削除されたかを特定し、そのオブジェクトに対する処理を行うことができます。

これにより、CHARTEVENT_OBJECT_DELETEイベントは、削除されたグラフィックオブジェクトの詳細をキャッチし、それに応じた処理を行うことが可能になります。

CHARTEVENT_CLICK

説明

CHARTEVENT_CLICKは、チャート上でクリックが発生したときに発生するイベントです。このイベントは、ユーザーがチャートの任意の位置をクリックしたときにトリガーされます。CHARTEVENT_CLICKイベントを処理することで、クリック位置に応じたカスタム動作を実装することができます。

lparam パラメータ値

lparamは、マウスのX座標を表します。ユーザーがチャート上でクリックしたときのX座標の位置が含まれます。

dparam パラメータ値

dparamは、マウスのY座標を表します。ユーザーがチャート上でクリックしたときのY座標の位置が含まれます。

sparam パラメータ値

sparamは、このイベントでは特に使用されません。通常、このイベントではsparamの値は空の文字列となります。

これにより、CHARTEVENT_CLICKイベントは、チャート上でのクリックの詳細をキャッチし、それに応じた処理を行うことが可能になります。

CHARTEVENT_OBJECT_CLICK

説明

CHARTEVENT_OBJECT_CLICKは、グラフィックオブジェクトがクリックされたときに発生するイベントです。ユーザーがチャート上のグラフィックオブジェクトをクリックすると、このイベントがトリガーされます。CHARTEVENT_OBJECT_CLICKイベントを処理することで、クリックされたオブジェクトに対するカスタム動作を実装することができます。

lparam パラメータ値

lparamは、このイベントでは特に使用されません。通常、このイベントではlparamの値は0となります。

dparam パラメータ値

dparamも、このイベントでは特に使用されません。通常、このイベントではdparamの値は0.0となります。

sparam パラメータ値

sparamは、クリックされたオブジェクトの名前を表します。これにより、どのオブジェクトがクリックされたかを特定し、そのオブジェクトに対する処理を行うことができます。

これにより、CHARTEVENT_OBJECT_CLICKイベントは、グラフィックオブジェクトのクリックの詳細をキャッチし、それに応じた処理を行うことが可能になります。

CHARTEVENT_OBJECT_DRAG

説明

CHARTEVENT_OBJECT_DRAGは、グラフィックオブジェクトがドラッグアンドドロップされたとき、またはそのアンカーポイントの座標が変更されたときに発生するイベントです。ユーザーがチャート上のグラフィックオブジェクトを移動すると、このイベントがトリガーされます。CHARTEVENT_OBJECT_DRAGイベントを処理することで、移動されたオブジェクトに対するカスタム動作を実装することができます。

lparam パラメータ値

lparamは、このイベントでは特に使用されません。通常、このイベントではlparamの値は0となります。

dparam パラメータ値

dparamも、このイベントでは特に使用されません。通常、このイベントではdparamの値は0.0となります。

sparam パラメータ値

sparamは、ドラッグされたオブジェクトの名前を表します。これにより、どのオブジェクトがドラッグされたかを特定し、そのオブジェクトに対する処理を行うことができます。

これにより、CHARTEVENT_OBJECT_DRAGイベントは、グラフィックオブジェクトのドラッグやアンカーポイントの移動の詳細をキャッチし、それに応じた処理を行うことが可能になります。

CHARTEVENT_OBJECT_ENDEDIT

説明

CHARTEVENT_OBJECT_ENDEDITは、Editグラフィックオブジェクトのテキスト編集が終了したときに発生するイベントです。ユーザーがチャート上のEditオブジェクトのテキストを編集し、その編集が完了したときにこのイベントがトリガーされます。CHARTEVENT_OBJECT_ENDEDITイベントを処理することで、編集が完了したオブジェクトに対するカスタム動作を実装することができます。

lparam パラメータ値

lparamは、このイベントでは特に使用されません。通常、このイベントではlparamの値は0となります。

dparam パラメータ値

dparamも、このイベントでは特に使用されません。通常、このイベントではdparamの値は0.0となります。

sparam パラメータ値

sparamは、テキスト編集が終了したオブジェクトの名前を表します。これにより、どのオブジェクトのテキスト編集が終了したかを特定し、そのオブジェクトに対する処理を行うことができます。

これにより、CHARTEVENT_OBJECT_ENDEDITイベントは、Editグラフィックオブジェクトのテキスト編集終了の詳細をキャッチし、それに応じた処理を行うことが可能になります。

CHARTEVENT_CHART_CHANGE

説明

CHARTEVENT_CHART_CHANGEは、チャートのプロパティダイアログでチャートサイズやチャートプロパティが変更されたときに発生するイベントです。ユーザーがチャートの設定を変更した場合に、このイベントがトリガーされます。CHARTEVENT_CHART_CHANGEイベントを処理することで、チャート設定の変更に対するカスタム動作を実装することができます。

lparam パラメータ値

lparamは、このイベントでは特に使用されません。通常、このイベントではlparamの値は0となります。

dparam パラメータ値

dparamも、このイベントでは特に使用されません。通常、このイベントではdparamの値は0.0となります。

sparam パラメータ値

sparamは、このイベントでは特に使用されません。通常、このイベントではsparamの値は空の文字列となります。

これにより、CHARTEVENT_CHART_CHANGEイベントは、チャートのサイズやプロパティの変更をキャッチし、それに応じた処理を行うことが可能になります。

CHARTEVENT_CUSTOM

説明

CHARTEVENT_CUSTOMは、カスタムイベントが発生したときにトリガーされるイベントです。このイベントは、ユーザーが独自に定義したイベントを扱うために使用されます。CHARTEVENT_CUSTOMイベントを使用することで、特定のカスタムアクションに対するカスタム動作を実装することができます。

CHARTEVENT_CUSTOMはカスタムイベントの範囲からのイベントの初期番号を示します。カスタムイベントの範囲とは、ユーザーが独自に定義できるイベントIDの範囲のことです。この範囲はCHARTEVENT_CUSTOMからCHARTEVENT_CUSTOM_LASTまでの65535のIDが含まれます。初期番号とは、この範囲の最初のIDを指します。カスタムイベントの作成にはEventChartCustom関数が使用されます。

lparam パラメータ値

lparamは、カスタムイベントに関連する追加の情報を提供します。具体的な内容は、カスタムイベントを生成する際に設定された値に依存します。

dparam パラメータ値

dparamは、カスタムイベントに関連するもう一つの追加情報を提供します。これもカスタムイベントを生成する際に設定された値に依存します。

sparam パラメータ値

sparamは、カスタムイベントに関連する文字列情報を提供します。これもまた、カスタムイベントを生成する際に設定された値に依存します。

CHARTEVENT_CUSTOMイベントは、独自に定義されたイベントの処理を可能にするため、MQL5プログラムに柔軟性をもたらします。これにより、開発者は特定の条件やアクションに応じたカスタムイベントをトリガーし、それに基づいた処理を行うことができます。

CHARTEVENT_CUSTOM_LAST

説明

CHARTEVENT_CUSTOM_LASTは、カスタムイベントの範囲の最終番号を示します。カスタムイベントとは、ユーザーが独自に定義したイベントのことで、この範囲はCHARTEVENT_CUSTOMからCHARTEVENT_CUSTOM_LASTまでの65535のIDが提供されています。CHARTEVENT_CUSTOM_LASTは、その範囲の最後のIDを表します。カスタムイベントの作成には、EventChartCustom関数が使用されます。

lparam パラメータ値

lparamは、カスタムイベントに関連する追加の情報を提供します。具体的な内容は、EventChartCustom関数で設定された値に依存します。

dparam パラメータ値

dparamは、カスタムイベントに関連するもう一つの追加情報を提供します。これもEventChartCustom関数で設定された値に依存します。

sparam パラメータ値

sparamは、カスタムイベントに関連する文字列情報を提供します。これもまた、EventChartCustom関数で設定された値に依存します。

カスタムイベントの使用

N番号を使用したユーザイベントIDは、CHARTEVENT_CUSTOM+Nで表されます。これにより、ユーザーはCHARTEVENT_CUSTOMからCHARTEVENT_CUSTOM_LASTの範囲内で独自のイベントIDを定義し、それに基づいた処理を行うことができます。

ENUM_CHART_EVENT列挙型を利用したサンプルコード

以下はENUM_CHART_EVENT列挙型を利用したサンプルコードです。

#define KEY_NUMPAD_5       12     // テンキーの5キーのキーコード
#define KEY_LEFT           37     // 左矢印キーのキーコード
#define KEY_UP             38     // 上矢印キーのキーコード
#define KEY_RIGHT          39     // 右矢印キーのキーコード
#define KEY_DOWN           40     // 下矢印キーのキーコード
#define KEY_NUMLOCK_DOWN   98     // NumLockを押した状態でのテンキーの2キーのキーコード
#define KEY_NUMLOCK_LEFT  100     // NumLockを押した状態でのテンキーの4キーのキーコード
#define KEY_NUMLOCK_5     101     // NumLockを押した状態でのテンキーの5キーのキーコード
#define KEY_NUMLOCK_RIGHT 102     // NumLockを押した状態でのテンキーの6キーのキーコード
#define KEY_NUMLOCK_UP    104     // NumLockを押した状態でのテンキーの8キーのキーコード

//+------------------------------------------------------------------+
//| エキスパート初期化に使用される関数                                        |
//+------------------------------------------------------------------+
int OnInit()
{
//--- EAの名前をログに出力
  Print("The expert with name ", MQLInfoString(MQL_PROGRAM_NAME), " is running");
//--- オブジェクト作成イベントを有効にする
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
//--- オブジェクト削除イベントを有効にする
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_DELETE, true);
//--- チャートプロパティを強制的に更新して、イベント処理の準備を整える
  ChartRedraw();
//---
  return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| ChartEvent 関数                                                   |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // イベント識別子 
                const long& lparam,   // long 型のイベントパラメータ
                const double& dparam, // double 型のイベントパラメータ
                const string& sparam  // string 型のイベントパラメータ
                 )
{
//--- チャート上でマウスの左ボタンが押された
  if(id==CHARTEVENT_CLICK)
    {
    Print("The coordinates of the mouse click on the chart are: x = ", lparam, "  y = ", dparam);
    }
//--- マウスがグラフィックオブジェクトでクリックされた
  if(id==CHARTEVENT_OBJECT_CLICK)
    {
    Print("The mouse has been clicked on the object with name '", sparam, "'");
    }
//---キーが押された
  if(id==CHARTEVENT_KEYDOWN)
    {
    switch(lparam)
       {
        case KEY_NUMLOCK_LEFT: Print("The KEY_NUMLOCK_LEFT has been pressed");   break;
        case KEY_LEFT:         Print("The KEY_LEFT has been pressed");           break;
        case KEY_NUMLOCK_UP:   Print("The KEY_NUMLOCK_UP has been pressed");     break;
        case KEY_UP:           Print("The KEY_UP has been pressed");             break;
        case KEY_NUMLOCK_RIGHT: Print("The KEY_NUMLOCK_RIGHT has been pressed"); break;
        case KEY_RIGHT:         Print("The KEY_RIGHT has been pressed");         break;
        case KEY_NUMLOCK_DOWN: Print("The KEY_NUMLOCK_DOWN has been pressed");   break;
        case KEY_DOWN:         Print("The KEY_DOWN has been pressed");           break;
        case KEY_NUMPAD_5:     Print("The KEY_NUMPAD_5 has been pressed");       break;
        case KEY_NUMLOCK_5:     Print("The KEY_NUMLOCK_5 has been pressed");     break;
        default:               Print("Some not listed key has been pressed");
       }
    ChartRedraw();
    }
//--- オブジェクトが削除された
  if(id==CHARTEVENT_OBJECT_DELETE)
    {
    Print("The object with name ", sparam, " has been deleted");
    }
//--- オブジェクトが作成された
  if(id==CHARTEVENT_OBJECT_CREATE)
    {
    Print("The object with name ", sparam, " has been created");
    }
//--- オブジェクトが移動されたか、アンカーポイントの座標が変更された
  if(id==CHARTEVENT_OBJECT_DRAG)
    {
    Print("The anchor point coordinates of the object with name ", sparam, " has been changed");
    }
//--- 編集オブジェクトのテキストが変更した
  if(id==CHARTEVENT_OBJECT_ENDEDIT)
    {
    Print("The text in the Edit field of the object with name ", sparam, " has been changed");
    }
}

定数定義部分

#define KEY_NUMPAD_5       12     // テンキーの5キーのキーコード
#define KEY_LEFT           37     // 左矢印キーのキーコード
#define KEY_UP             38     // 上矢印キーのキーコード
#define KEY_RIGHT          39     // 右矢印キーのキーコード
#define KEY_DOWN           40     // 下矢印キーのキーコード
#define KEY_NUMLOCK_DOWN   98     // NumLockを押した状態でのテンキーの2キーのキーコード
#define KEY_NUMLOCK_LEFT  100     // NumLockを押した状態でのテンキーの4キーのキーコード
#define KEY_NUMLOCK_5     101     // NumLockを押した状態でのテンキーの5キーのキーコード
#define KEY_NUMLOCK_RIGHT 102     // NumLockを押した状態でのテンキーの6キーのキーコード
#define KEY_NUMLOCK_UP    104     // NumLockを押した状態でのテンキーの8キーのキーコード

この部分では、エキスパートアドバイザーEA)で使用する定数を定義しています。定数は、プログラム内で使用する特定の値に対してわかりやすい名前を付けるために使用されます。このコードでは、いくつかのキーボードキーに対応する定数を定義しています。

定数定義の役割

定数定義は、特定の値に対して名前を付けることにより、コードの可読性と保守性を向上させます。たとえば、KEY_LEFTという名前を使うことで、左矢印キーを指していることが明確になります。

各定数の説明

  • #define KEY_NUMPAD_5 12: 数字キー5(テンキー)のキーコードを12と定義しています。
  • #define KEY_LEFT 37: 左矢印キーのキーコードを37と定義しています。
  • #define KEY_UP 38: 上矢印キーのキーコードを38と定義しています。
  • #define KEY_RIGHT 39: 右矢印キーのキーコードを39と定義しています。
  • #define KEY_DOWN 40: 下矢印キーのキーコードを40と定義しています。
  • #define KEY_NUMLOCK_DOWN 98: NumLockを押した状態でのテンキーの2キーのキーコードを98と定義しています。
  • #define KEY_NUMLOCK_LEFT 100: NumLockを押した状態でのテンキーの4キーのキーコードを100と定義しています。
  • #define KEY_NUMLOCK_5 101: NumLockを押した状態でのテンキーの5キーのキーコードを101と定義しています。
  • #define KEY_NUMLOCK_RIGHT 102: NumLockを押した状態でのテンキーの6キーのキーコードを102と定義しています。
  • #define KEY_NUMLOCK_UP 104: NumLockを押した状態でのテンキーの8キーのキーコードを104と定義しています。

これらの定数は、プログラム内でキーボードイベントを処理する際に使用されます。キーコードを直接数値で使用するよりも、わかりやすい名前を付けることで、コードの意味を理解しやすくなります。

OnInit関数部分

//+------------------------------------------------------------------+
//| エキスパート初期化に使用される関数                                        |
//+------------------------------------------------------------------+
int OnInit()
{
//--- 
  Print("The expert with name ", MQLInfoString(MQL_PROGRAM_NAME), " is running");
//--- オブジェクト作成イベントを有効にする
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
//--- オブジェクト削除イベントを有効にする
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_DELETE, true);
//--- チャートプロパティを強制的に更新して、イベント処理の準備を整える
  ChartRedraw();
//---
  return(INIT_SUCCEEDED);
}

解説

この部分では、エキスパートアドバイザーEA)が初期化される際に実行されるOnInit関数について説明します。OnInit関数は、EAの初期設定を行うために使用されます。以下に各処理内容について解説します。

エキスパートが実行を開始したことをログに出力します。MQLInfoString関数引数に(MQL_PROGRAM_NAME)を記述して、実行中のEAの名前を取得し、その名前と実行開始メッセージをエキスパートログに出力します。

次に、チャート上でオブジェクトが作成された際のイベントを有効にします。ChartSetInteger関数を使用して、現在のチャートでCHART_EVENT_OBJECT_CREATEイベントを有効(true)に設定します。

さらに、チャート上でオブジェクトが削除された際のイベントを有効にします。ChartSetInteger関数を使用して、現在のチャートでCHART_EVENT_OBJECT_DELETEイベントを有効(true)に設定します。

最後に、チャートのプロパティを強制的に更新します。ChartRedraw関数を使用して、チャートの再描画を強制し、設定した変更が即座に反映されるようにします。

以上の処理により、OnInit関数EAの初期設定を行い、オブジェクトの作成および削除イベントを有効にし、チャートのプロパティを更新して、EAの動作環境を整えます。

OnChartEvent関数その1

//+------------------------------------------------------------------+
//| ChartEvent 関数                                                   |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // イベント識別子 
                const long& lparam,   // long 型のイベントパラメータ
                const double& dparam, // double 型のイベントパラメータ
                const string& sparam // string 型のイベントパラメータ
                 )
{
//--- チャート上でマウスの左ボタンが押された
  if(id==CHARTEVENT_CLICK)
    {
    Print("The coordinates of the mouse click on the chart are: x = ",lparam,"  y = ",dparam);
    }
//--- マウスがグラフィックオブジェクトでクリックされた
  if(id==CHARTEVENT_OBJECT_CLICK)
    {
    Print("The mouse has been clicked on the object with name '"+sparam+"'");
    }
}

解説

この部分では、OnChartEvent関数がチャート上で発生するさまざまなイベントに対応する方法を説明します。OnChartEvent関数は、チャート上で発生するイベントを処理するためのものです。ここでは、2つのイベントに対する処理を行っています。

CHARTEVENT_CLICKイベント

最初の条件分岐では、イベントIDがCHARTEVENT_CLICKであるかどうかを確認しています。CHARTEVENT_CLICKは、チャート上でマウスの左ボタンがクリックされたときに発生するイベントです。このイベントが発生した場合、Print関数を使用して、クリックされた位置のX座標とY座標をログに出力します。

CHARTEVENT_OBJECT_CLICKイベント

次の条件分岐では、イベントIDがCHARTEVENT_OBJECT_CLICKであるかどうかを確認しています。CHARTEVENT_OBJECT_CLICKは、チャート上のグラフィックオブジェクトがクリックされたときに発生するイベントです。このイベントが発生した場合、Print関数を使用して、クリックされたオブジェクトの名前をログに出力します。

これにより、OnChartEvent関数は、チャート上で発生する特定のイベントに応じた処理を行います。各イベントに対する具体的な処理を記述することで、EAがさまざまなユーザー操作に対応できるようになります。

OnChartEvent関数その2

//---キーが押された
  if(id==CHARTEVENT_KEYDOWN)
    {
    switch(lparam)
       {
        case KEY_NUMLOCK_LEFT: Print("The KEY_NUMLOCK_LEFT has been pressed");   break;
        case KEY_LEFT:         Print("The KEY_LEFT has been pressed");           break;
        case KEY_NUMLOCK_UP:   Print("The KEY_NUMLOCK_UP has been pressed");     break;
        case KEY_UP:           Print("The KEY_UP has been pressed");             break;
        case KEY_NUMLOCK_RIGHT: Print("The KEY_NUMLOCK_RIGHT has been pressed"); break;
        case KEY_RIGHT:         Print("The KEY_RIGHT has been pressed");         break;
        case KEY_NUMLOCK_DOWN: Print("The KEY_NUMLOCK_DOWN has been pressed");   break;
        case KEY_DOWN:         Print("The KEY_DOWN has been pressed");           break;
        case KEY_NUMPAD_5:     Print("The KEY_NUMPAD_5 has been pressed");       break;
        case KEY_NUMLOCK_5:     Print("The KEY_NUMLOCK_5 has been pressed");     break;
        default:               Print("Some not listed key has been pressed");
       }
    ChartRedraw();
    }

解説

この部分では、OnChartEvent関数がキーが押されたイベントに対応する方法を説明します。キーが押されたイベントは、CHARTEVENT_KEYDOWNで識別されます。ここでは、特定のキーが押されたときに対応するメッセージをログに出力する処理を行っています。

CHARTEVENT_KEYDOWNイベントの処理

まず、イベントIDがCHARTEVENT_KEYDOWNであるかどうかを確認します。CHARTEVENT_KEYDOWNは、キーボードのキーが押されたときに発生するイベントです。

次に、switch文を使用して、押されたキーのコード(lparam)に応じて異なる処理を行います。それぞれのキーコードに対応するケースを定義し、該当するキーが押された場合にPrint関数を使用してログにメッセージを出力します。対応するキーが押されたことを示すメッセージがエキスパートログに表示されます。

  • KEY_NUMLOCK_LEFTが押された場合、「The KEY_NUMLOCK_LEFT has been pressed」とログに出力されます。
  • KEY_LEFTが押された場合、「The KEY_LEFT has been pressed」とログに出力されます。
  • その他のキーについても同様に対応します。
  • いずれのケースにも該当しない場合は、「Some not listed key has been pressed」とログに出力されます。

最後に、ChartRedraw関数を使用してチャートの再描画を行います。これにより、キーイベントによる変更が即座に反映されます。

このようにして、OnChartEvent関数は、キーが押された際に対応する処理を行い、適切なメッセージをログに出力します。これにより、ユーザーがどのキーを押したかを確認することができます。

OnChartEvent関数その3

//--- オブジェクトが削除された
  if(id==CHARTEVENT_OBJECT_DELETE)
    {
    Print("The object with name ",sparam," has been deleted");
    }
//--- オブジェクトが作成された
  if(id==CHARTEVENT_OBJECT_CREATE)
    {
    Print("The object with name ",sparam," has been created");
    }
//--- オブジェクトが移動されたか、アンカーポイントの座標が変更された
  if(id==CHARTEVENT_OBJECT_DRAG)
    {
    Print("The anchor point coordinates of the object with name ",sparam," has been changed");
    }
//--- 編集オブジェクトのテキストが変更した
  if(id==CHARTEVENT_OBJECT_ENDEDIT)
    {
    Print("The text in the Edit field of the object with name ",sparam," has been changed");
    }
}

解説

この部分では、OnChartEvent関数がチャート上で発生するオブジェクトに関するさまざまなイベントに対応する方法を説明します。ここでは、オブジェクトが削除された場合、作成された場合、移動された場合、そして編集オブジェクトのテキストが変更された場合の処理を行っています。

CHARTEVENT_OBJECT_DELETEイベント

オブジェクトが削除された場合、イベントIDがCHARTEVENT_OBJECT_DELETEであるかどうかを確認します。CHARTEVENT_OBJECT_DELETEイベントは、チャート上のオブジェクトが削除されたときに発生します。このイベントが発生した場合、Print関数を使用して削除されたオブジェクトの名前をログに出力します。

CHARTEVENT_OBJECT_CREATEイベント

オブジェクトが作成された場合、イベントIDがCHARTEVENT_OBJECT_CREATEであるかどうかを確認します。CHARTEVENT_OBJECT_CREATEイベントは、チャート上に新しいオブジェクトが作成されたときに発生します。このイベントが発生した場合、Print関数を使用して作成されたオブジェクトの名前をログに出力します。

CHARTEVENT_OBJECT_DRAGイベント

オブジェクトが移動されたか、アンカーポイントの座標が変更された場合、イベントIDがCHARTEVENT_OBJECT_DRAGであるかどうかを確認します。CHARTEVENT_OBJECT_DRAGイベントは、オブジェクトがドラッグされたり、そのアンカーポイントの座標が変更されたときに発生します。このイベントが発生した場合、Print関数を使用してオブジェクトの名前と変更されたアンカーポイントの座標をログに出力します。

CHARTEVENT_OBJECT_ENDEDITイベント

編集オブジェクトのテキストが変更された場合、イベントIDがCHARTEVENT_OBJECT_ENDEDITTであるかどうかを確認します。CHARTEVENT_OBJECT_ENDEDITイベントは、編集オブジェクトのテキスト編集が終了したときに発生します。このイベントが発生した場合、Print関数を使用して変更されたオブジェクトの名前と新しいテキストをログに出力します。

これらの処理により、OnChartEvent関数は、チャート上で発生するオブジェクトに関するさまざまなイベントに応答し、適切なメッセージをエキスパートログに出力します。これにより、ユーザーはチャート上でのオブジェクト操作をリアルタイムで確認することができます。

コメント

タイトルとURLをコピーしました