Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Индикаторы

Economic Calendar Monitor and Cache for Backtesting on History - индикатор для MetaTrader 5

Просмотров:
62
Рейтинг:
(9)
Опубликован:
MQL5 Фриланс Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Короче говоря, встроенный экономический календарь MetaTrader 5 не синхронизирован (полностью) с историческими котировками .

Котировки помечаются временными метками в соответствии с часовыми поясами, действовавшими на сервере в момент формирования каждого соответствующего бара.

После формирования баров они остаются неизменными, включая их временные метки. С другой стороны, экономический календарь предоставляет информацию о событиях (прошлых, настоящих и будущих), привязанную к текущему часовому поясу сервера. Поскольку многие брокеры придерживаются определенного расписания часовых поясов, включая включение и выключение летнего режима, временные метки исторических событий могут быть сдвинуты на 1 час относительно связанных с ними баров примерно в течение половины каждого года.

Более того, брокеры иногда меняют часовые пояса более радикально, чем просто перевод на летнее время. В этом случае исторические котировки могут оказаться сдвинутыми на несколько часов влево или вправо относительно времени экономических событий, которые первоначально произошли на них, но теперь сообщаются календарем в обновленном часовом поясе сервера.

Учитывая, что новости приходят из разных стран с собственным графиком DST, а ваш сервер может быть расположен в регионе с другим графиком, время выхода новостей может визуально "прыгать" туда-сюда на графиках даже более своеобразным образом (например, в течение нескольких недель весной и осенью).

В интернете все это не кажется таким уж важным, но что, если мы хотим протестировать стратегию, основанную на новостях?

Да, можно сказать, что календарь не поддерживается в тестере MetaTrader нативно, но многие трейдеры любят торговать на новостях, а все остальные, кто не любит, должны следить за новостями, чтобы просто отойти от рынка, пока он не взбесился во время новостей. Поэтому бэктестирование с календарем очень важно. Поэтому очень логично экспортировать календарь во внешнее хранилище (файл, базу данных), а затем импортировать его в тестер. Один из таких инструментов архивации опыта работы с календарем в тестере был представлен в книге по алготрейдингу.

И здесь мы сталкиваемся с проблемой десинхронизации исторических цитат с историческими событиями. Для простоты эта проблема была оставлена в книге нерешенной.

Теперь она решена благодаря расширенной версии CalendarCache.mqh и показательному индикатору CalendarMonitorCachedTZ.mq5. Это лишь слегка измененная версия индикатора CalendarMonitorCached.mq5 из книги.

Индикатор отслеживает новостные события и динамически обновляет таблицу на графике с несколькими прошедшими и предстоящими событиями.

Вся работа по коррекции времени выполняется за кулисами - в другой публичной библиотеке TimeServerDST.mqh. Для лучшего понимания того, как работает коррекция времени, можно воспользоваться скриптомCalendarCSVForDates.mq5 и сравнить CSV-файлы с коррекцией и без нее бок о бок.

А вот как либа встроена в исходные коды обеих программ - скрипта и данного индикатора.

#include <TimeServerDST.mqh> // включение перед кэшем календаря обеспечивает поддержку фиксации часовых поясов
#include <MQL5Book/CalendarFilterCached.mqh>
#include <MQL5Book/CalendarCache.mqh>

Как и в оригинальном индикаторе, здесь есть строковый вход CalendarCacheFile, в котором можно указать имя cal-файла для записи или чтения.

Когда индикатор прикреплен к онлайн графику с пустым CalendarCacheFile, он работает со встроенным календарем "на лету".

Если индикатор выполняется с определенным именем в CalendarCacheFile и файл не существует, индикатор экспортирует записи календаря в кэш-файл (создает файл) и выходит из системы. На этом этапе необходимо/можно скорректировать временные метки (см. FixCachedTimesBySymbolHistory ниже).

Если индикатор выполняется с именем существующего кэш-файла в CalendarCacheFile, он загружает кэш и работает с этой копией так же, как и со встроенным календарем. Это особенно полезно для тестировщиков.

Монитор календаря в тестере считывает события из кэша

Не забывайте, что для тестера необходимо указать дополнительные файлы, в нашем случае - подготовленный онлайн-календарь, в директиве #property tester_file ИЛИ необходимо поместить календарь в общую папку C:/Users/<User>/AppData/Roaming/MetaQuotes/Terminal/Common/.

Конечно, кэш может быть также загружен в советник во время бэктестов и оптимизаций.

Входная строка FixCachedTimesBySymbolHistory обрабатывается следующим образом.

Если она пуста, то индикатор сохраняет кэш без коррекции времени.

Для включения коррекции времени при экспорте необходимо указать символ, который будет использоваться для эмпирического определения исторических часовых поясов сервера. Он работает на основе истории котировок H1, предпочтительно "XAUUSD" или "EURUSD".

С помощью этого ввода в новую версию индикатора добавлена всего пара строк:

         if(StringLen(FixCachedTimesBySymbolHistory))
            cache[].adjustTZonHistory(FixCachedTimesBySymbolHistory, true);

Метод adjustTZonHistory был специально внедрен в класс CalendarCache для корректировки временных меток, и его реализация использует внутренности TimeServerDST.mqh.

Метод должен вызываться только онлайн (не в тестере).

Обычно метод следует вызывать на объектах кэша, заполненных из встроенного календаря, сразу после заполнения. В противном случае, если кэш загружен из cal-файла, или если метод уже вызывался ранее, содержимое кэша может быть уже скорректировано. Тогда вы будете применять исправление за исправлением и получите неверные временные метки.

Второй параметр(true) указывает методу записывать границы примененных изменений в журнал. Примерно так:

Time fix-up started at 2021.07.19 00:30:00
2021.07.19 00:30:00: 148786 -10800 diff=-3600
2021.11.08 01:50:00: 135918 -7200 OK
2022.03.14 04:30:00: 161085 -10800 diff=-3600
2022.11.07 04:00:00: 165962 -7200 OK
2023.03.13 01:50:00: 168500 -10800 diff=-3600
2023.11.06 01:50:00: 169270 -7200 OK
2024.03.11 01:50:00: 181258 -10800 diff=-3600
2024.11.04 02:30:00: 208469 -7200 OK

Каждая строка содержит время и ID события, в котором было обнаружено новое расхождение, смещение серверного времени в момент события, и какая разница должна быть применена ко всем последующим меткам времени, чтобы устранить смещение серверного времени в момент кэширования календаря.

Прилагаемые mqh-файлы (CalendarFilter.mqh, CalendarCache.mqh, QuickSortStructT(Ref).mqh) содержат исправления и улучшения по сравнению с их оригинальными версиями из книги.


Обновления

11.11.2024 - небольшие исправления и обновления в CalendarFilter.mqh, CalendarCache.mqh;

22.11.2024 - небольшие исправления и улучшения в CalendarCache.mqh.



Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/53393

simple mt5 trade copier simple mt5 trade copier

Это копировальный шаблон

Bull Bear Volume Bull Bear Volume

Индикатор, который обеспечивает четкую визуализацию давления объема на каждую сторону рынка

Extreme highs and lows with tick prices Extreme highs and lows with tick prices

Отметка экстремальных максимумов и минимумов (OHLC) вместе с экстремальными ценами покупки и продажи

Quantum Gold Silver Trader Quantum Gold Silver Trader

Квантовая система - Использует квантовые состояния и вероятности для принятия решений.