Covered call calculator — annualized yield, downside cushion, ex-div warnings

Enter your shares, strike, and premium — get annualized yield, downside cushion, if-called return, and assignment risk. Delayed option chains via Polygon (~15-min lag).

A covered call calculator estimates the premium income, annualized screen yield, downside cushion, and if-called total return when you sell one call option contract against 100 shares you already own. Your maximum upside is capped at the strike price (plus premium collected) if the shares are called away; your maximum downside is the full decline in the underlying share value less the premium received. This tool uses delayed option-chain quotes and shows both the strike-denominator screen yield and the yield-on-current-share-value.

What every result on this page means — formula and important limitations
Metric How it's calculated Important limitation
Premium received mid × 100 × contracts Mid-price may not be executable at fill; actual credit depends on your bid.
Cycle premium yield (screen) premium ÷ strike A comparison metric across strikes, not a forecast of total return.
Annualized screen yield cycle yield × (365 ÷ DTE) Assumes the same yield is repeatable every cycle; realized returns usually diverge from this.
Downside cushion (spot − premium/share) ÷ spot Only the premium cushions the loss — a larger drop still hits your equity fully.
If-called total return ((strike − cost basis) + premium) ÷ cost basis Requires actual cost basis to be entered; strike-based “yield” alone omits stock-price change.
Assignment probability ≈ |delta| (or BSM POP if IV available) Delta is a first-order approximation; early assignment risk spikes around ex-dividend dates.
Ex-div assignment warning Triggered when ex-div date < expiration AND dividend > remaining time value The classic early-assignment condition on ITM calls (per OCC guidance).

Data source: Polygon.io Options Starter tier (~15-minute delayed during market hours; after-hours shows previous close). See the methodology page for the full formulas and known limitations.

Trade Inputs

Type a US-listed symbol
$
$
What you paid per share
1 contract = 100 shares
Load chain to populate
Pick an expiration first
$
Auto-fills from chain; override to model your own price
Annualized decimal (0.28 = 28%)
$

Results

Premium income
per contract × contracts
Static yield
— annualized
If-called yield
— annualized
Downside cushion
Premium / Spot
Breakeven
Cost basis − Premium
Days to expiry

Payoff Diagram

How a covered call works

' + '
Data SourceStored locally on your device.
' + '
' + '' + '' + '' + '' + '
' + '
' + '
' + '
' + '
' + '' + '

Keys saved to localStorage on this device only.

' + '
' + '
'; el.querySelectorAll('[data-prov]').forEach(function (btn) { btn.onclick = function () { setProvider(btn.dataset.prov); mountSettings(el); document.dispatchEvent(new CustomEvent('oit:provider-changed')); }; }); var save = el.querySelector('#oit-save-keys'); if (save) save.onclick = function () { setKeys({ polygon: el.querySelector('#oit-key-polygon').value.trim(), tradier: el.querySelector('#oit-key-tradier').value.trim() }); localStorage.setItem(TRADIER_ENV_KEY, el.querySelector('#oit-tradier-env').value); save.textContent = 'Saved ✓'; setTimeout(function () { save.textContent = 'Save'; }, 1500); document.dispatchEvent(new CustomEvent('oit:keys-changed')); }; } Connector.mountSettings = mountSettings; // Expose connector on multiple globals (different scripts in the project expect different names) global.DataConnector = Connector; global.OITApi = Connector; global.OIT = global.OIT || {}; global.OIT.api = Connector; })(window);

Covered call methodology, formulas, and worked examples

Formula

Cycle yield = premium ÷ capital at risk. Annualized screen yield = cycle yield × (365 ÷ DTE). It is a comparison metric, not a forecast or projected annual return.

Conservative example

SPY at $580, 30-day $590 covered call (OTM by 1.7%), mid premium $3.20 per share. One contract = $320 premium against 100 shares held. Cycle premium yield on current-share-value = $3.20 ÷ $580 = 0.55% (≈ 6.9% annualized). Cycle premium yield on strike (if-called denominator) = $3.20 ÷ $590 = 0.54% (≈ 6.6% annualized). Two conventions, two names — this site labels the strike-denominator version “screen yield” because it lines up cleanly across strikes for comparison. Delta 0.20 → ~20% finish-ITM (assignment) probability. Total return if called adds any stock appreciation from $580 to $590 on top of the $3.20 premium.

Aggressive example

TSLA at $260, 14-day $265 covered call (just OTM), mid premium $7.40 per share ($740 per contract). Cycle screen yield = $7.40 ÷ $265 strike = 2.79%. Annualized screen yield = 72.7%. Delta 0.42 → ~42% finish-ITM. Position-size carefully; expected assignment in nearly half of cycles. Note: “screen yield” is a comparison metric across strikes, not a forecast of total return — you also have TSLA equity exposure moving underneath the position.

Losing outcome

NVDA at $400, 30-day $410 covered call for $5.00 premium. NVDA drops to $360 by expiration. The $410 call expires worthless (you keep $5.00 = +1.25%) but the stock is down $40 = -10%. Net P&L = -$35 = -8.75%. The premium did not offset the underlying decline.

Inputs, commissions, and not modeled

Inputs: ticker, strike, expiration/DTE, mid-of-bid-ask premium, cash/margin assumption. Default commission: $0.65 per contract per leg. Default slippage: 25% of bid-ask spread. Not modeled: tax treatment, margin interest, dividend-driven early assignment (handled per-ticker), IV crush around earnings.

Related metric definitions

For the full mathematical methodology, see methodology. Educational only — not investment advice. See the disclaimer.