
Обычно переоптимизацию описывают просто: перебрали много параметров, нашли лучший результат на истории, запустили в торговлю, а в будущем он сломался. Такое описание понятно, но оно неточное.
Проблема не в том, что выбран лучший вариант. Любая оптимизация по смыслу ищет лучший вариант. Никто специально не будет выбирать худшую строку из таблицы, если рядом есть строка лучше. Поэтому сам факт выбора лучшего результата еще не является переоптимизацией.
Проблема в другом: почему этот вариант стал лучшим? Если результат стал лучшим потому, что стратегия действительно описывает устойчивое поведение цены, это нормальная оптимизация. Если результат стал лучшим потому, что параметры, фильтры, стопы, тейки и метрики подстроились под уже известный график, это переоптимизация.
Итоговый profit factor, recovery factor, winrate, drawdown или общий score — это не доказательство качества стратегии. Это только результат конкретного перебора на конкретном участке истории. Он показывает, какая строка оказалась лучшей внутри таблицы, но не объясняет, есть ли за этой строкой повторяемая закономерность.
Именно поэтому я формулирую проблему жестче: итоговые показатели, взятые как главный критерий отбора, сами становятся источником переоптимизации.
Почему я пошел от обратного

Когда в ARANEA появились высокие скорости оптимизации и перебора параметров, стало возможно быстро проверять большое количество стратегий, активов, таймфреймов и вариантов управления позицией. Первые результаты выглядели сильными, но последующая проверка в реальном времени показала проблему: на протяжении примерно шести месяцев многие стратегии заметно отклонялись от расчетного поведения.
Это не всегда означало полную поломку стратегии. Иногда менялась структура результата: просадка становилась другой, частота хороших сделок снижалась, выходы переставали работать так же точно, а итоговые метрики уже не совпадали с тем, что было найдено на истории.
После этого я решил не начинать исследование с итоговой прибыли. Если сразу оптимизировать stop, take, trailing, ATR-периоды, фильтры и итоговый score, можно просто подобрать прошлое движение под красивую таблицу. Поэтому я пошел от обратного: сначала чистый вход, потом поведение цены после входа, и только в конце итоговые показатели.
На первом этапе стратегия рассматривается без сложного PM и без попытки сразу получить красивую доходность. Есть только алгоритм входа и набор точек:
E = {t1, t2, t3, ..., tn}<br /><br />Здесь E — множество всех входов, а n — их количество. На этом этапе главный вопрос не в том, сколько стратегия заработала. Главный вопрос другой: что рынок делал после этих входов?
Если после входа нет устойчивой структуры движения, то дальнейшая оптимизация выхода может просто подогнать прошлые сделки под красивую итоговую метрику. Поэтому сначала нужно исследовать саму реакцию цены после сигнала.

Первый слой проверки — MFE и MAE. MFE показывает максимальное благоприятное отклонение после входа, MAE — максимальное неблагоприятное отклонение. Но считать их нужно не в одной фиксированной точке, а по горизонту времени: начиная с первой минуты, с шагом в минуту, например до двух дней.
Движение после входа можно записать так:
x_i(h) = price(t_i + h) - price(t_i)<br />где i — номер входа, а h — горизонт времени после входа. Тогда:
MFE_i(H) = max(x_i(h))<br />MAE_i(H) = min(x_i(h))<br /><br />Эта проверка отвечает на первый важный вопрос: есть ли после входа статистически заметное движение, или итоговый результат появился только после подбора выхода.
Второй слой — скорость изменения. Недостаточно знать, что цена когда-то дала нужное отклонение. Нужно понимать, за какое время оно появилось. Одно дело, если значимое движение возникает быстро после входа. Другое дело, если оно появляется только через сутки. Поэтому нужно измерять скорость движения, ускорение, затухание, время до MFE, время до MAE и горизонт, на котором сигнал теряет смысл.
Третий слой — ATR. Но ATR я начал смотреть не только в точке входа, а от начала графика, по разным периодам и таймфреймам. Это нужно, чтобы привести движение к единому масштабу. Абсолютное движение цены само по себе мало что говорит: для одного актива 1% — это сильный импульс, для другого — обычный шум. Даже на одном активе одно и то же движение в разные периоды может иметь разный смысл.
Поэтому отклонение нужно нормализовать:
normalized_move = price_move / ATR<br /><br />Так появляется более точный вопрос: цена после входа действительно выходит за пределы обычной волатильности или движение остается внутри нормального ATR-шума?
Четвертый слой — интегральная площадь движения. MFE и MAE показывают экстремумы, но экстремум может быть случайным касанием. Поэтому важно считать не только максимум и минимум, а площадь положительного и отрицательного движения:
positive_area = Σ max(move(h), 0)<br />negative_area = Σ max(-move(h), 0)<br />net_area = positive_area - negative_area<br /><br />Площадь показывает, сколько времени цена реально находилась в благоприятной или неблагоприятной зоне. Если MFE высокий, но положительная площадь маленькая, значит движение было кратковременным. Если отрицательная площадь большая, значит позиция долго находилась против входа. Если чистая площадь стабильно положительная на большом количестве входов, это уже более сильный аргумент, чем один красивый максимум.
Дополнительно можно измерять время в прибыли, время в убытке, отношение MFE к MAE, время восстановления после MAE, вероятность первого касания take или stop, хвостовые риски, квантильные коридоры движения и зависимость результата от редких выбросов. Смысл всех этих измерений один: понять, есть ли у входа реальное поведение, которое можно использовать, или PM просто подогнал прошлый график.
После этого я сделал аналогичные расчеты на других инструментах: примерно на 100 криптовалютных активах, 20 российских активах и 50 американских активах из разных секторов. Данные сильно отличались.
Это важный результат. Один и тот же алгоритм входа не обязан давать одинаковую структуру движения на разных рынках. У активов разная волатильность, ликвидность, скорость импульсов, глубина откатов, реакция на уровни и характер шума.
Если стратегия требует уникального набора параметров для каждого актива, это не доказательство универсальности. Это может быть подгонка под конкретную историю конкретного инструмента. Но если на разных активах сохраняется не точное значение параметра, а сама структура поведения, это уже можно исследовать как повторяемое свойство.
Например, значимо не то, что на всех активах работает один и тот же take. Значимо, если сохраняется похожее соотношение MFE/MAE, похожий горизонт движения, похожая ATR-зона и похожая вероятность достижения целевого уровня. Именно такие признаки важнее, чем одна лучшая строка в оптимизаторе.

После разных вариантов корреляций и математического анализа я пришел к более простой идее: в этой задаче удобнее всего работать через вероятность. У нас есть точка входа, время после входа и отклонение цены. Значит, можно задавать прямые проверяемые вопросы.
Какова вероятность, что цена даст благоприятное отклонение x за горизонт H?
P(MFE >= x | H)<br /><br />Какова вероятность, что цена даст неблагоприятное отклонение y за горизонт H?
P(MAE <= -y | H)<br /><br />Какова вероятность, что take будет достигнут раньше stop?
P(T_take < T_stop)<br /><br />Какова вероятность, что интегральная площадь движения будет положительной?
P(net_area > 0 | H)<br /><br />Такой подход лучше простого выбора максимального score, потому что он проверяет не только итог, но и механизм результата. Если стратегия имеет высокий PnL, но вероятность достижения целевого движения слабая, а результат держится на редких выбросах, это подозрительно. Если же вероятность, площадь, MFE/MAE, ATR-нормализация и соседние параметры подтверждают друг друга, результат становится более обоснованным.
Переоптимизация — это ситуация, когда итоговая метрика стратегии высокая, но эта метрика не подтверждается структурой движения после входа, устойчивостью соседних параметров, повторяемостью по времени, переносимостью между активами, вероятностной проверкой и чувствительностью к издержкам.
Проще: <strong>хороший результат + слабое объяснение = высокий риск переоптимизации</strong><br /><br />К слабым объяснениям относятся одинокий пик параметров, малое количество сделок, зависимость от одного участка истории, резкое ухудшение соседних параметров, высокая чувствительность к комиссии, отсутствие повторяемости на других активах и противоречие между итоговым score и картой движения после входа.
Особенно опасна оптимизация выхода. После того как входы уже известны, stop, take, trailing, ATR-периоды и time-exit можно подобрать так, чтобы они хорошо совпали с прошлым порядком движения цены. На истории это будет выглядеть как сильный PM, но без проверки MFE/MAE, скорости, ATR, площади и вероятности это может быть просто нарезка прошлого графика.
В ARANEA итоговый отбор не должен строиться только по максимальному score. Сначала нужно проверить сам вход, затем MFE/MAE, скорость движения, ATR-нормализацию, интегральную площадь, вероятности, устойчивость соседних параметров, поведение на разных временных окнах, переносимость между активами и чувствительность к издержкам. Только после этого итоговая прибыль становится аргументом.
Дальше можно подключать кластерные объемы, объемные профили, анализ ликвидности, корреляционные модели, регрессионный анализ, квантильные оценки, марковские состояния, преобразования Фурье, спектральный анализ и десятки других методов. Но все эти методы имеют смысл только после того, как дано точное определение переоптимизации для конкретного типа стратегии.
Иначе можно построить сложную модель, провести много расчетов, получить красивую цифру и все равно не ответить на главный вопрос: найдено устойчивое рыночное свойство или просто подобрана комбинация под прошлый график.
Итоговые показатели опасны, если начинать исследование с них. Оптимизатор всегда найдет лучшую строку в таблице. Но лучшая строка не обязана быть рабочей закономерностью. Она может быть просто самой удачной подгонкой под прошлую историю.
Поэтому я иду от обратного. Сначала определяется тип стратегии и ее профиль: как часто она входит, как долго держит позицию, чем выходит, какое движение должна забирать и какой риск допускает. Затем исследуется чистый вход и поведение цены после него. Потом проверяются MFE/MAE, скорость, ATR, площадь, вероятности, устойчивость и переносимость. И только после этого итоговые показатели можно использовать как аргумент.
Главный вывод первой части: лучший итоговый результат в оптимизаторе еще не является доказательством рабочей стратегии. Доказательством он становится только тогда, когда за ним стоит измеряемая, повторяемая и вероятностно подтвержденная структура движения цены после входа.