§ 1Why a Metrics Catalog Matters
Without metrics, a trading system is a guess dressed up in numbers. Metrics transform intuition into a testable statement.
Value betting metrics split into three classes:
- Leading indicators. Measure decision quality before outcomes are known. Stabilize quickly. Prime example — CLV.
- Realized metrics. Measure results over a distance. Stabilize slowly due to high variance. Prime example — ROI.
- Context metrics. Measure the market environment you're operating in. Not directly about your system, but they affect whether it works.
A solid system tracks all three in parallel. Leading indicators for quick diagnosis. Realized metrics for reporting. Context metrics to know if the market has broken.
§ 2Leading Indicators · CLV Family
CLV per bet — the fundamental leading metric.
CLV = (k_entry / k_close) − 1
where k_entry is your entry coefficient, k_close is the closing line from a sharp reference
(Pinnacle or median of three sharps). Target: median CLV > 0.
% positive CLV — the fraction of bets with positive CLV in your sample.
pct_positive = #{bets with CLV > 0} / N_total
Target: 70-90%. Alert: < 60% — your system is picking
suboptimal entry points.
Avg CLV cumul (rolling 50) — cumulative average CLV over a rolling window of the last 50 bets.
avg_clv_50 = mean(CLV[i-50:i])
Target: ≥ +3-5%. Alert: < +3% for two consecutive windows.
Sharp consensus spread — the dispersion of closing lines across three sharps.
spread = max(p_pin, p_bf, p_mb) − min(p_pin, p_bf, p_mb)
where p_x = 1 / k_close_x is the implied probability.
spread > 3pp → signal is unreliable or should be filtered.
§ 3Realized Metrics · ROI and Drawdowns
ROI cumulative — the standard return on capital metric.
ROI = total_pl / total_stake
Target: on a long sample n > 1000 — +3-7%.
On short samples n < 500 — essentially uninformative
(see PDF 1b "Why Positive ROI Isn't Income").
Bootstrap CI95 for ROI — confidence interval for ROI via resampling. Calculated weekly or after every 50 new bets.
Algorithm: resample your data 1000 times (with replacement), calculate ROI for each resample, take the 2.5 and 97.5 percentiles.
If CI95 crosses zero → you cannot claim real edge exists. If CI95 is entirely positive → your claim is statistically sound.
Drawdown max — maximum relative drawdown from peak.
drawdown_max = max((peak − trough) / peak)
Target: < 30% for 1/4 Kelly. Alert: > 30% —
reconsider stake sizing.
Time underwater — number of days when bankroll is below the previous
historical peak. Target: < 50%.
⌬§ Illustration: Why Leading Metrics Matter More Than Realized Ones
So we make decisions on CLV.
⌬§ Bootstrap CI95: Larger Sample = Tighter Confidence Interval
The point estimate is an illusion.
§ 4Context Metrics · Market Condition
Avg sharp margin (rolling 7d) — average Pinnacle margin on your sports over the last 7 days.
margin_t = (1/k_home + 1/k_away) − 1
avg_margin = mean(margin_t for last 7 days)
Target: 2-4%. Alert: > 5% for a week → markets are inefficient
or Pinnacle is repricing risk (major news, technical issues).
Coverage — how many events per day pass your filters.
coverage = N_events_passing_filter / N_events_total
Target: 5-15% for basic EV filters. A 2× drop in a week →
the market has shifted.
Market efficiency — how many value signals per 1000 events.
efficiency = N_signals / N_total × 1000
Target: 5-30 signals / 1000. Dropping to zero → market has "tightened",
sharps are starting to account for your signal source.
Coverage and efficiency are diagnostic metrics. They don't tell you your system works — they tell you the operating environment hasn't broken.
§ 5Full Catalog + Exit Rules
| Metric | Target | Alert |
|---|---|---|
| CLV per bet | median > 0 | < 0 |
| % positive CLV | 70-90% | < 60% |
| Avg CLV cumul (50) | ≥ +3-5% | < +3% for 2 windows |
| Sharp spread | < 1.5pp | > 3pp |
| ROI cumul | informative | — |
| Bootstrap CI95 | does not cross 0 at n=2000 | CLV<0 with CI>0 — sus |
| Drawdown max | < 30% | > 30% |
| Time underwater | < 50% | > 70% |
| Avg sharp margin | 2-4% | > 5% |
| Coverage | stable | 2× drop in a week |
| Market efficiency | 5-30/1000 | → 0 |
Exit Rules (Stops):
Avg CLV < +3%over 50 bets → filter review;ROI < −5%over 200 withCLV+→ check slippage, limits;Sharp margin > 5%for 7 days → pause until recovery;Drawdown > 30%→ stop and strategy review.
Σ Further Reading
This document is a metrics catalog. What to read next:
- PDF 2a «Methodological Note: CLV»If you haven't read it — there's the introductory theory of CLV: closing line, sharp books, formula.
- PDF 2c «From ROI to CLV»The psychology of transitioning from ROI-thinking to CLV-thinking.
- Habr articles (in prep)«Sharp Consensus», «Bootstrap CI95 in Python», «De-vig».
- TG @value_sniper_researchDaily Σ Pulse: line moved alerts, news adjustment.
- Public track record
alexwhiplash.github.io/value-sniper-public
Σ Discipline matters more than results over distance.
§ 1Зачем нужен каталог метрик
Без метрик торговая система — это догадка с украшением. Метрика превращает интуицию в проверяемое утверждение.
Метрики value-беттинга разделяются на три класса:
- Опережающие (leading indicators). Измеряют качество принятых решений до получения результата. Стабилизируются быстро. Главный пример — CLV.
- Реализованные (realized). Измеряют результат на дистанции. Стабилизируются медленно из-за высокой дисперсии. Главный пример — ROI.
- Контекстные (context). Измеряют состояние рынка, в котором ты работаешь. Не относятся напрямую к твоей системе, но влияют на её работоспособность.
Хорошая система ведёт все три класса параллельно. Опережающие — для оперативной диагностики. Реализованные — для отчётности. Контекстные — для понимания, не сломан ли рынок.
§ 2Опережающие метрики · CLV-семейство
CLV per bet — базовая опережающая метрика.
CLV = (k_entry / k_close) − 1
где k_entry — твой коэф входа, k_close — closing line у sharp-референса
(Pinnacle или медиана трёх sharps). Целевое: median CLV > 0.
% positive CLV — доля ставок с положительным CLV в выборке.
pct_positive = #{bets with CLV > 0} / N_total
Целевое: 70-90%. Тревога: < 60% — система выбирает
неоптимальные точки входа.
Avg CLV cumul (rolling 50) — кумулятивная средняя CLV за скользящее окно последних 50 ставок.
avg_clv_50 = mean(CLV[i-50:i])
Целевое: ≥ +3-5%. Тревога: < +3% за два окна подряд.
Sharp consensus spread — разброс closing-линий между тремя sharps.
spread = max(p_pin, p_bf, p_mb) − min(p_pin, p_bf, p_mb)
где p_x = 1 / k_close_x — имплицитная вероятность.
spread > 3pp → сигнал ненадёжный или фильтруется.
§ 3Реализованные метрики · ROI и просадки
ROI cumulative — стандартная метрика возврата на капитал.
ROI = total_pl / total_stake
Целевое: на длинной выборке n > 1000 — +3-7%.
На коротких выборках n < 500 — практически неинформативна
(см. PDF 1b «Почему положительный ROI это не доход»).
Bootstrap CI95 для ROI — доверительный интервал ROI методом resampling. Считается раз в неделю или после каждых 50 новых ставок.
Алгоритм: 1000 раз пересэмплируешь свою выборку (with replacement), для каждого resample считаешь ROI, берёшь 2.5 и 97.5 percentile.
Если CI95 пересекает 0 → ты не можешь утверждать что у тебя реальный edge. Если CI95 целиком положительный → утверждение статистически обосновано.
Drawdown max — максимальная относительная просадка от пика.
drawdown_max = max((peak − trough) / peak)
Целевое: < 30% для ¼ Kelly. Тревога: > 30% —
пересмотр размера ставки.
Time underwater — количество дней, когда банк ниже предыдущего
исторического максимума. Целевое: < 50%.
⌬§ Иллюстрация: почему опережающие метрики важнее реализованных
Поэтому решения принимаем на CLV.
⌬§ Bootstrap CI95: чем больше выборка, тем уже доверительный интервал
Точечная оценка — это иллюзия.
§ 4Контекстные метрики · состояние рынка
Avg sharp margin (rolling 7d) — средняя маржа Pinnacle на твоих видах спорта за последние 7 дней.
margin_t = (1/k_home + 1/k_away) − 1
avg_margin = mean(margin_t for last 7 days)
Целевое: 2-4%. Тревога: > 5% за неделю → рынки неэффективны
или Pinnacle переоценивает риски (большие новости, технические проблемы).
Coverage — сколько событий в день попадает в твои фильтры.
coverage = N_events_passing_filter / N_events_total
Целевое: 5-15% для базовых EV-фильтров. Падение в 2 раза за неделю →
рынок изменился.
Market efficiency — сколько value-сигналов на 1000 событий.
efficiency = N_signals / N_total × 1000
Целевое: 5-30 signals / 1000. Падение к нулю → рынок «затянулся»,
sharps начали учитывать твой сигнал-источник.
Coverage и efficiency — диагностические метрики. Они не говорят что система работает — они говорят что среда работы не сломалась.
§ 5Полный каталог + правила выхода
| Метрика | Целевое | Тревога |
|---|---|---|
| CLV per bet | median > 0 | < 0 |
| % positive CLV | 70-90% | < 60% |
| Avg CLV cumul (50) | ≥ +3-5% | < +3% за 2 окна |
| Sharp spread | < 1.5pp | > 3pp |
| ROI cumul | информативно | — |
| Bootstrap CI95 | не пересекает 0 при n=2000 | CLV<0 при CI>0 — sus |
| Drawdown max | < 30% | > 30% |
| Time underwater | < 50% | > 70% |
| Avg sharp margin | 2-4% | > 5% |
| Coverage | стабильно | падение в 2× за неделю |
| Market efficiency | 5-30/1000 | → 0 |
Правила выхода (стопы):
Avg CLV < +3%за 50 ставок → пересмотр фильтров;ROI < −5%за 200 приCLV+→ проверка slippage, лимитов;Sharp margin > 5%за 7 дней → пауза до восстановления;Drawdown > 30%→ стоп и ревью стратегии.
Σ Дальнейшее чтение
Этот документ — каталог метрик. Что читать дальше:
- PDF 2a «Methodological Note: CLV»Если ты ещё не читал — там вводная теория CLV: closing line, sharp-буки, формула.
- PDF 2c «От ROI к CLV»Психология перехода с ROI-мышления на CLV-мышление.
- Habr статьи (готовятся)«Sharp-консенсус», «Bootstrap CI95 на питоне», «De-vig».
- TG @value_sniper_researchЕжедневная Σ Pulse: line moved alerts, news adjustment.
- Публичный track record
alexwhiplash.github.io/value-sniper-public
Σ Дисциплина важнее результата на дистанции.