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-1376.6%-1.79+1276.6%+10.5%-72.5%19
QQQ-1227.0%-1.40+1127.0%+10.5%-64.6%19
IWM-1197.9%-1.41+1097.9%+15.8%-63.0%19
DIA-1466.3%-1.74+1382.3%+10.5%-77.2%19
Avg-1317.0%-1.58+1221.0%+11.8%19
Cumulative P&L % — all symbols
Detail:
Cumulative P&L % — SPY

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