Skip to content
Kelly

Betting rule tester

Back-test any angle as a formula · point in time, at the prices of the time · record, units, ROI, CLV, sample size and significance

Write a betting rule, in words or as a formula, and Kelly tests it on past games point in time: every bet at the price you could have taken, graded, with a plain verdict and the evidence behind it. Anything not known when the bet was placed, or Kelly's own edge, is refused with a one-click fix. It tests your idea; it never picks or ranks bets.

Lines: Kelly's consensus at the close (every season) and at the weekly sheet (Monday 10 AM ET, from Oct 2026) · maths: kmath record test and CLV · the same test is POST /v1/rules:test and MCP test_rule.

Have a system from another tool? Import it · Start from a template

Your rule

Conditions (2) · turn one off to see the rule without it

OnConditionWithout it: bets · ROI · p
home—
rest_days - opponent.rest_days >= 3—
Bet
Side
Bet at

Closing lines for every season. No CLV: a bet at the close is the close.

Seasons
Stake
Price

The same query on the API and MCP
curl -X POST https://api.askkelly.ai/v1/rules:test \
  -H "Authorization: Bearer $KELLY_API_KEY" -H "Content-Type: application/json" \
  -d '{"formula":"=AND(home, rest_days - opponent.rest_days >= 3)","competition":"nfl","seasons":["2016","2017","2018","2019","2020","2021","2022","2023","2024","2025"],"market":"spread","side":"rule","bet_moment":"close","stake":"risk","price":"consensus","detail":"full","charts":true}'
test_rule {
  "formula": "=AND(home, rest_days - opponent.rest_days >= 3)",
  "competition": "nfl",
  "seasons": [
    "2016",
    "2017",
    "2018",
    "2019",
    "2020",
    "2021",
    "2022",
    "2023",
    "2024",
    "2025"
  ],
  "market": "spread",
  "side": "rule",
  "bet_moment": "close",
  "stake": "risk",
  "price": "consensus",
  "detail": "full",
  "charts": true
}

Bets the rule took

Every bet in time order, with how it was graded and why it matched. Lines and prices show here and are never in a download (the data licences). Nothing here ranks future bets.

Shown when the rule runs and takes bets.

By season and by split

Shown when the rule runs.

Rules you've tried

Sign in to keep every run, count the rules you've tried, share a report and compare runs.

Compare runs (0)

Pin two to six runs (Pin to compare) to see the bets they share, the paired ROI difference with its range and Holm-adjusted p, and betting them all.

How the test works

  1. Point in time. Every name in the rule has a moment it becomes known: before the season, before the game, at the Monday sheet, at the close, or after the final whistle. The rule may read only what was known at the bet moment, and each name's chip under the formula says when. Windows such as ROLLING_AVG(margin, 3) stop at the game before.
  2. Priced as you could have bet it. Each bet takes Kelly's consensus line and price at the moment you choose. A game with no line then isn't bet, and the count says so. Games where the rule picks both teams are left out.
  3. A verdict with its evidence. The checks ask whether the record is real (enough bets, not just luck after the rules you tried, better than its own market base), whether it holds under pressure (a half point worse, nearby numbers, not one lucky stretch) and whether it still works (the newest 30%, the close). The verdict says which passed; it is never a pick.
  4. Luck, measured honestly. The p-value is the exact chance a bettor with no skill matches the record at each bet's own break-even. Kelly counts the rules you've tried and judges the best of them against that many chances to get lucky. The grey band on the chart is what no-skill betting at these prices looks like.
  5. Which conditions matter. Turn a condition off to see the rule without it. If the profit disappears when one narrow condition goes, the rule may be fitted to the past.

Questions

What is a betting rule back-test?
Running a rule, such as "home teams with 3 more days of rest", over past games to see how its bets would have done at the prices of the time.
Why does Kelly refuse some rules?
A rule may read only what was known before the bet: a game's own score, a later line or LEAD() would make any rule look good. Kelly offers a fix, such as LAG() for the game before. Rules on Kelly's own edge are refused because Kelly never ranks or filters bets by its edge.
What does "luck can't be ruled out" mean?
A bettor with no skill, betting the same games at the same prices, would match the record more than 5 times in 100 once the rules you tried are counted.
How many bets does a rule need?
The "Enough bets" check says how many would show the observed win rate is real. Most rules need hundreds.
Why is there no CLV at the close?
Closing-line value compares your price with the close. A bet at the close is the close. Bet at Monday's sheet to measure it; those lines start in Oct 2026.
Why are there no lines or prices in the export?
The data licences let Kelly show lines and prices on askkelly.ai but not hand them out in a file. The export has every bet's game, side, result and units.
Is this a pick?
No. It tests your rule on past games and never ranks bets.

Information is the edge.

Odds are information, not advice · 21+ · Get help

Privacy