経済指標カレンダー構造体
このセクションでは、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()関数で使用されます。
イベント値は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_value、forecast_value、prev_value、revised_prev_valueフィールドの値を確認/設定するメソッドを備えています。値が指定されていない場合、フィールドにはLONG_MIN (-9223372036854775808)が格納されます。
これらのフィールドに格納されている値は100万倍されることに注意してください。CalendarValueById、CalendarValueHistoryByEvent、 CalendarValueHistory、CalendarValueLastByEvent、 CalendarValueLastのいずれかの関数を使用して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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
CALENDAR_TIMEMODE_DATETIME
|
ソースはイベントの正確な時間を公開します
|
CALENDAR_TIMEMODE_DATE
|
終日イベント
|
CALENDAR_TIMEMODE_NOTIME
|
ソースはイベントの時間を公開しない
|
CALENDAR_TIMEMODE_TENTATIVE
|
ソースはイベントの日を公開するが時間を公開しません。時間はイベントの発生時に指定されます。
|
参照