Обложка: Три торговых фильтра без оптимизируемых параметров

Три торговых фильтра без оптимизируемых параметров

Томас Неснидал

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

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

Примечание редакции TLAP. Термин «без параметров» относится к самим фильтрам, а не ко всей стратегии: в базовой модели остаются ATR(14), множитель 1,50 и выбранные правила сессии. В оригинале автор обещает нулевой риск переобучения и универсальную применимость. Эти обещания не доказаны: выбор рынка, направления условия и сочетания фильтров по лучшему результату тоже способен подгонять систему под историю. Разница разобрана в материале о переоптимизации советников.

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

Риск подгонки под историю реален и серьёзен.

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

Когда начинаются реальные сделки, эта иллюзия способна рассыпаться, причинив ущерб и счёту, и уверенности трейдера.

Это в очередной раз подтверждает, что трейдинг сложен.

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

Но подождите.

Означает ли это, что любая попытка улучшить стратегию обязательно ведёт к переобучению?

Можно ли улучшать правила, уменьшая риск подгонки?

И как добиться того, чтобы найденное улучшение сохранилось после перехода от истории к поступающим данным?

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

Один из подходов — тщательная проверка устойчивости. Качественные процедуры такой проверки нередко важнее самой исходной идеи.

Но в этом выпуске Empowered Trader я рассматриваю другие приёмы. Проверку устойчивости оставим для отдельного разбора.

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

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

Особенно интересны мне фильтры без настраиваемых числовых параметров.

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

Автор связывает отсутствие настраиваемых параметров с меньшим риском переоптимизации.

Как устроен этот подход?

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

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

Вы добавляете условие к стратегии и сравниваете результаты. Крутить период или порог внутри этого условия уже не требуется.

В исходнике я называю риск переобучения «близким к нулю». Ниже редакция отдельно поясняет ограничения этого утверждения.

Из моего опыта, простота делает эти приёмы удобными для проверки на разных рынках. Но результат конкретного теста всё равно необходимо оценивать отдельно.

Сегодня я покажу три таких фильтра, которые нашёл или разработал и использовал в своей работе.

Будут правила внедрения и статистика «до/после», чтобы можно было сравнить влияние каждого условия.

Материал первоначально подготовлен для клуба Empowered Trader.

Итак, начнём.

Базовая модель

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

Я взял простую пробойную модель. Точка отсчёта — закрытие предыдущего дня, CloseD(1). Расстояние до уровня входа — AvgTrueRange(14) × Fract, где Fract = 1,50. По словам автора, этот множитель немного оптимизировался; соседние значения также давали приемлемый результат. Позиция закрывается в конце дня. Модель соответствует подходу, который автор разбирает в своём 14-дневном Breakout Strategy Challenge.

О коде. Ниже приведены учебные фрагменты EasyLanguage, а не готовый к запуску советник. Исправлены очевидные опечатки CloseD(l) → CloseD(1), vaue3 → value3 и пробел в имени BO level → BOLevel; логика условий сохранена. Для компиляции нужны объявления переменных и проверка настроек платформы. Код не запускался на реальном счёте. ATR(14) здесь рассчитывается по 14 барам 30-минутного графика, не по 14 дням.

Input:
Fract(1.50);

{Точка инициации}
myPOI = CloseD(1); //Yesterday’s daily CLOSE

{Расстояние до пробоя}
myDistance = AvgTrueRange(14) * Fract;

{Уровень входа при пробое – рассчитывает, ГДЕ входить}
BOLevel = myPOI + myDistance;

{Ордер на вход}
If (MarketPosition =	0 or time = SessionEndTime(0, 1))
then Buy next bar at BOLevel stop;

{Выход в конце дня}
SetExitOnClose;

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

Примечание редакции TLAP. Результаты относятся к бэктесту, а не к подтверждённой торговле реальными деньгами. В заголовках кривых указан период 11 августа 2010 — 11 августа 2020 года. Параметры комиссий и проскальзывания в доступном материале не раскрыты, поэтому нельзя считать, что издержки учтены корректно. Числа — пример автора, а не прогноз доходности.

В примере используется фьючерс E-mini S&P 500 (ES), 30-минутный график и основная торговая сессия.

Рисунок 1. Учебная пробойная модель на 30-минутном графике ES.

Рисунок 1. Учебная пробойная модель на 30-минутном графике ES.

И, наконец, как только мы применим нашу БАЗОВУЮ стратегию к графику, мы получаем вот такую кривую капитала и такие результаты:

Рисунок 2. Кривая результата базовой модели.

Рисунок 2. Кривая результата базовой модели.

Рисунок 3. Отчёт базовой модели.

Рисунок 3. Отчёт базовой модели.

Как читать отчёты. NP — чистая прибыль в долларах; AvgTrade — средний результат на сделку; PF — профит-фактор. C-to-C DD — максимальная просадка между закрытиями сделок, а не внутрисделочная или внутридневная просадка. В NP/DD здесь делят денежную чистую прибыль на эту денежную просадку, а не процентную доходность. Кривые начинаются около нуля и показывают накопленный результат без добавления начального капитала. Показатели Select («избранные» в отчёте) исключают сделки, отклоняющиеся от средней более чем на три стандартных отклонения; это отдельная статистика, не основной результат сравнения.

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

Посмотрим, как изменятся эти показатели при добавлении каждого из трёх условий.

Итак, первый фильтр…

Фильтр №1. Ограничение входов на экстремумах дня

В начале моей ручной торговли одна ошибка, вероятно, стоила мне десятков тысяч долларов:

Я открывал сделки прямо на новом максимуме дня для покупок или новом минимуме дня для продаж.

Часто сразу после такого сигнала происходило резкое встречное движение. При пробое предыдущего максимума дня (HOD) или минимума дня (LOD) рынок словно проверял, достаточно ли силы для продолжения. Иногда такое движение занимало всего 10–20 секунд и быстро приводило к срабатыванию стоп-лосса.

Моя дискреционная торговля МГНОВЕННО улучшилась, когда я полностью перестал реагировать на торговые сигналы на новом максимуме или минимуме дня. Позже я успешно перевел это правило в свою автоматическую торговлю в форме первого фильтра без параметров, который я называю «ограничением торговли на максимуме/минимуме дня».

Простое условие: последний закрытый бар перед сигналом покупки не должен сформировать текущий максимум дня; для продажи он не должен сформировать текущий минимум дня. В TradeStation это записывается так:

{ФИЛЬТР БЕЗ ОПТИМИЗАЦИИ № 1}
EntryCondLong = H < HighD(0); EntryCondShort = L > LowD(0);

H — максимум последнего закрытого бара, L — его минимум. HighD(0) и LowD(0) — текущие максимум и минимум дня.

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

Все крайне просто, и оптимизировать здесь нечего. Вот как это выглядит, когда мы добавляем фильтр в нашу БАЗОВУЮ стратегию:

Input:
Fract(1.50);

{Точка инициации}
myPOI = CloseD(1); //Yesterday’s daily CLOSE

{Расстояние до пробоя}
myDistance = AvgTrueRange(14) * Fract;

{Уровень входа при пробое – рассчитывает, ГДЕ входить}
BOLevel = myPOI + myDistance;

{ФИЛЬТР БЕЗ ОПТИМИЗАЦИИ №1}
EntryCondLong = H < HighD(0);

{Ордер на вход}
If (MarketPosition =	0 or time = SessionEndTime(0, 1))
And EntryCondLong
then Buy next bar at BOLevel stop;

{Выход в конце дня}
SetExitOnClose;

Добавление условия занимает немного времени. Теперь посмотрим на изменение результатов исторического моделирования.

Во-первых, кривая капитала:

Рисунок 4. Кривая результата с фильтром №1.

Рисунок 4. Кривая результата с фильтром №1.

Хотя в целом она, возможно, выглядит немного хуже, не судите преждевременно и посмотрите также на статистику:

Рисунок 5. Отчёт с фильтром №1.

Рисунок 5. Отчёт с фильтром №1.

Сравним статистику с базовой моделью:

Рисунок 6. Сравнение базовой модели и фильтра №1.

Рисунок 6. Сравнение базовой модели и фильтра №1.

Количество сделок сократилось на 16,7%. Чистая прибыль выросла на 19,5%: с 58 887,50 до 70 387,50 доллара, то есть на 11 500 долларов — около 12 тысяч в округлённом описании автора. Отношение чистой прибыли к просадке улучшилось на 1,5%, профит-фактор — на 9,3%, средний результат на сделку — на 43,5%. По этим данным фильтр убрал часть неудачных входов.

Недостаток: просадка по закрытым сделкам увеличилась на 17,8%. Улучшение одних показателей не означает улучшения всех остальных — в торговле приходится оценивать такие компромиссы.

В целом, подумайте, чего мы здесь достигли:

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

Не так уж и плохо, я бы сказал. Как ВЫ считаете?

На некоторых рынках фильтр может работать хуже. Иногда полезнее оказывается противоположное условие:

EntryCondLong = H = HighD(0);
EntryCondShort = L = LowD(0);

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

Фильтр №2. Дневная накопительная скользящая средняя

В торговле время имеет значение.

Иногда даже БОЛЬШОЕ ЗНАЧЕНИЕ.

В дни моей дискреционной торговли я довольно много работал со скользящими средними.

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

В одном тесте лучше выглядит период 20, в другом — 40 или 100. Удачный на истории период может перестать подходить при изменении рынка.

Поэтому я стал искать иной подход и пришёл к дневной накопительной скользящей средней, которую затем использовал в автоматизированной торговле.

Итак, как же он работает?

Как я сказал в начале, в трейдинге время имеет значение, и ОЧЕНЬ большое.

Текущая сессия отличается от вчерашней. Для внутридневной торговли я хотел отдельно учитывать именно сегодняшние данные.

Это не универсальное утверждение о большей ценности новых данных, а логика конкретного индикатора.

Конечно, вы можете решить эту проблему с помощью определенных видов скользящих средних, таких как экспоненциальная скользящая средняя (EMA), которая всегда придает больший вес более поздним барам. Но даже и это всё еще не решает проблему идеального периода, а именно её мы и пытаемся решить здесь. Итак, однажды я подумал:

Что, если в начале каждого нового дня сбрасывать расчётный период, а затем увеличивать его с каждым закрытым баром?

После первого бара средняя имеет период 1, после второго — 2, и так далее. В конце шестичасовой сессии на 15-минутном графике период составит 24: 6 часов × 4 бара в час. На новом дне расчёт начинается заново.

Такое альтернативное решение эффективно решает две проблемы:

1) Не требуется выбирать постоянный период скользящей средней.

2) В расчёт входят закрытия баров только текущего дня.

Ok, как же нам закодировать эту скользящую среднюю? На самом деле это очень просто:

{ФИЛЬТР БЕЗ ОПТИМИЗАЦИИ №2}
If date<>date[1]then begin Value1 = 0;
end;

//Представленный выше код сбрасывает период скользящей средней в начале каждого нового дня

Value1 = value1 + 1;
value2 = average(c, value1);

//А эта часть просто продолжает увеличивать период скользящей средней по ценам ЗАКРЫТИЯ с каждым новым баром

Примечание редакции TLAP. Это простое среднее цен закрытия с начала дня, а не VWAP: объём здесь не участвует. При переносе на другой инструмент следует проверить границы дня и достаточный объём истории для переменного периода.

Очень просто!

В прямом варианте покупки допускаются, когда закрытие бара выше этой средней, а продажи — когда ниже:

EntryCondLong = C > value2;
EntryCondShort = C < value2;

А вот и окончательная его реализация в БАЗОВОЙ стратегии:

Input:
Fract(1.50);

{Точка инициации}
myPOI = CloseD(1); //Yesterday’s daily CLOSE

{Расстояние до пробоя}
myDistance = AvgTrueRange(14) * Fract;

{Уровень входа при пробое – рассчитывает, ГДЕ входить}
BOLevel = myPOI + myDistance;

{ФИЛЬТР БЕЗ ОПТИМИЗАЦИИ №2}
If date<>date[1]then begin
Value1 = 0;
end;
Value1 = value1 + 1;
value2 = average(c, value1);
EntryCondLong = C > value2;

{Ордер на вход}
If (MarketPosition =	0 or time = SessionEndTime(0, 1))
And EntryCondLong
then Buy next bar at BOLevel stop;

{Выход в конце дня}
SetExitOnClose;

Опять же, всё очень просто. Вы можете применить этот фильтр менее чем за минуту. И каковы же его результаты?

Вот кривая капитала:

Рисунок 7. Кривая результата с фильтром №2.

Рисунок 7. Кривая результата с фильтром №2.

Выглядит уже немного лучше, чем БАЗОВАЯ стратегия, но гораздо важнее общая статистика:

Рисунок 8. Отчёт с фильтром №2.

Рисунок 8. Отчёт с фильтром №2.

Итак, чего мы здесь достигли? Давайте посмотрим:

Рисунок 9. Сравнение базовой модели и фильтра №2.

Рисунок 9. Сравнение базовой модели и фильтра №2.

Сделок стало на 8,1% меньше. Чистая прибыль снизилась на 2,4%, но просадка по закрытым сделкам сократилась на 21,6%. В результате отношение чистой прибыли к просадке улучшилось на 24,4%, средний результат на сделку — на 6,2%, профит-фактор — на 0,8%.

Для некоторых рынков или таймфреймов может лучше работать обратная логика:

EntryCondLong = C < value2;
EntryCondShort = C > value2;

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

Теперь используем эту накопительную среднюю в третьем фильтре.

Фильтр №3. Накопительная средняя и середина диапазона дня

Ещё один уровень, за которым я наблюдал в ручной торговле, — середина текущего дневного диапазона. По моим наблюдениям, около неё рынок нередко замедлялся.

Это 50%-й уровень диапазона текущего дня.

Возьмём текущие максимум и минимум дня и найдём их среднее арифметическое:

value3 = (HighD(0) + LowD(0)) / 2;

Вот так просто.

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

...скомбинировать его с ДНЕВНОЙ НАКОПИТЕЛЬНОЙ СКОЛЬЗЯЩЕЙ СРЕДНЕЙ!

Условие сравнивает дневную накопительную среднюю с серединой диапазона: для покупок средняя должна быть выше, для продаж — ниже.

{ФИЛЬТР БЕЗ ОПТИМИЗАЦИИ №3}
If date<>date[1]then begin
Value1 = 0;
end;

//ВНУТРИДНЕВНАЯ КУМУЛЯТИВНАЯ СКОЛЬЗЯЩАЯ СРЕДНЯЯ
Value1 = value1 + 1;
value2 = average(c, value1);

//50%-Й УРОВЕНЬ ОТКАТА
value3 = (HighD(0) + LowD(0)) / 2;

EntryCondLong = value2 > value3;
EntryCondShort = value2 < value3;

При внедрении в нашу БАЗОВУЮ стратегию это выглядит следующим образом:

Input:
Fract(1.50);

{Точка инициации}
myPOI = CloseD(1); //Yesterday’s daily CLOSE

{Расстояние до пробоя}
myDistance = AvgTrueRange(14) * Fract;

{Уровень входа при пробое – рассчитывает, ГДЕ входить}
BOLevel = myPOI + myDistance;

{ФИЛЬТР БЕЗ ОПТИМИЗАЦИИ №3}
If date<>date[1]then begin Value1 = 0;
end;
Value1 = value1 + 1;
value2 = average(c, value1);
value3 = (HighD(0) + LowD(0)) / 2;
EntryCondLong = value2 > value3;

{Ордер на вход}
If (MarketPosition =	0 or time = SessionEndTime(0, 1))
And EntryCondLong then Buy next bar at BOLevel stop;

{Выход в конце дня}
SetExitOnClose;

Посмотрим на результат моделирования.

Вот кривая капитала:

Рисунок 10. Кривая результата с фильтром №3.

Рисунок 10. Кривая результата с фильтром №3.

Неплохо, правда?

А вот статистика:

Рисунок 11. Отчёт с фильтром №3.

Рисунок 11. Отчёт с фильтром №3.

Сравним основные показатели:

Рисунок 12. Сравнение базовой модели и фильтра №3.

Рисунок 12. Сравнение базовой модели и фильтра №3.

Сделок стало на 9,3% меньше, чистая прибыль выросла на 14,5%, а просадка по закрытым сделкам снизилась на 23,9%. Отношение чистой прибыли к просадке повысилось примерно с 5,9 до 8,9 — на 50,6% по неокруглённым данным. Средний результат на сделку улучшился на 26,2%, профит-фактор — на 5,1%. Это интересный результат учебного теста, но не подтверждение готовности системы к реальной торговле.

Но подождите...

Можно ли достичь ЕЩЕ ЛУЧШИХ результатов?

Конечно, можно!

А что, если мы ОБЪЕДИНИМ первую и третью техники?

Давайте выясним это:

Объединение фильтров: важная несостыковка исходника

В оригинале этот раздел назван сочетанием фильтров №1 и №3. Приведём соответствующий фрагмент, сохранив его фактическое условие входа:

Input:
Fract(1.50);

{Точка инициации}
myPOI = CloseD(1); //Yesterday’s daily CLOSE

{Расстояние до пробоя}
myDistance = AvgTrueRange(14) * Fract;

{Уровень входа при пробое – рассчитывает, ГДЕ входить}
BOLevel = myPOI + myDistance;

{ФИЛЬТРЫ БЕЗ ОПТИМИЗАЦИИ №1 и №3}
If date<>date[1]then begin
Value1 = 0;
end;
Value1 = value1 + 1;
value2 = average(c, value1);
EntryCondLong = (C > value2) and (High < HighD(0));

{Ордер на вход}
If (MarketPosition =	0 or time = SessionEndTime(0, 1))
And EntryCondLong
then Buy next bar at BOLevel stop;

{Выход в конце дня}
SetExitOnClose;

Примечание редакции TLAP. Фактическое условие C > value2 — это фильтр №2, а High < HighD(0) — фильтр №1. В этом листинге нет расчёта value3 и сравнения value2 > value3 из фильтра №3. Таким образом, показанный код соответствует №1 + №2, хотя заголовок и последующая таблица исходника обозначены «№1 и №3». Мы не подменяли условие и не пересчитывали чужой бэктест. Для воспроизведения результатов это противоречие нужно разрешить отдельно.

Далее автор показывает результаты заявленной комбинации.

И каков же окончательный результат?

Вот кривая капитала:

Рисунок 13. Кривая заявленной автором комбинации фильтров.

Рисунок 13. Кривая заявленной автором комбинации фильтров.

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

Рисунок 14. Отчёт заявленной комбинации.

Рисунок 14. Отчёт заявленной комбинации.

В сравнительной таблице основные показатели улучшились:

Рисунок 15. Сравнение из исходника с обозначением «Фильтры 1 и 3». Код этого раздела соответствует №1 + №2 — см. редакторское пояснение выше.

Рисунок 15. Сравнение из исходника с обозначением «Фильтры 1 и 3». Код этого раздела соответствует №1 + №2 — см. редакторское пояснение выше.

В таблице этой комбинации число сделок сокращается на 26,1%.

Чистая прибыль увеличивается на 16,3%, просадка по закрытым сделкам снижается на 22,4%, отношение чистой прибыли к просадке улучшается на 50,0%. Средний результат на сделку растёт на 57,5%, профит-фактор — на 14,4%. Это показатели из исходного отчёта; из-за противоречия между описанием и кодом их нельзя уверенно приписать именно сочетанию №1 и №3.

Эти результаты стоит изучить, сохраняя критическое отношение к ограничениям теста.

Надеюсь, эти идеи помогут вам сформулировать и проверить собственные правила. Обещание окупить стоимость выпуска во много раз из оригинального рекламного текста не является подтверждённым результатом.

Заключение

Подходите к этим идеям без предубеждений, но проверяйте их критически.

Здесь нет никаких хитростей.

Эти техники основаны на моих наблюдениях за рынком и опыте ручной торговли. Условия не содержат подбираемых числовых порогов, однако устойчивость результата всё равно необходимо подтверждать. По словам автора, он применял все три подхода в своём хедж-фонде; приведённые иллюстрации при этом показывают учебное историческое моделирование.

В исходном выпуске автор также предлагал участникам клуба копии кода через панель BTA.

Другие фильтры автор рассматривает в программе Smashing False Breakouts («Фильтрация ложных пробоев»). Это отдельный коммерческий материал, а не обязательное условие для проверки правил, описанных здесь.

Применимость любого такого правила к другому рынку, таймфрейму или стилю требует отдельного теста.

Удачной торговли!

Томас Неснидал

Переведено для TLAP

От редакции TLAP. Что проверить в своей системе?

Какой фильтр вы добавили бы первым — и какое ухудшение сочли бы неприемлемым? Сначала зафиксируйте базовые правила, издержки и отложенный участок истории. Затем сравните один фильтр с исходной моделью, учитывая не только чистую прибыль, но и число сделок, средний результат и внутрисделочную просадку. Практические ограничения описаны в материале «Как решить проблему переоптимизации советников». В тестере стратегий TLAP — симуляторе рынка можно вручную разобрать несколько разрешённых и отклонённых входов, чтобы проверить понимание правила. Симулятор не исполняет приведённый EasyLanguage-код и не заменяет автоматический бэктест или проверку вне выборки. Расскажите в теме, что изменилось после фильтрации и на каких данных вы это проверяли.