Methodology

The exact formulas, data sources, scoring weights, and limitations behind every calculator, screener, and score on this site. This page is updated whenever methodology changes.

Most options-income websites hide their math behind a brand name. We don't. Below is the complete and current methodology for OptionIncomeTools. If you spot an error or have suggestions, email [email protected].

1. Data sources

Data pointPrimary sourceFallbackRefresh cadence
Option chains (strikes, bids, asks, last, IV, Greeks, OI, volume)Polygon.io Options StarterTradier (BYO key)30-60 seconds
Equity quote (spot price)Polygon snapshotPut-call parity from chain30 seconds
Day-over-day change / prev closeStooq CSV (free, reliable from CDN egress)End-of-day
Dividend schedule (ex-date, amount, frequency)Polygon /v3/reference/dividendsDaily
Earnings calendarPolygonDaily

Every external request is cached in Cloudflare Workers KV with TTLs ranging from 30 seconds (quotes) to 24 hours (dividends). On cache miss followed by upstream failure, we serve the last-known-good value from a separate 30-day KV slot.

2. Option pricing — Black-Scholes-Merton

All theoretical option values use the standard closed-form Black-Scholes-Merton model with a continuous-dividend yield. For a European call:

C = S · exp(-q·T) · N(d1) − K · exp(-r·T) · N(d2)

For a European put:

P = K · exp(-r·T) · N(-d2) − S · exp(-q·T) · N(-d1)

where:

d1 = ( ln(S/K) + (r − q + σ²/2)·T ) / (σ · √T)
d2 = d1 − σ · √T

Limitation: American-style options can be exercised early. Black-Scholes is a European model and will under-price American puts and over-price American calls near ex-dividend dates. For income-selling strategies (CC, CSP), this approximation is acceptable because we care about expected value, not exercise-time alpha.

3. Greeks

Closed-form Greek derivatives, with the same r and q assumptions:

GreekCallPut
Deltaexp(-q·T) · N(d1)exp(-q·T) · (N(d1) − 1)
Gammaexp(-q·T) · φ(d1) / (S · σ · √T)same as call
Theta (per year)−S · exp(-q·T) · φ(d1) · σ / (2√T) − r · K · exp(-r·T) · N(d2) + q · S · exp(-q·T) · N(d1)−S · exp(-q·T) · φ(d1) · σ / (2√T) + r · K · exp(-r·T) · N(-d2) − q · S · exp(-q·T) · N(-d1)
Vega (per 1% IV change)0.01 · S · exp(-q·T) · φ(d1) · √Tsame as call
Rho (per 1% rate change)0.01 · K · T · exp(-r·T) · N(d2)−0.01 · K · T · exp(-r·T) · N(-d2)

φ(·) is the standard normal PDF. Theta is reported per calendar day (divided by 365) in the Greeks calculator UI to match trader convention.

4. Annualized yield (covered calls, CSPs)

For a single-cycle annualized yield used everywhere on the site:

Annual yield = (premium / collateral) · (365 / DTE)

Where:

Honest caveat: annualized yield assumes you successfully repeat the cycle without ever getting assigned at a bad price or hit by an adverse IV move. Real-world net yields typically run 40-70% of the displayed annualized number after IV crush, assignment frequency, and gap moves. We display the cycle-arithmetic number because it's the industry convention; we don't claim it represents realized return.

5. Downside cushion

For a covered call:

Cushion = (spot − breakeven) / spot, where breakeven = cost basis − premium

For a cash-secured put:

Cushion = (spot − strike + premium) / spot

Cushion represents how far the underlying can drop before the position turns negative — a simple proxy for downside risk before assignment.

6. Wheel Score (0-100 composite)

Used in the Wheel Strategy Screener to rank candidates:

wheelScore = 0.40 · yield_norm + 0.25 · liquidity_norm + 0.20 · delta_quality + 0.15 · iv_regime

Higher is better. We don't claim this is a backtested edge — it's a heuristic for surfacing candidates that combine income with manageable risk.

7. Risk Score (0-100, higher = riskier)

riskScore = min(50, iv·60) + min(25, |delta_avg − 0.20|·80) + cap_penalty + sector_penalty

8. Liquidity Score (0-100)

liquidity = min(100, round( log10(1 + volume + open_interest) / 6 · 100 ))

This compresses raw volume + OI onto a log scale: 10K combined ≈ 50, 100K ≈ 75, 1M ≈ 100. Used to rank candidates and to surface "thin liquidity" warnings.

9. Income Goal Planner allocation

The planner solves a simple greedy allocation:

  1. Run the wheel screen at the user-selected risk band's filters (delta, DTE, market-cap, max price).
  2. For each candidate (in wheel-score order), allocate up to 20% of total capital (diversification cap).
  3. Stop when either expected monthly income reaches 120% of target, or 95% of capital is deployed.
  4. Compute expected monthly premium as (csp_premium + cc_premium) × 100 × contracts × (365 / cycle_DTE) / 12.

Probability of hitting target is a rough heuristic: (expected/target) · (1 − avg_delta·0.4) + diversification_bonus. It's not a Monte Carlo simulation.

10. Live Opportunities ranking

The live opportunities dashboard runs a parallel screen across ~30 popular tickers every 5 minutes, picks the top single CC and top single CSP per ticker within the delta band, and ranks by annualized yield. The KV cache layer is described in the data sources section.

11. Methodology changelog

12. Known limitations

Important things this site does NOT do:

13. Questions or corrections

If you spot a formula error or want to suggest a methodology improvement: [email protected]. Substantive corrections are credited in the changelog.

Related