Обсуждение статьи "Использование Экономического календаря MQL5 для фильтрации новостей (Часть 2): Временное удаление и восстановление стоп-уровней во время выхода новостей"
Как я планирую использовать эти функции:
Я планирую использовать часть 1 статьи — «Предотвращение открытия новых сделок или закрытия открытых позиций в период ограничения торговли из-за новостей» — во всех своих советниках, запущенных на счетах проп-фирм.
Однако части 2 и 3 — удаление SL/TP, а затем их восстановление до и после периода ограничений на торговлю из-за новостей — я планирую использовать в отдельном советнике. Поскольку этот код проходит по всем открытым позициям на счетах, у меня может быть открыто более одного графика, и мне не нужно запускать его больше раз, чем необходимо. Я вручную перенастрою выбор символов на «USD, GBP, EUR», так как это единственные новости из «красной папки», которые, как я знаю по опыту, мне уже приходится фильтровать (у вас это будет по-другому).
Поэтому внес однострочное изменение в функцию RestoreStops().
Функция SuspendStops() не требовала изменений.
Судя по всему, мне не придется ничего менять в Части 3, так как мне нужны только: номер тикета, SL и TP.
Большое спасибо @Solomon Anietie Sunday
Я протестирую это в реальном режиме на демо-счете!
// I won't need this if statement, in the 2nd EA, as the 2nd EA only modifies trades,
// only need this is statement in the first EA (that opens trades)
if(!CanOpenNewTrade(_Symbol))
return; //+------------------------------------------------------------------+ //| Восстановление остановок после новостей (редактированная версия статьи для оригинала) | //+------------------------------------------------------------------+ bool RestoreStops(ulong ticket, double sl, double tp) { if (!PositionSelectByTicket(ticket)) return(false); string symbol= PositionGetString(POSITION_SYMBOL); // заменили исходную переменную «_Symbol» на «symbol» ENUM_POSITION_TYPE type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); double price = (type == POSITION_TYPE_BUY) ? SymbolInfoDouble(symbol, SYMBOL_BID) : //например, «_Symbol» теперь называется symbol SymbolInfoDouble(symbol, SYMBOL_ASK); double point = SymbolInfoDouble(symbol, SYMBOL_POINT); double minStopDist = SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL) * point; // Проверка безопасности: если цена пробила сохраненные уровни SL/TP, скорректируйте их до допустимых значений if(type == POSITION_TYPE_BUY) { if(sl != 0 && price <= sl) sl = price - minStopDist; if(tp != 0 && price >= tp) tp = price + minStopDist; } else // ПРОДАЖА { if(sl != 0 && price >= sl) sl = price + minStopDist; if(tp != 0 && price <= tp) tp = price - minStopDist; } // Полное восстановление остановок if(trade.PositionModify(ticket, sl, tp)) { PrintFormat("Restored SL/TP for #%I64u | SL=%.5f, TP=%.5f", ticket, sl, tp); return true; } else { PrintFormat("Failed to restore SL/TP for #%I64u | Error=%d", ticket, GetLastError()); return false; } }
- 2026.02.18
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Использование Экономического календаря MQL5 для фильтрации новостей (Часть 2): Временное удаление и восстановление стоп-уровней во время выхода новостей:
Цель части 2 четко определена: убрать уровни стоп-лосса и тейк-профита на время ограниченного новостного окна и безопасно восстановить их после его окончания.
Этот подход не пытается интерпретировать направление реакции рынка на новости. Он лишь снижает риск преждевременного срабатывания стопов, вызванного аномальными рыночными условиями.
Принципы восстановления стоп-уровней
Логика восстановления детерминирована:
Та же логика применяется к уровням тейк-профита.
Это обеспечивает:
Механизм по-прежнему работает по четко заданным правилам.
Автор: Solomon Anietie Sunday