MQL5Book/Scripts/p7/CalendarStatsByEvent.mq5

171 lines
9.7 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:09:41 +02:00
//+------------------------------------------------------------------+
//| CalendarStatsByEvent.mq5 |
//| Copyright 2022, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property description "Output a table of calendar statistics by event kind for specific range of days and country or currency."
#property script_show_inputs
#include "..\..\Include\PRTF.mqh"
#include "..\..\Include\Defines.mqh"
#include "..\..\Include\QuickSortStructT.mqh"
#define DAY_LONG (60 * 60 * 24)
#define WEEK_LONG (DAY_LONG * 7)
#define MONTH_LONG (DAY_LONG * 30)
#define YEAR_LONG (MONTH_LONG * 12)
enum ENUM_CALENDAR_SCOPE
{
SCOPE_DAY = DAY_LONG, // Day
SCOPE_WEEK = WEEK_LONG, // Week
SCOPE_MONTH = MONTH_LONG, // Month
SCOPE_YEAR = YEAR_LONG, // Year
};
input string CountryOrCurrency = "EU";
input ENUM_CALENDAR_SCOPE Scope = SCOPE_YEAR;
//+------------------------------------------------------------------+
//| Struct for event statistics |
//+------------------------------------------------------------------+
struct CalendarEventStats
{
static const string importances[];
ulong id;
string name;
string importance;
int count;
};
static const string CalendarEventStats::importances[] = {"None", "Low", "Medium", "High"};
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
MqlCalendarEvent events[];
MqlCalendarValue values[];
CalendarEventStats stats[];
const datetime from = TimeCurrent() - Scope;
const datetime to = TimeCurrent() + Scope;
if(StringLen(CountryOrCurrency) == 2)
{
PRTF(CalendarEventByCountry(CountryOrCurrency, events));
}
else
{
PRTF(CalendarEventByCurrency(CountryOrCurrency, events));
}
for(int i = 0; i < ArraySize(events); ++i)
{
ResetLastError();
if(CalendarValueHistoryByEvent(events[i].id, values, from, to))
{
CalendarEventStats event = {events[i].id, events[i].name,
CalendarEventStats::importances[events[i].importance], ArraySize(values)};
PUSH(stats, event);
}
else
{
if(_LastError != 0)
{
PrintFormat("Error %d for %lld", _LastError, events[i].id);
}
}
}
SORT_STRUCT(CalendarEventStats, stats, count);
ArrayReverse(stats);
ArrayPrint(stats);
}
//+------------------------------------------------------------------+
/*
CalendarEventByCountry(CountryOrCurrency,events)=82 / ok
[id] [name] [importance] [count]
[ 0] 999520001 "CFTC EUR Non-Commercial Net Positions" "Low" 79
[ 1] 999010029 "ECB President Lagarde Speech" "High" 69
[ 2] 999010035 "ECB Executive Board Member Elderson Speech" "Medium" 37
[ 3] 999030027 "Core CPI" "Low" 36
[ 4] 999030026 "CPI" "Low" 36
[ 5] 999030025 "CPI excl. Energy and Unprocessed Food y/y" "Low" 36
[ 6] 999030024 "CPI excl. Energy and Unprocessed Food m/m" "Low" 36
[ 7] 999030010 "Core CPI m/m" "Medium" 36
[ 8] 999030013 "CPI y/y" "Low" 36
[ 9] 999030012 "Core CPI y/y" "Low" 36
[10] 999040006 "Consumer Confidence Index" "Low" 36
[11] 999030011 "CPI m/m" "Medium" 36
[12] 999010033 "ECB Executive Board Member Schnabel Speech" "Medium" 35
[13] 999010014 "ECB Vice President de Guindos Speech" "Medium" 34
[14] 999010020 "ECB Executive Board Member Lane Speech" "Medium" 31
[15] 999010021 "ECB Supervisory Board Chair Enria Speech" "Medium" 31
[16] 999010032 "ECB Executive Board Member Panetta Speech" "Medium" 30
[17] 999500003 "S&P Global Composite PMI" "Medium" 26
[18] 999500002 "S&P Global Services PMI" "Medium" 26
[19] 999500001 "S&P Global Manufacturing PMI" "Medium" 26
[20] 999060001 "Sentix Investor Confidence" "Low" 24
[21] 999010031 "ECB Supervisory Board Member Fernandez-Bollo Speech" "Medium" 22
[22] 999010016 "Current Account" "Low" 20
[23] 999010017 "Current Account n.s.a." "Low" 20
[24] 999050001 "ZEW Economic Sentiment Indicator" "Medium" 19
[25] 999010018 "ECB M3 Money Supply y/y" "Low" 19
[26] 999010026 "ECB Non-Financial Corporations Loans y/y" "Low" 19
[27] 999010023 "Official Reserve Assets" "Low" 19
[28] 999010027 "ECB Private Sector Loans y/y" "Low" 19
[29] 999010034 "ECB Supervisory Board Member McCaul Speech" "Medium" 19
[30] 999010019 "ECB Households Loans y/y" "Low" 19
[31] 999040008 "Industry Selling Price Expectations" "Low" 18
[32] 999040007 "Consumer Price Expectations" "Low" 18
[33] 999040005 "Economic Sentiment Indicator" "Low" 18
[34] 999040004 "Services Sentiment Indicator" "Low" 18
[35] 999040003 "Industrial Confidence Indicator" "Low" 18
[36] 999030022 "CPI excl. Tobacco y/y" "Low" 18
[37] 999030021 "CPI excl. Tobacco m/m" "Medium" 18
[38] 999030020 "Unemployment Rate" "Medium" 18
[39] 999030019 "Trade Balance n.s.a." "Medium" 18
[40] 999030018 "Trade Balance" "Medium" 18
[41] 999030017 "GDP y/y" "Medium" 18
[42] 999030016 "GDP q/q" "High" 18
[43] 999030015 "Construction Output y/y" "Low" 18
[44] 999030014 "Construction Output m/m" "Low" 18
[45] 999030008 "Industrial Production y/y" "Low" 18
[46] 999030007 "Industrial Production m/m" "Medium" 18
[47] 999030006 "PPI y/y" "Low" 18
[48] 999030005 "PPI m/m" "Medium" 18
[49] 999030004 "Retail Sales y/y" "Medium" 18
[50] 999030003 "Retail Sales m/m" "High" 18
[51] 999010001 "ECB Non-monetary Policy Meeting" "Medium" 18
[52] 999020001 "Economic and Financial Affairs Council Meeting" "Medium" 18
[53] 999010015 "ECB Marginal Lending Facility Rate Decision" "High" 16
[54] 999010024 "ECB Monetary Policy Statement" "Medium" 16
[55] 999010006 "ECB Deposit Facility Rate Decision" "High" 16
[56] 999010003 "ECB Monetary Policy Press Conference" "High" 16
[57] 999010007 "ECB Interest Rate Decision" "High" 16
[58] 999020003 "EU Leaders Summit" "High" 15
[59] 999020002 "Eurogroup Meeting" "Medium" 15
[60] 999500004 "S&P Global Construction PMI" "Medium" 13
[61] 999030028 "Employment Level" "Low" 12
[62] 999030001 "Employment Change q/q" "High" 12
[63] 999030002 "Employment Change y/y" "Medium" 12
[64] 999010002 "ECB Monetary Policy Meeting Accounts" "Medium" 10
[65] 999010008 "ECB Economic Bulletin" "Medium" 8
[66] 999030023 "Wage Costs y/y" "Medium" 6
[67] 999030009 "Labour Cost Index" "Low" 6
[68] 999010025 "ECB Bank Lending Survey" "Low" 6
[69] 999010030 "ECB Supervisory Board Member af Jochnick Speech" "Medium" 4
[70] 999010022 "ECB Supervisory Board Member Hakkarainen Speech" "Medium" 3
[71] 999010028 "ECB Financial Stability Review" "Medium" 3
[72] 999010009 "ECB Targeted LTRO" "Medium" 2
[73] 999010036 "ECB Supervisory Board Member Tuominen Speech" "Medium" 1
*/
//+------------------------------------------------------------------+