Long Strangle

Volatility

Buy an OTM put and OTM call — cheaper than a straddle, needs a bigger move to profit.

Performance across all datasets

SymbolReturn %SharpeMax DD %Win %Avg/trade %Trades
SPY-1363.6%-1.28+1277.7%+10.5%-71.8%19
QQQ-1364.3%-1.65+1272.3%+10.5%-71.8%19
IWM-1185.7%-0.99+1085.7%+15.8%-62.4%19
DIA-1255.3%-0.83+1155.3%+15.8%-66.1%19
Avg-1292.2%-1.19+1197.7%+13.2%19
Cumulative P&L % — all symbols

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.

Detail:
Cumulative P&L % — SPY

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.

Risk Profile

Max Profit
Unlimited (call side) / K_put − Debit (put side)
Max Loss
Total debit paid
Breakeven
K_put − Debit or K_call + Debit
Outlook
High volatility expected (direction agnostic)

Parameters

ParameterDefaultDescription
put_strike_pct0.95Put strike (5% OTM)
call_strike_pct1.05Call strike (5% OTM)
dte45Days to expiration

Methodology

A long strangle buys an OTM put (95% of spot) and an OTM call (105% of spot). It is cheaper than a straddle but requires a larger underlying move to profit. Like the straddle, it is a volatility bet that wins when realised volatility exceeds implied. The wider strikes reduce the debit but widen the breakeven range. Backtested with 45 DTE cycles.

Implementation

# Long Strangle: buy OTM put + buy OTM call
for entry in monthly_entries:
    S = spot_at_entry
    K_put  = round(S * 0.95 / 5) * 5  # 5% OTM put
    K_call = round(S * 1.05 / 5) * 5  # 5% OTM call
    T = 45 / 365.25

    prem_put  = black_scholes_put(S, K_put, T, r, sigma)
    prem_call = black_scholes_call(S, K_call, T, r, sigma)
    debit = prem_put + prem_call

    S_exp = spot_at_expiry
    payoff = max(0, K_put - S_exp) + max(0, S_exp - K_call)
    pnl = payoff - debit
    pnl_pct = pnl / debit * 100