English
preview
От новичка до эксперта: Создание анимированного советника для новостей в MQL5 (VI) — Стратегия отложенных ордеров для торговли на новостях

От новичка до эксперта: Создание анимированного советника для новостей в MQL5 (VI) — Стратегия отложенных ордеров для торговли на новостях

MetaTrader 5Трейдинг |
72 0
Clemence Benjamin
Clemence Benjamin

Содержание:



Введение

Интеграция оповещений в предыдущей версии нашего советника стала значительным шагом вперед, превратив его в ценный инструмент для трейдеров, работающих на новостях вручную. Однако по-прежнему остается одно ключевое ограничение: советнику еще предстоит автоматизировать совершение сделок. Сегодня наша цель - устранить этот пробел, интегрировав класс CTrade для возможности автоматической торговли на основе новостных событий.

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

  • Удобный доступ к календарю новостей: Пользователи могут просматривать предстоящие экономические события непосредственно на графике, не нарушая свой рабочий процесс торговли или анализа.
  • Заголовки экономических новостей в режиме реального времени: Мы интегрировали Alpha Vantage в качестве нашего источника новостей, предоставляя актуальные заголовки, чтобы держать трейдеров в курсе событий.
  • Анализ встроенных индикаторов: Используя API MQL5 мы смогли извлекать данные технических индикаторов и отображать индивидуальные аналитические данные на выделенных полосах графика.
  • Анализ искусственного интеллекта: Мы подключили локальные модели искусственного интеллекта для получения информации о рынке, добавив сложные аналитические возможности, хотя это привело к некоторому замедлению скорости прокрутки по полосам движения.

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



Обзор стратегии интеграции отложенных ордеров

Каждый советник (EA) в конечном счете опирается на логику, которая определяет, когда и как он торгует. Наш советник «Заголовки новостей» до сих пор был сосредоточен на мощном визуальном восприятии и системе оповещения об экономических событиях. Мы создали полосы событий, новостные тикеры и даже аналитические материалы, основанные на искусственном интеллекте, которые прокручиваются на графике. Однако все эти инструменты, несмотря на свою полезность, по-прежнему оставляют за трейдером ответственность за совершение сделок вручную. Следующая логическая эволюция заключается в превращении этого советника в автономный торговый механизм, который не только информирует, но и решительно действует при появлении возможностей.

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

Необходимость торговой логики в советниках

Советник, работающий исключительно в информационных целях, каким бы впечатляющим он ни был визуально, остается пассивным. Для автоматизации торговли советнику необходимы четкие правила для следующего:

  1. Тайминг: Когда следует заключать сделки.
  2. Направление: Открывать длинные или короткие позиции — или оставаться нейтральным.
  3. Тип ордера: Следует ли размещать рыночные ордера, лимитные ордера или стоп-ордера.
  4. Контроль рисков: Каким образом определять уровни стоп-лосса и тейк-профита.
  5. Логика очистки: Как удалить или изменить ордера при изменении обстоятельств.

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

Наблюдения за рынком, лежащие в основе стратегии

За месяцы наблюдений и тестирования была выявлена закономерность в поведении рынка: рынки часто испытывают волатильность за несколько минут до важных экономических новостей. Ликвидность может немного уменьшиться, поскольку трейдеры и учреждения ждут свежей информации в стороне. Затем, по мере появления новостей, цены часто резко растут или падают, движимые как людьми-трейдерами, так и алгоритмическими системами, реагирующими на новые данные.

Это резкое движение после выхода новостей может быть:

  1. Пробой выше, если новость окажется неожиданной с положительной стороны.
  2. Падение ниже, если новость негативно воздействует на рынок.

Этот всплеск волатильности создает благодатную почву для стратегий отложенных ордеров, направленных на то, чтобы поймать пробой рынка в любую сторону.

Схема отложенных ордеров

Наш подход к торговле на новостях будет основываться на двух отложенных стоп-ордерах:

  1. Стоп-ордер на покупку, установленный выше недавней рыночной цены, чтобы ловить бычьи пробои.
  2. Стоп-ордер на продажу, установленный ниже рыночной цены, чтобы ловить медвежьи пробои.

Мы намерены разместить эти ордеры за определенное количество минут до запланированного выпуска новостей (в соответствии с нашими входными данными InpOrderMinutesBefore). Это дает советнику время для подготовки ордеров, сводя к минимуму воздействие ложного рыночного шума.

Логика изящна:

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

Без шага удаления оба ордера могли бы сработать в быстрой последовательности — явление, известное как «качели» или “внезапное изменение цены”. Это может привести к тому, что обе сделки закроются с убытком, что противоречит цели стратегии.

Управление рисками при торговле на новостях

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

В нашем планируемом советнике управление рисками не будет второстепенным — это основной принцип разработки.

Мы внедряем в нашу стратегию несколько уровней защиты:

1. Фиксированные расстояния между стоп-лоссом и тейк-профитом

Мы предоставляем InpStopLossPips и InpTakeProfitPips в качестве входных данных. Это позволяет точно контролировать, насколько далеко цена может зайти против нас, прежде чем мы сократим убытки, и как далеко мы планируем увеличить прибыль. Например, стоп-ордер на 10 пипсов и тейк-профит на 20 пипсов создают контролируемое соотношение прибыли и риска 2:1.

2. Компенсация спреда и размера тика

Перед размещением ордеров мы рассчитываем текущий спред и включаем его в смещение отложенного ордера. Это предотвращает “случайное” срабатывание наших ордеров из-за спреда при простых колебаниях спроса и предложения, сохраняя целостность наших предполагаемых уровней входа.

3. Динамические расчеты пипсов

Такие пары, как USDJPY, имеют другие значения в пипсах (0,01) по сравнению с EURUSD (0,0001). Наш советник считывает размер тика и цифры по инструменту, гарантируя, что наши уровни SL, TP и отложенных сделок рассчитаны правильно для каждого инструмента.

4. Очистка несработавших ордеров

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

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

Ознакомление с ролью CTrade

Центральное место в нашем плане занимает класс CTrade, высокоуровневая обёртка для торговых функций более низкого уровня MQL5. Без CTrade мы были бы вынуждены вручную создавать каждую структуру MqlTradeRequest и MqlTradeResult, обрабатывать повторные коды и управлять десятками сценариев ошибок. CTrade отвечает за:

  • Упаковку ордеров с надлежащей структурой.
  • Проверку разрешений на использование символов и маржевые требования.
  • Управление проскальзыванием с помощью настроек отклонения.
  • Отслеживание номеров тикетов для последующего изменения или удаления.
  • Ведение лога и обработка ошибок.

На практике, вместо написания страниц с логикой запроса, просто вызываем:

trade.BuyStop(volume, price, symbol, stoploss, takeprofit);
trade.SellStop(volume, price, symbol, stoploss, takeprofit);
trade.OrderDelete(ticket);

Это быстрее, чище и значительно снижает риск появления ошибок.

Наш план интеграции

Объединив все это воедино, наша интеграция отложенных ордеров будет следовать этому концептуальному принципу:

1. Просмотрите экономический календарь, чтобы определить следующее важное событие.

2. Рассчитайте разницу во времени между текущим моментом и событием.

3. Размещайте отложенные ордера за определенное количество минут до выхода новостей:

  • Рассчитайте базовую цену по ближайшему открытию M1.
  • Добавляйте или вычитайте смещения в пипсах, корректируя на спред.
  • Рассчитайте цены стоп-лосса и тейк-профита.

4. Используйте методы CTrade для отправки ордеров Buy Stop и Sell Stop.

5. Отслеживайте открытые позиции:

  • Как только сработает один ордер, удалите одноуровневый ордер.

6. Осуществляйте управление рисками:

  • Применяйте фиксированные расстояния SL/TP.
  • Убедитесь, что отложенные ордера отменены, если они больше не нужны.

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

Подводя итог, я подробно описал весь процесс разработки, выделив каждый шаг, связанный с интеграцией основанной на новостях торговой логики в наш советник. Чтобы дополнить это объяснение, я также включил схему, которая наглядно отображает этапы разработки и ключевые решения, которые необходимо принять на этом пути. Это дает исчерпывающий обзор для всех, кто хочет разобраться как в технических, так и в практических аспектах реализации такой стратегии на MQL5.

Development flow diagram

Схема процессов разработки

Описанные выше концепции закладывают основу для следующего этапа: фактической реализации на MQL5. На следующем этапе мы переведем этот план в программный код, подключим логику CTrade, интегрируем ее в наш цикл таймера и тщательно протестируем, как советник ведет себя во время новостных событий в режиме реального времени.

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


Реализация

На этом этапе основное внимание уделяется практическому процессу интеграции, предоставляется подробная разбивка кода и объяснения для обеспечения четкого понимания. Здесь мы вводим класс CTrade, который внедряем, включив его заголовочный файл в начало кода нашего советника, как показано в выделенном фрагменте ниже. Потратьте время на ознакомление с каждым фрагментом кода и сопровождающими его пояснениями, чтобы получить более глубокое представление о том, как работает интеграция и как различные компоненты соединяются в советнике.

1. Настройка и конфигурирование сделки

Сразу после наших стандартных холстов для отрисовки графиков и переменных AI‐insights мы объявляем один объект CTrade trade; вместе с несколькими глобальными параметрами: ordersPlaced, nextEventTime и двумя идентификаторами тикетов (ticketBuyStop, ticketSellStop). Этот блок находится рядом с нашими входными данными, показывающими объем, смещение пипсов, стоп‐лосс/тейк‐профит в пипсах и настройки “за несколько минут до”. Объединив их в разделе “ВХОДНЫЕ ДАННЫЕ ДЛЯ ИСПОЛНЕНИЯ ОРДЕРОВ” и создав один экземпляр CTrade, мы используем высокоуровневые методы торговой библиотеки MQL5, сохраняя при этом все параметры настраиваемыми из диалогового окна ввода советника.

#include <Trade/Trade.mqh>
//…
CTrade trade;
bool   ordersPlaced    = false;
datetime nextEventTime = 0;
ulong  ticketBuyStop   = 0;
ulong  ticketSellStop  = 0;
//--- ORDER EXECUTION INPUTS ---
input int    InpOrderMinutesBefore  = 3;    
input double InpOrderVolume         = 0.10; 
input double InpStopOffsetPips      = 5.0;  
input double InpStopLossPips        = 20.0; 
input double InpTakeProfitPips      = 40.0; 

2. Определение следующего новостного события

В ReloadEvents(), после выборки и сортировки сегодняшних событий с высокой/ средней/ низкой значимостью, мы вычисляем nextEventTime, находя самую раннюю временную метку только среди тех уровней важности, которые пользователь включил для торговли. Установка ordersPlaced = false и обнуление обеих переменных ticket при каждом обновлении списка событий гарантирует, что каждый новый цикл выпуска новостей начинается с чистого листа — без задерживающихся флажков или потерянных отложенных ордеров.

void ReloadEvents()
{
  // … calendar fetching and sorting …

  // pick next event only from enabled levels
  datetime th = INT_MAX;
  if(InpTradeHigh && ArraySize(highArr)>0) th = MathMin(th, highArr[0].time);
  if(InpTradeMed  && ArraySize(medArr)>0)  th = MathMin(th, medArr[0].time);
  if(InpTradeLow  && ArraySize(lowArr)>0)  th = MathMin(th, lowArr[0].time);
  nextEventTime = (th==INT_MAX ? 0 : th);

  // reset order flags
  ordersPlaced   = false;
  ticketBuyStop  = ticketSellStop = 0;
}

3. Выбор времени для окна отложенного ордера

Внутри функции OnTimer() мы сравниваем текущее серверное время (сейчас) с nextEventTime – InpOrderMinutesBefore*60. Как только стрелки часов попадают в это окно — и только один раз за событие, благодаря ordersPlaced guard мы начинаем устанавливать два отложенных стоп-ордера (на покупку и продажу). Такое разделение “когда торговать” и “как торговать” сохраняет нашу логику выбора времени и предотвращает повторный вход в рынок.

void OnTimer()
{
  datetime now       = TimeTradeServer();
  datetime placeTime = nextEventTime - InpOrderMinutesBefore*60;

  if(!ordersPlaced && nextEventTime>now && now>=placeTime)
  {
    // … compute prices and place orders …
    ordersPlaced = true;
  }

  // … rest of drawing, alerts, AI, etc. …
}

4. Расчет цен с точностью до пипса и размещение ордеров

Чтобы вычислить уровни цен, соответствующие размеру тика каждого инструмента, мы берем SYMBOL_POINT и получаем один «пипс" в виде десяти пунктов — даже при пересечении JPY. Затем находим точную свечу M1, открытую в заданной временной метке, с помощью iBarShift + iOpen. Смещения для входа, стоп‑лосса и тейк‑профита умножаются на пипс и добавляются или вычитаются из значения открытия свечи. Перед отправкой ордеров каждая необработанная цена проходит через NormalizeDouble(..., SYMBOL_DIGITS), чтобы соответствовать требованиям брокера к точности. Наконец, вызываем trade.SetExpertMagicNumber() и trade.BuyStop(...) / trade.SellStop(...). По сути, класс CTrade обрабатывает вызов функции OrderSend(), проверку результатов и создание отчетов об ошибках, поэтому код нашего советника остается лаконичным.

// inside the placement block in OnTimer()
double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
double pip   = point * 10.0;

// find the bar open at target time
int idx = iBarShift(_Symbol, PERIOD_M1, placeTime, false);
if(idx >= 0)
{
  double baseOpen = iOpen(_Symbol, PERIOD_M1, idx);
  double ask      = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
  double bid      = SymbolInfoDouble(_Symbol, SYMBOL_BID);
  double spreadPips = (ask - bid) / pip;

  double offsetP = (spreadPips + InpStopOffsetPips) * pip;
  double slP     = InpStopLossPips   * pip;
  double tpP     = InpTakeProfitPips * pip;

  double rawBuy  = baseOpen + offsetP;
  double rawSell = baseOpen - offsetP;
  double rawBsl  = rawBuy  - slP;
  double rawBtp  = rawBuy  + tpP;
  double rawSsl  = rawSell + slP;
  double rawStp  = rawSell - tpP;

  int d = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
  double buyPrice  = NormalizeDouble(rawBuy,  d);
  double sellPrice = NormalizeDouble(rawSell, d);
  double buySL     = NormalizeDouble(rawBsl,  d);
  double buyTP     = NormalizeDouble(rawBtp,  d);
  double sellSL    = NormalizeDouble(rawSsl,  d);
  double sellTP    = NormalizeDouble(rawStp,  d);

  trade.SetExpertMagicNumber(123456);
  trade.SetDeviationInPoints(10);

  ticketBuyStop  = trade.BuyStop (InpOrderVolume, buyPrice,  _Symbol, buySL,  buyTP) ? trade.ResultOrder() : 0;
  ticketSellStop = trade.SellStop(InpOrderVolume, sellPrice, _Symbol, sellSL, sellTP) ? trade.ResultOrder() : 0;
}

5. Очистка неиспользованных ордеров

Сразу после размещения отложенных ордеров советник продолжает опрос PositionSelect(_Symbol). Когда один из наших стоп-ордеров преобразуется в текущую позицию, мы определяем исполненную сторону с помощью PositionGetInteger(POSITION_TYPE) , а затем вызываем trade.OrderDelete() на противоположном тикете. Разделение этого действия на два отдельных оператора (один для удаления ордера, другой - для обнуления идентификатора тикета) делает логику предельно ясной — CTrade снова использует низкоуровневый протокол, гарантируя надежность нашей очистки.

// later in OnTimer()
if(ordersPlaced && PositionSelect(_Symbol))
{
  long ptype = PositionGetInteger(POSITION_TYPE);
  if(ptype==POSITION_TYPE_BUY && ticketSellStop>0)
  {
    trade.OrderDelete(ticketSellStop);
    ticketSellStop = 0;
  }
  if(ptype==POSITION_TYPE_SELL && ticketBuyStop>0)
  {
    trade.OrderDelete(ticketBuyStop);
    ticketBuyStop = 0;
  }
}

Соберем все вместе

Объединив эти разделы — входные данные и глобальные переменные, выбор событий, тайминг, расчет цены с точностью до пипса, размещение отложенных ордеров на основе CTrade и автоматическую очистку, ‑ мы превратили советник, ориентированный в первую очередь на показ, в полностью управляемый новостями автопилот. Заголовок Trade.mqh обеспечивает все необходимые настройки (форматирование ордеров, отправка /изменение / удаление, хранение тикетов /результатов), позволяя нашему советнику сосредоточиться на “что” (настройки сделок и тайминг событий), а не на “как” (построение исходных структур MqlTradeRequest). Для вашего удобства в конце этой статьи приведен полный интегрированный исходный код советника, все части которого собраны воедино и готовы к компиляции и загрузке в MetaTrader 5.


Тестирование

Предварительный результат тестирования:

2025.07.15 13:45:02.348  News Headline_EA (USDJPY.0,M1) CTrade::OrderSend: sell stop 0.10 USDJPY.0 at 147.922 sl: 148.128 tp: 147.522 [invalid price]
2025.07.15 13:49:02.373  News Headline_EA (USDJPY.0,M1) CTrade::OrderSend: buy stop 0.10 USDJPY.0 at 147.951 sl: 147.740 tp: 148.351 [invalid price]
2025.07.15 13:49:02.374  News Headline_EA (USDJPY.0,M1) CTrade::OrderSend: sell stop 0.10 USDJPY.0 at 147.929 sl: 148.140 tp: 147.529 [invalid price]

На ранней стадии тестирования советник столкнулся с несколькими ошибками “invalid price” (недействительная цена) при попытке выставить отложенные ордера Buy Stop и Sell Stop, что видно из таких записей в логе, как CTrade::OrderSend: sell stop 0.10 USDJPY.0 at 147.922 sl: 148.128 tp: 147.522 [invalid price]. Эти ошибки были вызваны двумя ключевыми упущениями при первоначальной реализации: во-первых, советник неадекватно обрабатывал размеры пипсов и тиков, зависящие от конкретного инструмента, и, во-вторых, он пытался рассчитать цены на основе котировок спроса и предложения в реальном времени, которые быстро колеблются и могут нарушать ограничения брокера, такие как минимальное расстояние до стоп-уровня. Чтобы решить эту проблему, мы пересмотрели логику, указав цену открытия последней завершенной свечи M1 за несколько минут до новостного события. Это обеспечило более стабильную и совместимую привязку для расчета ожидаемых цен входа.

Кроме того, мы динамически вычислили размер инструмента в пипсах, используя SymbolInfoDouble(SYMBOL_POINT), и рассчитали значения пипсов, используя масштабирование размера тика, что обеспечивает согласованность для таких инструментов, как USDJPY, которые обычно используют 3 цифры после запятой (0,001), по сравнению с 5—значными инструментами, такими как EURUSD (0,00010). Все рассчитанные цены также были нормализованы с использованием NormalizeDouble(цена, цифры), чтобы соответствовать точности инструмента. Это двойное усовершенствование — стабильная базовая цена и корректное форматирование цены — гарантировало, что все отложенные ордера теперь находятся в допустимых диапазонах, полностью устранило недопустимые ценовые ошибки и сделало советник безопасным и адаптируемым к любой валютной паре.

Финальное тестирование

Во время тестирования я сосредоточился на предстоящем важном событии: выступлении главы Банка Англии Бейли (Bailey), которое появилось в календаре советника в виде пакета "красных новостей". Во время съемки тестовых изображений советник корректно отображал обратный отсчет “осталось 5 минут” до этого события. Зная, что наша логика настроена на выставление отложенных ордеров за 3 минуты до запланированного выпуска, я намеренно подождал еще 2 минуты, чтобы посмотреть, начнет ли советник настройки торговли так, как ожидалось.

Окно оповещения о предстоящем событии через 5 минут

В конфигурации по умолчанию ордера размещаются ровно за 3 минуты до начала события. Однако практическое тестирование такого советника для торговли на новостях сопряжено с уникальными трудностями, особенно потому, что тестер стратегий MetaTrader 5 не в полной мере подходит для моделирования событий экономического календаря в режиме реального времени. Тестер стратегий работает, воспроизводя тики, но ему неизвестны данные календаря в реальном времени, и он не поддерживает асинхронные HTTP-запросы таким же образом, как при работе в режиме реального времени. Это означает, что мы не можем “быстро перематывать” к выпускам новостей в тестере или проверять всю работу советника - от получения заголовков новостей до размещения сделок — в реальных временных условиях.

Тестирование советника для выставления отложенных ордеров

Чтобы преодолеть это ограничение, одним из практических методов тестирования является настройка входного параметра, определяющего, за сколько минут до новостного события выставляются отложенные ордера. Например, предположим, что через 50 минут запланировано реальное новостное событие и вы не хотите ждать его почти час. Вместо этого вы можете временно увеличить время выполнения отложенного ордера с 3 минут по умолчанию, скажем, до 45 минут. Таким образом, вы можете проверить, быстро ли советник запускает свою логику размещения ордеров, без длительного периода ожидания. Если он успешно размещает ордера при использовании этого измененного временного смещения, это дает уверенность в том, что логика автоматизации советника также будет корректно работать ближе к событию в реальных сценариях.

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



Заключение

От простой системы отображения новостей и событий мы перешли к сложному решению для торговли на новостях и их отображения, основанному на надежной стратегии отложенных ордеров. За время этого путешествия мы на собственном опыте убедились в замечательной гибкости MQL5, который легко интегрируется с внешними системами — от движков искусственного интеллекта, новостных API-интерфейсов до мощных встроенных аналитических инструментов платформы. Этот процесс был поистине потрясающим, раскрывая практически бесконечные возможности, которые предлагает MQL5 для алгоритмической торговли.

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

В этой текущей версии мы провели тестирование без установки ключа News API и без подключения к серверу ИИ. Этот осознанный выбор позволил нам полностью сосредоточиться на совершенствовании торговой логики, обеспечении стабильности и избежании перегрузки производительности во время тестов. Даже без активной интеграции мы наблюдали плавный и надежный процесс обработки новостных событий и размещения сделок.

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

Несмотря на то, что советник уже обладает большим функционалом, в нем остается достаточно места для дополнительных улучшений. Если позволят время и возможности, мы планируем публиковать будущие версии с еще более расширенными возможностями.

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


Основные уроки

УрокОписание
Обработка событий с помощью OnTimerИспользование функции OnTimer() позволяет вашему советнику выполнять действия по фиксированному плану, такие как проверка времени выхода новостей, обновление графики или управление сделками, не полагаясь на новые тики.
Использование CTrade для управления ордерамиКласс CTrade упрощает размещение, изменение и закрытие ордеров без написания низкоуровневого кода торгового запроса, обеспечивая более стабильную и обслуживаемую торговую логику.
Управление динамическими массивамиРабота с массивами на MQL5, такая как изменение их размера и сортировка, имеет решающее значение для управления списками событий, ценовыми данными или другими динамическими наборами данных.
Обработка и синтаксический анализ строкАнализ JSON- или текстовых ответов, обрезка строк и обработка подстрок необходимы при интеграции веб-API или создании пользовательских сообщений в вашем советнике.
Принципы управления рискамиПравильный расчет размеров лотов, расстояний стоп-лосса и тейк-профита имеет основополагающее значение для сохранения работоспособности счета и снижения подверженности непредсказуемым скачкам цен во время новостных событий.
Интеграция WebRequestMQL5 позволяет отправлять HTTP/HTTPS запросы на внешние серверы, включая такие функции, как получение заголовков новостей или прогнозов с помощью искусственного интеллекта, что добавляет мощные внешние данные в торговые стратегии.
Графический рисунок на «холсте»CCanvas и аналогичные классы позволяют создавать пользовательские визуальные эффекты на графиках, от прокручиваемого текста до графики, что позволяет создавать расширенные оверлеи пользовательского интерфейса непосредственно на графиках MetaTrader 5.
Точность по конкретному символуКаждый символ может иметь разный размер в точках и пипсах, а также десятичные цифры. Всегда корректируйте расчеты, такие как смещение цены и SL/TP, в соответствии с точностью символа, чтобы избежать ошибок ордера.
МагикиМагики однозначно идентифицируют ордера от конкретного советника, позволяя безопасно управлять позициями и избегать конфликтов с другими советниками или сделок, совершаемых вручную.
Отладка и ведение логаИспользование механизмов Print(), Alert() и ведения лога помогает отслеживать ошибки и наблюдать за поведением советника во время разработки и реальной торговли.


Содержимое вложения

Имя файлаВерсияОписание
News Headline EA.mq51.10Советник MetaTrader 5 сочетает в себе события экономического календаря, заголовки новостей Alpha Vantage, информацию о технических индикаторах, аналитику рынка с использованием ИИ, оповещения, push-уведомления и автоматическое выполнение торговых операций на новостях с динамической обработкой пипсов.
download_model.py
Скрипт на Python, который загружает и сохраняет модель машинного обучения, необходимую для получения информации о рынке с помощью ИИ. Гарантирует, что компонент ИИ советника имеет необходимый файл модели, доступный локально для прогнозирования.
serve_insights.pyВеб-сервис на Python, который запускается локально и принимает запросы HTTP POST от советника и отвечает на них аналитическими данными о рынке, сгенерированными ИИ. Действует как серверная часть искусственного интеллекта для получения данных о полосах в режиме реального времени в советнике.

К содержанию

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/18754

Прикрепленные файлы |
download_model.py (0.28 KB)
serve_insights.py (1.77 KB)
Особенности написания Пользовательских Индикаторов Особенности написания Пользовательских Индикаторов
Написание пользовательских индикаторов в торговой системе MetaTrader 4
Создание самооптимизирующихся советников на MQL5 (Часть 3): Динамическое следование за трендом и возврат к среднему значению Создание самооптимизирующихся советников на MQL5 (Часть 3): Динамическое следование за трендом и возврат к среднему значению
Финансовые рынки обычно классифицируются как находящиеся во флэте (боковом движении) либо в тренде. Такой статичный взгляд на рынок может облегчить нам торговлю в краткосрочной перспективе. Однако он оторван от реалий рынка. В этой статье мы попытаемся лучше понять, как именно финансовые рынки перемещаются между этими двумя возможными режимами и как мы можем использовать наше новое понимание поведения рынка, чтобы обрести уверенность в наших алгоритмических торговых стратегиях.
Особенности написания экспертов Особенности написания экспертов
Написание и тестирование экспертов в торговой системе MetaTrader 4.
Упрощаем торговлю на новостях (Часть 6): Совершаем сделки (III) Упрощаем торговлю на новостях (Часть 6): Совершаем сделки (III)
В этой статье будет реализована сортировка новостей для отдельных новостных событий на основе их идентификаторов. Кроме того, предыдущие запросы SQL будут улучшены для предоставления дополнительной информации или сокращения времени выполнения запроса. Код, созданный в предыдущих статьях, станет работоспособным.