The principles behind every figure
- Returns are measured on the capital committed today — the current market value of the position, not what you paid years ago. A low historical cost basis can't flatter the headline return.
- Everything is modelled at expiration. These are final-day outcomes. Before expiration, time value and implied volatility make the real P&L curve smoother and rounded.
- Figures are before commissions, fees and taxes. Your broker's costs come off the top.
- We do not predict early assignment. The math shows expiration outcomes; early assignment — most common on in-the-money calls just before an ex-dividend date — is a risk to manage, not a number we model.
- It all runs in your browser. Your inputs are never sent anywhere — no login, no server, no database. You can optionally have a calculator remember your last inputs on your own device; that is off by default and never leaves your browser.
What the verdict words mean
The covered call and cash-secured put calculators print a one-line verdict that grades the trade by its annualized return. The word is a fixed scale, shown as a ladder under the verdict with the current tier marked (hover it for these thresholds):
- Modest - under 8% annualized
- Solid - 8 to 15%
- Strong - 15 to 30%
- Exceptional - 30% or more
A higher grade is not automatically a better trade. A fat annualized return often comes with a thin downside cushion or a near-term catalyst - read the cushion and the actual number alongside the word, never the word alone.
Covered call
- Max profit (if called away) = (strike − cost basis + premium) × shares
- Profit if it expires worthless = premium × shares
- Breakeven (on the shares) = cost basis − premium
- If-called return = (strike − current price + premium) ÷ current price — on capital committed today
- Return on cost basis = (strike − cost basis + premium) ÷ cost basis — total return on the original purchase; shown only when cost basis differs from price
- Static return = premium ÷ current price
- Downside protection = premium ÷ current price
- Annualised = return × (365 ÷ days to expiration) — "N/A" at 0 DTE
Cash-secured put
- Max profit (credit collected) = premium × shares (shares = contracts × 100)
- Cash secured = strike × shares
- Breakeven / cost basis if assigned = strike − premium
- Return on capital (if worthless) = premium ÷ strike
- Discount to current price = (current price − strike) ÷ current price
- Breakeven cushion = (current price − breakeven) ÷ current price
- Annualised = return on capital × (365 ÷ days to expiration)
The wheel
Each cycle's type (put or call) is derived from state: you sell puts while in cash, and calls once a put assigns you shares.
- Total premium = sum of every cycle's premium × (contracts × 100)
- Net cash flow = premiums collected − cash to buy assigned shares + cash from shares called away
- Adjusted cost basis (while holding shares) = assignment strike − premium collected per share since assignment
- Total P&L = net cash flow + (shares still held × current price)
- Return on capital = total P&L ÷ (largest put strike × contracts × 100)
- Annualised = return on capital × (365 ÷ total days)
Rolling (short-put repair)
- Net credit of the roll = (new premium × new contracts − buyback × old contracts) × 100
- New total net premium = premium collected to date + roll net credit
- New breakeven = new strike − (new total net premium ÷ (new contracts × 100))
- Annualised return on the roll = (roll net credit ÷ cash secured) × (365 ÷ new days to expiration)
The repair stage is detected from the roll, always preferring the lowest that still pays a net credit:
- Stage 1 — same contracts, lower strike, net credit ≥ 0
- Stage 2 — same contracts, same strike, net credit ≥ 0
- Stage 3 — more contracts, lower strike, overall net credit ≥ 0
Payoff diagram
- Each leg's P&L at underlying price S = sign × (intrinsic − premium) × 100 × contracts, where long = +, short = −; call intrinsic = max(0, S − strike), put intrinsic = max(0, strike − S)
- Net credit / debit to open = premium collected on short legs − premium paid on long legs
- Max profit / max loss = the combined P&L evaluated at zero and at every strike (the kinks); flagged "Unlimited" when the far-upside slope (net long vs short calls) isn't flat
- Breakeven(s) = the underlying prices where the combined P&L crosses zero
Bull put spread
Sell a higher-strike put, buy a lower-strike put for protection. Strikes and premiums are per share; shares = contracts × 100.
- Width = short strike − long strike
- Net credit = short premium − long premium
- Max profit = net credit × shares — both puts expire worthless
- Max loss = (width − net credit) × shares
- Breakeven = short strike − net credit
- Return on risk = net credit ÷ (width − net credit)
- Annualised = return on risk × (365 ÷ days to expiration)
Iron condor
A bull put spread below the price and a bear call spread above it. Only one side can be breached at expiration, so the loss uses the wider wing.
- Put width = short put − long put; call width = long call − short call
- Total credit = put-side credit + call-side credit
- Max profit = total credit × shares — price finishes between the short strikes
- Max loss = (wider width − total credit) × shares
- Lower breakeven = short put − total credit; upper breakeven = short call + total credit
- Profit zone = upper breakeven − lower breakeven
- Return on risk / annualised as for the bull put spread, using the total credit
Poor man's covered call (diagonal)
A long, deep-in-the-money LEAPS call stands in for the stock; a shorter-dated call is sold against it. The long call is valued at intrinsic only at the short call's expiration — a conservative model, so real results usually run a little better.
- Net debit = (long premium − short premium) × shares — this is the maximum risk
- Width = short strike − long strike
- Max profit = (width − net debit per share) × shares
- Breakeven / effective cost basis = long strike + net debit per share
- Return on debit = max profit ÷ net debit
- Annualised income yield = (short credit ÷ net debit) × (365 ÷ short days to expiration)
Collar
Long stock plus a protective put (lower strike) financed by a short call (higher strike). The stock price is your cost basis; net cost can be a debit or a credit.
- Net cost per share = put premium − call premium (+ = debit, − = credit)
- Breakeven = stock price + net cost per share
- Max gain = (call strike − stock price − net cost per share) × shares
- Max loss = (put strike − stock price − net cost per share) × shares
- Downside protection = (stock price − put strike) ÷ stock price
- Upside cap = (call strike − stock price) ÷ stock price
IV Rank & IV Percentile
- IV Rank = (current IV − 52-week low) ÷ (52-week high − 52-week low) × 100, clamped to 0–100
- IV Percentile = (days IV closed below today ÷ total days) × 100 — needs the daily count; we never fake it from the high/low range
- Seller's verdict = rank ≥ 50 rich, 30–50 normal, < 30 cheap
Expected move
- 1SD move ($) = price × (IV ÷ 100) × √(DTE ÷ 365)
- 1SD move (%) = IV × √(DTE ÷ 365)
- 2SD move = double the 1SD move
- Bands = price ± move — ≈ 68% inside 1SD, ≈ 95% inside 2SD under a normal approximation
Black-Scholes & the Greeks
European exercise, no dividends. T = days ÷ 365; N(·) is the standard-normal CDF (Zelen-Severo approximation, error < 7.5e-8).
- d1 = [ln(S/K) + (r + σ²/2)·T] ÷ (σ·√T); d2 = d1 − σ·√T
- Call = S·N(d1) − K·e−rT·N(d2); Put = K·e−rT·N(−d2) − S·N(−d1)
- Delta = N(d1) call / N(d1) − 1 put (per $1); Gamma = φ(d1) ÷ (S·σ·√T)
- Vega = S·φ(d1)·√T, shown per 1% IV (÷ 100)
- Theta shown per calendar day (annual θ ÷ 365); Rho per 1% rate (÷ 100)
Probability calculator
The price at expiration is lognormal: the log-return is Normal with standard deviation σ·√T and drift (r − ½σ²)·T. The rate defaults to 0 for a pure-volatility read.
- P(finish above target) = N([ln(S/K) + drift] ÷ (σ·√T))
- P(finish below) = 1 − P(above)
- P(in the money) = the finish probability on the target's far side; P(seller keeps) = its complement
- P(touch) ≈ min(1, 2 × P(finish beyond)) — reflection principle, exact at zero drift
Kelly position sizing
- Payoff ratio b = average win ÷ average loss
- Full Kelly fraction f* = p − (1 − p) ÷ b, where p = win rate — f* ≤ 0 means no edge: do not bet
- Half / Quarter Kelly = f* ÷ 2 and f* ÷ 4 (most traders stake a fraction of full Kelly)
- Dollar stake = fraction × account size
- Expectancy = p × average win − (1 − p) × average loss
Kelly simulator
Compounds an account trade by trade at Full, Half and Quarter Kelly over one shared, seeded random sequence — so the three sizings are always judged on the same run of wins and losses.
- Lots per trade = floor(fraction × balance ÷ average loss)
- P&L = lots × (+average win on a win, −average loss on a loss); balance = max(0, balance + P&L)
- Ignoring lot rounding, a win scales the account by (1 + f·b) and a loss by (1 − f)
- Max drawdown = largest peak-to-trough fall in the equity curve
Strategy Finder
Not a formula — a deterministic rules map. Your four answers (experience, goal, assignment comfort, defined- vs undefined-risk preference) select a risk profile and a matched primary and alternate strategy, each linking to its calculator. The mapping is fixed and unit-tested, so the same answers always return the same recommendation.
How we test the math
Every formula above lives in a pure, framework-free function, and each one is pinned down by an automated test suite that has to pass before any change can ship — more than 570 assertions across all the calculators. We don't just test the easy case; the suite deliberately covers the awkward ones, because those are where calculators quietly get it wrong:
- In-the-money covered calls and cash-secured puts, where premium and intrinsic value have to be separated correctly
- Zero days to expiration, where annualised returns are guarded instead of dividing by zero
- Deep in/out-of-the-money strikes, and a low cost basis, so a cheap historical entry can't flatter the headline return
- Impossible inputs — a spread whose credit exceeds its width, say — are flagged, not silently turned into a fake profit
- Full multi-cycle wheel loops and each rolling stage, end to end
A single failing assertion blocks the build, so a wrong number can't reach the live site unnoticed. To be clear about what this is: a check against the formulas published on this page — not a promise your broker will show the identical figure, since real fills, fees and early assignment all move the result (see the principles above).
Sources & references
The models above are standard, public and decades old. Where one has a canonical source, here it is — so you can check our work against the original, not just our description of it.
- Option pricing & the Greeks: Black, F. & Scholes, M. (1973), "The Pricing of Options and Corporate Liabilities," Journal of Political Economy; and Merton, R. C. (1973), "Theory of Rational Option Pricing," Bell Journal of Economics. We model European exercise with no dividends.
- The normal CDF N(·): the Zelen & Severo rational approximation in Abramowitz & Stegun, Handbook of Mathematical Functions (1964), formula 26.2.17 — absolute error below 7.5e-8.
- Lognormal price & probabilities: the standard expiration-price model set out in Hull, Options, Futures, and Other Derivatives; the probability-of-touch uses the reflection principle (exact at zero drift).
- Kelly position sizing: Kelly, J. L. (1956), "A New Interpretation of Information Rate," Bell System Technical Journal.
- Contract mechanics, assignment & expiration: the Options Clearing Corporation and the Options Industry Council — the disclosure document "Characteristics and Risks of Standardized Options" (theocc.com, optionseducation.org).
- Implied volatility & the expected move: Cboe options education and the Cboe VIX methodology (cboe.com). IV Rank and IV Percentile are industry conventions from retail options research, not proprietary formulas.
Citing a source means we use its definition or model; it does not imply the source endorses this site.
Found an error?
We would rather know. If a formula or a result looks wrong, tell us and we will check it and fix it — accuracy on the awkward cases is the whole point of this site. Get in touch.