【MQL5】CalendarEventByCurrency関数について

MQL5リファレンス
スポンサーリンク
スポンサーリンク

CalendarEventByCurrency関数の働き・役割

CalendarEventByCurrency関数は、指定された通貨に関連する経済指標のカレンダーイベントを取得するために使用されます。

この関数に通貨コードを指定すると、その通貨に対応するイベントが配列として返され、各イベントの詳細な説明や関連情報を取得できます。この関数は、特定の通貨に対する経済イベントの情報を取得する際に便利です。

CalendarEventByCurrency関数の引数について

int  CalendarEventByCurrency(
  const string         currency,    // 国の通貨のコード名
  MqlCalendarEvent&    events[]     // 説明配列を受け取るための変数

CalendarEventByCurrency関数以下の引数を受け取ります。

第1引数: currency

種類はconst stringで、通貨コードを指定します。例えば、ユーロ圏の場合はEUR、アメリカドルの場合はUSDのようにISO通貨コードを使用します。この通貨コードをもとに、関連する経済指標イベントがフィルタリングされます。

第2引数: events[]

種類はMqlCalendarEvent構造体& 型の配列で、指定された通貨に関連するイベントの詳細情報が格納されるMqlCalendarEvent構造体型の配列です。この配列関数によって更新され、各要素にはイベントIDやイベントの種類、重要度、ソースURLなどが含まれます。

CalendarEventByCurrency関数の戻り値について

CalendarEventByCurrency関数は、指定された通貨に関連するカレンダーイベントの数を整数で返します。戻り値は取得されたイベント数を示し、イベントが存在しない場合はゼロが返されます。この戻り値を活用して、イベント数に基づいた追加の処理や配列のサイズ変更を行うことができます。

エラーが発生した場合には負の値が返され、エラー内容を詳細に確認するためにはGetLastError関数を使用してエラーコードを取得します。主なエラーコードは以下の通りです。

  • 4001 (ERR_INTERNAL_ERROR)
    一般的なランタイムエラーです。内部的なエラーが発生したことを示します。
  • 4004 (ERR_NOT_ENOUGH_MEMORY)
    メモリが不足しているため、操作を完了できません。
  • 5401 (ERR_CALENDAR_TIMEOUT)
    リクエストがタイムアウトしたことを示します。データの取得に時間がかかりすぎた場合に発生します。

また、events配列を扱う際にArrayResize操作に失敗するとエラーが発生することがあるため、適切なサイズ管理が重要です。

CalendarEventByCurrency関数を使ったサンプルコード

//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                      |
//+------------------------------------------------------------------+
void OnStart()
{
    //--- 経済指標カレンダーのイベント情報を格納するための配列を宣言
    MqlCalendarEvent events[];

    //--- EU通貨(EUR)に関連する経済イベントを取得し、イベント数を変数countに格納
    int count = CalendarEventByCurrency("EUR", events);
    Print("count = ", count); // イベントの数をエキスパートログに出力

    //--- この例では最大10件のイベントのみを表示するため、イベントが10件を超える場合に配列サイズを調整
    if(count > 10)
        ArrayResize(events, 10); // 配列eventsの要素数を10にリサイズ

    //--- 配列eventsの内容(各イベントの詳細情報)をエキスパートログに出力
    ArrayPrint(events);
}
/*
  実行結果例(エキスパートログに表示される内容):
  
            [id] [type] [country_id] [unit] [importance]                                        [source_url]                                 [event_code]                                    [name]
  [0] 999010001      0          999      0            2 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-non-monetary-policy-meeting"           "ECB Non-monetary Policy Meeting"                
  [1] 999010002      0          999      0            2 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-monetary-policy-meeting-accounts"       "ECB Monetary Policy Meeting Accounts"          
  [2] 999010003      0          999      0            3 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-monetary-policy-press-conference"       "ECB Monetary Policy Press Conference"          
  [3] 999010004      0          999      0            3 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-president-draghi-speech"               "ECB President Draghi Speech"                    
  [4] 999010005      0          999      0            2 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-vice-president-vitor-constancio-speech" "ECB Vice President Constancio Speech"          
  [5] 999010006      1          999      1            3 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-deposit-rate-decision"                 "ECB Deposit Facility Rate Decision"            
  [6] 999010007      1          999      1            3 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-interest-rate-decision"                 "ECB Interest Rate Decision"                    
  [7] 999010008      0          999      0            2 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-economic-bulletin"                     "ECB Economic Bulletin"                          
  [8] 999010009      1          999      2            2 "https://www.ecb.europa.eu/home/html/index.en.html" "targeted-ltro"                             "ECB Targeted LTRO"                              
  [9] 999010010      0          999      0            2 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-executive-board-member-praet-speech"   "ECB Executive Board Member Praet Speech"        

  各カラムの説明:
    - id: イベントの一意の識別番号
    - type: イベントの種類(0は通常の発表、1は重要な決定など)
    - country_id: 通貨または地域の国コード
    - unit: イベントで使用される単位(0は該当なし)
    - importance: イベントの重要度(0が低く、3が高い)
    - source_url: イベントの情報ソースとなるURL
    - event_code: イベントのコード(各イベントを識別するコード)
    - name: イベントの名称
 */

サンプルコード解説

## サンプルコード解説

このサンプルコードでは、CalendarEventByCurrency関数を使用して指定された通貨(この場合はEUR)に関連する経済イベントを取得し、得られた情報をエキスパートログに出力しています。各ステップを詳しく解説します。

### 経済指標カレンダーの配列を宣言

まず、MqlCalendarEvent型の配列eventsを宣言します。この配列は、指定された通貨に関連する経済イベントの情報を格納するために使用されます。MqlCalendarEventは、経済指標イベントの情報を保持するための構造体です。

### CalendarEventByCurrency関数を呼び出してイベントを取得

次に、CalendarEventByCurrency関数を使用して、EU通貨(EUR)に関連する経済イベントを取得します。通貨コードEURを指定することで、ユーロに関連する経済指標イベントの情報が配列eventsに格納されます。この関数は、取得したイベントの数を戻り値として返すため、変数countにその値を格納します。

また、取得されたイベントの数をエキスパートログに出力しています。

### 配列のリサイズ処理

このサンプルコードでは、10件のイベントのみを表示するため、イベント数が10件を超える場合は配列のサイズを10に変更しています。ArrayResize関数を使用して、配列eventsの要素数を10にリサイズします。リサイズを行うことで、メモリ使用量を抑え、必要な数だけのイベントを扱います。

### イベントの情報をエキスパートログに出力

最後に、ArrayPrint関数を使用して配列eventsの内容をエキスパートログに出力します。ArrayPrint関数は配列の各要素をエキスパートログに表示するため、各イベントの詳細(イベントID、種類、国コード、単位、重要度、情報ソースURL、イベントコード、イベント名)を確認できます。

### 実行結果例について

エキスパートログには、各イベントの詳細が次のように表示されます。

- id: イベントの一意の識別番号
- type: イベントの種類。0は通常の発表、1は重要な決定などを意味します。
- country_id: 通貨または地域の国コードを示します。
- unit: イベントで使用される単位。0は該当なしを示します。
- importance: イベントの重要度を示します。0が低く、3が高い重要度を表します。
- source_url: イベント情報のソースとなるURLが含まれています。
- event_code: 各イベントを識別するコードで、イベントの特定に使用されます。
- name: イベントの名称です。

このようにして、取得した経済指標イベントの詳細な情報を確//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                      |
//+------------------------------------------------------------------+
void OnStart()
{
    //--- 経済指標カレンダーのイベント情報を格納するための配列を宣言
    MqlCalendarEvent events[];

    //--- EU通貨(EUR)に関連する経済イベントを取得し、イベント数を変数countに格納
    int count = CalendarEventByCurrency("EUR", events);
    Print("count = ", count); // イベントの数をエキスパートログに出力

    //--- この例では最大10件のイベントのみを表示するため、イベントが10件を超える場合に配列サイズを調整
    if(count > 10)
        ArrayResize(events, 10); // 配列eventsの要素数を10にリサイズ

    //--- 配列eventsの内容(各イベントの詳細情報)をエキスパートログに出力
    ArrayPrint(events);
}
/*
  実行結果例(エキスパートログに表示される内容):
  
            [id] [type] [country_id] [unit] [importance]                                        [source_url]                                 [event_code]                                    [name]
  [0] 999010001      0          999      0            2 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-non-monetary-policy-meeting"           "ECB Non-monetary Policy Meeting"                
  [1] 999010002      0          999      0            2 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-monetary-policy-meeting-accounts"       "ECB Monetary Policy Meeting Accounts"          
  [2] 999010003      0          999      0            3 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-monetary-policy-press-conference"       "ECB Monetary Policy Press Conference"          
  [3] 999010004      0          999      0            3 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-president-draghi-speech"               "ECB President Draghi Speech"                    
  [4] 999010005      0          999      0            2 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-vice-president-vitor-constancio-speech" "ECB Vice President Constancio Speech"          
  [5] 999010006      1          999      1            3 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-deposit-rate-decision"                 "ECB Deposit Facility Rate Decision"            
  [6] 999010007      1          999      1            3 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-interest-rate-decision"                 "ECB Interest Rate Decision"                    
  [7] 999010008      0          999      0            2 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-economic-bulletin"                     "ECB Economic Bulletin"                          
  [8] 999010009      1          999      2            2 "https://www.ecb.europa.eu/home/html/index.en.html" "targeted-ltro"                             "ECB Targeted LTRO"                              
  [9] 999010010      0          999      0            2 "https://www.ecb.europa.eu/home/html/index.en.html" "ecb-executive-board-member-praet-speech"   "ECB Executive Board Member Praet Speech"        

  各カラムの説明:
    - id: イベントの一意の識別番号
    - type: イベントの種類(0は通常の発表、1は重要な決定など)
    - country_id: 通貨または地域の国コード
    - unit: イベントで使用される単位(0は該当なし)
    - importance: イベントの重要度(0が低く、3が高い)
    - source_url: イベントの情報ソースとなるURL
    - event_code: イベントのコード(各イベントを識別するコード)
    - name: イベントの名称
 */
認することができます。

このサンプルコードでは、CalendarEventByCurrency関数を使用して指定された通貨(この場合はEUR)に関連する経済イベントを取得し、得られた情報をエキスパートログに出力しています。各ステップを詳しく解説します。

経済指標カレンダーの配列を宣言

まず、MqlCalendarEvent構造体型の配列eventsを宣言します。この配列は、指定された通貨に関連する経済イベントの情報を格納するために使用されます。MqlCalendarEvent構造体は、経済指標イベントの情報を保持するための構造体です。

CalendarEventByCurrency関数を呼び出してイベントを取得

次に、CalendarEventByCurrency関数を使用して、EU通貨(EUR)に関連する経済イベントを取得します。通貨コードEURを指定することで、ユーロに関連する経済指標イベントの情報が配列eventsに格納されます。この関数は、取得したイベントの数を戻り値として返すため、変数countにその値を格納します。

また、取得されたイベントの数をエキスパートログに出力しています。

配列のリサイズ処理

このサンプルコードでは、10件のイベントのみを表示するため、イベント数が10件を超える場合は配列のサイズを10に変更しています。ArrayResize関数を使用して、配列eventsの要素数を10にリサイズします。リサイズを行うことで、メモリ使用量を抑え、必要な数だけのイベントを扱います。

イベントの情報をエキスパートログに出力

最後に、ArrayPrint関数を使用して配列eventsの内容をエキスパートログに出力します。ArrayPrint関数配列の各要素をエキスパートログに表示するため、各イベントの詳細(イベントID、種類、国コード、単位、重要度、情報ソースURL、イベントコード、イベント名)を確認できます。

実行結果例について

エキスパートログには、各イベントの詳細が次のように表示されます。

  • id: イベントの一意の識別番号
  • type: イベントの種類。0は通常の発表、1は重要な決定などを意味します。
  • country_id: 通貨または地域の国コードを示します。
  • unit: イベントで使用される単位。0は該当なしを示します。
  • importance: イベントの重要度を示します。0が低く、3が高い重要度を表します。
  • source_url: イベント情報のソースとなるURLが含まれています。
  • event_code: 各イベントを識別するコードで、イベントの特定に使用されます。
  • name: イベントの名称です。

このようにして、取得した経済指標イベントの詳細な情報を確認することができます。

CalendarEventByCurrency関数を使ってEAを作る際のアイディア

CalendarEventByCurrency関数を活用すると、特定の通貨に関連する経済イベント情報を基にした取引戦略を構築することが可能です。以下にいくつかのEAエキスパートアドバイザー)のアイディアを紹介します。

高重要度イベント前のポジション調整EA

CalendarEventByCurrency関数で取得した経済指標イベントの重要度をもとに、高重要度のイベントが発表される前にポジションの調整を行うEAを作成できます。たとえば、重要度が2以上のイベントが近づいたときに、既存のポジションをクローズまたはストップロスを変更するなどの対応を取ることで、リスク管理を強化することができます。

特定イベント発生後のトレンドフォローEA

通貨ペアの経済指標イベントのうち、特定のイベントに注目し、そのイベントが発表された直後にトレンドフォローを開始するEAも考えられます。例えば、金利決定や雇用統計の発表後に、トレンド方向に新規ポジションを開き、短期的なトレンドを追随する戦略を自動化できます。これにより、大きな値動きを捉える可能性が高まります。

イベント回避によるレンジ相場戦略EA

重要な経済イベントが発表される直前から発表後までの時間帯に、リスク回避として取引を停止し、その後レンジ相場を狙うEAも有効です。イベント発表の影響が一段落した後の安定したレンジ相場で取引を再開し、相場の振幅が収まったところで利益を狙うことができます。

通貨ごとのイベント履歴を用いたアノマリー分析EA

CalendarEventByCurrency関数を用いて過去のイベントデータを取得し、特定の経済イベントに対する相場の反応を分析するEAを開発することも可能です。このEAでは、過去のイベントとその後の通貨ペアの値動きを収集・分析し、次回の同様なイベントが発生する際に予測や対応を行うためのアノマリー

(相場が統計的に特定のパターンを示す現象)分析に役立てることができます。

経済イベント発生直後のスキャルピングEA

高頻度なトレードを行うスキャルピング戦略として、経済イベント発表直後のボラティリティの増加を利用したEAも考えられます。
CalendarEventByCurrency関数でイベント発生時刻を把握し、発表直後に短期間のスキャルピング取引を実行することで、短期的な価格の急変動を捉えます。短期トレードのため、素早いエントリーとエグジットが必要です。

これらのアイディアに基づき、CalendarEventByCurrency関数を活用することで、経済イベントに連動した取引戦略を効率的に自動化し、柔軟なEA開発が可能になります。

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