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. Live chains via Polygon or Tradier (optional).

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

Ad slot — in-page rectangle

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);