Methodology
Honest-fill backtesting
Published 2026-09-01 · Version 1.0
Every backtest on FainTrading runs twice over the same historical bars: an ideal run (fills at the modeled mid, no commissions, textbook assignment) and a realistic run degraded by three documented frictions — spread capture, commissions, and late assignment. The result reports both equity curves plus the divergence between them, so the number you quote is the one that survives real-world costs. This page publishes every constant in the model (shipped in app/services/backtesting/friction.py).
1. Spread capture by delta and DTE
A seller crossing the bid-ask spread does not receive the mid. The fraction of mid captured on entry is 1 − half_spread(|delta|, DTE), looked up in this table. It encodes the empirically robust pattern that cheap, far-OTM, short-dated options carry the widest relative spreads — a $0.10 far-OTM weekly with a $0.02-wide market gives up 20%+ of its mid — while near-ATM and longer-dated options are relatively tighter. Deltas are Black-Scholes deltas at an assumed flat 30% IV and 5% risk-free rate, consistent with the flat premium model below.
| Delta bucket | DTE < 14 | DTE 14–45 | DTE > 45 |
|---|---|---|---|
| |delta| < 0.15 | 88% of mid(half-spread 12%) | 92% of mid(half-spread 8%) | 94% of mid(half-spread 6%) |
| 0.15 – 0.30 | 94% of mid(half-spread 6%) | 96% of mid(half-spread 4%) | 97% of mid(half-spread 3%) |
| 0.30 – 0.50 | 97% of mid(half-spread 3%) | 98% of mid(half-spread 2%) | 98% of mid(half-spread 2%) |
| ≥ 0.50 | 98% of mid(half-spread 2%) | 98.5% of mid(half-spread 1.5%) | 99% of mid(half-spread 1%) |
Exit flips the direction: closing a position pays intrinsic × (1 + half-spread). The whole table scales by a user-facing slippage multiplier (0 = free mid fills, 3 = very wide markets, default 1.0).
2. Commissions and fees
- $0.65 per contract per option fill, capped at $10 per fill — tastytrade-style per-contract pricing, and the same constants the paper engine and the Live-Readiness cost replay use.
- Equity legs are $0 (assignment, rebuys), matching tastytrade's commission-free stock trading.
- Overridable per backtest: per-contract $0–5, cap $0–50. The ideal run always pays $0.
3. Assignment model
Short options are American-style, and deep-ITM shorts get assigned once remaining extrinsic value is negligible. On the final day of each cycle, an ITM short whose estimated remaining time value — entry_mid × (dte_remaining / cycle_days) × e^(−intrinsic / entry_mid) (flat time decay × exponential moneyness decay, so deep-ITM shorts retain almost none while barely-ITM shorts keep most) — is below $0.05/share is assigned and the stock transacts at the strike. If time value is still meaningful, the realistic path must instead buy the option back at intrinsic × (1 + half-spread) plus commission — a cost the ideal path never pays. Mid-cycle (true "early") assignment is deliberately out of scope.
4. Earnings IV crush
The earnings-crush strategy applies a per-symbol crush ratio — the mean historical post-earnings IV drop from our stored per-symbol earnings history — to short-straddle extrinsic value on the day after each event. The ratio needs at least 4 symbol-specific observations; below that the platform-wide average is applied and flagged as a fallback. Ratios are clamped to 5–95%, with a 35% default when no data exists anywhere. Both the percent (25.0) and fraction (0.25) column conventions are accepted.
Assumptions and limits
Stated plainly, because a backtest that hides its simplifications is marketing, not measurement:
- Premium estimation is intentionally simplified — a flat percentage of stock price per cycle. This is an educational backtester, not production quant finance; the honesty budget went into the fill model, not the pricing model.
- Daily closing prices only (yfinance), no intraday bars or intraday spreads.
- Strategies covered: covered call, cash-secured put, buy-and-hold baseline, and earnings IV crush. Multi-leg structures are not simulated.
- Per-trade P&L covers the option leg only; the stock leg's effect appears in the aggregate equity figures.
- Assignment is estimated, not simulated from exercise notices; early assignment is excluded.
- Deltas for the spread table come from Black-Scholes at an assumed flat IV, not live surfaces.