Formula Sheet

Twenty-two equations. Every one of them is what the calculators on this site actually run, with the symbols named, the units stated, and a worked number underneath.

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.

MLML — American moneyline
An integer with ML100|ML| \ge 100. Negative is the favorite (risk ML|ML| to win $100); positive is the underdog (risk $100 to win MLML). Unitless.
qq — implied probability
What a posted price implies, including the house margin. A number in (0,1)(0, 1). The two sides of a real market sum above 1.
pp — fair probability
The de-vigged estimate: what is left after the margin is stripped out. In (0,1)(0, 1), and the two sides sum to exactly 1.
dd — decimal odds
Total return per $1 staked, stake included. Dollars per dollar, d>1d > 1.
bb — net odds
b=d1b = d - 1: profit per $1 staked, stake excluded. Dollars per dollar, b>0b > 0.

Subscripts aa and bb index the two sides of a two-outcome market. Kalshi sections add CC (contracts, an integer count) and PP (contract price in dollars, 0<P<10 < P < 1).

Implied probability from an American moneyline

The probability a posted price implies, house margin included.

q=ML100ML  (ML<0),q=100100+ML  (ML>0)q = \dfrac{-ML}{100 - ML} \ \ (ML < 0), \qquad q = \dfrac{100}{100 + ML} \ \ (ML > 0)

where:

  • MLML — the American moneyline, unitless, ML100|ML| \ge 100.
  • qq — implied probability, a fraction in (0,1)(0,1). It is not a fair probability: the margin is still in it.

Worked example — the market −152 / +138

qa=152100+152=152252=0.6032    60.32%q_a = \frac{152}{100 + 152} = \frac{152}{252} = 0.6032 \;\Rightarrow\; 60.32\%
qb=100100+138=100238=0.4202    42.02%q_b = \frac{100}{100 + 138} = \frac{100}{238} = 0.4202 \;\Rightarrow\; 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.

Implemented as moneyline_to_prob. Lesson: how to read the odds. Calculator: implied probability.

Net odds from an American moneyline

Profit per dollar risked, which is what every expected-value and Kelly formula below consumes.

b=100ML  (ML<0),b=ML100  (ML>0),d=1+bb = \dfrac{-100}{ML} \ \ (ML < 0), \qquad b = \dfrac{ML}{100} \ \ (ML > 0), \qquad d = 1 + b

where:

  • bb — net odds, in dollars of profit per $1 staked.
  • dd — decimal odds, in dollars returned per $1 staked, stake included.

Worked example — −152 and +138

b(152)=100152=0.6579    d=1.6579b(-152) = \frac{100}{152} = 0.6579 \;\Rightarrow\; d = 1.6579
b(+138)=138100=1.3800    d=2.3800b(+138) = \frac{138}{100} = 1.3800 \;\Rightarrow\; 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=1pd = \dfrac{1}{p}

where:

  • pp — fair probability, a fraction in (0,1)(0,1).
  • dd — fair decimal odds, dollars returned per dollar staked.

Worked example — the fair price behind −152

pa=0.589416    d=10.589416=1.6966p_a = 0.589416 \;\Rightarrow\; d = \frac{1}{0.589416} = 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=100p1p  (p0.5),ML=100(1p)p  (p<0.5)ML = \dfrac{-100\,p}{1 - p} \ \ (p \ge 0.5), \qquad ML = \dfrac{100\,(1 - p)}{p} \ \ (p < 0.5)

where:

  • pp — fair probability in (0,1)(0,1).
  • MLML — the fair moneyline, unitless. Negative at or above 50%, positive below.

Worked example — both sides of −152 / +138

pa=0.589416    MLa=100×0.5894160.410584=143.56p_a = 0.589416 \;\Rightarrow\; ML_a = \frac{-100 \times 0.589416}{0.410584} = -143.56
pb=0.410584    MLb=100×0.5894160.410584=+143.56p_b = 0.410584 \;\Rightarrow\; ML_b = \frac{100 \times 0.589416}{0.410584} = +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.

Implemented as prob_to_moneyline. Calculator: no-vig fair odds.

The overround (the book’s margin)

How far the two posted sides sum above 100%. It is the margin the house has priced in.

overround=qa+qb1\text{overround} = q_a + q_b - 1

where:

  • qa, qbq_a,\ q_b — the two implied probabilities, each a fraction in (0,1)(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.4201681=0.023343    2.33%0.603175 + 0.420168 - 1 = 0.023343 \;\Rightarrow\; 2.33\%
hold=0.0233431.023343=0.02281    2.28% of handle\text{hold} = \frac{0.023343}{1.023343} = 0.02281 \;\Rightarrow\; 2.28\%\text{ 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=qiqa+qbp_i = \dfrac{q_i}{q_a + q_b}

where:

  • qiq_i — side ii’s implied probability, a fraction.
  • pip_i — side ii’s fair probability, a fraction. The two pip_i sum to exactly 1.

Worked example — −152 / +138

pa=0.6031751.023343=0.589416    58.94%p_a = \frac{0.603175}{1.023343} = 0.589416 \;\Rightarrow\; 58.94\%
pb=0.4201681.023343=0.410584    41.06%p_b = \frac{0.420168}{1.023343} = 0.410584 \;\Rightarrow\; 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.

Implemented as devig_proportional. Lesson: how to de-vig odds.

Power de-vig

Raises both implied probabilities to a common exponent chosen so they sum to one, which takes proportionally more away from the longshot.

find k1 with qak+qbk=1,pi=qik\text{find } k \ge 1 \text{ with } q_a^{\,k} + q_b^{\,k} = 1, \qquad p_i = q_i^{\,k}

where:

  • kk — the fitted exponent, unitless and 1\ge 1. Solved numerically by bisection; k=1k = 1 means no margin to remove.
  • qi, piq_i,\ p_i — implied and fair probabilities as above.

Worked example — −152 / +138

k=1.035312    0.6031751.035312+0.4201681.035312=1k = 1.035312 \;\Rightarrow\; 0.603175^{1.035312} + 0.420168^{1.035312} = 1
pa=0.592502    59.25%,pb=0.407498    40.75%p_a = 0.592502 \;\Rightarrow\; 59.25\%, \qquad p_b = 0.407498 \;\Rightarrow\; 40.75\%
Against proportional, the favorite gains 0.31 points and the longshot loses 0.31. Because q<1q < 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=z2+4(1z)qi2/s    z2(1z),s=qa+qbp_i = \dfrac{\sqrt{z^{2} + 4(1-z)\,q_i^{2} / s} \; - \; z}{2(1-z)}, \qquad s = q_a + q_b

where:

  • zz — the estimated fraction of stake coming from insiders, a number in [0,1)[0, 1). Solved by bisection so the two pip_i sum to 1.
  • ss — the booksum qa+qbq_a + q_b, unitless and above 1 for any real market.
  • qi, piq_i,\ p_i — implied and fair probabilities as above.

Worked example — −152 / +138

s=1.023343,z=0.023361s = 1.023343, \qquad z = 0.023361
0.000546+1.388862=1.178731,1.1787310.023361=1.155370\sqrt{0.000546 + 1.388862} = 1.178731, \qquad 1.178731 - 0.023361 = 1.155370
pa=1.1553701.953278=0.591503    59.15%,pb=40.85%p_a = \frac{1.155370}{1.953278} = 0.591503 \;\Rightarrow\; 59.15\%, \qquad p_b = 40.85\%
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=pb(1p)  =  p(b+1)1\text{EV} = p \cdot b - (1 - p) \;=\; p\,(b + 1) - 1

where:

  • pp — 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.
  • bb — net odds of the price being tested, dollars of profit per dollar staked.
  • EV\text{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-vigpb=0.434435,+145b=1.45\text{power de-vig} \Rightarrow p_b = 0.434435, \qquad +145 \Rightarrow b = 1.45
EV=0.434435×1.450.565565=+0.06437    +6.44% per $1\text{EV} = 0.434435 \times 1.45 - 0.565565 = +0.06437 \;\Rightarrow\; +6.44\%\text{ 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.

Calculator: expected value. Lesson: expected value betting. API: POST /api/ev.

Break-even probability

How often a price has to win just to return the stake — the bar the fair probability has to clear.

pbe=11+b=1d=qp_{be} = \dfrac{1}{1 + b} = \dfrac{1}{d} = q

where:

  • b, db,\ d — net and decimal odds of the price, dollars per dollar.
  • pbep_{be} — break-even probability, a fraction. Identical to the price’s own implied probability qq.

Worked example — +145

pbe=11+1.45=12.45=0.408163    40.82%p_{be} = \frac{1}{1 + 1.45} = \frac{1}{2.45} = 0.408163 \;\Rightarrow\; 40.82\%
EV is positive exactly when p>pbep > p_{be}. The two statements “this price is +EV” and “the fair probability beats 40.82%” are the same claim.

Calculator: break-even win rate.

The full-Kelly fraction

The share of a bankroll that maximizes its long-run growth rate at a given edge and price.

f=p1pb  =  bpqb,q=1pf^{*} = p - \dfrac{1 - p}{b} \;=\; \dfrac{b\,p - q}{b}, \qquad q = 1 - p

where:

  • pp — win probability, a fraction. Yours, not the book’s.
  • bb — net odds, dollars of profit per dollar staked.
  • qqin this formula only, the losing probability 1p1 - p. Everywhere else on this page qq is a price’s implied probability. The two coincide only when the price is exactly fair.
  • ff^{*} — fraction of bankroll, unitless. Negative means no edge.

Worked example — 65% at −152

b=0.657895,f=0.650.350.657895=0.650.532=0.118b = 0.657895, \qquad f^{*} = 0.65 - \frac{0.35}{0.657895} = 0.65 - 0.532 = 0.118
11.8% of bankroll at full Kelly. That is the growth-maximizing stake if 65% is exactly right — and a probability estimate never is, which is what the next formula is for.

Implemented as kelly_fraction. Lesson: the Kelly criterion.

Fractional Kelly

A fixed multiple of the full-Kelly stake, which trades a little growth for a lot less volatility.

f=λmax(f,0),λ=0.5 by defaultf = \lambda \cdot \max(f^{*},\, 0), \qquad \lambda = 0.5 \text{ by default}

where:

  • λ\lambda — the Kelly multiplier, unitless in (0,1](0, 1]. Half is the default here; a quarter is the more conservative option.
  • max(f,0)\max(f^{*}, 0) — the clamp that makes the no-edge answer zero rather than a negative stake.
  • ff — fraction of bankroll. Multiply by the bankroll, in dollars, for the stake.

Worked example — the same edge, $1,000 bankroll

f=0.5×0.118=0.059    0.059×$1,000=$59.00f = 0.5 \times 0.118 = 0.059 \;\Rightarrow\; 0.059 \times \$1{,}000 = \$59.00
f0    f=0    stake=$0f^{*} \le 0 \;\Rightarrow\; f = 0 \;\Rightarrow\; \text{stake} = \$0
The second line is not a formality. When the inputs contain no edge, the honest output is $0 — never a small positive number rounded up out of one.

Implemented as fractional_kelly. Calculator: Kelly stake size.

Expected log growth rate

The compounding rate per bet at a chosen stake fraction — the curve Kelly sits at the top of.

g(f)=pln(1+bf)+(1p)ln(1f)g(f) = p\,\ln(1 + b\,f) + (1 - p)\,\ln(1 - f)

where:

  • ff — the stake as a fraction of bankroll, in [0,1)[0, 1).
  • p, bp,\ b — win probability and net odds as above.
  • g(f)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% / betg(0.118) = 0.65\ln(1.077632) + 0.35\ln(0.882) = +0.004651 \;\Rightarrow\; +0.465\%\text{ / bet}
g(0.059)=+0.003469    +0.347% / betg(0.059) = +0.003469 \;\Rightarrow\; +0.347\%\text{ / 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.

maxfi0, ifi1 ωP(ω)ln ⁣(1+ifiXi),Xi={+biwin1loss\max_{f_i \ge 0,\ \sum_i f_i \le 1} \ \sum_{\omega} P(\omega)\,\ln\!\Big(1 + \sum_i f_i X_i\Big), \qquad X_i = \begin{cases} +b_i & \text{win} \\ -1 & \text{loss} \end{cases}

where:

  • fif_i — the fraction of bankroll on bet ii, unitless.
  • ω\omega — one of the 2n2^{n} win/loss outcomes across nn bets; P(ω)P(\omega) is its probability.
  • XiX_i — the payoff per dollar on bet ii: +bi+b_i on a win, 1-1 on a loss.

Worked example — two bets at once

Bet 1: 65% at −152 (b=0.6579b = 0.6579). Bet 2: 50% at +120 (b=1.20b = 1.20). Independent.

naive, bet-by-bet: 11.80%+8.33%=20.13% of bankroll\text{naive, bet-by-bet: } 11.80\% + 8.33\% = 20.13\%\text{ of bankroll}
joint: 11.70%+8.26%=19.96%\text{joint: } 11.70\% + 8.26\% = 19.96\%
at λ=0.5: $58.50+$41.28=$99.78 on a $1,000 bankroll\text{at } \lambda = 0.5: \ \$58.50 + \$41.28 = \$99.78 \text{ on a } \$1{,}000 \text{ 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.

Implemented as simultaneous_kelly. API: POST /api/kelly/simultaneous.

The inverse-odds sum

One number that says whether the best price on each side, taken together, sells the whole market for less than a dollar.

S=1da+1db,an arb exists    S<1S = \dfrac{1}{d_a} + \dfrac{1}{d_b}, \qquad \text{an arb exists} \iff S < 1

where:

  • da, dbd_a,\ d_b — the best available decimal odds on each side, possibly from different books.
  • SS — the inverse-odds sum, unitless. It is the cost, in dollars, of buying $1 of guaranteed payout.

Worked example — +110 at one book, +115 at another

da=2.10,db=2.15d_a = 2.10, \quad d_b = 2.15
S=12.10+12.15=0.476190+0.465116=0.941307<1S = \frac{1}{2.10} + \frac{1}{2.15} = 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.

Implemented as find_arbitrage. Calculator: arbitrage stake split.

The arbitrage stake split

How a fixed total divides across the two sides so the payout is identical whichever one wins.

si=T1/diSs_i = T \cdot \dfrac{1 / d_i}{S}

where:

  • TT — total amount staked across both sides, in dollars.
  • did_i — decimal odds taken on side ii.
  • sis_i — stake on side ii, in dollars. The two sum to TT.

Worked example — $1,000 across 2.10 and 2.15

sa=1000×0.4761900.941307=$505.88,sb=1000×0.4651160.941307=$494.12s_a = 1000 \times \frac{0.476190}{0.941307} = \$505.88, \qquad s_b = 1000 \times \frac{0.465116}{0.941307} = \$494.12
505.8824×2.10=$1,062.35,494.1176×2.15=$1,062.35505.8824 \times 2.10 = \$1{,}062.35, \qquad 494.1176 \times 2.15 = \$1{,}062.35
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.

Implemented as find_arbitrage. Lesson: arbitrage betting.

Guaranteed payout and return

What the split pays and what that is as a percentage of the money put up.

P=TS,r=1S1P = \dfrac{T}{S}, \qquad r = \dfrac{1}{S} - 1

where:

  • PP — payout, in dollars, identical on either outcome.
  • rr — return as a fraction of TT. Profit in dollars is PT=rTP - T = r\,T.

Worked example — the same $1,000

P=10000.941307=$1,062.35,r=10.9413071=0.06235    6.24%P = \frac{1000}{0.941307} = \$1{,}062.35, \qquad r = \frac{1}{0.941307} - 1 = 0.06235 \;\Rightarrow\; 6.24\%
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.

Implemented as find_arbitrage. Calculator: prediction-market arb.

Kalshi taker fee

What crossing the spread on a Kalshi event contract costs, charged on the trade and rounded up to the cent on the total.

feetaker=0.07CP(1P)cent\text{fee}_{\text{taker}} = \lceil\, 0.07 \cdot C \cdot P \cdot (1 - P) \,\rceil_{\text{cent}}

where:

  • CC — number of contracts, an integer count.
  • PP — contract price in dollars, 0<P<10 < P < 1 (a 50¢ contract is P=0.50P = 0.50).
  • cent\lceil \cdot \rceil_{\text{cent}} — round up to the next cent (ceil_cent), applied once to the total, not per contract.
  • Result is in dollars.

Worked example — 100 contracts at 50¢

0.07×100×0.50×0.50=1.75    $1.75 (1.75 cents per contract)0.07 \times 100 \times 0.50 \times 0.50 = 1.75 \;\Rightarrow\; \$1.75 \ \text{(1.75 cents per contract)}
cost=100×0.50=$50.00,total outlay=$51.75\text{cost} = 100 \times 0.50 = \$50.00, \qquad \text{total outlay} = \$51.75
The fee peaks at a coin flip and shrinks toward the tails — the exact inverse of sportsbook vig, which is heaviest on longshots.

Implemented as kalshi_fee. Source: kalshi.com/fee-schedule, July 2026 revision. Calculator: Kalshi fees.

Kalshi maker fee

The same shape at roughly a quarter of the rate, charged when a resting order is filled rather than taken.

feemaker=0.0175CP(1P)cent\text{fee}_{\text{maker}} = \lceil\, 0.0175 \cdot C \cdot P \cdot (1 - P) \,\rceil_{\text{cent}}

where:

  • C, PC,\ 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.440.0175 \times 100 \times 0.50 \times 0.50 = 0.4375 \;\Rightarrow\; \$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 — on a sub-5¢ contract that 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.

ptrueP+rateP(1P)p_{true} \ge P + \text{rate} \cdot P \cdot (1 - P)

where:

  • PP — contract price in dollars.
  • rate\text{rate} — 0.07 taker, 0.0175 maker, unitless.
  • ptruep_{true} — 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.50: \quad 0.50 + 0.07 \times 0.50 \times 0.50 = 0.5175 \;\Rightarrow\; 51.75\%
P=0.05:0.05+0.07×0.05×0.95=0.053325    5.33%P = 0.05: \quad 0.05 + 0.07 \times 0.05 \times 0.95 = 0.053325 \;\Rightarrow\; 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.

Implemented as kalshi_breakeven. API: POST /api/kalshifees.

Fee as a share of outlay

The same fee expressed against the money actually put up, which is where the tail contracts look very different.

feeCP=rate(1P)\dfrac{\text{fee}}{C \cdot P} = \text{rate} \cdot (1 - P)

where:

  • CPC \cdot P — the outlay in dollars: contracts times price.
  • The result is a fraction of stake, and CC 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 stakeP = 0.50: \quad 0.07 \times 0.50 = 0.035 \;\Rightarrow\; 3.5\%\text{ of stake}
P=0.05:0.07×0.95=0.0665    6.65% of stakeP = 0.05: \quad 0.07 \times 0.95 = 0.0665 \;\Rightarrow\; 6.65\%\text{ 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\text{round trip} = 2 \times \text{fee}, \qquad \text{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\text{entry } \$1.75 + \text{exit } \$1.75 = \$3.50 \text{ round trip}
entry $1.75+settlement $0.00=$1.75 held to resolution\text{entry } \$1.75 + \text{settlement } \$0.00 = \$1.75 \text{ 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.

Implemented as kalshi_fee_breakdown. Lesson: how Kalshi pricing works.

Why this page can’t drift

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.