| Name | Kind | Category | Date / Start | End | Amount | Accrued | |
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
An end-to-end research platform that predicts sports outcomes, finds bets where the model disagrees with the Betfair market, and places real money on the Exchange — with safety guards at every step.
Right now (July 2026) the project is in the Phase 1.6 restructure window (locked 2026-07-03, review ~2026-07-31). Live capital is deliberately small — 3 arms, £464 combined, £36 in uncommitted reserve — so the biggest open question (execution deflation on limit orders) can be answered on real fills before more capital is deployed.
Every bet goes through the same pipeline, the same way, every time:
Every strategy starts in paper mode — bets are logged but no real money is risked. Phase 1.6 does not use a single “10-gate checklist” for promotion any more; that was Phase 1 vocabulary from before the 2026-07-03 restructure. Each arm now carries its own per-arm decision gate captured in the review skill and in project memory. Examples:
id=20 vs id=43 live A/B — verdict at n_paired = 100 (~2026-07-25): promote the winner, retire the loser.id=23 GR back walker — Sortino > 0.4 rolling 30d (already cleared once at 0.43 on 2026-07-03, triggering the bankroll scale from £146 → £220).id=11 cricket in-play — the recall gate (retrospective ball-state validation): mean recall ≥ 0.70 at n ≥ 30 evaluable matches.Paper is directional evidence, not a promotion trigger on its own. The primary evidence source for “does the execution-deflation fix work” is the live A/B between id=20 (walker) and id=43 (limit_only) — both running on real money, same model, same bankroll, same kelly.
Cross-sport freeze: no new sport gets live capital while cricket is broken. Cricket is the portfolio’s bond — a whole-project sanity check. Live tennis will not happen until id=11’s recall gate clears and the cricket-freeze policy is released.
Regardless of any individual strategy’s mode, the box-level BETTING_MODE environment variable is the master arm: setting it to paper halts every live strategy globally.
scripts/portfolio_dd_watch.py runs hourly, tracking peak-to-trough on deployed capital + cumulative net PnL. Warning email at 20%, breach email + auto-trip at 25% (Phase 1.6 exit Gate 5).0.03125 / 0.03125 / 0.0425 — much tinier than half-Kelly (0.125). Reason: at Phase 1 stake sizes, Betfair’s 2% commission was consuming ~69% of gross profit. We sized down to keep exposure minimal while the execution-fix experiment (id=20 vs id=43) plays out. Kelly gets scaled back up once evidence justifies it.kelly_fraction and bankroll are both set, and multi-row live flips are rejected.Six gates must hold at the ~2026-07-31 review for Phase 2 entry. Any miss triggers a Phase 1.7 restructure instead.
Click any sport to expand. Sport-specific data sources, model approach, and current strategy state.
Greyhound racing in the UK and Ireland runs across 40+ tracks with very high frequency — over 100 races a day — which gives the model far more training data than horse racing, and the closing market is liquid enough that real-money execution doesn’t move prices. GR is the longest-running live sport in the portfolio.
LightGBM gradient-boosted classifier with chained isotonic calibration. Features include: trap number, recent finishing positions, sectional time pattern, days since last run, age, weight, grade, distance, track-specific historical bias. The output is a per-runner win probability that gets normalised across the field (so 6 dogs sum to 1.0).
Calibration is the strongest part of the model: across 2.6 million out-of-fold predictions the 10 deciles all hit within 0.92–1.03 of expected. Brier score 0.152, ECE 0.013. When it says “30%”, roughly 30% win.
| Code | Mode | Notes |
|---|---|---|
gr_tier2_paper_micro_walker_floor | Live | Sole GR live arm. £220 bankroll (scaled from £146 on 2026-07-03 21:44 UTC on Phase 1.6 Gate 3 clear — rolling-30d Sortino hit 0.43 vs the 0.40 bar), kelly held at 0.0425 because Sharpe was too low to justify concentration on a right-skewed book. Wed-skip experiment: daemon paused Wednesdays via cron since 2026-06-24. |
Bets only fire when the race is 60–180 seconds before off, market volume is ≥ £5,000, and the model’s edge over Betfair implied probability is ≥ 5%. These gates were tuned by an A/B experiment in mid-May; the “tight” arm beat the wide arm by +2,252 bps of CLV.
GR lay was extensively researched — 7 rounds of live lay experiments over June 2026 with different target-edge, cap-band, and 2nd-favourite variants — and comprehensively falsified. Every arm was retired by 2026-07-03. No lay strategy goes live again until a paper limit-only experiment closes the observed +500 bps deflation gap between shadow paper CLV and live lay CLV. Paper twins continue to run in the background as deflation-research reference data.
Horse racing is the centrepiece of Phase 1.6. Two live arms are running as a paired A/B on real money to answer the single biggest open question in the project: does the execution-deflation fix work? Same model, same bankroll, same kelly — the only variable is how the order is placed.
HR is the hardest sport to model because it’s feature-rich (jockey, trainer, going, draw, weight, headgear, sectional times) but lower-frequency than greyhounds (maybe 30 UK races a day) and the market is much sharper.
LightGBM with the same calibration pipeline as greyhounds, but using horse-specific features: weight, official rating, draw, distance, race class, going, jockey/trainer rolling stats, head-to-head with other runners. Tier-2 model AUC ~0.66. Country whitelist locked to ["GB", "IE"] because 99% of training data is UK/IRE — AU/US/FR/ZA races are out-of-distribution and scrubbed via a SQL-level filter.
| Code | Mode | Notes |
|---|---|---|
hr_tier2_paper_walker | Live | id=20. £122, kelly 0.03125. The A/B control: steps the order price toward the market over time to try to get a fill. Lifetime CLV +490 bps but ~35% lapse rate — leaves a lot of edge on the table. |
hr_tier2_paper_walker_limit_only | Live | id=43. £122, kelly 0.03125. The A/B variant: rests at fair value and never walks. Tests whether limit-only mechanics survive at a lower fill rate but zero adverse-selection drag. Flipped paper→live 2026-07-03. |
hr_tier2_paper_walker_ctrl_v2 | Paper | id=42. £25. Paper walker control on the queue-aware v2 simulator. Directional signal only. |
hr_tier2_paper_walker_ctrl_v3_60s | Paper | id=44. £25. Cadence A/B control — 60-second poll cadence. |
hr_tier2_paper_walker_ctrl_v3_30s | Paper | id=45. £25. Cadence A/B variant — 30-second poll cadence. |
hr_tier2_paper_walker_auus | Paper | id=28. Multi-region AU/US variant (walker mechanic on Australian + North American racing). Paper only pending calibration + volume evidence. |
hr_tier2_paper_lay | Paper | id=31. Paper-only HR lay experiment. Blocked from live promotion by the GR lay deflation problem. |
hr_martingale_fav_paper | Paper | id=36. UK/IRE HR Martingale-on-favourite paper experiment. £500 paper bankroll, chain-abandon at 25 losses. |
At n_paired = 100 (~2026-07-25):
Retreat trigger: combined lifetime PnL < −£40 at n ≥ 100 → halve kelly on both arms, extend to n=200.
Cricket is the portfolio’s bond. Under the cross-sport freeze policy, no new sport gets live capital until cricket unblocks. This affects tennis promotion, football planning, and anything else waiting downstream.
cr_t20_preoff_paper (id=9) went live 2026-06-04 with a micro-stake cap. It was demoted back to paper on 2026-07-03 after a −409 bps live CLV was diagnosed as adverse-selection: matched-CLV was negative while lapsed-CLV was +2,038 bps — the same passive-limit-order signature that killed GR lay. It’s now paper for a 14-day observation window while the mechanic is re-thought.
Pre-match model looks at toss winner, toss decision, batting-first team, venue history, recent team form, head-to-head record, gender, format. Outputs P(team A wins).
In-play model reuses the tier-2 model with a rule-based-v2 ball-state estimator that infers current score + wickets from the live scrapers. CLV is computed against a synthetic close (LTP at scheduled off) since cricket markets don’t have BSP.
| Code | Mode | Notes |
|---|---|---|
cr_t20_preoff_paper | Paper | id=9. Demoted from live 2026-07-03 after adverse-selection diagnosis. £37 held in reserve. Under 14-day observation window. |
cr_t20_inplay_paper | Paper | id=11. In-play framework running the tier-2 model + rule-based-v2 ball-state estimator. Blocked from live by the recall gate + cricket-freeze policy. |
The in-play strategy’s promotion gate is two conditions in AND:
scripts/validate_cricket_ball_state.py writing to the cricket_ball_state_validation table.Two Phase 1.6 workstreams are targeting the recall gap:
Tennis has the cleanest research dataset of any sport thanks to Jeff Sackmann’s public archive, but the highest variance per match because it’s a binary outcome with sharp markets. Both tennis strategies are paper-only and — even if paper CLV clears the +200 bps live-promotion floor — they can’t go live while the cricket freeze is in force.
Per-player feature snapshot at the time of the match: recent form (last 10 matches), surface-specific Elo rating, head-to-head record against opponent, age, fatigue (matches in last 14 days), tournament tier and round. Two perspectives (player A and player B) are predicted independently then normalised. Raw model is well-calibrated on tennis (CV ECE 2.55%); the GR isotonic wrapper did not transfer.
| Code | Mode | Notes |
|---|---|---|
tn_atp_paper | Paper | id=7. Main-tour ATP + WTA, 60–1800s pre-off window. Daemon died 2026-06-08 for reasons never fully diagnosed (the underlying TN-MO shard was fine; the strategy process just stopped placing bets). Revived 2026-07-06 evening; still awaiting first post-revival bets. |
tn_atp_paper_mids | Paper | id=19. Restricted mids-only variant (odds 3.0–5.0). Same 2026-06-08 death and 2026-07-06 revival as id=7. |
Phase 1 sport but no strategy is planned before Phase 2 at the earliest. Historical tick data continues to be ingested for the top leagues in the background so a future model has training data ready, but no live or paper strategy exists today. Football is the highest-variance per-event sport in scope (90 minutes of stochastic events, often ending in a 1-1 score) and we’re prioritising sports where the model has a cleaner edge first.
When we get to it: features will include team Elo, recent xG, lineup strength, home/away, manager tenure, fixture density.
| Strategy | Sport | Bankroll | 14d mean £/day | % pos days | Worst day (% bnk) | Sharpe | Cum PnL £ (net) | Status | Scale step |
|---|---|---|---|---|---|---|---|---|---|
| Loading… | |||||||||
| Strategy | Sport | Bankroll | Pre-demote live PnL £ (in plan window) | Next decision | Decision date |
|---|---|---|---|---|---|
| Loading… | |||||
| Date (UTC) | Strategy | Decision |
|---|---|---|
| Loading… | ||