Роман Миронов MR Trade
Роман Миронов MR Trade личный блог
21 августа 2026, 17:50

Восемь акций, 1554 сделки, 712 тестов: как я перестал сидеть в терминале

Выложу сразу главное, чтобы не было ощущения, что я прячу неудобное в конец.

Бэктест (8 акций MOEX, 2024-01 — 2026-06, 1554 сделки, комиссия 0,05% на сторону): +18,4% против −31,3% у buy&hold, просадка −3,5%, PF 1,22, winrate 42,6%.

Живая работа (сервер, 07.08 — 20.08.2026, 20 закрытых сделок): −4,39%, PF 0,61, winrate 25%.

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

Что за стратегия

FVG — Fair Value Gap, трёхсвечный имбаланс. Бычий: low[i] > high[i-2], зона [high[i-2] .. low[i]]. Медвежий зеркально. Порог размера: (top-bot) ≥ ATR × min_mult.

Вход по краю зоны при возврате цены, стоп за дальним краем плюс буфер ATR, цели как R-мультипликаторы 1R/2R/3R/4R, фиксация по 25% на каждой. Зона умирает при митигации — когда цена закрылась по ту сторону дальней границы.

Это порт Pine-индикатора «FVG Trade Entries» в event-driven бэктестер на pandas.

Почему MTF, а не чистый час

Сразу отвечу на очевидный вопрос — зачем связка 1h+5m, если можно проще.

Считал три варианта входа на одних и тех же сигналах:

Правило входа SBER GAZP
По open следующего часа −19,6% +14,7%
MTF, open следующего 5m-бара +9,7% +27,7%
MTF, лимитка на краю зоны (5m) +16,7% +42,3%

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

Детекция целиком на 5m тоже мертва: −98,5%, 5662 сделки, комиссия съедает счёт. Осмысленный масштаб — зоны с часа, исполнение с пятиминутки.

Стек фильтров

Тут главное, и тут же основной риск подгонки, о котором скажу отдельно.

Конфигурация Доходность PF Сделок Win%
Чистый FVG +2,9% 1,03 615 37
+ EMA100 (1h) +14,4% 1,11 521 39
+ объём рос на барах гэпа +16,7% 1,32 223 42
+ min TP1 0,5% +24,0% 1,34 187 49

SBER, честное MTF-исполнение, лэддер 25%×4

Чистый FVG эджа не даёт — PF 1,03 это балансирование около нуля. Работают только направленные фильтры:

  • EMA100 на часе отсекает контр-трендовые ретесты. Перебирал 20/50/100/200 — оптимум 100, но плато пологое, на 50 тоже +12,6%.
  • Объём рос на трёх барах гэпа — сделок вдвое меньше (521→223), PF 1,11→1,32, просадка −9,7%→−5,2%. Отсев слабых зон, а не подгонка: качество растёт при падении количества.
  • min TP1 0,5% растягивает лесенку мелких зон. Убирает сделки, где цель ближе round-trip комиссии — они убыточны по построению.

Ненаправленные ограничения не сработали ни разу: max_zones=1 хуже везде (+17%→+1%), фильтр «одна сделка в час» на лэддере даёт −16 п.п., множество позиций −67% (залповые стопы в трендах).

Тап на пониженном объёме проверял отдельно — −4,0%, mean-reversion тут не работает.

Обязательная очистка данных

Два фильтра, которые эджа не создают, но без них цифры фиктивные.

Фильтр сессии MOEX. Кэш T-Invest содержит внебиржевые бары — 22% часовых. Ликвидности там нет, спред широкий, бэктест это не штрафует. Без фильтра результат завышен на 25–50 п.п. Режу до ресемпла: будни 07:00–23:50, выходные 09:50–19:00 МСК.

Дивидендная пауза. Цены MOEX неадъюстированные, дивгэп SBER на −8% рисует фантомный гигантский FVG. Конкретный случай: short от 11.07.2024 висел 217 дней и блокировал слот. Даты отсечек тянутся из ISS, пауза за день до гэпа плюс прогрев после.

Отдельно про адъюстирование: ISS отдаёт неадъюстированные ряды, и на сплитах это разрыв ×98 у GMKN и ×10 у PLZL. Дневки беру из T-Invest, там пересчитано.

Результаты по пулу

Восемь бумаг, параметры не подгонялись под инструмент — единый набор, зафиксированный на SBER и прогнанный как есть.

Бумага Сделок FVG B&H maxDD PF Win% Sharpe
GAZP 176 +41,6% −38,2% −5,7% 1,29 42,6 1,95
NVTK 184 +38,4% −37,8% −8,3% 1,47 47,8 2,67
ROSN 179 +37,9% −46,7% −8,8% 1,30 40,8 1,87
LKOH 200 +32,5% −38,7% −9,5% 1,42 50,5 2,66
SBER 187 +24,0% +11,2% −5,2% 1,34 48,7 2,23
CHMF 213 −0,7% −59,4% −18,0% 0,98 38,5 −0,07
MOEX 205 −11,5% −15,4% −20,6% 0,86 37,6 −0,94
GMKN 210 −14,7% −25,8% −19,4% 0,83 35,7 −1,23
Пул 1554 +18,4% −31,3% −3,5% 1,22 42,6

Пул — equal-weight, капитал делится на 8, каждая бумага компаундится своей кривой.

Что здесь стоит отметить:

Знак определяется winrate, а не payoff. Прибыльные — win 40,8–50,5%, убыточные — 35,7–38,5%. Порог примерно по 40%. Payoff у убыточных нормальный (1,44–1,57), просто при 36% попаданий он не окупает частоту стопов.

Диверсификация гасит просадку с 18–21% до 3,5%. Одиночные бумаги проседают сильно, но в разное время.

Три бумаги в минусе я не выкинул. Отбор по итогам того же прогона — подгонка. Убирать можно будет только после проверки на другом периоде, и это ещё не сделано.

Эдж контрциклический. У 7 из 8 buy&hold отрицателен. Основной вклад — шорты на падающем рынке 2024–2026. На растущем рынке результат будет другим, какой — не знаю.

Гэп-модель выхода

Замерил: 50,2% сделок переносятся через ночь, 19,7% через выходные(у SBER 59,0% и 29,5%). Не краевой случай.

Пересчитал по фактически доступной цене — если бар открылся за уровнем, выход по open:

Модель Σ net % ср. PF Бумаг в плюсе
По уровню (как было) 114,4 1,348 8/8
Гэп, честно 106,2 1,321 8/8
Гэп + слип 0,05% 102,6 1,311 8/8
Гэп + слип 0,15% 95,3 1,290 8/8
Гэп только против позиции + слип 0,15% 83,6 1,263 8/8

Честная модель забирает 8,2 п.п. из 114 — остаётся 92,8%. В заведомо пессимистичном сценарии 73%, и все 8 бумаг сохраняют знак.

Почему деградация умеренная: разобрал 174 ноги, закрытые разрывом. Против позиции 49 ног на −32,2 п.п., в пользу 125 ног на +65,3 п.п. Разрывы на тейках втрое чаще, чем на стопах — в лесенке четыре тейка против одного стопа. 90% гэп-стопов (44 из 49) приходятся на первые минуты сессии, 06:50–07:05 и 09:50–10:05.

Что вживую

Бот работает на VPS с 6 августа. Выгрузка из боевой базы на 21.08:

Показатель Значение
Период 07.08 — 20.08.2026
Сигналов FVG 21
Закрытых сделок 20
Прибыльных 5 (25%)
Сумма net −4,39%
PF 0,61

Две последние сделки целиком.

GMKN, 18.08, лонг. Зона родилась 13:00, касание 15:40, вход 115,30, стоп 113,96 (риск 1,16%). Лесенка отработала полностью: TP1 в 19:10, TP2 в 07:10 следующего дня, TP3 в 17:00, TP4 в 17:30 по 120,67. Результат +2,81% net, в позиции 26 часов.

CHMF, 20.08, лонг. Зона от 19.08, касание 13:30, вход 629,20, стоп 620,40. Стоп через три часа, −1,50% net.

Как это читать. 20 сделок — шум. При истинном winrate 42% вероятность получить 5 успехов из 20 или хуже около 8%: редко, но рядовое событие. Отличить «стратегия сломалась» от «не повезло две недели» на такой выборке нельзя. Внутри бэктеста из 1554 сделок двухнедельные куски и хуже встречались.

Обратное тоже верно: покажи я вам сейчас +4% за две недели, это ровно так же ничего не значило бы. Судить буду по году и по winrate, а не по доходности — winrate стабилизируется быстрее.

Слабые места

Перечислю сам, чтобы не собирать это в комментариях.

Подгонка. Стек из трёх фильтров подбирался на SBER. Устойчивость проверял по подпериодам — плюс во всех, — но 187 сделок на бумагу за 2,5 года это немного. Полноценного walk-forward с переоптимизацией на этой конфигурации нет.

Train/test не делался. Прогон однопроходный по всему периоду. Учитывая, что плюс на GAZP/ROSN/NVTK сделан на падающем рынке, период надо бить пополам. Не сделано.

На фьючерсы не переносится. Проверял 9 ликвидных контрактов FORTS (SR, GZ, RN, Si, MM, GD, Brent, серебро, юань) на тех же параметрах: PF 0,57–1,04, ни одного проходного. Payoff везде здоровый 1,6–2,0, проваливается точность входа (win 22–38%). На акциях та же конфигурация работает — значит, дело в природе инструмента, а не в параметрах.

Про фантомный эдж на неликвиде. Отдельно поучительный случай: RVI дал лучший результат за всё исследование, PF 2,11 и +84%. Целиком артефакт. Покрытие сессии барами 5,5%, медианный объём 2 контракта, медианный интервал «пятиминутного» ряда 25 минут. Весь плюс делали 5 сделок из 45, медиана сделки −0,34%, а 11 стоп-лоссов из 34 закрылись в плюс — цена перескакивала уровень разрывом. Правило после этого: сначала покрытие сессии и медиана объёма, только потом PF.

Расхождение конфигурации. Цифры пула получены при min_gap_pct=0, а у бота в конфиге стоит 0,2. Это разные наборы сделок, на SBER примерно вдвое. Собираюсь перегнать на боевом значении.

Смена режима. Результат получен на падающем рынке. Что будет на растущем — открытый вопрос.

Про инфраструктуру коротко

Раз уж речь про живую работу. Детектор зон не переписан под бота — импортируется из файла бэктестера, golden-тест сверяет сигналы с эталонным прогоном на 8 тикерах. Отдельный тест сверяет каждый параметр с пультом поимённо: однажды бот молча разошёлся по min_gap_pct и торговал вдвое больше зон, не уронив ни одного теста. Всего 712 тестов.

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

Вывод

Бэктест выглядит прилично: PF 1,22 на 1554 сделках, просадка 3,5%, бьёт buy&hold на 50 п.п. Живые две недели в минусе, и это ничего не опровергает, ровно как не подтвердило бы двухнедельный плюс.

Что я считаю реально установленным: чистый FVG эджа не даёт, эдж появляется от направленных фильтров, на фьючерсы не переносится, гранулярность исполнения решает больше, чем сами фильтры.

Что не установлено: держится ли это вне периода 2024–2026 и на растущем рынке. Вернусь с цифрами, когда наберётся выборка.

Готов ответить на вопросы по методике в комментариях. Если видите дыру в рассуждениях — говорите, для того и выкладываю.

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

Веду канал про бэктестинг, там разборы стратегий с цифрами и отрицательными результатами тоже.

 
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
0 Комментариев

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн