経済指標カレンダー構造体

このセクションでは、MetaTraderプラットフォームで直接利用可能な経済指標カレンダーを使用するための構造体について説明します。経済指標カレンダーは、マクロ経済指標、その発表日および重要度の説明を含む既製の「百科事典」です。関連するマクロ経済指標の値は、発行直後にメタトレーダープラットフォームに送信され、国、通貨、重要度ごとに必要な指標を視覚的に追跡できるタグとしてチャートに表示されます。

経済指標カレンダー関数を使用すると、必要な国/通貨ペアの観点から、カスタム重要度基準に従って、着信したイベントの自動分析を実行できます。

国の説明はMqlCalendarCountry構造体で設定されます。これはCalendarCountryById()およびCalendarCountries()関数で使用されます。

struct MqlCalendarCountry
 {
  ulong                               id;                   // 国ID(ISO 3166-1)
  string                             name;                 // 国名(現在のターミナルエンコーディング)
  string                             code;                 // 国コード名(ISO 3166-1 alpha-2)
  string                             currency;             // 国の通貨コード
  string                             currency_symbol;       // 国の通貨の銘柄
  string                             url_name;             // mql5.comウェブサイトURLに使用される国名
 };

 

イベントの説明はMqlCalendarEvent構造体で設定されます。これはCalendarEventById()CalendarEventByCountry()CalendarEventByCurrency()関数で使用されます。

struct MqlCalendarEvent
 {
  ulong                               id;                   // イベントID
  ENUM_CALENDAR_EVENT_TYPE           type;                 // ENUM_CALENDAR_EVENT_TYPE列挙対からのイベントタイプ
  ENUM_CALENDAR_EVENT_SECTOR         sector;               // イベントが関連する部門
  ENUM_CALENDAR_EVENT_FREQUENCY     frequency;             // イベントの頻度
  ENUM_CALENDAR_EVENT_TIMEMODE       time_mode;             // イベント時間モード
  ulong                               country_id;           // 国ID
  ENUM_CALENDAR_EVENT_UNIT         unit;                 // 経済指標値の単位
  ENUM_CALENDAR_EVENT_IMPORTANCE     importance;           // イベントの重要度
  ENUM_CALENDAR_EVENT_MULTIPLIER     multiplier;           // 経済指標値の乗数
  uint                               digits;               // 小数点以下の桁数
  string                             source_url;           // イベント発表源のURL
  string                             event_code;           // イベントコード
  string                             name;                 // イベント名(現在のターミナルエンコーディング)
 };

 

イベント値はMqlCalendarValue構造体で設定されます。これはCalendarValueById()CalendarValueHistoryByEvent()CalendarValueHistory()CalendarValueLastByEvent()CalendarValueLast()関数で使用されます。

struct MqlCalendarValue
 {
  ulong                               id;                   // 値ID
  ulong                               event_id;             // イベントID
  datetime                           time;                 // イベントの日時
  datetime                           period;               // イベント報告期間
  int                                 revision;             // 報告期間に関連して発表された指標の改訂
  long                               actual_value;         // ppmでの実際の値(設定されていない場合はLONG_MIN)
  long                               prev_value;           // ppmでの前の値(設定されていない場合はLONG_MIN)
  long                               revised_prev_value;   // ppmでの改訂された前の値(設定されていない場合はLONG_MIN)
  long                               forecast_value;       // ppmでの予測値(設定されていない場合はLONG_MIN)
  ENUM_CALENDAR_EVENT_IMPACT         impact_type;           // 為替レートへの潜在的影響
  //--- 値を確認する関数
  bool                         HasActualValue(void) const;   // actual_valueが設定されている場合はtrueを返す
  bool                         HasPreviousValue(void) const; // prev_valueが設定されている場合はtrueを返す
  bool                         HasRevisedValue(void) const;  // revised_prev_valueが設定されている場合はtrueを返す
  bool                         HasForecastValue(void) const; // forecast_valueが設定されている場合はtrueを返す
  //--- 値を受け取る関数
  double                       GetActualValue(void) const;   // actual_valueを返す(値が設定されていない場合はnan)
  double                       GetPreviousValue(void) const; // prev_valueを返す(値が設定されていない場合はnan)
  double                       GetRevisedValue(void) const;  // revised_prev_valueを返す(値が設定されていない場合はnan)
  double                       GetForecastValue(void) const; // forecast_valueを返す(値が設定されていない場合はnan)
 };

MqlCalendarValue構造体はactual_valueforecast_valueprev_valuerevised_prev_valueフィールドの値を確認/設定するメソッドを備えています。値が指定されていない場合、フィールドにはLONG_MIN (-9223372036854775808)が格納されます。

これらのフィールドに格納されている値は100万倍されることに注意してください。CalendarValueByIdCalendarValueHistoryByEventCalendarValueHistoryCalendarValueLastByEventCalendarValueLastのいずれかの関数を使用してMqlCalendarValueで値を受け取る場合、フィールド値がLONG_MINに等しいかどうかを確認する必要があります。フィールドに値が指定されている場合、値を取得するには、値を100万で除算する必要があります。値を取得するもう1つの方法は、MqlCalendarValue構造体の関数を使用して値を確認および取得することです。

カレンダーイベント処理の例:

//--- 整数ではなく実数値でカレンダーイベントを格納する構造体を作成する
struct AdjustedCalendarValue
 {
  ulong                               id;                   // 値ID
  ulong                               event_id;             // イベントID
  datetime                           time;                 // イベントの日時
  datetime                           period;               // イベント報告期間
  int                                 revision;             // 報告期間に関連して発表された指標の改訂
  double                             actual_value;         // 実際の値
  double                             prev_value;           // 前の値
  double                             revised_prev_value;   // 改訂された前の値
  double                             forecast_value;       // 予測値
  ENUM_CALENDAR_EVENT_IMPACT         impact_type;           // 為替レートへの潜在的影響
 };
//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                              |
//+------------------------------------------------------------------+
void OnStart()
 {
//---
//--- EUの国コード(ISO 3166-1 Alpha-2)
  string EU_code="EU";
//--- EUイベント値を取得する
  MqlCalendarValue values[];
//--- イベントを取得する期間の境界を設定する
  datetime date_from=D'01.01.2021'; // 2021のすべてのイベント
  datetime date_to=0;               // 0はまだ発生していないイベントを含む、すべての既知のイベントを意味する
//--- 2021以来のEUイベント履歴をリクエストする
  if(!CalendarValueHistory(values, date_from, date_to, EU_code))
    {
    PrintFormat("Error!Failed to get events for country_code=%s", EU_code);
    PrintFormat("Error code: %d", GetLastError());
    return;
    }
  else
    PrintFormat("Received event values for country_code=%s: %d",
                EU_code, ArraySize(values));
//--- 操作ログに出力する配列サイズを減らす
  if(ArraySize(values)>5)
    ArrayResize(values, 5);
//--- 実際の値をチェックしたり変換したりせずに、イベント値をそのまま操作ログに出力する
  Print("Output calendar values as they are");
  ArrayPrint(values);
 
//--- フィールド値を確認し、実際の値に変換する
//--- 値を確認して取得するオプション1
  AdjustedCalendarValue values_adjusted_1[];
  int total=ArraySize(values);
  ArrayResize(values_adjusted_1, total);
//--- 確認と調整を行って値をコピーする
  for(int i=0; i<total; i++)
    {
    values_adjusted_1[i].id=values[i].id;
    values_adjusted_1[i].event_id=values[i].event_id;
    values_adjusted_1[i].time=values[i].time;
    values_adjusted_1[i].period=values[i].period;
    values_adjusted_1[i].revision=values[i].revision;
    values_adjusted_1[i].impact_type=values[i].impact_type;
    //--- 値を確認し、1,000,000で徐算する
    if(values[i].actual_value==LONG_MIN)
        values_adjusted_1[i].actual_value=double("nan");
    else
        values_adjusted_1[i].actual_value=values[i].actual_value/1000000.;
 
    if(values[i].prev_value==LONG_MIN)
        values_adjusted_1[i].prev_value=double("nan");
    else
        values_adjusted_1[i].prev_value=values[i].prev_value/1000000.;
 
    if(values[i].revised_prev_value==LONG_MIN)
        values_adjusted_1[i].revised_prev_value=double("nan");
    else
        values_adjusted_1[i].revised_prev_value=values[i].revised_prev_value/1000000.;
 
    if(values[i].forecast_value==LONG_MIN)
        values_adjusted_1[i].forecast_value=double("nan");
    else
        values_adjusted_1[i].forecast_value=values[i].forecast_value/1000000.;
    }
  Print("The first method to check and get calendar values");
  ArrayPrint(values_adjusted_1);
 
//--- 値を確認して取得するオプション2
  AdjustedCalendarValue values_adjusted_2[];
  ArrayResize(values_adjusted_2, total);
//--- 確認と調整を行って値をコピーする
  for(int i=0; i<total; i++)
    {
    values_adjusted_2[i].id=values[i].id;
    values_adjusted_2[i].event_id=values[i].event_id;
    values_adjusted_2[i].time=values[i].time;
    values_adjusted_2[i].period=values[i].period;
    values_adjusted_2[i].revision=values[i].revision;
    values_adjusted_2[i].impact_type=values[i].impact_type;
    //--- 値を確認して取得する
    if(values[i].HasActualValue())
        values_adjusted_2[i].actual_value=values[i].GetActualValue();
    else
        values_adjusted_2[i].actual_value=double("nan");
 
    if(values[i].HasPreviousValue())
        values_adjusted_2[i].prev_value=values[i].GetPreviousValue();
    else
        values_adjusted_2[i].prev_value=double("nan");
 
    if(values[i].HasRevisedValue())
        values_adjusted_2[i].revised_prev_value=values[i].GetRevisedValue();
    else
        values_adjusted_2[i].revised_prev_value=double("nan");
 
    if(values[i].HasForecastValue())
        values_adjusted_2[i].forecast_value=values[i].GetForecastValue();
    else
        values_adjusted_2[i].forecast_value=double("nan");
    }
  Print("The second method to check and get calendar values");
  ArrayPrint(values_adjusted_2);
 
//--- option 3 to get the values - without checks
  AdjustedCalendarValue values_adjusted_3[];
  ArrayResize(values_adjusted_3, total);
//--- 確認と調整を行って値をコピーする
  for(int i=0; i<total; i++)
    {
    values_adjusted_3[i].id=values[i].id;
    values_adjusted_3[i].event_id=values[i].event_id;
    values_adjusted_3[i].time=values[i].time;
    values_adjusted_3[i].period=values[i].period;
    values_adjusted_3[i].revision=values[i].revision;
    values_adjusted_3[i].impact_type=values[i].impact_type;
    //--- 値を確認せずに取得する
    values_adjusted_3[i].actual_value=values[i].GetActualValue();
    values_adjusted_3[i].prev_value=values[i].GetPreviousValue();
    values_adjusted_3[i].revised_prev_value=values[i].GetRevisedValue();
    values_adjusted_3[i].forecast_value=values[i].GetForecastValue();
    }
  Print("The third method to get calendar values - without checks");
  ArrayPrint(values_adjusted_3);
 }
/*
  We have received event values for country_code=EU: 1051
  Output the calendar values as they are
        [id] [event_id]              [time]            [period] [revision]       [actual_value]         [prev_value] [revised_prev_value]     [forecast_value] [impact_type] [reserved]
  [0] 144520 999500001 2021.01.04 12:00:00 2020.12.01 00:00:00         3             55200000             55500000 -9223372036854775808             55500000             2        ...
  [1] 144338 999520001 2021.01.04 23:30:00 2020.12.29 00:00:00         0           143100000           143900000 -9223372036854775808 -9223372036854775808             0        ...
  [2] 147462 999010020 2021.01.04 23:45:00 1970.01.01 00:00:00         0 -9223372036854775808 -9223372036854775808 -9223372036854775808 -9223372036854775808             0        ...
  [3] 111618 999010018 2021.01.05 12:00:00 2020.11.01 00:00:00         0             11000000             10500000 -9223372036854775808             11000000             0        ...
  [4] 111619 999010019 2021.01.05 12:00:00 2020.11.01 00:00:00         0             3100000             3100000             3200000             3100000             0        ...
  The first method to check and get calendar values
        [id] [event_id]              [time]            [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type]
  [0] 144520 999500001 2021.01.04 12:00:00 2020.12.01 00:00:00         3       55.20000     55.50000                 nan         55.50000             2
  [1] 144338 999520001 2021.01.04 23:30:00 2020.12.29 00:00:00         0     143.10000   143.90000                 nan             nan             0
  [2] 147462 999010020 2021.01.04 23:45:00 1970.01.01 00:00:00         0           nan         nan                 nan             nan             0
  [3] 111618 999010018 2021.01.05 12:00:00 2020.11.01 00:00:00         0       11.00000     10.50000                 nan         11.00000             0
  [4] 111619 999010019 2021.01.05 12:00:00 2020.11.01 00:00:00         0       3.10000     3.10000             3.20000         3.10000             0
  The second method to check and get calendar values
        [id] [event_id]              [time]            [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type]
  [0] 144520 999500001 2021.01.04 12:00:00 2020.12.01 00:00:00         3       55.20000     55.50000                 nan         55.50000             2
  [1] 144338 999520001 2021.01.04 23:30:00 2020.12.29 00:00:00         0     143.10000   143.90000                 nan             nan             0
  [2] 147462 999010020 2021.01.04 23:45:00 1970.01.01 00:00:00         0           nan         nan                 nan             nan             0
  [3] 111618 999010018 2021.01.05 12:00:00 2020.11.01 00:00:00         0       11.00000     10.50000                 nan         11.00000             0
  [4] 111619 999010019 2021.01.05 12:00:00 2020.11.01 00:00:00         0       3.10000     3.10000             3.20000         3.10000             0
  The third method to get calendar values - without checks
        [id] [event_id]              [time]            [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type]
  [0] 144520 999500001 2021.01.04 12:00:00 2020.12.01 00:00:00         3       55.20000     55.50000                 nan         55.50000             2
  [1] 144338 999520001 2021.01.04 23:30:00 2020.12.29 00:00:00         0     143.10000   143.90000                 nan             nan             0
  [2] 147462 999010020 2021.01.04 23:45:00 1970.01.01 00:00:00         0           nan         nan                 nan             nan             0
  [3] 111618 999010018 2021.01.05 12:00:00 2020.11.01 00:00:00         0       11.00000     10.50000                 nan         11.00000             0
  [4] 111619 999010019 2021.01.05 12:00:00 2020.11.01 00:00:00         0       3.10000     3.10000             3.20000         3.10000             0
*/

 

イベント頻度はMqlCalendarEvent構造体で設定されます。可能な値はリストで設定されます。ENUM_CALENDAR_EVENT_FREQUENCY

ID

説明

CALENDAR_FREQUENCY_NONE

Release frequency is not set

CALENDAR_FREQUENCY_WEEK

Released once a week

CALENDAR_FREQUENCY_MONTH

Released once a month

CALENDAR_FREQUENCY_QUARTER

Released once a quarter

CALENDAR_FREQUENCY_YEAR

Released once a year

CALENDAR_FREQUENCY_DAY

Released once a day

 

Event type is specified in the MqlCalendarEvent structure. 可能な値はリストで設定されます。ENUM_CALENDAR_EVENT_TYPE

ID

説明

CALENDAR_TYPE_EVENT

Event (meeting, speech, etc.)

CALENDAR_TYPE_INDICATOR

Indicator

CALENDAR_TYPE_HOLIDAY

Holiday

 

A sector of the economy an event is related to is specified in the MqlCalendarEvent structure. 可能な値はリストで設定されます。ENUM_CALENDAR_EVENT_SECTOR

ID

説明

CALENDAR_SECTOR_NONE

Sector is not set

CALENDAR_SECTOR_MARKET

Market, exchange

CALENDAR_SECTOR_GDP

国内総生産(Gross Domestic Product、GDP)

CALENDAR_SECTOR_JOBS

Labor market

CALENDAR_SECTOR_PRICES

Prices

CALENDAR_SECTOR_MONEY

Money

CALENDAR_SECTOR_TRADE

取引

CALENDAR_SECTOR_GOVERNMENT

Government

CALENDAR_SECTOR_BUSINESS

Business

CALENDAR_SECTOR_CONSUMER

Consumption

CALENDAR_SECTOR_HOUSING

Housing

CALENDAR_SECTOR_TAXES

Taxes

CALENDAR_SECTOR_HOLIDAYS

Holidays

 

Event importance is specified in the MqlCalendarEvent structure. 可能な値はリストで設定されます。ENUM_CALENDAR_EVENT_IMPORTANCE

ID

説明

CALENDAR_IMPORTANCE_NONE

Importance is not set

CALENDAR_IMPORTANCE_LOW

Low importance

CALENDAR_IMPORTANCE_MODERATE

Medium importance

CALENDAR_IMPORTANCE_HIGH

High importance

 

Measurement unit type used in displaying event values is specified in the MqlCalendarEvent structure. 可能な値はリストで設定されます。ENUM_CALENDAR_EVENT_UNIT

ID

説明

CALENDAR_UNIT_NONE

Measurement unit is not set

CALENDAR_UNIT_PERCENT

Percentage

CALENDAR_UNIT_CURRENCY

National currency

CALENDAR_UNIT_HOUR

Hours

CALENDAR_UNIT_JOB

Jobs

CALENDAR_UNIT_RIG

Drilling rigs

CALENDAR_UNIT_USD

USD

CALENDAR_UNIT_PEOPLE

People

CALENDAR_UNIT_MORTGAGE

Mortgage loans

CALENDAR_UNIT_VOTE

Votes

CALENDAR_UNIT_BARREL

Barrels

CALENDAR_UNIT_CUBICFEET

Cubic feet

CALENDAR_UNIT_POSITION

Non-commercial net positions

CALENDAR_UNIT_BUILDING

Buildings

 

In some cases, economic parameter values require a multiplier set in the MqlCalendarEvent structure. Possible multiplier values are set in the listing ENUM_CALENDAR_EVENT_MULTIPLIER

ID

説明

CALENDAR_MULTIPLIER_NONE

Multiplier is not set

CALENDAR_MULTIPLIER_THOUSANDS

Thousands

CALENDAR_MULTIPLIER_MILLIONS

Millions

CALENDAR_MULTIPLIER_BILLIONS

Billions

CALENDAR_MULTIPLIER_TRILLIONS

Trillions

 

Event's potential impact on a national currency rate is indicated in the MqlCalendarValue structure. 可能な値はリストで設定されます。ENUM_CALENDAR_EVENT_IMPACT

ID

説明

CALENDAR_IMPACT_NA

Impact is not set

CALENDAR_IMPACT_POSITIVE

Positive impact

CALENDAR_IMPACT_NEGATIVE

Negative impact

 

Event time is specified in the MqlCalendarEvent structure. 可能な値はリストで設定されます。ENUM_CALENDAR_EVENT_TIMEMODE

ID

説明

CALENDAR_TIMEMODE_DATETIME

ソースはイベントの正確な時間を公開します

CALENDAR_TIMEMODE_DATE

終日イベント

CALENDAR_TIMEMODE_NOTIME

ソースはイベントの時間を公開しない

CALENDAR_TIMEMODE_TENTATIVE

ソースはイベントの日を公開するが時間を公開しません。時間はイベントの発生時に指定されます。

 

参照

経済指標カレンダー