Блог им. Op_Man
Подсмотрел иной подход в интернетах ваших. Примерно так: идея → backtest → walk‑forward → монте‑карло → инкубация → портфель. Разберем этот конвейер на конкретном примере простой и популярной идеи — дневной momentum‑стратегии в стиле Quantified S.
Зачем вообще нужны случайные портфелиМножество экспериментов показывают, что случайные портфели часто обыгрывают либо рынок, либо сложные факторные стратегии. В одном из исследований моделировали сотни «портфелей‑обезьян», и средний результат спокойно конкурировал с «умными индексами» и продвинутыми фондами, а перевёрнутые стратегии (upside‑down версии) иногда давали ещё больше доходности.
Вывод предварительный:
Если твоя стратегия не обгоняет вменяемо построенный рандом, то она тебе не нужна.
Обезьяна лукерья — это не мем, а baseline, ниже которого опускаться стыдно.
Поэтому в нашем пайплайне появился внезапно первый sanity‑check — сравнение с рандомом: случайные портфели, случайные входы/выходы с теми же ограничениями по риску.
Шаг 1. Идея на салфетке: пример с дневным моментумомВозьмём понятную большинству тему: дневной momentum на акции/ETF. В сети куча подобных идей: купить силу, продать слабость, поймать продолжение движения внутри дня и выйти до закрытия/по утру.
Пример концепции:
Утром смотрим силу движения в первой части дня.
Если бумага показывает аномально сильный спрос (например, gap up + рост в первый час), мы покупаем и держим до закрытия, ловя внутридневной momentum.
Если сигналов несколько — выбираем топ N по силе сигнала или распределяем риск поровну.
На этом этапе не трогаем оптимизацию, супериндикаторы и прочую прочесть. Нужна простая грубая гипотеза, которую можно быстро расстрелять фактами.
Шаг 2. Ограниченный backtest: не влюбляться в стратегиюДальше — limited testing. Цель: понять, стоит ли вообще копать глубже, не устраивая тотальную подгонку под 20 лет истории.
Что делать на данном этапе:
Берем адекватный, но не гигантский кусок истории (например, последние 3–5 лет по выбранному рынку).
Прогоняем самую простую формализацию идеи:
Чёткие правила входа/выхода.
Фиксированные параметры (уровни gap, время входа/выхода и т.д.), без перебора сеток.
Смотрим базовые метрики:
Положительный ли матожид сделки.
Есть ли вообще осмысленный profit factor (>1.1–1.2, хотя бы).
Какой порядок макс. просадки и её длительности.
На этом этапе нас интересует не красота эквити, а банальный вопрос: есть ли тут хоть какой‑то edge, который стоит развивать дальше? Если нет — идея летит в корзину, даже если график напоминает «нормальный».
Шаг 3. Walk‑forward: симуляция жизни стратегии во времениДальше начинается борьба с подгонкой. Стандартный подход «взял всю историю и оптимизировал параметры» в данном контексте не вариант. А вариант walk‑forward‑тестирование.
Как это выглядит на практике:
Разбиваем историю на последовательные окна:
Например, 2 года — in‑sample (IS) и следующие 6 месяцев — out‑of‑sample (OOS).
На IS‑отрезке можно чуть оптимизировать параметры:
Допустимый диапазон gap.
Время входа (например, через 30 минут после открытия vs через 60 минут).
Фиксируем найденные параметры и гоняем их на следующем OOS‑отрезке.
Сдвигаем окно вперёд и повторяем цикл. Самые прошаренные это полностью автоматизируют целиком обычно, но возможно и попроще.
Собираем только OOS‑результаты в один общий эквити‑график и оцениваем стратегию по ним, а не по IS.
Что даёт walk‑forward:
Имитация того, как стратегия эволюционировала бы в реальном времени: оптимизация → жизнь несколько месяцев → новая оптимизация.
Если стратегия чахнет уже на этом уровне (красивая в IS и мёртвая в большинстве OOS), значит это переоптимизация, а не edge.
Для momentum‑стратегии это особенно критично, потому что режимы рынка меняются, и то, что работало на бычьем рынке, может развалиться в боковичке — walk‑forward это быстро выявляет (по крайней мере, так считается).
Шаг 4. Монте‑Карло: не один эквити, а целое облако сценариев.Даже если OOS эквити приличный, это всё ещё одна реализация. Порядок сделок исторический и единственный. Желательно понять, что будет, если жизнь сложится чуть иначе.
Поэтому дальше делаем Монте‑Карло симуляцию на базе OOS‑результатов:
Берем массив сделок или дневных PnL.
Перемешиваем их, делаем bootstrap, моделируем большое число возможных траекторий эквити.
Считаем для каждой траектории:
Итоговую доходность.
Максимальную просадку.
Длительность просадки.
На выходе получаем распределения, а не одну цифру:
Например, 95‑й перцентиль макс. просадки — это «типичный худший» сценарий.
99‑й перцентиль — уже совсем крайности.
Зачем это нужно:
Определить нормальный диапазон боли: просадки, которые ожидаемы для этой системы.
Задать формальные триггеры: если фактическая просадка вылезла за 99‑й перцентиль, есть повод считать, что стратегия деградировала, а не просто попала в обычный плохой период.
Для нашей momentum‑стратегии это очень наглядно:
Momentum по определению любит тренды и ненавидит флэт.
Монте‑Карло покажет, насколько глубоко и надолго её могут унести боковики и шпили, даже если edge реально есть.
Даже пройдя backtest, walk‑forward и Монте‑Карло, нельзя сразу грузить стратегию серьёзным баблом. Следующий этап — инкубация.
Что это такое:
Стратегия запускается в реальном времени:
На демо или
На микролотах (я такое выбираю обычно).
Она торгует по тем же правилам, что и в тестах.
Накапливаем фактические сделки, с реальным проскальзыванием, комиссиями, гэпами, задержками и прочей гадостью.
Инкубация — это ещё один слой OOS‑проверки, но теперь уже на живых данных, а не на истории. Мы:
Сравниваем фактическую эквити и просадки с тем, что показывали backtest и Монте‑Карло.
Смотрим, не развалилась ли стратегия под давлением реального рынка и инфраструктуры.
Если всё окей, можно постепенно масштабировать объём. Если нет — стратегия либо возвращается на доработку, либо просто отправляется в отпуск на мальдивы.
Шаг 6. Портфель систем: не один грааль, а зоопарк ботовОчень типичная ошибка (не моё мнение, заимствовал) — пытаться найти одну идеальную стратегию, которая будет печатать деньги всегда. Многие профессионалы от этого отказываются. Гораздо более реалистичный подход — портфель систем, каждая из которых:
Простая.
Понятная.
Прошла весь описанный выше конвейер.
Здесь появляются две задачи:
Диверсификация:
Смотрим на корреляции PnL между системами.
В портфель стараемся включать стратегии, которые переживают разные режимы рынка: тренд, флэт, «панику» и т.д.
Аллокация и управление:
Для каждой системы есть базовый размер риска (например, доля капитала или фиксированный VAR).
Есть формальные правила:
Когда можно увеличивать объём (стабильная работа в рамках ожидаемого диапазона).
Когда надо резать или выключать (фактическая просадка вылезла за рамки Монте‑Карло‑распределения и т.п.).
Та же дневная momentum‑стратегия, даже если она хороша, становится в портфеле лишь одной из многих: её задача — зарабатывать в своих условиях, а не тащить на себе весь счёт.
Шаг 7. Документация: one‑pager на каждую системуПоследняя вещь, которую многие игнорируют, — ведение конспектов и статистики. Для каждой системы создается минимальный, но строгий one‑pager:
Гипотеза и логика: что именно стратегия пытается поймать (например, внутридневной momentum после сильного утреннего движа).
Рынки и таймфреймы.
Правила входа/выхода и фильтры — без «иногда руками выключаю».
Итоги по этапам:
Limited backtest (период, метрики).
Walk‑forward (какие окна, какие результаты OOS).
Монте‑Карло (распределения доходности и просадок, ключевые перцентили).
Инкубация (фактический период и результаты).
Формальные условия:
Когда систему можно включать в боевой портфель.
Когда увеличивать риск.
Когда снижать и когда окончательно выбрасывать.
Такой метод дисциплинирует. Так говорят на улицах.
Есть мнение подслушанное где-то, что настоящий edge — это не одна хитрая формула, а процесс (возможно такой, но это не точно):
Идея → грубый тест → walk‑forward → Монте‑Карло → инкубация → портфель → строгие правила управления.
Хотите торговать круче Лукерьи — сначала сделайте так, чтобы ваша система хотя бы статистически была лучше рандома. А дальше уже включается тяжёлая артиллерия из тестов, симуляций и риск‑менеджмента.
Ниже — тот же процесс, но уже в виде конкретного чек‑листа:
1. Идея стратегии: intraday‑momentum на ликвидном инструментеБерем базовую концепцию:
Инструмент: что‑то очень ликвидное — SPY (ETF на S&P 500) или фьючи ES / NQ.
Гипотеза: если с утра рынок показывает нетипично сильное движение в одну сторону, есть шанс, что это продолжится до конца дня. Импульс→ рождает ещё больший импульс за счёт догоняющего спроса, ребалансов фондов, дельта‑хеджирования и т.п.
Задача: зайти по ходу этого внутридневного тренда и выйти до закрытия, без овернайта.
По сути, это систематический intraday trend‑following: не угадываем направление заранее, а реагируем на уже возникший импульс.
2. Формальные правила стратегииОпишем правила максимально конкретно, чтобы их можно было закодить.
2.1. Рабочий инструмент и данныеОсновной вариант: SPY (акция/ETF).
Альтернатива для фьючей: ES или NQ, по сути логика та же, только другое время торгов и спецификации.
Таймфрейм для расчётов: минутные бары (или 5‑минутки, если нужно меньше шума).
Время сессии:
Для SPY: с 9:30 до 16:00 по NY.
Для ES/NQ можно брать регулярные часы (RTH) или удлинённую сессию, но в примере берем RTH.
Нам нужно формализовать «сильное движение» от открытия.
Простой вариант:
Каждый день считаем intraday‑импульс на момент tsignal — скажем, через 60 минут после открытия (10:30 NY):
Считаем скользящую статистику импульса за последние N дней (например, 20):
Среднее μimp и стандартное отклонение σimp.
Нормируем текущий импульс:
Логика:
Положительный большой Z — аномально сильный бычий импульс.
Отрицательный большой Z — аномально сильный медвежий импульс.
Пример конкретных правил:
Вход long:
Время входа: 10:30 NY (через час после открытия).
Условие: Z≥Zlong, например Zlong≥1 (импульс сильнее среднего минимум на одно сигма).
Вход short (если хочешь симметричную стратегию):
Условие: Z≤Zshort, например Zshort≤−1.
Дальше варианты:
Вариант 1 (минимализм):
Стопы не используем, позиция размером по заранее рассчитанному риску (см. риск‑менеджмент ниже).
Выход: по времени — вблизи закрытия, например, по рынку в 15:55–15:58 NY.
Вариант 2 (чуть сложнее):
Вводим time‑based exit + аварийный стоп, если цена откатывает, скажем, на X% от входа.
Можно добавить фильтр: не торговать в дни FOMC, Non‑Farm Payrolls и т.п.
Для фьючей ES/NQ:
Логика такая же, просто время и волатильность другие.
Можно считать импульс не от открытия, а от VWAP или от «зоны шума» по методикам intraday trend‑following (noise area).
Тут авторами идеи была обозначена принципиальная позиция: стратегия должна таргетировать примерно одинаковый риск в день, а не одинаковый размер позиции.
Пример:
Для дневной торговли SPY выбираем целевую дневную волатильность стратегии, допустим 0,5–1% от капитала.
Считаем:
Дневной ATR или внутридневной диапазон за последние N дней.
Исходим из того, что типичное движение от входа до закрытия — часть этого диапазона.
Дальше:
Объём позиции рассчитывается так, чтобы ожидаемый дневной риск (например, 1 стандартное отклонение результата сделки) был равен нашей целевой доле капитала.
Если волатильность рынка вдвое выше обычного — размер позиции уменьшается примерно вдвое, и наоборот.
Таким образом:
Результат по дням получается более‑менее сопоставим по риску, и нам проще оценивать стратегию дальше в Монте‑Карло/портфеле.
4.1. Limited backtest
Берем исторические данные SPY (или ES/NQ) за, скажем, 3–5 последних лет.
Применяем фиксированные параметры:
tsignal=10:30,
N=20 дней для расчёта μimp,σimp,
Zlong=1,Zshort=−1.
Никаких сеток, оптимизаций, «подгоним Z под максимум PF» — просто считаем, что бы было, если бы мы вот так тупо торговали.
Смотрим:
Есть ли положительный средний PnL на сделку/день.
Какой порядок PF, Sharpe / Sortino, макс. просадки.
Насколько результаты отличаются от:
Buy&hold этого же периода.
Какого‑то простого рандомного baseline (случайные дни/направления с тем же риск‑таргетом).
Если стратегия не обгоняет разумный рандом — дальше не идем по ней.
4.2. Walk‑forward‑тестированиеЕсли limited‑backtest прошёл, начинаем бороться с подгонкой.
Схема:
Берем, например, с 2015 по 2025 годы.
Разбиваем так:
Первые 2 года — IS, следующие 6 месяцев — OOS.
Сдвигаем окно вперёд на 6 месяцев каждый раз.
На каждом IS‑окне:
Можно слегка пооптимизировать Z‑порог: перегоняем, например, варианты Zlong∈[0.5,1.5] с шагом 0,25 и берем что‑то в середине, а не экстремум, чтобы не ловить чистый максимум по истории.
Можно подвинуть время tsignal (45 минут vs 60 минут) — опять же в узком диапазоне.
Дальше:
Фиксируем найденные параметры и гоняем их на соответствующем OOS‑отрезке.
Сшиваем все OOS‑результаты в одну эквити‑кривую.
Оцениваем:
Какой PF/Sharpe именно по OOS.
Сколько периодов дали нормальный результат и сколько — мусор.
Нет ли картины, когда 1–2 окна вытягивают всё, а остальные в ноль/минус.
Если OOS‑эквити живое, и стратегия хотя бы стабильно чуть‑чуть лучше random baseline, это уже интересно.
4.3. Монте‑Карло по OOS‑результатамДальше отрываем результаты от конкретной последовательности дней и смотрим на семейство сценариев.
Берем только OOS‑PnL по дням (реалистичнее — после вводимых комиссий/проскальзывания).
Запускаем Монте‑Карло:
Перемешиваем порядок дней.
Делаем bootstrap выборки длиной, скажем, 5–10 лет эквивалентной торговли.
Генерируем тысячи траекторий эквити.
Для каждой траектории считаем:
Финальную доходность.
Макс. просадку по эквити.
Длительность просадки.
Получаем:
Распределение финальных доходностей: вижу, какой диапазон результата реалистичен при таком edge.
Распределение максимальной просадки: видим, какие drawdown’ы нормальны для этой стратегии, а какие уже аномальны.
Это основа для:
Настройки уровня риска (сколько % капитала вообще можно доверить этой системе).
Формальных правил «боли»: если фактическая просадка вышла за, например, 99‑й перцентиль Монте‑Карло по DD — это сигнал деградации, а не просто «плохой период».
Дальше стратегию можно пустить в режиме тестирования:
Запускаем её в реале:
На микролотах.
Либо на отдельном маленьком счёте.
Никаких ручных вмешательств, стратегия должна торговать строго по правилам.
Смотрим на протяжении, скажем, 6–12 месяцев:
Совпадает ли статистика сделок с тем, что ожидалось по backtestУ + Монте‑Карло.
Не стало ли проскальзывание и комиссии убивать весь edge.
Не изменилась ли структурно реакция рынка на утренние импульсы (например, появилось сильное mean reversion‑поведение в те же временные слоты).
Если инкубация показала, что стратегия вживую ведёт себя в пределах ожидаемых диапазонов, её можно допускать в основной портфель с нормальными объёмами.
5. Встраивание в портфель системЭта дневная momentum‑стратегия на SPY/ES/NQ — лишь одна из возможных тем в зоопарке портфельном.
Что можно делать на портфельном уровне:
Считать корреляцию дневного PnL этой системы с другими стратегиями:
В идеале momentum‑дневка должна быть слабо коррелирована с, например, ночными gap‑системами или mean‑reversion‑подходами.
Выделять ей долю риска в портфеле, исходя из:
Её Монте‑Карло‑профиля (DD, волатильность).
Вклада в общую портфельную волатильность.
Правила:
Если система долгое время работает в рамках ожидаемого диапазона, можно аккуратно увеличивать risk budget.
Если её фактические просадки начинают систематически выходить за «коридор» Монте‑Карло:
Снижаем объём.
Либо отправляем стратегию обратно в стол — пересматривать гипотезу и параметры.
Для такой стратегии делаем краткий протокол примерно такого содержания:
Название: Intraday momentum SPY (или ES/NQ).
Гипотеза: сильный утренний импульс имеет статистическую склонность продолжаться до конца дня.
Инструменты и ТФ: SPY / ES / NQ, минутные бары, RTH.
Правила:
Расчёт импульса и Z‑score.
Условия входа long/short.
Время выхода.
Ограничения (нет торговли в особые дни/времена).
Риск:
Target дневная волатильность стратегии.
Формула размера позиции.
Результаты:
Limited‑backtest (период, PF, Sharpe).
Walk‑forward (оконная схема, OOS‑метрики).
Монте‑Карло (ключевые перцентили финальной доходности и DD).
Инкубация (фактический период, результаты).
Правила управления:
Критерии включения в основной портфель.
Условия увеличения/снижения объёма.
Trigger’ы «убить стратегию» (по фактической DD vs Монте‑Карло‑профиль).






Эта заметка — конспект конспекта других конспектов + комменты и наблюдения. Ни на что не претендует. Кому полезно — тому полезно. Остальным — остальное.
Если вы дочитали до конца, то это значит, что вы дочитали до конца. Только и всего. Поздравляю.
Есть что добавить — пишите в комментах, пока можно редактировать — добавим в пост.
Хотите поделиться личным опытом по перечисленным вопросам — также жду в комментах.
Чао!
Пользователь запретил комментарии к топику.