2026-05-19 · betting math arbitrage positive ev middling
The value-hunting trifecta: arbitrage, +EV, and middles explained together
Three public methods exist for finding mathematical edge in a public sportsbook market: cross-book arbitrage, positive-EV bets, and middles. Most write-ups treat them as separate strategies. They are not separate. They are three points on the same continuum, and understanding how they relate makes choosing between them obvious.
This post puts the three side by side. ParlayAPI ships free no-auth demos of each at /arbs, /ev, and /middles, so you can read the math here and watch it land in real markets in the same tab.
The shared mechanism
Every sportsbook price is a vigged implied probability. Heads at -110 means the book is asking you for 52.38% implied probability (110 / 210) on a coin flip whose true probability is 50%. The 2.38% gap is the book's hold per side. Two sides at -110 sums to 104.76%, so the overround (vig) is 4.76%.
All three value-hunting strategies start from the same premise: if you can compose a bet whose effective implied probability sums to less than 100%, or whose effective true probability exceeds the implied probability of the price you took, you've found positive expectation. They differ only in how they compose that effective probability.
1. Cross-book arbitrage
Take the highest available price on each side of a two-sided market, across different books. If the sum of the two implied probabilities is below 1.0, bet both sides in inverse proportion to their prices and lock a guaranteed return on every dollar in the position.
Example. DraftKings has Lakers +160 (implied 38.46%). FanDuel has Celtics -140 (implied 58.33%). Sum of implied probabilities: 96.79%. Overround is negative 3.21%, which means there's a 3.21% edge if you bet both sides correctly proportioned. Stake $61.54 on Lakers at DK ($160 if it wins) and $58.33 on Celtics at FD ($41.67 if it wins). Your total stake is $119.87. Whichever side wins, you collect approximately $100 (for the winning side's original stake) plus the profit on that side. Net guaranteed profit: about $3.85, or 3.21% of stake.
Properties
- Variance: zero, in theory. Both bets are placed and one wins.
- Bankroll requirement: high. You need money at both books.
- Edge size: rare. Public scanners surface 0.1–2% windows; larger windows close fast.
- Detection by books: obvious. Books model arber behavior and limit accounts that consistently take the off-market side.
Watch this live: /arbs. Backed by the no-auth /v1/try/{sport}/arbitrage endpoint.
2. Positive-EV (devig method)
Arbitrage requires two books to disagree by enough to overcome the vig of both. A weaker condition: one book's price disagrees with the sharp anchor's vig-stripped price. That gap is your edge against fair value.
Example. Pinnacle (sharp anchor) has Yankees -145 / Rangers +135. Implied probabilities are 59.18% and 42.55%, summing to 101.73% (1.73% Pinnacle hold). Devig: 59.18 / 101.73 = 58.18% for Yankees, 41.82% for Rangers. That's the no-vig fair price. Now look at every other book. FanDuel has Yankees -135 (implied 57.45%). Edge = 58.18% − 57.45% = +0.73%. You'd take Yankees at FD all day if you had to, but it's a small edge.
Properties
- Variance: normal. You're picking one side at one book. Lose the bet, lose the stake.
- Bankroll requirement: low. One bet per opportunity.
- Edge size: typically 0.3% to 3%. Anything above 3% on a liquid US ML is suspicious (stale data, alt market mismatch, exchange-style book).
- Detection by books: harder. You're not paired with the opposite side at another book. Limits come slower.
- Hidden cost: you only realize the edge over many bets. Long-run +EV.
Watch this live: /ev. Backed by the no-auth /v1/try/{sport}/ev endpoint, which devigs Pinnacle's h2h price and scans every other book.
Critical reading: no-vig CLV explained. Vigged-vs-vigged double-counts the vig and overstates your edge by the overround. Always devig the sharp first.
3. Middles
Two sides of the same market at different lines across two books. If the game lands between the two lines, both legs win.
Totals example. Book A has Over 7.5 at -110. Book B has Under 8.5 at -105. Bet both. If the final total is exactly 8 runs, Over 7.5 wins AND Under 8.5 wins. You double your money. If the total is 7 or less, the Under wins and the Over loses. If the total is 9 or more, the Over wins and the Under loses. So you "lose half" most of the time and "win twice" sometimes.
Combined hold: implied probabilities of -110 and -105 sum to 52.38% + 51.22% = 103.60%, so you're paying 3.60% in vig per pair when the middle misses. Break-even middle hit rate is roughly 3.60% / (1 + 0.918) ≈ 1.88%. If the integer total of 8 hits more than 1.88% of the time in this matchup, the middle is +EV.
Properties
- Variance: low. Most of the time you lose half (one leg wins, one loses); occasionally you win both.
- Bankroll requirement: medium. Two bets per opportunity.
- Edge size: depends on window width and score distribution. Width-1 windows (e.g. O 7.5 / U 8.5) hit rarely; width-3+ windows (e.g. O 7.5 / U 10.5) hit much more but combined hold is worse.
- Detection by books: moderate. You're paired across books but at different lines, which looks more like normal action.
Watch this live: /middles. Backed by the no-auth /v1/try/{sport}/middles endpoint.
Side-by-side
|
Arbitrage |
+EV (devig) |
Middles |
| Bets per opportunity |
2 (both sides) |
1 |
2 (same side, two books, two lines) |
| Variance |
Zero |
Normal (single bet) |
Low (lose-half most times) |
| Edge realization |
Immediate |
Long-run |
Long-run, score-distribution dependent |
| Typical edge size |
0.1–2% |
0.3–3% |
Variable; depends on window width and base rate |
| Bankroll need |
High (money at both books) |
Low (single book) |
Medium |
| Detection risk |
High (paired off-market) |
Low to medium |
Medium |
| Best for |
Patient ops with many books funded |
Bettors with one or two books, optimizing long-run |
Sport-specific score-modelers |
The continuum nobody talks about
The three strategies share a single underlying object: the cross-book price surface. Once you have synced prices for every book on every market on every event, the three strategies are different queries against the same data:
arbitrage := find events where best_home_price + best_away_price implies sum < 1.0
+EV := find (event, side, book) where book_implied < devig(pinnacle).fair_prob
middles := find (event, market) where best_over_low_line and best_under_high_line at different books with low_line < high_line
That's it. All three reduce to "scan the cross-book price surface and flag the geometric configuration that produces edge." This is why ParlayAPI ships all three as no-auth demos: the underlying compute is the same; the output shape is what differs.
Which should you chase?
Quick recommendations:
- If you have one book: +EV is your only real option. The other two need cross-book legs.
- If you have two to three books: +EV plus light arb when windows open. Avoid pattern-betting arbs (taking only the off-market side every time, ignoring the matched side) which makes you trivially detectable.
- If you have five or more funded books: arb is the steady core, +EV is the booster, middles are the variance-reducer.
- If you're a sport-specific modeler: middles are your sharpest tool. You know the score distribution of your sport better than the book does. Width-1 middles are gold.
What the public scanners can't see
Three things that make the public picture incomplete:
- Limits. A "+3% edge" at -150 might cap at $50/bet at your book. The edge is real; the throughput isn't. Public scanners don't model your per-account limits.
- Geofencing and account health. Books shadow-limit accounts that exhibit value-hunting patterns. Your "available edge" decreases as your account ages, regardless of what the public price says.
- Latency. The arb window between two books often closes in 3 to 30 seconds. If your scanner refreshes every 60 seconds, the edge is theoretical. (This is why we ship WebSocket and sub-second freshness, see /blog/sub-1s-freshness.)
Build on it
Every method described here is exposed in our REST API:
GET /v1/sports/{sport}/arbitrage: full cross-book arb scan, all markets, all sports.
GET /v1/sports/{sport}/ev: full +EV scan with configurable sharp anchor and min-edge.
GET /v1/sports/{sport}/middles: full middles scan covering totals and spreads.
Reference clients in Python, JavaScript, Go, Ruby, Java, PHP, and C# at github.com/JacobiusMakes/ParlayAPI/tree/main/examples. Production integration guide at /docs/best-practices.
The math doesn't care which strategy you pick. The math cares about edge × throughput × longevity. Pick the strategy whose throughput and longevity match your operation.
← All posts · Live arbs · Live +EV · Live middles · Get a free API key