Buy a lower-strike call and sell a higher-strike call for a net debit.
| Symbol | Return % | Sharpe | Max DD % | Win % | Avg/trade % | Trades |
|---|---|---|---|---|---|---|
| SPY | -100.8% | -0.05 | +500.0% | +42.1% | -5.3% | 19 |
| QQQ | +241.8% | 0.11 | +443.0% | +42.1% | +12.7% | 19 |
| IWM | +217.4% | 0.10 | +500.0% | +47.4% | +11.4% | 19 |
| DIA | -191.4% | -0.09 | +600.0% | +36.8% | -10.1% | 19 |
| Avg | +41.8% | 0.02 | +510.7% | +42.1% | — | 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 |
|---|---|---|
| long_strike_pct | 1.02 | Long call strike (2% OTM) |
| short_strike_pct | 1.07 | Short call strike (7% OTM) |
| dte | 45 | Days to expiration |
A bull call spread buys an OTM call (102% of spot) and sells a further OTM call (107% of spot) for a net debit. Maximum profit is the spread width minus debit (when underlying closes above the short strike). Maximum loss is the debit paid. The strategy profits in moderately bullish markets with defined risk and capped reward. P&L is expressed as a percentage of the debit paid.
# Bull Call Spread: buy K1 call, sell K2 call (K1 < K2)
for entry in monthly_entries:
S = spot_at_entry
K1 = round(S * 1.02 / 5) * 5 # buy call (closer to ATM)
K2 = round(S * 1.07 / 5) * 5 # sell call (further OTM)
T = 45 / 365.25
prem_buy = black_scholes_call(S, K1, T, r, sigma)
prem_sell = black_scholes_call(S, K2, T, r, sigma)
debit = prem_buy - prem_sell
S_exp = spot_at_expiry
payoff_buy = max(0, S_exp - K1)
payoff_sell = max(0, S_exp - K2)
pnl = payoff_buy - payoff_sell - debit
pnl_pct = pnl / debit * 100