Buy ATM call + sell ATM put — replicates stock ownership with options.
| Symbol | Return % | Sharpe | Max DD % | Win % | Avg/trade % | Trades |
|---|---|---|---|---|---|---|
| SPY | +22.8% | 0.21 | +25.9% | +63.2% | +1.2% | 19 |
| QQQ | +34.2% | 0.24 | +30.5% | +63.2% | +1.8% | 19 |
| IWM | +24.4% | 0.16 | +42.5% | +57.9% | +1.3% | 19 |
| DIA | +17.0% | 0.18 | +23.6% | +63.2% | +0.9% | 19 |
| Avg | +24.6% | 0.20 | +30.6% | +61.8% | — | 19 |
What this shows: Overlayed cumulative return series for this strategy across all available symbols.
How to read it: Look for symbols with smoother curves and faster recoveries to assess whether performance is broad-based or driven by a few outliers.
What this shows: Single-symbol cumulative return path for SPY.
How to read it: Use this detailed view to inspect entry/exit behavior over time and whether drawdowns cluster in specific periods.
| Parameter | Default | Description |
|---|---|---|
| dte | 45 | Days to expiration |
A synthetic long buys an ATM call and sells an ATM put at the same strike and expiration, replicating the payoff of owning the underlying stock. The net debit is small (call premium minus put premium). It provides full upside participation and full downside exposure, just like owning the stock, but with less capital tied up. Backtested with 45 DTE cycles, P&L expressed as a percentage of the underlying entry price.
# Synthetic Long: buy ATM call + sell ATM put
for entry in monthly_entries:
S = spot_at_entry
K = round(S / 5) * 5 # ATM strike
T = 45 / 365.25
call_prem = black_scholes_call(S, K, T, r, sigma)
put_prem = black_scholes_put(S, K, T, r, sigma)
net_debit = call_prem - put_prem # small, near zero
S_exp = spot_at_expiry
call_payoff = max(0, S_exp - K)
put_loss = max(0, K - S_exp)
pnl = call_payoff - put_loss - net_debit
pnl_pct = pnl / S * 100