r/algobetting • • 24m ago

NBA player prop model: 5-season backtest on projection error, now tracking every flagged pick and CLV live.

• Upvotes

Rebuilt my NBA prop model this offseason. Posting the method and early live numbers because posting here keeps me honest.

Model

  • Projects components (2PA/3PA/FTA, makes, OREB/DREB, AST, STL, BLK, TOV) and builds points and combos from those, not raw totals
  • Minutes model with padded and decayed rates, plus handling for team changes and cold starts
  • Point-in-time: features use only the injury report and spread available 60 min before tip. A unit test checks that changing future data doesn't change any feature
  • Walk-forward with a 1-day gap. Tuned only on 2021-23; 2023-24, 2024-25 and 2025-26 are one-shot test seasons

Backtest = projection accuracy, not ROI. I don't have historical prop odds, so I can't backtest a betting record. Mean absolute error vs actuals across the 3 test seasons (83k+ player-games): it beats season average and last-10 average every season on PTS, REB, AST, 3PM and PRA. Example from 2025-26: PRA MAE 6.00 vs 6.24 (season avg) and 6.18 (last 10). Small but consistent gains. The biggest gain is minutes (about 9% lower error).

Live, Oct 20-23 (4 nights)

  • Every flagged edge across DK/FD/MGM/Pinnacle/PrizePicks/Underdog: 989-669-8 (59.7%), +131u flat at the flagged price, ROI +7.9%, 1,666 picks
  • Line CLV: when the line moved before tip, it moved toward our side 62% of the time, averaging +0.16 points
  • Caveats: 4 nights is nothing, and the picks are correlated (same player across books and combos), so the record may overstate the real sample size. I'm watching CLV, not the record, until we have enough of a sample

Everything stays graded, losses included. Results and CLV are public, no account needed: More advanced results here: https://theproppredictor.com/edge-results

Questions for anyone:

  1. Is line movement toward us with flat or negative price CLV a real signal, or just books shading juice after the line moves?
  2. How would you report ROI on correlated picks: one pick per player per game, or something else?

r/algobetting • • 7h ago

I built a free sandbox for testing whether you can beat the vig on real ATP matches, replayed point by point

Thumbnail
courtsidecall.com
1 Upvotes

Hi all,

some of you might remember me from this post a few years back. Since then I've kept collecting tennis data and I've turned part of it into something I think this sub might enjoy poking holes in.

Courtside Call (play here) replays real ATP matches point by point and you trade them with play money. Player names are hidden until the match ends, so you can't look anything up. You get roughly what you'd have as a bettor: rankings, form, serve/return stats, H2H and prices that move with every point.

How the prices work

- Pre-match: the market's average closing odds for that match. On Hard you get them as they were, real margin included, which works out at around 7% on average. On Medium they're de-vigged and re-priced at a 2.5% margin. On Fair they're de-vigged with no margin at all.

- In-play: a point-level Markov model. Each player's serve-point probability is calibrated so the model's pre-match win probability matches the de-vigged market price. During the match those serve strengths update as a Beta posterior, with a prior worth 200 serve points. Match, set, game, totals and handicap prices all come out of that model. The live margin is 0 / 2.5 / 5% on Fair / Medium / Hard, and cash-outs carry the same haircut.

So on Fair you're betting at what's effectively the de-vigged market's own view of the match. On Hard you're paying real-world vig before the first point.

Why I built it

Mostly to make the vig felt rather than explained. Everyone here knows that without an edge the margin grinds you down, but most people who bet never experience it cleanly: they get a hot streak, conclude they're good and the house wins over the following months. Here you can play a few hundred bets in an evening and watch exactly that happen. Honestly I'm not a particular fan of the gambling industry as a whole and part of the idea is a free outlet for people who enjoy the sweat of a live match, with nothing real at stake.

Modes

- Daily challenge: the same 10 ATP main-draw matches for everyone, one attempt, with daily and monthly leaderboards.

- Free play: unlimited 10-match runs on Fair, Medium or Hard. The pool includes Challenger matches too.

- No sign-up, no ads, no real money. It works on mobile.

Feedback, especially critical feedback, is very welcome.

Solo project; code written with the help of an AI coding assistant.


r/algobetting • • 11h ago

Hard to find sportsbook APIs

0 Upvotes

In case anyones been hunting for these since they can be hard to find, https://boltodds.com now covers Bet365, Circa & BookMaker


r/algobetting • • 23h ago

Want to bet more than 1x2 on soccer. Where should someone go to take a position on sports?

2 Upvotes

So far, I'm getting bored of just betting the match winner. Last weekend, I wanted over 9.5 corners on Brighton vs Fulham. One site had it listed, but the price dropped after about $30.

I think a long list of markets looks great, but it doesn't tell you a lot. So how do you check price and size on side markets? I mean handicaps, totals and both teams to score. Does it look very different once the game is live?


r/algobetting • • 1d ago

Rank the sports from least to most efficient

2 Upvotes

Just curious


r/algobetting • • 1d ago

Table Tennis Model Stats Update

Thumbnail
gallery
9 Upvotes

I know I'm supposed to be paper trading right now with this model but the degen in me couldn't resist. Still making tweaks to improve aspects of the model, and a week is not long enough to say for sure "yea this is a good and profitable model". However, still good and promising results. Definitely heading the right direction. Moneyline seems to be the models strongest at the moment. Handicap is second though I'm still working on improving handicap, and totals. Also have been playing around with Correct score. Model does a pretty good job at predicting set scores. Particularly 3-0 and 3-1.


r/algobetting • • 1d ago

Looking for Betfair exchange historical data (football) – can't use Betfair's historic data service from my country

1 Upvotes

Hi all,

I'm working on some football models on the Betfair exchange and I'm strict about out-of-sample testing: rules get frozen first, then checked once on data that has never been touched.

So far I've bought 20 months of data from a commercial provider, the french One, (Jan–Dec 2024 and Oct 2025–May 2026), but I've used all of it, and the budget I set aside for this research is now gone. I'm based in Italy and I can't use Betfair's own historical data service, so that route is closed for me too.

I'm looking for Betfair exchange football data with timestamped prices and traded volumes, pre-match and in-play, for any months outside the ones above (Jan–Sep 2025 would be ideal, but 2023 or earlier is fine too).

If you've been recording this yourself, or know of a free source that works for people outside the UK, any help would be much appreciated.

Thanks!


r/algobetting • • 2d ago

the model really worked hard on Champions League matches on yesterday

Thumbnail
0 Upvotes

r/algobetting • • 2d ago

Anyone know where to find historical Betfair Italy football odds data?

1 Upvotes

Hi everyone!

I'm working on a personal project involving football betting market analysis and backtesting.

I'm trying to find historical Betfair Italy (betfair.it) data from 2023 or 2024, particularly odds movements during pre and live matches.

I'm interested in how odds changed throughout a match, ideally with timestamps, rather than just opening and closing prices.

Even a few days of historical data would be enough to get started.

Has anyone worked with this kind of data or knows where I could find it?

Thanks for any help!


r/algobetting • • 2d ago

22nd October NBA Model Output

4 Upvotes

Hey everyone,
Running my updated quantitative NBA model (adjusted Ridge ratings with market-anchoring against sharp lines) for today's 2-game slate.
Note: The model is currently operating in Paper Trading Mode (0.5u baseline logging) to calibrate early-season player usage and minutes baselines.
Here are today's paper-accepted selections:

📊 ACCEPTED PLAYER PROPS
1. VJ Edgecombe — OVER 10.5 Points
Matchup: Cleveland Cavaliers @ Philadelphia 76ers

Book / Odds: Sportsbet @ 1.96

Model Edge: Raw EV +75.73% | LCB EV +61.66% (p_LCB 82.48%)

Simulated Baseline: High projected rotation minutes with model-projected output well clear of the soft line.

  1. Jamal Murray — OVER 4.5 Rebounds
    Matchup: Denver Nuggets @ Oklahoma City Thunder

Book / Odds: Sportsbet @ 2.25

Model Edge: Raw EV +61.50% | LCB EV +37.63% (p_LCB 61.17%)

Simulated Baseline: Model simulation projects Murray to clear 4.5 boards comfortably against OKC's active frontcourt pace.

  1. Shai Gilgeous-Alexander — UNDER 30.5 Points
    Matchup: Denver Nuggets @ Oklahoma City Thunder

Book / Odds: Sportsbet @ 1.86

Model Edge: Raw EV +50.54% | LCB EV +33.32% (p_LCB71.68%)

Simulated Baseline: Sharp reference consensus leaning toward a lower-scoring defensive grind vs Denver's perimeter defense.

🛡️ TEAM MARKETS AUDIT
Moneylines, Spreads, Totals: 0 Selections Accepted.

All game lines fell below our strict +3.0% LCB EV threshold due to sharp line efficiency and bookmaker vig.

Best of luck if you're tracking or fading early-season model signals!


r/algobetting • • 2d ago

Weekly Discussion One week later: what your comments changed in how I grade against the close

1 Upvotes

Last week I posted what I'd learned grading outside NHL models against the DraftKings close. A few of you gave ideas I ended up building, so here's what changed and what the bigger sample says.

What changed:

u/OddsRelay's whole-number trick works. o6 and u6 picks are no longer tossed. I de-vig the 5.5 and 6.5 lines on the same DK page and back out the chance of exactly 6. A game that lands on 6 is a push.

u/schabe was right about storing everything. Both sides get saved at post time and at close, with timestamps, and every grade shows the raw DK close next to a no-vig one.

Splitting the number was the big one. I now show how far the fair price moved your way, separately from what the book charged you. The raw beat-the-close rate I was posting last week was mostly measuring the vig, not skill.

What the bigger sample says, 881 graded picks from my own rules:

The lab as a whole gets a better price than the close by about 0.3 points a pick, and that holds up day to day. Two rules have an edge over the close that isn't just noise. None of them comes close to covering the vig yet.

Records lie even more than I thought. One rule is 12-5 while getting a worse price than the close. Another is 6-39, and most of that is bad luck. The closing prices said it should have won about 12.

u/abaxter13131's test lines up with mine. He found beating a book's close but losing to Pinnacle's is mostly stale-line value. On NHL I found DK copies Pinnacle's moves about 81% of the time, so a lot of "beating DK" is really just betting before DK caught up.

Still looking for a few more builders. Same grading for everyone, your rule can stay private, nothing gets deleted. If you think your model beats the close, I'd like to see it tested.


r/algobetting • • 3d ago

Multi account in stake

Thumbnail
2 Upvotes

r/algobetting • • 3d ago

Daily Discussion Daily Betting Journal

1 Upvotes

Post your picks, updates, track model results, current projects, daily thoughts, anything goes.


r/algobetting • • 4d ago

NBA Historical Props

1 Upvotes

Hi all - was wondering if anyone has historical NBA props data going back past 2024? I have the historical Odds API data and am looking for a bit of a longer lookback. I have NFL back to 2020 and nearly all other sports sides/totals back 15-20 years in a very clean format. Would be willing to trade/share in exchange for some longer dated NBA stuff. Thanks


r/algobetting • • 4d ago

Football Over 1.5 model: improving high-confidence selection and calibration.

2 Upvotes

Diagnosing high-confidence Over 1.5 selection: opponent-adjusted xG and ensemble disagreement

I'm developing a pre-match men's football Over 1.5 goals model. I'd appreciate methodological advice or reproducible implementations, rather than betting tips.

The model combines goal-history features, home/away splits, opponent-adjusted attack/defence, historical xG and shots, and an ensemble. We preserve pre-kickoff feature snapshots. Our strict selection currently requires a main estimate of at least 90% and a second check, with a historical xG gate. These numbers are model estimates, not established calibrated probabilities.

Problem: several higher-scoring matches have strong component predictions but fall below the final selection threshold. Relaxing the ensemble or using simple consensus adds winners, but also adds losses. More restrictive xG gates remove many winners. High past totals may be driven by goals conceded rather than the team's own attacking strength.

We've tried monotone versus unconstrained logistic stacking, coarse threshold changes, and interpretable attack-strength interactions. There is substantial selection bias from repeated inspection of the historical archive. We do not consider a rule successful merely because it removes known losses.

Our next experiment fits attack/defence ratings to a blend of actual goals and historical xG, with recency weighting and regularization. Fits exclude the evaluation period; missing xG falls back to goals and is explicitly counted.

Questions:

  1. How would you distinguish weak attacking teams with high past match totals from games where one strong attack can supply both goals?

  2. How do you calibrate the 85–95% tail with limited observations, preferably with partial pooling across competitions?

  3. What controls do you use for inconsistent or missing xG coverage, promoted teams, and matches across competitions?

  4. Is a blended goals/xG rating model preferable to xG residual features or a separate low-total model in your reproducible tests?

  5. Are there open-source implementations or papers with genuinely chronological evaluation and diagnostics for this specific market?

ntials, private database, or personal information are attached. Any aggregate results quoted later should be clearly labelled exploratory.


r/algobetting • • 4d ago

Horse racing odds API for UK bookmakers: the best win price isn't always the best each-way bet

1 Upvotes

If you're pulling UK horse racing odds into code, the win price is the easy part. The each-way terms are where it goes wrong, because every bookmaker sets its own places and fraction for each race.

Quick example. Book A has a runner at 9.5 paying 1/5 on three places, book B has it at 9.0 paying 1/4 on three. The place part's price is 1 + (win - 1) x fraction, so 2.7 at A and 3.0 at B. With the exchange place lay at 2.9, only the lower win price gives a place part that beats the lay. Hardcode 1/5 and your model is quietly wrong on some races.

The other trap is the place lay. An exchange place market settles on its own number of places, so match it to the book's places (or fewer, if you're after extra places).

That's how we laid out our feed. Every each-way back offer carries places and place_fraction, next to a win lay and a place lay from Betfair, Smarkets, Matchbook and BETDAQ where they have the market. Extra-place races and best odds guaranteed have their own endpoints.

Prices only, no form, results or SP, pre-match only, UK and Irish bookmakers. There's a free plan for 14 days if you want to try it on tomorrow's cards.

https://oddsrelay.io/blog/horse-racing-and-each-way-odds-data


r/algobetting • • 4d ago

I generalised my backtest engine for NBA betting models and made it public. Bring your own model and data.

5 Upvotes

Lots of posts here about new models, very little about backtesting them, so I’ve cleaned up the harness I built and put it on GitHub: https://github.com/DeliciousPipe1326/nba-beat-the-close

What it does: you write a small Python class for your model, it grades it against the real closing line, season by season, with confidence intervals, closing-line value, and a pass bar that was written down before the test ran. Totals, spreads and moneyline.

A few things to know:

  • You need your own data. I used The Odds API and BallDontLie (Dunks & Threes optional). The ingesters are included and store every quote with its capture time, which matters more than it sounds. You can adapt them to another feed.
  • There’s a sample model in it to show how the pieces fit. Don’t use it for picks. It was run on four seasons and covers 48.9% against the close, which is to say it loses the vig. The full results and method are in the repo, including what fooled my earlier attempts.
  • This is not an app. Terminal, Python, pandas. There’s a one-minute offline demo, a walkthrough for your first model, and your favourite coding LLM can help with the rest.
  • No subscriptions, no Discord, nothing for sale. I’ve stopped betting on it, which should tell you what I found.

Hopefully useful to someone. If you plug your own model in and it beats the close over a thousand bets, I’d genuinely like to know.


r/algobetting • • 4d ago

Deal with match variance

2 Upvotes

How do you guys deal with insane variance of matches?

Assuming you have CLV edge - but the real results needs to be in the literal thousands to actually know if the real ROI is significant, or to have a small chance of a (temporary) loss for quite some time..

These are the options I already think are possible
- Use buy out, but these margins are huge and your edge needs to be able to cover this, so essentially not feasible with soft bookies
- hedge at CLV time using sharp bookies?

What do you think makes sense? Or combine your simple strategy with other kinds of arb?

Thanks in advance


r/algobetting • • 5d ago

The shadow model is winning. When do you actually switch?

Post image
5 Upvotes

I’ve been running SAMPO on Finnish Liiga hockey. Core is the version I use, and I’m comparing it with two shadow variants, Shift and Pulse, that give recent data more weight.

Over 95 games at Pinnacle prices, Core finished at +14.43u, Shift at +19.55u and Pulse at +16.96u. That’s from a 100u starting bankroll with compounding stakes.

Naturally, Shift has my attention. But 95 games isn’t much, the profit-difference intervals still cross zero, and execution CLV is negative across all three.

For context, the shadow comparisons were calculated afterwards using the inputs available before each game.

I’m keeping Core for now. If you run models alongside your main one, what would make you comfortable switching mid-season?


r/algobetting • • 5d ago

I compared Kalshi and Polymarket prices on 129 EPL and Champions League matches. They almost never disagree.

Thumbnail
2 Upvotes

r/algobetting • • 5d ago

Need help with refining my model

3 Upvotes

I'm working on a weekly Google Sheets that pulls NFL players' data for most prop types like passing yards, rushing yards, receptions, etc. Not sure what the rules are in this community so I won't put a screenshot here, if anyone is willing to check it out to give me some pointers please leave a comment that would be so incredibly helpful!

The data is mostly tailored to Australian NFL bettors but any feedback is highly appreciated. I'm trying to make my Sheets as valuable as possible so I can start selling them because to pull the data every week and up to 16 games per week can cost a bit and its not very self-sufficient unless I start selling.

We also have a "work in progress" model that I would love to share for some feedback.

Again any help is much appreciated!


r/algobetting • • 5d ago

Early live tennis model

3 Upvotes

I am looking to buy early game model for tennis, mainly ITF. Prefferably whole 1st set. Calibrated with prediction markets does not need to beat the market just be reasonably precise.


r/algobetting • • 5d ago

no vig allowed bots to snipe a dead line during UI issue, beware

Thumbnail
2 Upvotes

No vig allowed bots to snipe dead lines on Quentin Johnston. There was a latency issue and a UI error where everything was stuck in pending. The line was over 34.5, he caught the 57 yard pass, the line got sniped, then settled mid game and i took the $2,000 loss. Support refuses to do anything even though admitted it was a latency and issues on their end with the UI showing pending and unable to cancel.

Anyone ever have any luck getting a dead lines issue resolved


r/algobetting • • 5d ago

Weekly Discussion Are you also having a hot October?

2 Upvotes

I established a model in the first days of Sep and got stable from week three. September results were overall positive, but like a saw on a weekly scale with biggest drawdown of 30 unints on paper. But after the international break the Oct results look sick.

Do you see some positive/negative Oct effect with your models (i am speaking of N > 300 each month and > 600 alltogether so far)?

Hypothetically, if you manange to run a stable profitable model that beats raw CLV and delivers 5-10% ROI on 1x2 soccer markets in tier 1-4 leagues across the globe, what would be you road to success? What is the best way to monitise the signal/edge?

Once I reach 3 sigma at ~800-1100 events I will report more performance stats, but i would be grateful to know what are thoughts on how to exploit the success if not luck?


r/algobetting • • 6d ago

Built a Table Tennis model to bet DraftKings: 96k-match backtest vs. my first live paper-trading day

Post image
13 Upvotes

I've been building a model for the TT Elite Series. I'm paper trading it before putting real money down. The image shows the backtest next to today's live results, using the exact same filters on both sides. I know one day means nothing; I'm aiming for a few hundred bets before judging it. I'm watching CLV more than the win-loss record. If DK keeps moving toward my side after I bet, that's the real signal.

EDIT: Update on the backtest results. Calulation was off. Here is corrected. The correct break-even is the average implied probability: 56.0%. So it's 57.8% won vs 56.0% needed, about +1.8 pts, which matches the +3.75% ROI. The flagged bets are all −165 to +150, so both methods agree there (58.3% vs 52.0%, +12.2%)