test_calendar (EURUSD,M1) 2023.10.0615:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 336 K | 1 K | 187 K | 227 K
test_calendar (EURUSD,M1) 2023.11.0315:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 150 K | -8 K | 336 K | 297 K
test_calendar (EURUSD,M1) 2023.12.0815:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 199 K | -3 K | 150 K |
test_calendar (EURUSD,M1) 2024.01.0515:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 216 K | 1 K | 199 K | 173 K
test_calendar (EURUSD,M1) 2024.02.0215:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 353 K | 186 K | 216 K | 333 K
test_calendar (EURUSD,M1) 2024.03.0815:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 275 K | 220 K | 353 K | 229 K
test_calendar (EURUSD,M1) 2024.04.0515:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 303 K | 176 K | 275 K | 270 K
test_calendar (EURUSD,M1)
test_calendar (XAUUSD,M1) 2023.10.0615:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 336 K | 1 K | 187 K | 227 K
test_calendar (XAUUSD,M1) 2023.11.0314:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 150 K | -8 K | 336 K | 297 K
test_calendar (XAUUSD,M1) 2023.12.0815:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 199 K | -3 K | 150 K |
test_calendar (XAUUSD,M1) 2024.01.0515:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 216 K | 1 K | 199 K | 173 K
test_calendar (XAUUSD,M1) 2024.02.0215:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 353 K | 186 K | 216 K | 333 K
test_calendar (XAUUSD,M1) 2024.03.0815:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 275 K | 220 K | 353 K | 229 K
test_calendar (XAUUSD,M1) 2024.04.0515:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 303 K | 176 K | 275 K | 270 K
test_calendar (XAUUSD,M1)
BrokerDaylightSchedule (XAUUSD,M1) Server : FXOpen-MT5
BrokerDaylightSchedule (XAUUSD,M1) Time : 2024.04.1303:05:59
BrokerDaylightSchedule (XAUUSD,M1) Offset : GMT+3
BrokerDaylightSchedule (XAUUSD,M1) DST_US : server dst begins on the second Sunday of March (+1) and ends on the first Sunday of November (-1)
Trading.com
test_calendar (EURUSD,H4) 2023.10.0608:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 336 K | 1 K | 187 K | 227 K
test_calendar (EURUSD,H4) 2023.11.0307:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 150 K | -8 K | 336 K | 297 K
test_calendar (EURUSD,H4) 2023.12.0808:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 199 K | -3 K | 150 K |
test_calendar (EURUSD,H4) 2024.01.0508:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 216 K | 1 K | 199 K | 173 K
test_calendar (EURUSD,H4) 2024.02.0208:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 353 K | 186 K | 216 K | 333 K
test_calendar (EURUSD,H4) 2024.03.0808:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 275 K | 220 K | 353 K | 229 K
test_calendar (EURUSD,H4) 2024.04.0508:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 303 K | 176 K | 275 K | 270 K
test_calendar (EURUSD,H4)
test_calendar (USDJPY,H1) 2023.10.0608:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 336 K | 1 K | 187 K | 227 K
test_calendar (USDJPY,H1) 2023.11.0308:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 150 K | -8 K | 336 K | 297 K
test_calendar (USDJPY,H1) 2023.12.0808:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 199 K | -3 K | 150 K |
test_calendar (USDJPY,H1) 2024.01.0508:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 216 K | 1 K | 199 K | 173 K
test_calendar (USDJPY,H1) 2024.02.0208:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 353 K | 186 K | 216 K | 333 K
test_calendar (USDJPY,H1) 2024.03.0808:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 275 K | 220 K | 353 K | 229 K
test_calendar (USDJPY,H1) 2024.04.0508:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 303 K | 176 K | 275 K | 270 K
test_calendar (USDJPY,H1)
BrokerDaylightSchedule (USDJPY,H1) Server : Trading.comMarkets-MT5
BrokerDaylightSchedule (USDJPY,H1) Time : 2024.04.1220:06:30
BrokerDaylightSchedule (USDJPY,H1) Offset : GMT-4
BrokerDaylightSchedule (USDJPY,H1) DST_US : server dst begins on the second Sunday of March (+1) and ends on the first Sunday of November (-1)
I have tracked the root of the error: DST::IsEurope() wrongly returns true for these DST_US brokers because the algo implemented in DST::RolloverTime() is not reliable (i.e., scanning spreads).
test_calendar_fixed.mq5
#include "Calendar.mqh"#include "TimeZoneInfo.mqh"// https://www.mql5.com/en/code/48419voidOnStart()
{
CALENDAR Calendar;
if(Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, D'2023.10.1', TimeCurrent()))
{
Calendar.FilterByEventID(840030016); // NFP//Calendar.AutoDST();//-----------------------------------------------------------------------
EVENT eEvents[];
Calendar.GetEvents(eEvents); // Extract eventsfor(int i = ArraySize(eEvents) - 1; i >= 0; i--)
{
if(eEvents[i].TimeMode == CALENDAR_TIMEMODE_DATETIME ||
eEvents[i].TimeMode == CALENDAR_TIMEMODE_TENTATIVE)
{
//--- Convert server times -> GMT
eEvents[i].time += DST::TimeServerGMTOffset();
//--- Convert GMT -> back to server times (using the correct offsets)
eEvents[i].time = CTimeZoneInfo::ConvertTimeForPlace(eEvents[i].time, ZONE_ID_UTC, ZONE_ID_BROKER);
}
}
Calendar = eEvents; // Restore events//-----------------------------------------------------------------------Print(Calendar.ToString());
}
}
Now results are correct:
test_calendar_fixed (EURUSD,H4) 2023.10.0608:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 336 K | 1 K | 187 K | 227 K
test_calendar_fixed (EURUSD,H4) 2023.11.0308:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 150 K | -8 K | 336 K | 297 K
test_calendar_fixed (EURUSD,H4) 2023.12.0808:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 199 K | -3 K | 150 K |
test_calendar_fixed (EURUSD,H4) 2024.01.0508:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 216 K | 1 K | 199 K | 173 K
test_calendar_fixed (EURUSD,H4) 2024.02.0208:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 353 K | 186 K | 216 K | 333 K
test_calendar_fixed (EURUSD,H4) 2024.03.0808:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 275 K | 220 K | 353 K | 229 K
test_calendar_fixed (EURUSD,H4) 2024.04.0508:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 303 K | 176 K | 275 K | 270 K
test_calendar_fixed (EURUSD,H4)
test_calendar_fixed (USDJPY,H1) 2023.10.0608:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 336 K | 1 K | 187 K | 227 K
test_calendar_fixed (USDJPY,H1) 2023.11.0308:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 150 K | -8 K | 336 K | 297 K
test_calendar_fixed (USDJPY,H1) 2023.12.0808:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 199 K | -3 K | 150 K |
test_calendar_fixed (USDJPY,H1) 2024.01.0508:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 216 K | 1 K | 199 K | 173 K
test_calendar_fixed (USDJPY,H1) 2024.02.0208:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 353 K | 186 K | 216 K | 333 K
test_calendar_fixed (USDJPY,H1) 2024.03.0808:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 275 K | 220 K | 353 K | 229 K
test_calendar_fixed (USDJPY,H1) 2024.04.0508:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 303 K | 176 K | 275 K | 270 K
test_calendar_fixed (USDJPY,H1)
BrokerDaylightSchedule (USDJPY,H1) Server : Trading.comMarkets-MT5
BrokerDaylightSchedule (USDJPY,H1) Time : 2024.04.1220:11:17
BrokerDaylightSchedule (USDJPY,H1) Offset : GMT-4
BrokerDaylightSchedule (USDJPY,H1) DST_US : server dst begins on the second Sunday of March (+1) and ends on the first Sunday of November (-1)
Same code, different results according the chart symbol. I tested 2 brokers.
I have tracked the root of the error: DST::IsEurope() wrongly returns true for these DST_US brokers because the algo implemented in DST::RolloverTime() is not reliable (i.e., scanning spreads).
test_calendar_fixed.mq5
Now results are correct:
Hope this helps you to fix the lib.
Thank you very much for finding the bug, an example of how to reproduce it, and the proposed solution!
test_calendar (USDJPY,H1) 2023.10.0608:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 336 K | 1 K | 187 K | 227 K
test_calendar (USDJPY,H1) 2023.11.0308:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 150 K | -8 K | 336 K | 297 K
test_calendar (USDJPY,H1) 2023.12.0808:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 199 K | -3 K | 150 K |
test_calendar (USDJPY,H1) 2024.01.0508:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 216 K | 1 K | 199 K | 173 K
test_calendar (USDJPY,H1) 2024.02.0208:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 353 K | 186 K | 216 K | 333 K
test_calendar (USDJPY,H1) 2024.03.0808:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 275 K | 220 K | 353 K | 229 K
test_calendar (USDJPY,H1) 2024.04.0508:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 303 K | 176 K | 275 K | 270 K
test_calendar (USDJPY,H1)
test_calendar (EURUSD,H4) 2023.10.0608:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 336 K | 1 K | 187 K | 227 K
test_calendar (EURUSD,H4) 2023.11.0307:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 150 K | -8 K | 336 K | 297 K
test_calendar (EURUSD,H4) 2023.12.0808:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 199 K | -3 K | 150 K |
test_calendar (EURUSD,H4) 2024.01.0508:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 216 K | 1 K | 199 K | 173 K
test_calendar (EURUSD,H4) 2024.02.0208:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 353 K | 186 K | 216 K | 333 K
test_calendar (EURUSD,H4) 2024.03.0808:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 275 K | 220 K | 353 K | 229 K
test_calendar (EURUSD,H4) 2024.04.0508:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 303 K | 176 K | 275 K | 270 K
test_calendar (EURUSD,H4)
BrokerDaylightSchedule (EURUSD,H4) Server : Trading.comMarkets-MT5
BrokerDaylightSchedule (EURUSD,H4) Time : 2024.04.1317:40:05
BrokerDaylightSchedule (EURUSD,H4) Offset : GMT-4
BrokerDaylightSchedule (EURUSD,H4) DST_US : server dst begins on the second Sunday of March (+1) and ends on the first Sunday of November (-1)
Beware there is also another problem with DST_NONE brokers:
test_calendar (EURUSDm,M5) 2023.10.0612:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 336 K | 1 K | 187 K | 227 K
test_calendar (EURUSDm,M5) 2023.11.0312:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 150 K | -8 K | 336 K | 297 K
test_calendar (EURUSDm,M5) 2023.12.0812:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 199 K | -3 K | 150 K |
test_calendar (EURUSDm,M5) 2024.01.0512:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 216 K | 1 K | 199 K | 173 K
test_calendar (EURUSDm,M5) 2024.02.0212:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 353 K | 186 K | 216 K | 333 K
test_calendar (EURUSDm,M5) 2024.03.0812:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 275 K | 220 K | 353 K | 229 K
test_calendar (EURUSDm,M5) 2024.04.0512:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 303 K | 176 K | 275 K | 270 K
test_calendar (EURUSDm,M5)
test_calendar_fixed (EURUSDm,M5) 2023.10.0612:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 336 K | 1 K | 187 K | 227 K
test_calendar_fixed (EURUSDm,M5) 2023.11.0312:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 150 K | -8 K | 336 K | 297 K
test_calendar_fixed (EURUSDm,M5) 2023.12.0813:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 199 K | -3 K | 150 K |
test_calendar_fixed (EURUSDm,M5) 2024.01.0513:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 216 K | 1 K | 199 K | 173 K
test_calendar_fixed (EURUSDm,M5) 2024.02.0213:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 353 K | 186 K | 216 K | 333 K
test_calendar_fixed (EURUSDm,M5) 2024.03.0813:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 275 K | 220 K | 353 K | 229 K
test_calendar_fixed (EURUSDm,M5) 2024.04.0512:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 303 K | 176 K | 275 K | 270 K
test_calendar_fixed (EURUSDm,M5)
BrokerDaylightSchedule (EURUSDm,M5) Server : Exness-MT5Trial
BrokerDaylightSchedule (EURUSDm,M5) Time : 2024.04.1321:46:15
BrokerDaylightSchedule (EURUSDm,M5) Offset : GMT+0
BrokerDaylightSchedule (EURUSDm,M5) DST_NONE
Because exness servers never change into DST. New York is GMT-5 in winter months, So that NFP at 08:30 am NYC time should match (08:30 + 5:00 offset) = 13:30 Exness server time.
К огромному сожалению, MQ-календарь содержит ошибки во времени событий даже текущего дня.
Новость была в 07:30 (на альтернативном календаре сверху и на графике символа), а MQ-календарь сообщает (включая Web-версию), что новость будет через час.
subtract directly from 12:30 (instead of -3 + 31*/2):
Специально так не делал, т.к. допускаю в будущем возможность изменения входных параметров CalendarValueHistoryByEvent.
Специально так не делал, т.к. допускаю в будущем возможность изменения входных параметров CalendarValueHistoryByEvent.
you can use:
После обновления библиотеки Календарь должен быть синхронизирован с историей котировок на любом брокере.
...
В последней версии убрали сортировку по времени?
В последней версии убрали сортировку по времени?
Да. Был уверен, что MQ стали сортировать. Ошибся.
ЗЫ Добавил.
К сожалению, нельзя доверять текущему Календарю.
Вот пропуск в списке событий важной CHF-новости и соответствующая реакция на нее рынка.
А это другой календарь, там новость присутствует.
В Учебнике обнаружил кладезь информации по работе с Календарем. В частности, в Тестере.
Теперь мы можем выбрать индикатор CalendarMonitorCached.mq5 в тестере и увидеть в динамике, на истории, как меняется таблица новостей.
Новостной индикатор с кэшем календаря в тестере
Наличие кэша календаря позволяет тестировать торговые стратегии на новостях. Покажем это в следующем разделе.
Same code, different results according the chart symbol. I tested 2 brokers.
test_calendar.mq5
FXOpen:
Trading.com
I have tracked the root of the error: DST::IsEurope() wrongly returns true for these DST_US brokers because the algo implemented in DST::RolloverTime() is not reliable (i.e., scanning spreads).
test_calendar_fixed.mq5
Now results are correct:
Hope this helps you to fix the lib.
Same code, different results according the chart symbol. I tested 2 brokers.
I have tracked the root of the error: DST::IsEurope() wrongly returns true for these DST_US brokers because the algo implemented in DST::RolloverTime() is not reliable (i.e., scanning spreads).
test_calendar_fixed.mq5
Now results are correct:
Hope this helps you to fix the lib.
Thank you very much for finding the bug, an example of how to reproduce it, and the proposed solution!
I have made changes to the file DST.mqh.
Not totally fixed on DST_US brokers.
Beware there is also another problem with DST_NONE brokers:
Because exness servers never change into DST. New York is GMT-5 in winter months, So that NFP at 08:30 am NYC time should match (08:30 + 5:00 offset) = 13:30 Exness server time.К сожалению, нельзя доверять текущему Календарю.
К огромному сожалению, MQ-календарь содержит ошибки во времени событий даже текущего дня.
Новость была в 07:30 (на альтернативном календаре сверху и на графике символа), а MQ-календарь сообщает (включая Web-версию), что новость будет через час.