SellOptions

Methodology

Everything below is what the product actually computes — no hidden factors, no discretionary overrides. The same formulas are covered by pinned unit tests in the codebase.

Universe & data

S&P 500 constituents plus a small ETF whitelist — 500+ tickers. Each trading morning (8:45 ET) we take a pre-market snapshot of full option chains from licensed data vendors. Public pages always show this delayed snapshot; nothing here is real-time.

Cleaning filters (before anything is scored)

Bid ≥ $0.05 · bid–ask spread ≤ 15% of mid · open interest ≥ 100 or day volume ≥ 20 · 7 ≤ DTE ≤ selected horizon. Contracts failing any test are dropped, not repaired. Contracts with earnings inside the expiry window are excluded from the daily board by default — earnings IV is the single biggest risk to a put seller, and we refuse to rank it as "yield".

Yields — two honest denominators

Margin yield = premium ÷ Reg-T initial margin × 365/DTE, where margin = max(20%·spot − OTM amount, 10%·strike)×100 + premium. Capital-efficiency view; brokers may require more (≈3× for leveraged ETFs).
CSP yield = premium ÷ (strike×100 − premium) × 365/DTE. The conservative cash-secured view — the number we headline on public pages.

Assignment probability

Implied volatility is solved from the bid/ask mid (Brent's method), then risk-neutral N(−d2) with T = DTE/365, r = 4%, q = 0.8%. It is a model probability under lognormal assumptions — read it as an order of magnitude, especially on leveraged ETFs.

The score

Score = 1000 × cross-sectional percentile of (annualized yield × price gap ÷ assignment probabilityγ). One symbol keeps only its best contract on the board, so a single high-IV name cannot flood the list. The exponent γ is being calibrated against our own settled results — we store two variants per pick and let realized P&L decide.

The ledger

Each day's board is serialized in canonical field order and hashed with SHA-256 at publication; storage is append-only. At expiry every contract is settled against the expiry-day close: P&L = premium − max(strike − settle, 0)×100. Results are published on the track record page, losses included.

All analytics are informational only and do not constitute investment advice.