Как проверить свою стратегию на архиве

Обновлено: 02.11.2026 · чтение ~12 мин

Подготовка архива данных: источники, форматы, очистка

Начните с сырой базы: линии закрытия топ-бирж и Pinnacle, финальные счета, xG, травмы и стартовые составы. Собирайте всё это в CSV или Parquet, а любые изменения фиксируйте через Git или DVC. Версионирование — ваша страховка: если алгоритм дал сбой, вы всегда откатитесь к прошлой версии данных и поймёте, где ошиблись в очистке. Дальше — нормализация. Переведите все временные метки в UTC, чтобы не путаться в часовых поясах. Каждой игре нужен уникальный ID, иначе матч «Реал»–«Сити» из Кубка и чемпионата сольётся в один. Коэффициенты округляйте до 3–4 знаков, а дубликаты и явные выбросы (например, кэф 100.0 на фаворите) удаляйте или помечайте флагом. Зафиксируйте окно теста: например, сезоны 2022–2025. Чётко пропишите, какие лиги и рынки (тоталы, форы, 1X2) вы берёте. Отдельно отметьте отрезки с низкой ликвидностью — праздники, первые туры после трансферного окна, конец сезона. Там котировки «гуляют», и тест на этих данных будет искажать реальность.

Чек-лист нормализации

    • UTC для всех дат и времени.
    • Единый ID матча по всем таблицам.
    • Коэффициенты: 3–4 знака после запятой.
    • Фильтр: удалить дубли, проверить лимиты Pinnacle.
Условный пример: у вас два источника дают время матча 18:30 и 20:30 по местному времени. Без UTC вы рискуете сопоставить ставку с уже известным результатом. Приведение к UTC (например, 15:30) решает проблему. Пропишите маппинг лиг: «РПЛ» = «Russia Premier League», чтобы фильтры работали стабильно.

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

Триггер входа должен быть однозначным, как формула. Никаких «кажется, команда в форме». Записывайте условие через операторы И/ИЛИ/НЕ и пороги. Например: (xG_дома > 1.8) И (xGA_гости > 1.4) И (H2H_тотал_средний > 2.8) И (кэф_П1 СитуацияПравило Движение линииОтмена при ≥30 пунктов против позиции Задержка приёмаОтмена при >2 сек в лайве ЛиквидностьОтмена, если макс. ставка

Бэктест на истории: движок, комиссии, налоги, лимиты

Движок теста должен считать от линии закрытия за вычетом маржи биржи. Если на закрытии кф 2,00, а комиссия 2%, ваш рабочий кф — 1,96. Условный пример: ставка 1000 ₽, исход зашёл. Выплата 1960 ₽, грязная прибыль 960 ₽. Далее — налоги: для физлиц в РФ удерживается НДФЛ 13% с чистой прибыли за год, а у легальных букмекеров налог на выигрыш до 15 000 ₽ часто удерживается при выплате. Заложите это в P&L: 960 ₽ минус 13% = 835,2 ₽ «на руки». Лимиты тоже важны: режьте объём, если симулированная ставка превышает типичный максимум на рынке в день матча.

Симулируйте реальность, а не идеальную кнопку. Добавляйте задержку приёма 5–60 секунд: берите цену не закрытия, а из потока с поправкой на среднее смещение линии за это время. Проскальзывание моделируйте как случайный сдвиг −0,5%…−3% для ликвидных рынков и до −5% для смол-маркетов. Исключайте матчи с отменами, техническими поражениями и возвратами: если рынок рассчитали возвратом, в тесте это нулевой P&L и фиксация причины.

Логируйте каждую итерацию, иначе выводы будут фантазией. Минимум полей: дата-время, лига, рынок, кф на закрытии, эффективный кф после комиссии, размер, исход, P&L до налога, P&L после налога, задержка, проскальзывание, причина входа или пропуска. Для пропусков фиксируйте триггер: лимит, отсутствие ликвидности, конфликт расписания. Храните лог в таблице — так легко посчитать винрейт, дисперсию и просадки.

Поле Пример Зачем
Дата, лига 02.11.2026, РПЛ Сезонность, ротации
Рынок, кф_close ТБ 2.5, 2,00 База расчёта
k_eff, размер 1,96; 1000 ₽ Комиссия учтена
P&L до/после налога +960 ₽; +835,2 ₽ Реальный доход
Задержка/проскольз 22 с; −1,2% Проверка устойчивости
Причина Сигнал + ликвидность Аудит дисциплины

Ключевые метрики: ROI, CLV, просадка, размер выборки

Считайте ROI (доходность к обороту) и Yield (к банку): ROI = (P&L / сумма всех ставок) × 100%. Для 2000 ставок по 1000 ₽ и прибыли 180 000 ₽ ROI = 9%. CLV — сравнение ваших коэффициентов с линией закрытия. Если брали 1.95 при закрытии 1.85, CLV ≈ +5.4% — рынок признал вашу цену выгодной. Это не гарантия, но сильный сигнал. Фиксируйте средний кф и hit-rate: при кф 2.00 для нулевого ROI нужен hit-rate 50%, при 1.80 — уже 55.6%.

Оцените статистическую значимость. Стандартная ошибка для ROI при hit-rate p и среднем кф μ: SE ≈ sqrt(p(1−p))/ (μ·sqrt(N)). Для 800 ставок, p=0.52, μ=1.95 SE ≈ 1.1%. 95% доверительный интервал — ROI ± 1.96·SE. Если ноль вне интервала, результат вряд ли случайность. Минимальная выборка — 500–1000 ставок; до этого числа любые проценты — шум.

Постройте кривую эквити и гистограмму P&L. Нужен плавный рост без «ступенек» от одной серии и симметричное распределение без тяжёлых левых хвостов. Проверьте устойчивость: посчитайте ROI по лигам и диапазонам кф. Опасно, если всё съедает один турнир или узкий коридор 2.20–2.60. Разбейте выборку на блоки по 200–300 ставок и сравните ROI — сильный разброс говорит о нестабильности.

МетрикаЗачемКак считать
CLVОценка «цены» входа(Ваш кф / Закрытие − 1) × 100%
Max DDРиск по счётуПик − Дно, в % от пика
SE ROIПогрешностьsqrt(p(1−p)) / (μ·sqrt(N))

Борьба с подгонкой: кросс-валидация, walk-forward

Самый частый самообман — «подгонка» под историю. Чтобы не попасться, жёстко делите архив на три части: обучающую (train), проверочную (validation) и финальную (test). На train ищете параметры, на validation — отсеиваете переобученные варианты, а test открываете один раз, когда правила уже высечены в камне. Заглядывать в тест до финализации — табу: иначе вы невольно подстроитесь под будущее.

Далее проверьте стабильность на разных срезах. Простой k-fold: разбейте train на 5 частей, 4 используйте для подбора, 1 — для проверки; повторите 5 раз, усредните результат. Для ставок лучше скользящее окно (walk-forward): обучились на 2023–2024, валидировали на 2025; сдвинули окно — 2024–2025 обучаем, 2026 валидируем. Если параметры «плывут» от окна к окну — стратегия хрупкая.

Регуляризируйте всё, что настраиваете. Избегайте узких порогов: вместо «берём только 1.87–1.91» оставьте коридор шире и проверьте чувствительность. Комиссии и задержки — фиксируйте едиными на всём горизонте: маржа 4–5%, расчёт по close, лаг клиринга 10–15 секунд. Не меняйте правила «для одного турнира» — это скрытая подгонка.

МетодЗачемСигнал тревоги
k-foldОценка разброса метрикСКО ROI > 30% среднего
Walk-forwardПроверка во времениПараметры меняются в 2 раза между окнами

Условный пример: на train ROI 8%, на validation 7%, на тесте 6% при той же просадке — приемлемо. Если train 20%, validation 5%, test −10% — вы переобучились. Оставляйте только те настройки, которые «выживают» при сдвиге окон и разумном шуме входов.

Анализ ошибок и устойчивость: стресс-тесты и фильтры

Стресс-тесты показывают, выживет ли идея в реальности, а не только в таблице. Сдвиньте коэффициенты на −10–20% от архивных, добавьте +1–2% комиссии и удвоенную задержку приёма. Если после этого просадка растёт вдвое, а ROI падает до нуля — модель хрупкая. Условный пример: средний кф 1,90 превращается в 1,52; при прежней проходимости 55% маржа и задержка съедают почти всю дистанцию.

Проверьте чувствительность к порогам. Чуть сместили тотал или фору — и проходимость рухнула? Значит, вы сидите на пике переобучения. Ищите «плато»: коридор значений, где метрики меняются слабо. Например, для тотала 215,5 протестируйте 214,5–216,5 и шаг 0,5; устойчивый подход даёт ровную линию, а не один резкий всплеск.

ПорогROIСтавок
−1,03,2%1 200
0,02,8%1 850
+1,02,5%1 600

В примере плато от −1 до +1: метрики стабильны, выборка достаточна. Пик только в −1 — тревожный сигнал.

Исключите утечки будущего. Не берите линии, открывшиеся после уже известных составов и травм; отсекайте послематчевые котировки и «мусорные» рынки, где расчёт идёт по ходу игры. Фильтруйте явные выбросы: кэфы, которые жили меньше 30–60 секунд, и матчи с последующей отменой или переносом. Для тенниса убирайте смену покрытия в архиве, для баскетбола — бэк-ту-бэки без ротации.

Финальная проверка — «тихая» симуляция: прогон на следующем месяце вне обучения. Если плато сохранилось, а стресс-тесты в пределах допуска — стратегия годна к малой полевой доле. Нет — возвращайтесь к правилам и фильтрам.

Форвард-тест на бумаге и микролимиты

После бэктеста не спешите грузить банк. Сначала — «бумага»: две–четыре недели ставите по линии открытия или прематч, но деньги не трогаете. Фиксируйте каждую позицию в таблице: время входа, кф, кф на момент приема, маржа, итог. Важная деталь — берите фактический кф, который дал букмекер при приеме, а не тот, что «нарисовали» в модели. Если котировка ушла — пропускайте, не додумывайте.

Затем переходите на поле, но малым шагом: 10–20% от целевого номинала. Задача — проверить CLV в реальности. Считайте разницу между вашим кф входа и кф закрытия линии (средневзвешенным по нескольким БК на момент после ставки). Если бэктест давал CLV +3%, а на деле выходит −1% — модель переоценивает терпимость рынка. Условный пример: номинал 1000 ₽, вход 2.10, закрытие 2.00 — CLV отрицательный; вход 2.10, закрытие 2.22 — CLV плюсовой, и это добрый знак.

Остановка — не поражение, а гигиена. Два триггера: расхождение ключевых метрик с бэктестом более чем на 20% (ROI, CLV, доля прохода при схожем кф) или просадка выше вашего лимита (например, −15% от тестового банка). В этот день торги закрываете, эмоции — в сторону. Возвращаетесь к правилам: проверьте фильтры, окно времени, требования к кф, влияние маржи и лимитов. Часто «дырка» — поздний прием или игнор движения линии.

ЭтапСрокСтавкаЧто фиксироватьСтоп
Бумага2–4 недели0 ₽кф входа/приема, время, причина пропуска—
Микродо сигнала10–20% номиналаCLV к закрытию, комиссии, фактические лимитыметрики >20% или просадка > лимита

Выводы: критерии запуска и план мониторинга

Стартуем только при трёх зелёных флажках: CLV стабильно положительный, ROI на тесте держится в коридоре без «лесенки», просадка контролируется правилом 1–2% номинала на ставку. CLV считаем как (средний коэффициент закрытия / средний ваш коэффициент − 1). Если он ниже нуля или скачет — не запускайте: вы покупаете завышенную цену. ROI ниже 2–3% при высокой дисперсии — это шум, а не преимущество. Просадка: при банке 100 000 ₽ и 1% — риск 1000 ₽; серия из 10 минусов −10 000 ₽, и вы не вылетаете из игры.

Поставьте алерты на деградацию процесса, а не только на минус по балансу. Контролируйте: падение CLV на 5–7% неделю к неделе; рост задержек приёма >200–300 мс; сужение лимитов или изменение маржи на 0,5–1 п.п. Ежемесячно сверяйте данные: источники, кэфы закрытия, расчёт комиссии и налогов, исключения по отменам. Ведите реестр версий: дата, изменения фильтров, ожидаемое влияние на ROI/CLV.

    • CLV: алерт при скользящем среднем −5% за 7 дней.
    • Задержки: алерт при p95 > 300 мс.
    • Маржа/лимиты: алерт при росте маржи на 0,5% или урезании лимитов на 30%.
    • Аудит: раз в месяц — сверка источников, комиссий, налогов, пропусков.

Журнал решений — ваш чёрный ящик. Записывайте: матч, время входа, ваш кэф, кэф закрытия через 5/15/60 минут, причину, версию стратегии, размер. При деградации двух из трёх метрик (CLV↓, ROI↓, просадка↑) — стоп и откат к предыдущей версии. Если после отката метрики не возвращаются за 2–3 недели — заморозка и ретест на свежем окне.

Условный пример: банк 100 000 ₽, риск 1% (1000 ₽), средний кэф 1.90. План на месяц — 150 ставок, целевой CLV +3%, лимит просадки −15 000 ₽. Пробили лимит или CLV ушёл в −5% неделю — стоп, аудит, откат.

Частые вопросы

1. Как проверить стратегию на архиве матчей и не допустить подгонки?

Используйте только данные, которые были доступны до матча, и фиксируйте правила входа и выхода без исключений. Разделите данные на обучающую (train) и тестовую (test) выборки, не меняя логику стратегии при переходе. Проверяйте устойчивость на разных лигах, сезонах и уровнях коэффициентов, чтобы убедиться, что результат не случаен.

2. Какие метрики реально показывают прибыльность: ROI, CLV или hit-rate?

Ключевая метрика — ROI (доходность на оборот), но без учёта дисперсии она обманчива; дополняйте её максимальным спадом (max drawdown) и Z-score. CLV (закрытие линии) показывает, есть ли у вас теоретическое преимущество относительно рынка, но не гарантирует итоговую прибыль. Hit-rate (процент прохода) без контекста коэффициентов бесполезен: 55% при среднем кэфе 1.30 хуже, чем 45% при 2.20.

3. Как учесть комиссии биржи, налоги и проскальзывание в бэктесте?

Вносите поправки на каждом этапе: для биржи вычитайте комиссию из чистой прибыли (например, 2–5%), а для ордеров используйте цену худшего исполнения в пределах ожидаемого спреда. Налоги применяйте к итоговому финрезультату по правилам вашей юрисдикции, а не к каждой ставке. Проскальзывание моделируйте как фиксированный сдвиг коэффициента (например, −0.02–0.05) или как процент от оборота — это ближе к реальности.

4. Сколько ставок нужно для значимого результата и как делить данные на train/test?

Для первичных выводов ориентируйтесь на 500–1000 ставок или 2–3 полных сезона, чтобы сгладить дисперсию; для уверенного подтверждения — 2000+. Делите данные хронологически: первые 70–80% событий — train, последние 20–30% — test, либо используйте сезонную кросс-валидацию. Если на тесте ROI падает менее чем на 20–30% от трейна, а просадка растёт несильно — это хороший знак.

5. Когда переходить с бумажного теста на реальные деньги и каким номиналом?

Переходите после успешного форвард-теста в реальном времени не менее 4–8 недель, когда вы можете исполнять ставки по заявленным коэффициентам. Начните с 0.25–0.5% от банка на ставку и увеличивайте номинал ступенчато после каждых +20–30% к банку, не превышая 1–2%. Если просадка достигает 25% от стартового банкролла на реальном счёте — остановитесь и пересмотрите модель.