[ 01 ]What shipped on 13 May 2026
On 13 May 2026 we shipped engine v1.9 + a new guard called M297 anti-bleed, then reset our paper-trade stats to a clean baseline. This post explains, in order:
- What changed in the engine code
- Why we paused four minor soccer leagues
- Why we skip draw outcomes entirely
- What "baseline reset" means and what it doesn't
- And — separately — why no competitor with closed methodology will copy this move
This is a release-notes post in the form of an open methodology document. Everything below is reversible: if the data turns, the paused leagues come back. No marketing about "100% accurate picks" — we're publishing a methodological choice and its trade-offs.
[ 02 ]What M297 anti-bleed actually does
M297 anti-bleed is a league-level blacklist guard inside our value engine. It pauses signal emission for leagues where cumulative closing-line value has gone systematically negative over a recent window.
Four minor soccer leagues are paused as of 13 May:
- Ekstraklasa (Poland)
- Premiership (Scotland)
- Allsvenskan (Sweden)
- 3. Liga (Germany)
In engine code, the change is a single constant in src/value/engine.py (post-M297):
BLACKLIST_LEAGUES = {
"soccer_poland_ekstraklasa",
"soccer_scotland_premiership",
"soccer_sweden_allsvenskan",
"soccer_germany_liga3",
}
The trigger criterion is mechanical, not discretionary:
- N ≥ 30 historical paper bets in the league
- Cumulative CLV < −3% over the last 60 days
- Both conditions must hold; either-or doesn't trigger a pause
The historical sample behind the pause: N=57 paper bets across the four leagues with cumulative negative CLV. That's the bleed window we want to stop.
One subtlety worth highlighting: M297 is a signal blacklist, not a data blacklist. We still ingest the odds for these leagues into the database. We still compute fair lines, EV, and CLV for them. We just don't surface trades. If the cumulative CLV reverses over the next 60 days, the pause can be lifted — and we'd know from the same data feed that's currently held back.
[ 03 ]Why we skip draw outcomes
Soccer is a 3-way market: home / draw / away. Two-way markets (tennis, NHL, basketball moneyline) don't have this option. After M298 — an audit of every settled 3-way bet our engine had ever emitted — one number stopped the audit cold:
That's not a sample-size complaint. That's a calibration failure. Our engine's draw-probability model is broken: it likely under-estimates how close two weak teams are in expectation, which inflates implied home/away probabilities and leaves the draw branch looking artificially mispriced. Pinnacle and Betfair don't have this leak — their closing draw odds rarely move much, which is why our CLV-against-closing has been so negative on these signals specifically.
So the patch in engine v1.9 is blunt: skip the 'draw' outcome side entirely in 3-way soccer markets. Home and away signals continue to flow. Draw signals are dropped pre-emission.
We want to be honest about what this is: a patch, not a proper fix. The proper fix is to rebuild the draw-probability calibration from scratch — likely a separate model trained on closeness features (team Elo gap, recent form variance, league pace) rather than a residual of home/away. That's an engine v2.x project. For now, blocking the broken branch is the safer move.
The top-5 European leagues (EPL, La Liga, Bundesliga, Serie A, Ligue 1) stay in scope for home and away signals — small N per league, high variance, but no systematic bleed signature like the minor leagues had. Lesson learned in M253: hold the signal-rich leagues, prune the noisy ones.
[ 04 ]Green zones — what's still active
The engine continues to trade across multiple sport families. The green zones — segments with positive historical CLV — that M297 preserves:
- Tennis ATP/WTA · 17–35% ROI historical (Sprint 0 backtest, 10,682 matches)
- NHL · 17% ROI historical (Sprint 8 multi-sport audit)
- Euroleague basketball · stable positive CLV
- MMA UFC · validation ongoing (post-M295 espn_mma fix)
- Top-5 European soccer · home/away only, draw skipped
- Ekstraklasa (Poland)
- Premiership (Scotland)
- Allsvenskan (Sweden)
- 3. Liga (Germany)
- All 3-way soccer "draw" outcomes (engine-wide)
Multi-sport coverage continues across many sport families and competitions — odds ingestion, fair-line computation, audit logging — but selective trading is concentrated in the four-to-six segments above. That's the difference between "we watch this market" and "we have a defensible edge here". We try to be precise about which is which.
[ 05 ]Sport-level CLV breakdown
Here's where the edge lives and where it was bleeding, in one picture. Bars are sport-level cumulative CLV from the pre-baseline window (N=280 settled bets).
[ 06 ]Baseline reset — what it means, what it doesn't
On 13 May we reset displayed track stats to a clean baseline. Here's the methodological reasoning.
Pre-reset state: N=280 settled paper bets cumulative since project start. Rolling CLV around +6.98%, ROI slightly negative on small-sample volatility, win rate ~51%. All four soon-to-be-paused leagues were still in the dataset, contributing their bleed signature.
The methodological problem: if we keep displaying pre-reset stats forward after pausing those leagues, the numbers carry a survivorship bias in reverse. The visible CLV would still reflect data from a configuration the engine is no longer running. A user looking at /track tomorrow would see metrics generated by an engine that doesn't exist anymore.
The correct move: reset the rolling display to a fresh baseline starting 13 May, with M297 anti-bleed applied from bet zero. Trade off: optically painful — visible ROI/CLV on small N will be noisy for the first 100–200 settled bets. But methodologically clean: every visible number reflects the live engine.
What's preserved: the pre-reset N=280 dataset isn't deleted. A JSON snapshot lives at /snapshots/baseline_pre_reset_13may2026.json for audit trail (snapshot file path TBD by Сано). Anyone who wants to verify the bleed signature in the paused leagues can pull that snapshot and recompute CLV by league.
So when you load /track over the next few weeks and see a small N with a noisy rolling CLV — that's the rebuild in progress. The number we care about is whether cumulative CLV stays positive over the next 200+ settled bets with M297 anti-bleed enforcing the perimeter. If it does, the methodological choice was correct. If it doesn't, we owe you a second post explaining what we missed.
[ 07 ]Why no competitor does this
The valuebet-scanner space — Allbestbets, RebelBetting, Pikkit, Trademate — runs on closed methodology. There is no published engine version. There is no public list of which leagues they trade vs. which they avoid. There is no shared CLV-by-league breakdown.
This isn't an accusation; it's a structural observation. A black-box scanner can't pause segments visibly because users have no model for what got paused or why. The legible move for them is to keep emitting signals and hope CLV averages out across the user base. For us — running an open methodology — pausing is the legible move, because the paused leagues already had a visible footprint in /track that users could look up.
Trade-off acknowledged: open methodology is harder to operate. Every change requires explanation. Every honest "this segment is bleeding" is a public admission that the engine has imperfect coverage. We think that's worth it. The alternative is selling certainty we don't have — and that's exactly what the scanner space has been doing for ten years. (For the long-form version of this comparison, see vs valuebet scanners.)
[ 08 ]Where to look next
Two places to verify everything in this post:
- The math. /methodology explains the EV / CLV / Kelly framework end-to-end. The glossary covers terms in one paragraph each. The 3-way fair-line math is in novig margin; EV math in EV calc.
- The numbers. /track shows the live rebuild against the baseline reset. Tens of new settled bets land each week. Rolling CLV is the metric to watch.
Watch the baseline rebuild
Every settled paper bet from 13 May onward, rolling CLV against sharp consensus, the date of the last data refresh. No editing.
Also read
- What makes us different from valuebet scannersSide-by-side comparison vs Allbestbets, RebelBetting, Pikkit, Trademate.
- From ROI to CLV — why we report what we reportWhy ROI on small N is noise and CLV is the leading edge signal.
- Sample size and noise — when small N misleadsWhy a fresh baseline reset looks worse before it looks right.
- Our metrics — and what they don't measureAn honest list of what our numbers prove and where they don't.
[ 01 ]Что вышло 13 мая 2026
13 мая 2026 мы выпустили engine v1.9 + новый страж M297 anti-bleed и обнулили статистику paper-trade до чистого baseline. Эта статья по порядку объясняет:
- Что поменялось в коде движка
- Почему мы поставили на паузу 4 минорные соккерные лиги
- Почему мы вообще пропускаем ничейные исходы
- Что значит «baseline reset» — и что не значит
- И отдельно — почему ни один конкурент с закрытой методологией такой ход не повторит
Это release notes в форме открытой методологической записки. Всё ниже — обратимо: если данные развернутся, paused лиги вернутся. Без маркетинга про «100% точные прогнозы» — мы публикуем методологический выбор и его trade-offs.
[ 02 ]Что именно делает M297 anti-bleed
M297 anti-bleed — это league-level blacklist страж внутри нашего value-движка. Он ставит на паузу эмиссию сигналов для лиг, где накопленный closing-line value системно ушёл в минус за недавнее окно.
На 13 мая на паузе 4 минорные соккерные лиги:
- Ekstraklasa (Польша)
- Premiership (Шотландия)
- Allsvenskan (Швеция)
- 3. Liga (Германия)
В коде движка изменение — одна константа в src/value/engine.py (после M297):
BLACKLIST_LEAGUES = {
"soccer_poland_ekstraklasa",
"soccer_scotland_premiership",
"soccer_sweden_allsvenskan",
"soccer_germany_liga3",
}
Критерий срабатывания механический, не на глаз:
- N ≥ 30 исторических paper-ставок в лиге
- Накопленный CLV < −3% за последние 60 дней
- Оба условия должны выполняться; «или-или» не триггерит паузу
Исторический сэмпл, на котором приняли решение: N=57 paper-ставок по четырём лигам с накопленным отрицательным CLV. Это окно слива, которое мы хотим остановить.
Один нюанс важно подчеркнуть: M297 — это signal blacklist, а не data blacklist. Мы продолжаем тянуть коэфы по этим лигам в БД. Мы продолжаем считать fair-линии, EV и CLV для них. Мы просто не выпускаем сигналы наружу. Если накопленный CLV развернётся за следующие 60 дней, паузу можно снять — и узнаем мы это из того же data feed, который сейчас удержан.
[ 03 ]Почему пропускаем ничейные исходы
Соккер — это 3-way рынок: home / draw / away. Двухсторонние рынки (теннис, NHL, баскетбол moneyline) такого выбора не имеют. После M298 — аудита каждой закрытой 3-way ставки, которую движок когда-либо эмитил — один показатель остановил аудит на месте:
Это не жалоба на размер выборки. Это провал калибровки. Наша модель draw-вероятности сломана: вероятно, она недооценивает близость двух слабых команд в ожидании, что раздувает implied home/away вероятности и оставляет draw-ветку выглядящей искусственно недооценённой. У Pinnacle и Betfair такой утечки нет — их closing draw odds почти не двигаются, и именно поэтому наш CLV-против-closing был так глубоко отрицательным конкретно по этим сигналам.
Поэтому патч в engine v1.9 — прямой: пропускать исход 'draw' полностью в 3-way соккерных рынках. Home и away сигналы продолжают идти. Draw сигналы дропаются до эмиссии.
Хочу быть честным насчёт того, что это: патч, а не proper fix. Proper fix — переобучить draw-калибровку с нуля, отдельной моделью на признаках близости (gap Elo команд, дисперсия недавней формы, темп лиги), а не как residual от home/away. Это проект engine v2.x. Пока что блокировка сломанной ветки — более безопасный ход.
Топ-5 европейских лиг (EPL, La Liga, Bundesliga, Serie A, Ligue 1) остаются в скоупе для home и away сигналов — малое N на лигу, высокая вариативность, но без системной сигнатуры слива, какая была у минорных. Урок M253: держим сигнал-богатые лиги, режем шумовые.
[ 04 ]Зелёные зоны — что осталось активным
Движок продолжает торговать по нескольким спортивным семействам. Зелёные зоны — сегменты с положительным историческим CLV — которые M297 сохраняет:
- Tennis ATP/WTA · 17–35% ROI исторический (Sprint 0 backtest, 10 682 матча)
- NHL · 17% ROI исторический (Sprint 8 multi-sport аудит)
- Euroleague basketball · стабильный положительный CLV
- MMA UFC · валидация идёт (после M295 espn_mma fix)
- Топ-5 европейский соккер · только home/away, draw пропущен
- Ekstraklasa (Польша)
- Premiership (Шотландия)
- Allsvenskan (Швеция)
- 3. Liga (Германия)
- Все 3-way соккерные «draw» исходы (engine-wide)
Мульти-спортивное покрытие продолжается по многим спортивным семействам и соревнованиям — ingestion коэфов, расчёт fair-линий, audit log — но избирательный трейдинг сконцентрирован в 4–6 сегментах выше. Это разница между «мы смотрим этот рынок» и «у нас тут защитимый edge». Мы стараемся быть точными в том, что есть что.
[ 05 ]Sport-level CLV breakdown
Здесь видно одной картинкой, где живёт edge и где он лил. Бары — sport-level кумулятивный CLV из pre-baseline окна (N=280 закрытых ставок).
[ 06 ]Baseline reset — что значит и что не значит
13 мая мы обнулили отображаемую статистику track до чистого baseline. Вот методологическая логика.
Pre-reset состояние: N=280 закрытых paper-ставок накоплено с начала проекта. Rolling CLV около +6.98%, ROI слегка отрицательный из-за волатильности малой выборки, win rate ~51%. Все 4 вскоре-paused лиги ещё были в датасете, давая свою сигнатуру слива.
Методологическая проблема: если продолжаем показывать pre-reset статистику дальше после паузы этих лиг, цифры несут survivorship bias в обратную сторону. Видимый CLV всё ещё отражал бы данные конфигурации, на которой движок больше не работает. Юзер открывает /track завтра и видит метрики, сгенерированные движком, которого больше нет.
Правильный ход: обнулить rolling display до чистого baseline с 13 мая, с M297 anti-bleed применённым с нулевой ставки. Trade off: оптически больно — видимые ROI/CLV на малом N будут шумные первые 100–200 закрытых ставок. Но методологически чисто: каждая видимая цифра отражает живой движок.
Что сохранено: pre-reset N=280 датасет не удалён. JSON-снапшот лежит по /snapshots/baseline_pre_reset_13may2026.json для audit trail (путь к файлу snapshot TBD by Сано). Кто хочет проверить сигнатуру слива в paused лигах — может вытащить snapshot и пересчитать CLV по лиге.
Так что когда заходишь на /track в ближайшие недели и видишь малое N с шумным rolling CLV — это rebuild в процессе. Цифра, которая важна, — это будет ли накопленный CLV держаться в плюсе на следующих 200+ закрытых ставках с M297 anti-bleed на периметре. Если да — методологический выбор был правильный. Если нет — мы должны тебе второй пост о том, что мы упустили.
[ 07 ]Почему ни один конкурент так не делает
Пространство valuebet-сканеров — Allbestbets, RebelBetting, Pikkit, Trademate — работает на закрытой методологии. Нет публичной версии движка. Нет публичного списка, какие лиги они трейдят vs. какие избегают. Нет shared breakdown CLV-по-лиге.
Это не обвинение; это структурное наблюдение. Black-box сканер не может публично паузить сегменты, потому что у юзера нет модели, что и почему было paused. Понятный ход для них — продолжать эмиссию сигналов и надеяться, что CLV усреднится по юзер-базе. Для нас — на открытой методологии — паузить это и есть понятный ход, потому что paused лиги уже имели видимый footprint в /track, по которому юзер мог поднять историю.
Trade-off признан: открытую методологию тяжелее операционить. Каждое изменение требует объяснения. Каждое честное «здесь мы лили» — публичное признание, что у движка есть imperfect coverage. Мы считаем, оно того стоит. Альтернатива — продавать определённость, которой у нас нет — а именно этим scanner space занят последние 10 лет. (Длинная версия сравнения — в vs valuebet scanners.)
[ 08 ]Куда смотреть дальше
Два места, где всё в этой статье можно проверить:
- Математика. /methodology объясняет EV / CLV / Kelly фреймворк end-to-end. Глоссарий покрывает термины по одному абзацу. Математика 3-way fair-линии — в novig маржа; EV — в EV calc.
- Цифры. /track показывает живой rebuild против baseline reset. Десятки новых закрытых ставок прилетают каждую неделю. Rolling CLV — это и есть метрика для отслеживания.
Смотри как baseline отстраивается
Каждая закрытая paper-ставка с 13 мая, rolling CLV против sharp консенсуса, дата последнего обновления данных. Без редактуры.
Читать дальше
- Чем мы отличаемся от valuebet-сканеровПрямое сравнение с Allbestbets, RebelBetting, Pikkit, Trademate.
- От ROI к CLV — почему мы репортим то, что репортимПочему ROI на малом N — это шум, а CLV — leading edge сигнал.
- Размер выборки и шум — когда малое N вводит в заблуждениеПочему свежий baseline reset сначала выглядит хуже, чем правильнее.
- Наши метрики — и что они не измеряютЧестный список того, что наши цифры доказывают, и где нет.