Daily ATM SPX Long Puts for Intra-day Market Crash Hedging
Algorithm by Alex Joseph
Strategy Nuances you must-know before deployment
SPX options are European-style, cash-settled. That means no physical delivery / no early assignment risk. (Cboe Global Markets)
There are AM-settled monthly SPX and PM-settled weekly/daily SPXW contracts. If you intend intraday 0DTE-style hedges you will usually use weekly/daily (PM settled) or SPXW 0DTEs — check your broker availability. (Market Data, Cboe)
CBOE trading hours and curb session details matter for liquidity — bid/ask spreads widen outside RTH. Expect worse fills in premarket / postmarket. (Cboe Global Markets)
0DTE/short-dated options can move the market and liquidity providers’ hedging can change intraday behaviour — plan for wide spreads & gamma risk. Recent research & CBOE commentary highlight these impacts and liquidity constraints. (Cboe Global Markets, Bauer College of Business)
Strategy overview (goal)
Daily ATM SPX long put buys to provide intra-day crash protection against sharp intraday falls in the S&P 500 (SPX). The hedge should be small, liquid, fast to enter/exit, and governed by strict risk limits so it does not become an ongoing P&L drag.
Core ideas:
Buy ATM or slightly ITM/OTM SPXW daily/0DTE puts intraday when predefined crash signals trigger.
Use multiple entry criteria (price, volatility, orderflow, market internals) to avoid paying premium for false alarms.
Use clear exit rules: target, stop, time-to-close (close before end-of-day / before settlement quirks), and Greeks thresholds.
Keep strict position & dollar risk limits.
Parameters (example defaults — tune to your book & backtests)
Tradeable instrument: SPXW daily/weekly put (choose 0DTE or 1DTE depending on your operating hours & broker).
Strike selection: ATM = nearest strike to current SPX midprice (or delta ≈ −0.40 to −0.50). If liquidity is poor, prefer the nearest liquid strike.
Notional / sizing: Hedge notional = X% of portfolio intraday downside exposure. (Example: cover 10% of portfolio vega/dollar exposure with 1 put position.) Or a fixed premium budget: max premium/day = 0.2% portfolio.
Max loss per hedge: premium paid (fully loseable). Hard limit: no more than Y% of equity per day (example: 0.3%).
Profit target: 3× premium (or 50–100% move in option price), or delta threshold (e.g., option delta reaches −0.70).
Stop loss: 2× premium (or time decay threshold), or exit if IV collapse and price hasn’t moved.
Close time: close by 3:30–3:45pm ET for PM-settled/night contracts; for AM-settled monthly ensure you’re aware of settlement mechanics — better to avoid holding through settlement unless intentionally doing so. (Market Data, Cboe)
Entry criteria (use multiple, require X of N)
Require at least 2 of the following (configurable: “2 of 3” or “3 of 4”):
Price movement trigger (primary)
SPX falls ≥ A% in B minutes (e.g., A = 0.8–1.5% drop within B = 5–20 minutes). This catches fast intraday shocks.
Volatility / IV trigger
30-min IV for ATM puts (implied) increases > C% vs the 1-hour rolling IV (or IV rank > threshold). A rapid IV spike indicates fear and justifies premium. (Monitor bidder depth; IV jumps often widen spreads.)
VIX / front-month signal
VIX (or a front-month proxy) rises > D% intraday or VIX level > E (e.g., > 25). Use with caution — VIX can be noisy intraday. (Cboe, Investopedia)
Market internals / orderflow
SPY or SPX sell volume > buy volume ratio threshold, or NYSE advance/decline negative beyond a threshold, or large block trades in puts. High sell pressure confirms price move.
Liquidity check
Bid-ask spread of chosen strike ≤ max spread (e.g., ≤ (0.25 × mid) or absolute $X), and minimum open interest / volume thresholds satisfied. If spread too wide, skip.
Time window
Allow entries only during defined trading hours (e.g., 9:45am–3:30pm ET) to avoid wide spreads at open/close / curb sessions. (Cboe Global Markets)
Example: trigger if (Price drop >=1% in 10m) AND (30m IV up >=10%) AND (spread OK) → buy ATM put.
Position sizing & order mechanics
Order type: Use marketable limit orders (limit = mid + one tick/price concession) or IOC limit to get fast fills while controlling price. Avoid sweeping illiquid strikes.
Slippage assumptions: Build slippage cushion; in live algo assume 1–3 ticks for liquid strikes, more for wide markets.
Size: Limit either by contracts or premium: e.g., buy up to N contracts such that premium ≤ budget. Convert to delta-equivalent hedge if you want fixed SPX exposure (e.g., 1 contract ≈ 100 × option’s vega/delta on index multiplier; SPX multiplier is $100).
Anti-ganging: Prevent multiple fills within X minutes of last fill unless new trigger. This prevents stacking hedges on the same signal.
Exit rules (hierarchy: time / profit / stop / dynamic)
Always choose one primary exit policy — the algorithm should not mix contradictory rules.
Profit target exit
Close when option P&L ≥ PT × premium (example PT = 2.5–3×). Alternatively, close when the option’s delta crosses a target (e.g., delta ≤ −0.65) if that represents sufficient crash protection realized.
Stop loss
Close when option P&L ≤ −SL × premium (example SL = 1.5–2×), or if underlying recovers by > R% before IV collapses.
Time-based exit (hard)
Close all hedges by T_close (e.g., 3:30pm ET) for intraday PM-settled options. For 0DTE you may prefer to close earlier (e.g., 3:15pm) to avoid settlement quirks and widening spreads. For AM-settled monthly contracts don’t hold overnight unless intended. (Market Data)
Greeks-based exit
If theta burn is exceeding expected path and underlying hasn’t moved (time decay accelerating), exit to conserve capital. Or exit if realized move is small but IV collapses.
Dynamic roll / stretch
If SPX crashes but you want sustained protection, consider rolling to next daily/weekly put (pay additional premium) only if SPX drop persists and IV remains elevated. Be mindful of poor fills and double premium cost.
Adverse liquidity warning
If spreads suddenly widen beyond a threshold or market enters curb, exit to avoid execution uncertainty.
Risk controls & limits
Daily premium budget (max premium paid across all hedges) — hard stop.
Max notional (e.g., hedge notional ≤ X% of AUM).
Intraday exposure cap (max number of concurrent hedges).
Kill switch — if market volatility exceeds extreme threshold (e.g., VIX > 60) or exchange halts, turn off automated buys and send alert. (Financial Times)
Broker / margin check — make sure buying SPX puts meets margin and clearing rules in your account (SPX is cash settled; check broker hours). (Cboe)
Pseudocode (logical flow)
CONFIG:
DROP_PCT = 1.0 # percent drop trigger
DROP_MINUTES = 10
IV_SPIKE_PCT = 10 # 10% rise in 30-min IV vs 1-hr IV
SPREAD_MAX = 0.06 * mid_price # example
MAX_PREMIUM_DAY = 0.002 * portfolio_value
PROFIT_TARGET = 3.0 # 3x premium
STOP_LOSS = 1.5 # 1.5x premium
CLOSE_TIME = 15:30 ET
ON_EVERY_MINUTE:
compute intraday price drop over DROP_MINUTES
compute short-term IV (30m) and baseline IV (60m)
check market internals & orderflow indicators
check spread and liquidity for ATM strike
if (n_triggers_met >= required_triggers) AND (remaining_premium_budget >= estimated_premium):
submit limit IOC buy for ATM put size = min(size_by_delta, size_by_premium_budget)
on fill: record entry_price, premium_paid, timestamp
ON_POSITION:
monitor option_midprice
if option_PnL >= PROFIT_TARGET * premium_paid: exit position (limit at mid or marketable limit)
if option_PnL <= -STOP_LOSS * premium_paid: exit position
if current_time >= CLOSE_TIME - 15min: exit position
if spread > SPREAD_WARNING or trading_halted: exit position or reduce size
DAILY_END:
ensure no positions open (unless overnight allowed by policy)
log all fills, slippage, market state, and send summary
Decision matrix diagram (compact)
Use this 3×3 matrix to decide action given Price Move × IV Move × Liquidity.
Decision Matrix (choose action)
Rows = Price Move: Big (>=1%/10m) | Moderate (0.4-1%) | Tiny (<0.4%)
Cols = IV Move: Spike (>=10%) | Mild (3-10%) | Flat/Down (<3%)
Each cell also requires liquidity check: SPREAD_OK? (Y/N)
Big / Spike : BUY ATM PUT (full size) if SPREAD_OK -> EXECUTE
Big / Mild : BUY ATM PUT (reduced size) if SPREAD_OK -> EXECUTE
Big / Flat : BUY OTM PUT or skip (prefer confirmation from internals)
Mod / Spike : BUY small ATM PUT (probe) if internals confirm
Mod / Mild : WAIT (no trade) unless internals & volume confirm
Mod / Flat : NO TRADE
Tiny / Spike : SMALL probe buy if internals extreme & spreads tight
Tiny / Mild : NO TRADE
Tiny / Flat : NO TRADE
Liquidity check failure -> DO NOT ENTER (or use much smaller size)
Example live scenario
At 11:05am ET SPX drops 1.3% in 8 minutes; ATM 30-min IV up 18% vs 60-min baseline; chosen ATM put spread = $1.20 premium, spread = $0.08 (acceptable) → algorithm buys 5 contracts (premium $600) within budget.
Exit: SPX rebounds by noon and put falls to 0.4x premium → stop or close for a small loss OR if option runs to 3× premium close for profit.
Implementation considerations & practical tips
Simulate realistic spreads & fills — backtest using NBBO & real option quotes; using mid fills in backtests is optimistic. Use executed trade prints to infer slippage. (Bauer College of Business)
Use index SPX, not SPY, when you want clean index hedge (SPY has share delivery & tracking differences). SPX contracts are cash-settled with $100 multiplier. (Cboe)
Beware settlement / expiry quirks — don’t accidentally hold AM-settled monthlies through the opening settlement auction. Know which contract family you trade (SPX vs SPXW). (Market Data)
Monitoring Greeks — short-dated puts gain delta/gamma fast; ensure your trading system monitors delta exposure to avoid unintended directional exposure.
Event windows — consider blocking automatic buys around major scheduled events (FOMC releases, payrolls) or using different thresholds there.
Record telemetry — log triggers, fills, IV surface, underlying volume, and post-trade attribution for continuous improvement.
What I haven't assumed / choices you should make
Whether to use 0DTE or 1DTE: 0DTE gives cheapest, most responsive intraday hedge but extreme gamma & liquidity issues. 1DTE gives a bit more time and sometimes better liquidity. Decide based on your execution capability and backtest results. (Cboe Global Markets)
Exact numeric thresholds — I provided examples you should calibrate with historical intraday data for SPX and your account size.
Last updated
Was this helpful?