MQL5: Парсинг Экономического Календаря Встроенными Средствами

MQL5: Парсинг Экономического Календаря Встроенными Средствами MQL4 / MQL5 (MetaTrader)
Подробная инструкция по реализации парсинга экономического календаря в MQL5 с использованием встроенных функций. Узнайте, как получать и обрабатывать данные о событиях для вашей торговой стратегии.
Суть: Реализация парсинга экономического календаря в MQL5 осуществляется с помощью встроенных функций, таких как CalendarEventTotal(), CalendarEventGet(), CalendarValueTotal() и CalendarValueGet(), которые позволяют получать структурированные данные о предстоящих и прошедших экономических событиях.

Исходный код

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


//+------------------------------------------------------------------+
//|                                     EconomicCalendarParser.mq5 |
//|                                             Copyright 2023, FinFluct |
//|                                                https://finfluct.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, FinFluct"
#property link      "https://finfluct.com"
#property version   "1.00"
#property script_show_inputs

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Print("--- Запуск парсинга экономического календаря ---");

   // Получаем общее количество событий в календаре
   int totalEvents = CalendarEventTotal();
   PrintFormat("Всего событий в календаре: %d", totalEvents);

   // Структура для хранения данных события
   MQL5::CalendarEvent event;

   // Итерируем по всем событиям
   for (int i = 0; i < totalEvents; i++)
     {
      // Получаем событие по индексу
      if (CalendarEventGet(i, event))
        {
         PrintFormat("\n--- Событие #%d ---", i);
         PrintFormat("  Время: %s", TimeToString(event.time, TIME_DATE|TIME_SECONDS));
         PrintFormat("  Валюта: %s", event.currency);
         PrintFormat("  Важность: %s", EnumToString(event.impact));
         PrintFormat("  Название: %s", event.event_name);
         PrintFormat("  Страна: %s", event.country);
         PrintFormat("  URL: %s", event.url);

         // Получаем значения для данного события (фактическое, прогноз, предыдущее)
         // CalendarValueTotal обычно возвращает 1, если значения существуют, или 0, если нет.
         int totalValues = CalendarValueTotal(event.id);
         if (totalValues > 0)
           {
            MQL5::CalendarValue value;
            if (CalendarValueGet(event.id, value))
              {
               PrintFormat("  Значения:");
               PrintFormat("    Фактическое: %s %s", value.actual_value, value.actual_unit);
               PrintFormat("    Прогноз: %s %s", value.forecast_value, value.forecast_unit);
               PrintFormat("    Предыдущее: %s %s", value.previous_value, value.previous_unit);
               PrintFormat("    Пересмотренное: %s %s", value.revised_value, value.revised_unit);
              }
            else
              {
               Print("  Не удалось получить значения для события.");
              }
           }
         else
           {
            Print("  Нет числовых значений для этого события.");
           }
        }
      else
        {
         PrintFormat("Не удалось получить событие по индексу %d", i);
        }
     }

   Print("\n--- Парсинг экономического календаря завершен ---");
  }
//+------------------------------------------------------------------+

Разбор параметров

  • MQL5::CalendarEvent: Структура, содержащая подробную информацию об экономическом событии, такую как время, валюта, важность, название, страна и URL.
  • MQL5::CalendarValue: Структура, хранящая числовые данные события: фактическое значение (actual_value), прогноз (forecast_value), предыдущее значение (previous_value) и пересмотренное значение (revised_value), а также их единицы измерения.
  • CalendarEventTotal(): Функция, возвращающая общее количество экономических событий, доступных в календаре терминала.
  • CalendarEventGet(int index, MQL5::CalendarEvent& event): Функция, заполняющая структуру event данными экономического события по указанному index.
  • CalendarValueTotal(ulong event_id): Функция, возвращающая количество числовых значений, связанных с конкретным экономическим событием, идентифицируемым по event_id. Обычно возвращает 1, если значения существуют, или 0, если их нет.
  • CalendarValueGet(ulong event_id, MQL5::CalendarValue& value): Функция, заполняющая структуру value числовыми данными (фактическое, прогноз, предыдущее) для события с указанным event_id.
  • event.impact: Поле структуры MQL5::CalendarEvent, представляющее важность события (например, CALENDAR_IMPACT_LOW, CALENDAR_IMPACT_MEDIUM, CALENDAR_IMPACT_HIGH).

Как запустить

Для запуска данного скрипта выполните следующие шаги:

1. Откройте MetaEditor (IDE для MQL5), который обычно запускается из вашего терминала MetaTrader 5 нажатием клавиши F4.

2. Создайте новый скрипт (File -> New -> Script) и назовите его, например, EconomicCalendarParser.mq5.

3. Скопируйте представленный выше код и вставьте его в файл EconomicCalendarParser.mq5, заменив существующее содержимое.

4. Скомпилируйте скрипт, нажав F7 или кнопку «Compile» на панели инструментов. Убедитесь, что нет ошибок компиляции.

5. Откройте терминал MetaTrader 5. В окне «Навигатор» (Ctrl+N) найдите раздел «Скрипты».

6. Перетащите скрипт EconomicCalendarParser на любой график. Скрипт выполнится один раз и выведет всю информацию об экономических событиях в закладку «Эксперты» (Experts) окна «Инструменты» (Ctrl+T). Если вы хотите использовать данные календаря в советнике, который постоянно работает, вам потребуется интегрировать этот функционал в цикл обработки тиков или таймер, как это делается, например, при реализации трейлинг-стопа по Parabolic SAR, о чем можно прочитать в статье MQL5: Трейлинг-стоп по Parabolic SAR с динамическим шагом. Для более сложных взаимодействий между терминалами, например, для передачи данных календаря, можно использовать Named Pipes, как описано в Связь между терминалами MT5 через Named Pipes на MQL5.

Оцените статью
FinFluct