Every equation this site runs, with each symbol named and a worked example beside it.
Open one to check our arithmetic.
Sports betting math runs on five quantities: an American moneyline ML, the vig-inclusive probability q it implies, the fair probability p left after the margin is removed, the decimal odds d, and the net odds b = d − 1. Every formula below either converts between them or prices a bet from them.
Notation
Fixed throughout. Where a formula reuses a letter differently, it says so on the spot.
ML: American moneyline
An integer with ∣ML∣≥100. Negative is the favorite (risk ∣ML∣ to win $100); positive is the underdog (risk $100 to win ML). Unitless.
q: implied probability
What a posted price implies, including the house margin. A number in (0,1). The two sides of a real market sum above 1.
p: fair probability
The de-vigged estimate: what is left after the margin is stripped out. In (0,1), and the two sides sum to exactly 1.
d: decimal odds
Total return per $1 staked, stake included. Dollars per dollar, d>1.
b: net odds
b=d−1: profit per $1 staked, stake excluded. Dollars per dollar, b>0.
Subscripts a and b index the two sides of a two-outcome market. Kalshi sections add C (contracts, an integer count) and P (contract price in dollars, 0<P<1).
Quick reference: seventy-four equations
Seventy-four equations on one screen: the cheat sheet the board and the calculators actually run, grouped by what each one computes. Every group links to the page that derives it step by step, and the forty-two below restate them with their symbols, units and a worked number.
Convert between American (moneyline), decimal, fractional, and implied probability in every direction, plus the overround and combined parlay odds.
p=⎩⎨⎧100+ML100100−ML−MLML>0ML<0
American → implied probabilityTurn a moneyline price into the probability it implies (favorites use the negative branch, underdogs the positive).
ML=⎩⎨⎧−1−p100pp100(1−p)p≥0.5p<0.5
Implied probability → AmericanInvert a probability back into a moneyline price; probabilities at or above one-half give a negative (favorite) line.
d=⎩⎨⎧100ML+1−ML100+1ML>0ML<0
American → decimalConvert a moneyline to decimal odds (total return per 1 unit staked, including the stake back).
ML=⎩⎨⎧100(d−1)−d−1100d≥2d<2
Decimal → AmericanConvert decimal odds to a moneyline; decimal at or above 2.0 is a positive (underdog) line, below is negative.
p=d1
Decimal → implied probabilityThe reciprocal of decimal odds is the probability those odds imply (before removing vig).
d=p1
Implied probability → decimalThe fair decimal odds for an event of probability p, with no margin added.
b=d−1⟺d=b+1
Net odds ↔ decimalNet (mathematical) odds b are profit per unit staked; decimal odds d add the returned stake.
d=DN+1
Fractional → decimalA fractional price N/D (e.g. 5/2) becomes decimal odds by adding one for the returned stake.
DN=d−1
Decimal → fractionalSubtract the stake to recover the profit ratio, then reduce it to a fraction (e.g. 3.5 → 5/2).
p=N+DD
Fractional → implied probabilityThe probability implied by a fractional price N/D (denominator over the sum of both parts).
v=p1+p2−1=d11+d21−1
Overround / vig (two outcomes)The book's margin: how much the two implied probabilities sum above 1 (0 would be a fair, vig-free market).
dparlay=∏i=1ndi
Parlay / combined decimal oddsMultiply the decimal odds of each independent leg to get the combined price of the whole parlay.where d_i is each leg’s decimal odds.
Three ways to strip a book's margin out of two-outcome moneylines and recover fair, no-vig probabilities, from simplest to most sophisticated.
pi=qa+qbqi
Proportional normalizationSimplest de-vig: divide each side's implied probability q by the overround (their sum) so the fair probabilities add to 1.
pi=qik,qak+qbk=1,k≥1
Power methodSolve for the exponent k that makes the powered probabilities sum to 1; shades longshots harder than proportional, matching favorite-longshot bias.where q_i is each side’s implied probability and k the exponent being solved for.
pi=2(1−z)z2+4(1−z)qi2/s−z,s=qa+qb
Shin (insider-trading) methodModels the book padding prices against a fraction z of insider money; z is chosen so the fair probabilities sum to 1 (z = 0 recovers the proportional case).where q_i is each side’s implied probability, s their sum, and z the modeled insider fraction.
How a posted price is scored against the de-vigged sharp-consensus fair line: expected value per dollar staked and the edge in probability points.
EV=pb−(1−p)
Expected value per $1 stakedThe core +EV number: p is the fair win probability, b the net profit per $1 if it wins; this is exactly analyze_market's ev = p*b - (1-p).
b=⎩⎨⎧100ML,ML−100,ML>0ML<0
Net profit b from an American moneylineProfit per $1 staked implied by the price (Moneyline2Odds); the b that goes into the EV formula.
q=⎩⎨⎧100+ML100,100−ML−ML,ML>0ML<0
Implied probability q of a priceThe win probability baked into a posted price, vig still included (Moneyline2Prob); the benchmark the fair prob is compared against.
edge=p−q
Edge in probability pointsFair probability minus the price's implied probability; a positive edge is the signal that a price is mispriced (edge = p - Moneyline2Prob(ml)).
EV=pd−1,d=b+1
EV from decimal oddsThe same EV written with full decimal odds d (stake plus profit returned); algebraically identical to p*b - (1-p).
EV=qp−q=qedge
EV from edge and implied probabilityEV per $1 rewritten as the probability edge scaled by the price's implied probability; shows EV and edge always share a sign.
pbe=1+b1=q
Break-even probabilityThe fair probability at which EV = 0; it equals the price's own implied probability, so any p above it is +EV.
EV>0⟺p>q
Positive-EV conditionA price is positive-EV exactly when the de-vigged fair probability exceeds the implied probability (is_positive_ev in /api/ev).
q=1+b1,b=q1−q
Fair odds and implied probabilityConvert between a vig-free profit multiplier b and its implied probability q; the fair-price relationship underneath every EV comparison.
0<EV<0.15
Suspect-EV flag bandThe board only flags a price as a genuine edge in this band; EV of $0.15 or more per $1 is treated as a stale or erroneous line (EV_SUSPECT_PER_DOLLAR) and left unflagged.
How much of the bankroll to stake: the growth-optimal fraction, its noise-tolerant fractional version, and the joint objective for several simultaneous bets.
f∗=p−b1−p
Full-Kelly fractionGrowth-optimal share of bankroll for a single bet, where p is win probability and b the net fractional odds; a negative value means no edge, so stake zero.
f∗=bbp−q,q=1−p
Full-Kelly (edge/odds form)Algebraically identical rewrite: expected profit per unit staked (b·p − q) divided by the odds b.
f=λ⋅max(f∗,0)
Fractional KellyScale the full-Kelly fraction by λ (Teacher's Bet defaults to λ = 1/2) to blunt the ruin risk of an overestimated edge; the max clamp keeps the stake non-negative.
g(f)=pln(1+bf)+(1−p)ln(1−f)
Expected log-wealth growthExpected log-growth per bet at stake fraction f; the value Kelly maximizes, and what f* is the argmax of.
maxfi≥0,∑ifi≤1∑ωP(ω)ln(1+∑ifiXi)
Joint simultaneous KellyFor n simultaneous bets, jointly maximize expected log wealth over all 2^n win/loss outcomes ω (payoff X_i = +b_i on a win, −1 on a loss); avoids the overallocation of summing per-bet Kelly.where f_i is the fraction staked on bet i, ω one joint win/loss outcome of all bets, and X_i the payoff of bet i (+b_i on a win, −1 on a loss).
Locking a fixed return by taking the best price on each side of a two-outcome market across different books. The arithmetic holds only while both prices do.
d=⎩⎨⎧1+100ML,1+∣ML∣100,ML>0ML<0
Decimal odds from American moneylineConverts an American moneyline to decimal odds (stake included in payout), the input to every arb formula.
da=maxkda(k),db=maxkdb(k)
Best price per sideTake the highest decimal odds offered on each side across all books; the two legs may come from different books.where a, b label the two sides of the market and k runs over the books (the two legs may come from different books).
S=∑idi1=da1+db1
Inverse-odds sum (booksum)The sum of inverse best decimal odds across the outcomes; S is the quantity every arb test and stake compares against.where i runs over the two sides and d_i is the best decimal price on side i.
da1+db1<1
Two-way arbitrage conditionA two-outcome arb exists exactly when the inverse best prices sum below 1 (equivalently S < 1).
si=T⋅∑j1/dj1/di=diST
Stake split (proportional to inverse odds)Stake on outcome i given total stake T, sized so the payout is identical whichever outcome wins.where T is the total staked, s_i the stake on side i, and S the inverse-odds sum above.
P=∑i1/diT=ST
Locked payoutThe same payout received on either outcome when stakes are split by the formula above.where T is the total staked and S the inverse-odds sum.
r=∑i1/di1−1=S1−1
Locked return fractionThe locked-in return per unit staked; it is positive exactly when an arb exists (S < 1).
CLV is the de-vigged closing fair probability minus your price's implied probability, the exact quantity the Report Card grades.
CLV=pfairclose−qimplied
Closing line value (probability points)The de-vigged closing fair probability minus your price's implied probability; positive means your price beat the close. This is exactly what the Report Card grades (clv = fair - implied).
qimplied=⎩⎨⎧100+ML100100−ML−MLML>0ML<0
American moneyline to implied probabilityRestates an American moneyline price as its vig-inclusive implied probability q, the number CLV subtracts from the fair line.
qimplied=d1
Decimal odds to implied probabilityThe same implied probability from decimal odds d, the reciprocal of the payout multiplier; use when a book quotes decimal rather than American.
pi=qa+qbqi
De-vigged fair probability (proportional)Removes a two-way market's vig by normalizing so the fair probabilities sum to 1; pooled across sharp books at close this gives the fair line CLV is measured against.
Report Card letter gradeThe site's grade cutoffs applied to CLV as a probability fraction: A at +2.5 points of edge over the close, down to F below -2.0 points.
GPA=n1∑i=1ngi
Report Card GPAThe plain mean of each logged bet's grade points (A = 4, B = 3, C = 2, D = 1, F = 0) across n graded bets.
The public pooling math behind the consensus fair line: map each book's de-vigged price into log-odds, take a weighted average there, and invert back to a vig-free probability.
z=ln(1−pp)
Logit (log-odds) transformMaps a de-vigged win probability p into log-odds space, where a weighted average behaves correctly; each book's fair price is mapped here before pooling.
p=1+e−z1
Sigmoid (inverse logit)The inverse of the logit transform; turns a pooled log-odds value back into a probability between 0 and 1.
zˉ=∑iwi∑iwizi
Weighted logarithmic opinion poolThe core aggregator: a weighted average of the books' log-odds, which stays calibrated instead of drifting to the muddled middle the way a plain probability average does.where z_i is book i’s de-vigged log-odds and w_i its weight in the pool.
pA=1+e−zˉ1,pB=1−pA
Fair line from the poolApply the sigmoid to the pooled log-odds for side A's fair probability; side B is one minus it, so the two-way line sums to 1 with no vig.
1−pApA=∏i(1−pA,ipA,i)wi/∑jwj
Odds-ratio product formEquivalent view of the same pool: it is a weighted geometric mean of each book's odds ratio, which is why it differs from an arithmetic average of probabilities.
σz=∑iwi∑iwi(zi−zˉ)2
Dispersion (agreement)Weighted spread of the books' log-odds around the pooled value; small means the books agree (tight line), large means they disagree (wide).
The rate a price needs, and the statistics that say whether a settled record has separated from it.
q=d1
Break-even rate of a priceHow often the bet has to win for the price to be a coin flip. Vig-inclusive.
q=P+rP(1−P)
Break-even rate of a contractThe exchange fee moves the requirement above the contract price. Heaviest at a coin flip.
z=q(1−q)/np^−q
z against break-evenThe standard error is taken under the null, since q is the rate being tested against.
1+nz2p^+2nz2±znp^(1−p^)+4n2z2
Wilson score intervalThe interval on the observed rate. Stays inside 0 and 1 where the normal interval does not.
n=(p−q)2(zαq(1−q)+zβp(1−p))2
Bets needed to detect an edgeHalving the edge quadruples the sample. About 20,000 bets for one point over −110.
Reference only: every formula here is a calculation on inputs you supply, never advice. Symbols: p a fair probability, q an implied probability, b net decimal profit per $1, d decimal odds, ML an American moneyline, f* the full-Kelly fraction, λ the Kelly multiplier.
Implied probability from an American moneyline
The probability a posted price implies, house margin included.
q=100−ML−ML(ML<0),q=100+ML100(ML>0)
where:
ML: the American moneyline, unitless, ∣ML∣≥100.
q: implied probability, a fraction in (0,1). It is not a fair probability: the margin is still in it.
Worked example: the market −152 / +138
qa=100+152152=252152=0.6032⇒60.32%
qb=100+138100=238100=0.4202⇒42.02%
Both branches are the same statement: risk divided by total return. They sum to 102.33%, and the 2.33% above par is the margin.
Profit per dollar risked, which is what every expected-value and Kelly formula below consumes.
b=ML−100(ML<0),b=100ML(ML>0),d=1+b
where:
b: net odds, in dollars of profit per $1 staked.
d: decimal odds, in dollars returned per $1 staked, stake included.
Worked example: −152 and +138
b(−152)=152100=0.6579⇒d=1.6579
b(+138)=100138=1.3800⇒d=2.3800
A $100 stake at −152 returns $165.79: $65.79 of profit plus the stake back.
Implemented as moneyline_to_odds. Calculator: odds converter.
Fair decimal odds from a probability
The price at which a bet on a probability breaks even: the zero-margin price.
d=p1
where:
p: fair probability, a fraction in (0,1).
d: fair decimal odds, dollars returned per dollar staked.
Worked example: the fair price behind −152
pa=0.589416⇒d=0.5894161=1.6966
The posted −152 pays 1.6579. The fair price is 1.6966. That 0.0387 gap is the margin, expressed as odds rather than as probability.
Implemented as prob_to_decimal.
Fair American moneyline from a probability
The same fair price written back in American notation, which needs two branches because the notation flips at even money.
ML=1−p−100p(p≥0.5),ML=p100(1−p)(p<0.5)
where:
p: fair probability in (0,1).
ML: the fair moneyline, unitless. Negative at or above 50%, positive below.
Worked example: both sides of −152 / +138
pa=0.589416⇒MLa=0.410584−100×0.589416=−143.56
pb=0.410584⇒MLb=0.410584100×0.589416=+143.56
A de-vigged market is symmetric by construction: the two fair moneylines are the same number with opposite signs. Any two-sided fair line that isn’t symmetric has arithmetic wrong somewhere.
How far the two posted sides sum above 100%. It is the margin the house has priced in.
overround=qa+qb−1
where:
qa,qb: the two implied probabilities, each a fraction in (0,1).
The result is in probability points expressed as a fraction: 0.0233 means 2.33 points over par.
Worked example: −152 / +138
0.603175+0.420168−1=0.023343⇒2.33%
hold=1.0233430.023343=0.02281⇒2.28% of handle
Overround and hold are different numbers and get confused constantly. Overround is the excess over par; hold is the share of money wagered the house keeps on a perfectly balanced book. Hold is always the smaller of the two.
Implemented as overround. Calculator: vig and hold.
Proportional de-vig
Strips the margin by scaling both implied probabilities down by the same factor until they sum to one.
pi=qa+qbqi
where:
qi: side i’s implied probability, a fraction.
pi: side i’s fair probability, a fraction. The two pi sum to exactly 1.
Worked example: −152 / +138
pa=1.0233430.603175=0.589416⇒58.94%
pb=1.0233430.420168=0.410584⇒41.06%
It assumes the house spreads its margin evenly across both sides. That is the simplest assumption available and not what real books do, which is why the next two methods exist.
Raises both implied probabilities to a common exponent chosen so they sum to one, which takes proportionally more away from the longshot.
find k≥1 with qak+qbk=1,pi=qik
where:
k: the fitted exponent, unitless and ≥1. Solved numerically by bisection; k=1 means no margin to remove.
qi,pi: implied and fair probabilities as above.
Worked example: −152 / +138
k=1.035312⇒0.6031751.035312+0.4201681.035312=1
pa=0.592502⇒59.25%,pb=0.407498⇒40.75%
Against proportional, the favorite gains 0.31 points and the longshot loses 0.31. Because q<1, an exponent above 1 shrinks the small number by more, which is the observed favorite–longshot bias written as one parameter.
Implemented as devig_power.
Shin de-vig
Models the margin as protection against a fraction of informed money, then solves for the fair probabilities that assumption implies.
pi=2(1−z)z2+4(1−z)qi2/s−z,s=qa+qb
where:
z: the estimated fraction of stake coming from insiders, a number in [0,1). Solved by bisection so the two pi sum to 1.
s: the booksum qa+qb, unitless and above 1 for any real market.
Shin lands between the other two here: 58.94% / 59.15% / 59.25% for proportional / Shin / power. On a market this tight the three methods disagree by a third of a point. On a lopsided one they disagree by far more, which is why the EV calculator reports all three.
Implemented as devig_shin. Source: Shin, H. S. (1993), “Measuring the Incidence of Insider Trading in a Market for State-Contingent Claims,” The Economic Journal 103(420), 1141–1153.
Expected value per dollar staked
The average profit a price returns per dollar risked, if the same price could be taken over and over.
EV=p⋅b−(1−p)=p(b+1)−1
where:
p: the fair win probability of the side being priced, a fraction. It has to come from a different venue than the price, or the answer is zero by construction.
b: net odds of the price being tested, dollars of profit per dollar staked.
EV: dollars of expected profit per $1 staked. Multiply by the stake for expected profit on the bet.
Worked example: reference −140 / +120, price +145
power de-vig⇒pb=0.434435,+145⇒b=1.45
EV=0.434435×1.45−0.565565=+0.06437⇒+6.44% per $1
6.4¢ per dollar on average, over many repetitions of this exact price. A single bet returns $1.45 or −$1.00 and never $0.064. When the arithmetic comes out at or below zero, the answer is $0: there is no rounding up here.
The share of a bankroll that maximizes its long-run growth rate at a given edge and price.
f∗=p−b1−p=bbp−q,q=1−p
where:
p: win probability, a fraction. Yours, not the book’s.
b: net odds, dollars of profit per dollar staked.
q: in this formula only, the losing probability 1−p. Everywhere else on this page q is a price’s implied probability. The two coincide only when the price is exactly fair.
f∗: fraction of bankroll, unitless. Negative means no edge.
Worked example: 65% at −152
b=0.657895,f∗=0.65−0.6578950.35=0.65−0.532=0.118
11.8% of bankroll at full Kelly. That is the growth-maximizing stake if 65% is exactly right. A probability estimate never is, which is what the next formula is for.
The compounding rate per bet at a chosen stake fraction: the curve Kelly sits at the top of.
g(f)=pln(1+bf)+(1−p)ln(1−f)
where:
f: the stake as a fraction of bankroll, in [0,1).
p,b: win probability and net odds as above.
g(f): expected log growth per bet. Multiply by 100 to read it as a percent per bet.
Worked example: 65% at −152, full vs. half
g(0.118)=0.65ln(1.077632)+0.35ln(0.882)=+0.004651⇒+0.465% / bet
g(0.059)=+0.003469⇒+0.347% / bet
Half the stake keeps 74.6% of the growth. That asymmetry (most of the upside for half the exposure) is the entire argument for betting a fraction.
Implemented as growth_rate.
Simultaneous (joint) Kelly
Sizes several bets that settle at the same time by maximizing expected log wealth over every way the slate can land, instead of sizing each bet as if it were alone.
ω: one of the 2n win/loss outcomes across n bets; P(ω) is its probability.
Xi: the payoff per dollar on bet i: +bi on a win, −1 on a loss.
Worked example: two bets at once
Bet 1: 65% at −152 (b=0.6579). Bet 2: 50% at +120 (b=1.20). Independent.
naive, bet-by-bet: 11.80%+8.33%=20.13% of bankroll
joint: 11.70%+8.26%=19.96%
at λ=0.5:$58.50+$41.28=$99.78 on a $1,000 bankroll
Independent bets need only a small correction: 17 basis points here. Correlated ones need a large one: two bets that always land together are one bet at double stake, so the joint solution splits a single Kelly fraction between them.
One number that says whether the best price on each side, taken together, sells the whole market for less than a dollar.
S=da1+db1,an arb exists⟺S<1
where:
da,db: the best available decimal odds on each side, possibly from different books.
S: the inverse-odds sum, unitless. It is the cost, in dollars, of buying $1 of locked payout.
Worked example: +110 at one book, +115 at another
da=2.10,db=2.15
S=2.101+2.151=0.476190+0.465116=0.941307<1
$0.9413 buys $1.00 of payout. Below 1 the market is being sold at a discount to certainty; at or above 1 there is nothing here and the honest answer is no arb.
Both legs return the same $1,062.35 ($1,062.3529 at full stake precision), which is why the check above carries four decimals: rounding the stakes to whole cents first leaves a cent of drift. Matching payouts are the whole point of the split. This is arithmetic on two posted prices, and it assumes both fill at the quoted number, which, on a two-leg position placed by hand, is the assumption that fails.
Above ARB_SUSPECT_RETURN = 12% the site stops calling it an arb and flags it as suspect. A two-way market that far apart is nearly always one venue that has not moved yet, and the leg that looks generous is the one that will be voided or already gone.
The same shape at roughly a quarter of the rate, charged when a resting order is filled rather than taken.
feemaker=⌈0.0175⋅C⋅P⋅(1−P)⌉cent
where:
C,P: contracts and price in dollars, as above.
0.0175 is one quarter of the 0.07 taker rate.
Worked example: 100 contracts at 50¢, resting
0.0175×100×0.50×0.50=0.4375⇒$0.44
0.4375 rounds up to $0.44, not down to $0.43. The rounding is always in the exchange’s favor, and on small orders it is a material share of the fee. A few major events carry a flat 0.25% maker fee instead, which on a sub-5¢ contract is a large fraction of the contract price, so read the contract’s own terms rather than assuming this formula.
Implemented as kalshi_fee with side="maker".
Fee-adjusted break-even
The true probability a contract has to clear once the entry fee is counted, not the price on the screen.
ptrue≥P+rate⋅P⋅(1−P)
where:
P: contract price in dollars.
rate: 0.07 taker, 0.0175 maker, unitless.
ptrue: the fair probability needed to break even, a fraction.
Worked example: a 50¢ and a 5¢ contract, taker
P=0.50:0.50+0.07×0.50×0.50=0.5175⇒51.75%
P=0.05:0.05+0.07×0.05×0.95=0.053325⇒5.33%
A 50¢ contract is not a 50/50 proposition after fees; it needs 51.75%. The fair value and the fee-adjusted break-even are two different numbers and this site reports them separately: conflating them is how a break-even trade reads as an edge.
The same fee expressed against the money actually put up, which is where the tail contracts look very different.
C⋅Pfee=rate⋅(1−P)
where:
C⋅P: the outlay in dollars: contracts times price.
The result is a fraction of stake, and C cancels: it depends only on the price.
Worked example: 50¢ vs. 5¢, taker
P=0.50:0.07×0.50=0.035⇒3.5% of stake
P=0.05:0.07×0.95=0.0665⇒6.65% of stake
In cents per contract the tail is cheap; as a share of what you put up it is nearly twice the price of a coin flip. Both readings are correct, and quoting only the first is how the cost of longshot contracts gets understated.
Implemented as kalshi_fee_of_outlay.
Round trip vs. holding to settlement
Trading out charges the fee twice; letting a contract resolve charges it once.
round trip=2×fee,settlement fee=0
where:
Entry and exit are each charged at the applicable taker or maker rate; the exit fee is computed at the exit price, so 2 × fee is the estimate at an unchanged price.
Settlement costs nothing, in dollars.
Worked example: 100 contracts at 50¢, taker
entry $1.75+exit $1.75=$3.50 round trip
entry $1.75+settlement $0.00=$1.75 held to resolution
On a 100-contract position the difference is $1.75: 3.5% of the $50 outlay, and larger than most edges anyone finds. It is a fact about the fee schedule, stated so it can be included in the arithmetic.
Two more ways of writing the same break-even probability. Fractional odds quote the profit, so they are net odds as a ratio; a prediction-market contract quotes the probability directly, in cents.
q=1+b1,b=mn,q=100c
where:
b net odds: profit per 1 unit staked
n/m fractional odds as posted, for example 10/11
c a contract price in cents, strictly between 0 and 100
Worked example: 10/11, and a 52.4¢ contract
A 10/11 price pays 10 profit on 11 risked, and a contract at 52.4¢ pays 47.6¢ on 52.4¢ risked. They are the same price to within rounding.
q=1+11101=2111=0.5238⇒52.38%
q=10052.4=0.5240⇒52.40%
A contract price is a probability with the decimal point moved, which is why prediction markets need no conversion table. Both figures are still vig-inclusive: the exchange fee is a separate charge, not part of the price.
Decimal 2.00 is the hinge. At or above it the price is a plus number, below it a minus number.
ML=⎩⎨⎧100(d−1)−d−1100d≥2d<2
where:
d decimal odds: total return per 1 unit staked, stake included
Worked example: decimal 1.909 and decimal 3.50
A 1.909 price is a favorite, a 3.50 price is a longshot.
ML=−1.909−1100=−110,ML=100(3.50−1)=+250
Exactly 2.00 returns +100 here, where the fair-price conversion returns −100 for the same 50% price. Both are right: even money is posted as +100, EVEN or PK depending on the book, and the two functions inherit different sides of the tie. Nowhere else do they disagree.
Fractional odds are a rational number, so the reduction is a search for the best rational approximation of the net odds under a denominator cap. Continued-fraction convergents give it exactly.
b=p1−p⟶mn with m≤mmax
where:
mmax the denominator cap: 200 for an ordinary price, and sized to the price for a very short one
Worked example: a 52.38% price, and a 1-in-250 longshot
Every American price is rational with a small denominator, so the reduction is exact rather than approximate.
b=0.52381−0.5238=1110,b=2491
A flat cap of 200 cannot express 1/249 at all, and a search that gives up returns 0/1: a printed claim that the bet pays nothing. So the cap is sized to the price, and a reduction that is only approximate is flagged as approximate rather than presented as exact.
Implemented as prob_to_fractional, best_fraction and fraction_cap. Calculator: odds converter.
Payout on a stake
What a bet returns if it wins. Decimal odds quote the total return; American and fractional odds quote the profit. Confusing the two is the most common payout error there is.
profit=Sb,return=Sd=S(1+b)
where:
S the stake, in whatever currency you are thinking in
Worked example: $100 at −110
A −110 price is 0.909 net odds, so a $100 stake wins $90.91 and returns $190.91 in all.
Given the price on the other side of the same market, the pair can be de-vigged and the same stake priced at the fair line: at −110 / −105 the fair profit is $97.78, so the margin costs this bet $6.87. When the two prices carry no margin, that cost is zero, and it is printed as zero.
You hold a bet at one price and the other side is now available at another. The stake that pays the same whichever side wins divides the first bet’s total return by the hedge price.
H=d2Sd1
where:
S the original stake
d1 decimal odds of the price you took
d2 decimal odds available on the other side now
Worked example: $100 taken at +150, hedged at −130
The original bet returns $250 in all if it wins. Dividing that by the hedge price gives the stake that matches it.
H=1.7692100×2.50=$141.30
Dividing the profit instead of the total return is the classic error, and it under-hedges: $150 / 1.7692 = $84.78, which leaves a swing of more than $56 between the two outcomes.
Implemented as equal_profit_stake and hedge_stake. Calculator: hedge calculator.
What the position pays either way
Two bets, two outcomes. Each one is the winning side’s profit minus the losing side’s stake.
original wins=S(d1−1)−H,hedge wins=H(d2−1)−S
where:
H the hedge stake actually placed, which need not be the equal-profit one
Worked example: the same $141.30 hedge, and the stake-back alternative
At the equal-profit stake both outcomes are identical. A smaller hedge of $130 instead returns the original stake and nothing more if the hedge side wins.
Whether the locked figure is a profit or a loss depends entirely on the two prices. Hedging a position at a worse price than you took locks a loss, and the arithmetic says so rather than presenting it as certainty won.
Implemented as stake_back_stake and hedge_breakdown. Calculator: hedge calculator.
What the certainty costs
Sizing a hedge is bookkeeping. Whether to hedge is a question about the price, and the answer is the hedge leg’s own expected value: a hedge below fair value buys certainty and pays for it.
cost per $1 hedged=1−p2d2,expected cost=−H(p2d2−1)
where:
p2 the de-vigged fair probability of the hedge side, from the two CURRENT prices
Worked example: hedging at −180 while your own side sits at +150
De-vigging +150 / −180 puts the hedge side at 61.64% fair against a 64.29% break-even, so each dollar hedged gives up about 4 cents.
1−0.6164×1.5556=0.0411⇒4.11c per $1 hedged
The figure goes negative when the two current prices cross, which means the hedge is priced above fair value and is not a cost at all. It is reported as negative rather than floored at zero, because pretending a free hedge costs nothing to buy would hide the more interesting fact that it pays.
A middle is two opposite-side prices at different numbers, so there is a window where both tickets win. Everything about it follows from the combined implied probability of the pair.
σ=d11+d21,h∗=σ−1
where:
σ the two prices’ combined implied probability
h∗ how often the window has to land for the position to return exactly zero
Worked example: −110 on each side
Two −110 prices imply 52.38% each, so the pair sums to 104.76%.
h∗=1.047619−1=0.047619⇒4.76%
The required hit rate is exactly the overround on the two prices. Below zero it means the pair sums under 100%, both sides already clear, and what you hold is an arbitrage with a bonus rather than a middle.
Implemented as required_hit_rate and inverse_odds_sum. Calculator: middle calculator.
Hold, which is not the required hit rate
Two numbers that look alike and are not. The required hit rate is in probability points of hit rate. The hold is the share of every dollar risked, and it is what a miss actually costs.
h=σσ−1=1−σ1
Worked example: −110 on each side, again
The same pair that requires a 4.76% hit rate holds 4.55% of the money.
h=1.0476190.047619=0.045455⇒4.55%
A $100 middle on that pair loses $4.55 when it misses, not $4.76. The field uses the words overround and hold for both quantities, which is why both are printed here rather than one being left to inference.
Implemented as middle_breakdown, and as hold for a single two-way market. Calculator: vig and hold.
The three-cell payoff grid
Stake each side proportional to 1 over its price and one winning side always returns the same amount. What changes is how many sides win.
si=diσT,P=σT,miss=P−T,hit=2P−T
where:
T the total staked across both sides
P what one winning side returns
Worked example: $100 across −110 / −110
The stakes split evenly, and one winning ticket returns $95.45.
miss=95.45−100=−$4.55,hit=190.91−100=+$90.91
A hit is exactly one extra winning side better than a miss, which is the whole appeal: risk the hold to win a multiple of it. Expected value is P(1+h)−T on your own estimate of the hit rate, and an estimate sitting on the required rate returns exactly zero.
Implemented as middle_stakes and middle_breakdown. Calculator: middle calculator.
The per-leg break-even of a teaser
A teaser is one quoted price over several legs whose numbers have all been moved. For equal, independent legs the ticket’s break-even chance splits evenly by taking the nth root.
w=(dT1)1/n
where:
dT decimal odds of the quoted teaser price
n the number of legs
w the win rate each leg needs after the tease
Worked example: a two-team six-point tease at −120
A −120 ticket needs 54.55%, so each of two equal legs needs the square root of that.
w=(0.545455)1/2=0.7385⇒73.85%
More legs at the same quoted price means each leg has to be a bigger favorite, not a smaller one: 73.85% at two legs, 81.71% at three, 85.94% at four. Independence is doing real work here, and a tease off one game’s key numbers is correlated.
The only part of a teaser that is arithmetic: the gap between what each leg needs after the tease and what it already needed before it.
must buy=w−dB1,per point=pointsw−1/dB
where:
dB decimal odds of one leg at its untouched number
Worked example: the same tease, off −110 legs
A −110 leg is already a 52.38% proposition, so the six points have to add 21.47 probability points.
must buy=0.7385−0.5238=0.2147,per point=60.2147=0.0358
Per point is an average across points of very unequal value: the ones beside 3 and 7 are worth several times the rest. This is what the points have to be worth. Whether they are is a question about where football margins land, and no formula on this page answers it.
The points are not free: the teaser price is worse than the same legs parlayed straight, and the difference is what you are paying.
given up=1−dBndT,EV=pndT−1
where:
p your own estimate of each leg’s win rate after the tease
Worked example: −120 against two −110 legs parlayed
Two −110 legs parlay to 3.645. The teaser pays 1.833.
given up=1−3.64461.8333=0.4970⇒49.70%
Expected value is pndT−1 on your own per-leg estimate, so it inherits that estimate’s error raised to the power of the leg count. Comparing the tease against the straight price at the teased numbers, where the book will sell you the same position, is the only apples-to-apples test.
A round robin bets every combination of a chosen size as a separate parlay. The stake is per ticket, so the ticket count multiplies the money at risk.
T=k∑(kn),R=sT,Dj=i∈j∏di
where:
n the number of legs
k each combination size requested
s the stake per ticket
Dj decimal odds of ticket j: the product of its legs
Worked example: four legs by 2s and 3s at $10 a ticket
Four legs give six pairs and four trebles.
T=(24)+(34)=6+4=10,R=10×$10=$100
The single biggest surprise on a round-robin slip is right here: a $10 round robin is not a $10 bet. Three legs by 2s risks $30, and nine legs by 2s and 3s risks $1,200.
Implemented as ticket_count and combination_tickets. Calculator: round robin calculator.
What each hit level returns
For a given set of winning legs, a ticket cashes if every one of its legs is in that set. Enumerating all sets gives the exact distribution, not an estimate.
return(W)=j⊆W∑sDj,Pr(m correct)=(mn)pm(1−p)n−m
where:
W the set of legs that won
m how many legs were correct
p a common per-leg win rate, assuming independent legs
Worked example: three −110 legs by 2s, $10 a ticket
Three tickets, $30 at risk. Two correct legs cashes exactly one of them.
2 correct:$36.45⇒+$6.45,3 correct:$109.34⇒+$79.34
All 2n sets of winning legs are enumerated exactly, which is why the leg count is capped at nine. The per-level probabilities assume independent legs at a common rate; legs from the same game are neither.
Nothing about combining legs creates edge. Expected value sums over the tickets, so per dollar risked a round robin is exactly the stake-weighted average of the parlays inside it.
EV=j∑s(pkjDj−1)
where:
kj the number of legs on ticket j
Worked example: fair legs, any combination
At a per-leg rate equal to the price, every parlay inside the round robin is a fair bet, so the whole slip is one too.
p=d1⇒pkDj=(d1)kdk=1⇒EV=$0
Splitting the same money over more tickets changes the spread of outcomes, not the mean. That is the honest reading of a round robin: it buys a different shape of risk, and the arithmetic prints $0 where there is no edge to print.
The break-even rate is the price read as a probability. On a prediction-market contract the trading fee moves it, so the requirement sits above the contract price.
q=d1,q=P+rP(1−P)
where:
P a contract price in dollars
r the exchange fee rate: 0.07 taker, 0.0175 maker
Worked example: −110, and a 50¢ contract
A −110 bet has to win 52.38% of the time. A 50-cent contract bought as a taker has to resolve YES 51.75% of the time.
q=1.90911=52.38%,q=0.50+0.07(0.50)(0.50)=51.75%
The sportsbook figure carries the venue’s margin, so it is not a fair probability. The exchange figure carries the fee instead, which is heaviest at a coin flip: the exact inverse of vig, which is heaviest on longshots.
A win rate is a sample mean of a coin flip, and a sample mean is not a skill level. The standard error is taken under the null hypothesis, since the break-even rate is what the record is being tested against.
z=q(1−q)/np^−q,p2-sided=erfc(2∣z∣)
where:
p^ the observed rate, wins divided by bets settled
n bets settled
Worked example: 55 wins in 100 bets at −110
That is 2.62 points above break-even, on a standard error of 4.99 points.
z=0.0499430.5500−0.5238=0.52⇒p=0.60
A p-value of 0.60 is no evidence of an edge at all. The same 55% rate over 10,000 bets gives z = 5.24: identical performance, completely different amount of evidence. The tail is computed directly rather than as one minus something close to one, so a small p-value keeps its digits.
Implemented as proportion_test and two_sided_p. Calculator: break-even win rate.
The interval on the rate itself
The interval, not the point estimate, is the result. The Wilson score interval is used rather than the textbook normal interval, which runs off the end of the scale exactly where betting records live.
1+nz2p^+2nz2±znp^(1−p^)+4n2z2
where:
z the two-sided critical value: 1.959963985 for 95%
Worked example: the same 55 of 100
The 95% interval runs from 45.2% to 64.4%.
[0.4524,0.6439]∋q=0.5238
Break-even sits inside the interval, which is the whole verdict: a 55% record over 100 bets is entirely consistent with having no edge. One win in twelve bets is the sharper illustration, where the normal interval runs below zero and Wilson does not.
The sample size at which a true rate can be told apart from break-even, at a chosen confidence and power. This is usually the number that ends the argument.
n=(p−q)2(zαq(1−q)+zβp(1−p))2
where:
zα two-sided 95%: 1.959963985
zβ 80% power: 0.841621234
p the true rate you are trying to detect
Worked example: a one-point and a two-point edge over −110
Halving the edge quadruples the sample, because the difference enters squared.
n≈4,886at 2 points,n≈19,564at 1 point
Roughly 2,850 settled bets to confirm a 55% rate at −110, and nearly 20,000 for a one-point edge. Any claim of a proven edge on a few hundred bets is a claim about noise, and this is the arithmetic that says so.
These equations also ship as FORMULAS.md inside the Python package, and a test asserts the two stay in step: the six section names here have to match the six in the markdown, and every library function named there has to appear here. Add a formula to the library without documenting it and the test fails.
The mirrored JavaScript implementation the site runs at the edge is checked against the Python by golden-value tests, so a change to either has to reproduce the other’s digits before it ships. Methodology covers what the site does with these formulas once real prices are involved; this page is only the arithmetic.