LIVE
Is today's structure friendly to a long straddle?
Live regime, pin score, expected move, IV ratio and execution score for SPY, SPXW, QQQ, NVDA and any listed symbol. Read the structural picture in one screen.
Open 0DTE Live →
What a long 0DTE straddle actually pays for
A long straddle is two long options at the same strike and same expiry: one call and one put, both at the at-the-money strike. The combined premium is what you pay. The position profits on close if the underlying has moved far enough in either direction to cover that combined premium plus exit costs. The simplified breakevens sit symmetrically around the strike:
Naïve Breakeven Boundaries
$$ \text{BE}_{\text{upper}} = K + (C + P), \qquad \text{BE}_{\text{lower}} = K - (C + P) $$
Where K is the ATM strike and C + P is the combined call and put mid. FlashAlpha exposes that combined mid directly at expected_move.straddle_price on the /v1/exposure/zero-dte endpoint. The ATM straddle mid is the market's standard quote of the expected move, but it is not the same number as the strict 1-sigma. Under the lognormal Black-Scholes convention the ATM straddle prices to roughly 0.8 × σ × S × √t, so it sits modestly below the true 1-sigma. The endpoint reports the strict statistical 1-sigma separately at expected_move.implied_1sd_dollars (full session) and expected_move.remaining_1sd_dollars (rest of session). Use the straddle mid for breakeven math and the 1-sigma fields for probability comparisons.
One more important framing: the long straddle's terminal payoff depends on where the underlying closes relative to the breakeven boundaries, not on the day's high-low range. An intraday move that touches the upper breakeven and then reverts to the strike at close pays nothing if you hold to expiration. Realised range matters only if you exit at the moment of the move; profit-at-expiration is a function of close-versus-strike. Both views matter, but they are not the same trade.
The real breakeven includes round-trip slippage
The naïve breakeven assumes you fill at mid on both entry and exit. You will not. On 0DTE you pay roughly half the bid-ask spread on each leg on entry, and again on exit, on both the call and the put. That is one full spread round-trip per leg, summed across two legs:
Real Upper Breakeven
$$ \text{BE}_{\text{upper}}^{\text{real}} \approx K + (C + P) + (S_C + S_P) $$
Where S_C and S_P are the call and put bid-ask spreads in dollars. The FlashAlpha liquidity.atm_spread_pct field is defined as the average of the call and put spread percentages at the ATM strike. With that definition, round-trip slippage as a percentage of combined premium works out to roughly atm_spread_pct itself:
Round-Trip Slippage as % of Premium
$$ \frac{S_C + S_P}{C + P} \approx \text{atm\_spread\_pct} $$
So a SPY session with a 1% ATM spread costs you roughly 1% of premium in round-trip slippage. A less-liquid name with a 3% ATM spread costs roughly 3%. The relationship is approximately linear in the spread, not the multiplicative blow-up retail traders sometimes assume. That said, on a small-edge trade like a 0DTE straddle, even 1-3% slippage eats a meaningful share of the move you need to recoup.
The endpoint also reports an OI-weighted spread across the requested window (liquidity.weighted_spread_pct). The weighted figure is more pessimistic than the ATM number if you might roll into OTM legs; read both before committing.
Four forces working against the long straddle buyer
On a typical session, the buyer is fighting at least one of:
- Theta acceleration. 0DTE gamma is several times larger than equivalent 7DTE gamma at the same strike (the endpoint reports the ratio at
decay.gamma_acceleration), and theta scales with gamma. The hourly bleed is captured at decay.theta_per_hour_remaining, and the denominator (hours remaining) collapses faster than the option's intrinsic value can grow on a quiet day.
- Pin risk. When dealers are net long 0DTE gamma, hedging flow biases price toward the highest-OI strike into close. If the ATM strike is also the magnet strike, the position decays to near-zero on a session that closes within a few ticks of the strike. Captured at
pin_risk.pin_score (0-100; the endpoint's own example response labels 82 as a "strong pin").
- Vol crush. A long straddle is long vega. If implied volatility declines through the session, the position loses on vega even when the underlying moves. The endpoint's
vol_context.iv_ratio_0dte_7dte compares 0DTE ATM IV against the next weekly. The documented anchor: ratios above 1.0 carry an event premium that will compress regardless of direction; below 1.0 the 0DTE is priced cheap relative to the term.
- Slippage. Already covered above. The structural force most underweighted by retail traders.
The buyer needs at least one of these forces to invert, or needs realised vol to outpace all of them combined. The default expectation for an unfiltered 0DTE straddle is a loss.
The negative-gamma timing trap
"Negative gamma" sounds bullish for a long straddle because dealer hedging amplifies moves. The trap is that the regime label is a present-tense observation, not a forward-looking signal. Dealers typically become short gamma after a sharp move has already pushed spot through the flip level. By the time regime.label == "negative_gamma", much of the move you needed may have already happened.
Three sub-cases to distinguish:
- Already-realised vol. Spot has gapped through the flip overnight or moved sharply pre-noon. The negative-gamma label is now true but the implied move is already partly spent. Long straddle bought here often loses to the IV reset that follows the initial move.
- Stable negative-gamma session. Spot opened below the flip and is consolidating. The amplification force is present but not yet engaged. Long straddle has the cleanest backdrop here.
- About-to-cross.
regime.label == "positive_gamma" but regime.distance_to_flip_sigmas is well below 1.0. Spot is within a normal move of the flip. The straddle benefits from the cross during the session.
The endpoint cannot distinguish "already moved" from "about to move" on its own. Compare expected_move.implied_1sd_dollars (the full-session implied move) against the realised move so far. If the day's high-low range already exceeds the implied 1-sigma at the time of read, the easy part of the move is over.
For the full theory of how regimes evolve intraday, see 0DTE Gamma Regime — Positive vs Negative Today.
Reading the structural setup live
Five fields capture most of the structural picture. The endpoint returns all of them in a single response. The descriptions below use the documented thresholds from the API where they exist and qualitative language where they do not.
1. Regime and distance to flip
regime.label # "negative_gamma" or "positive_gamma"
regime.distance_to_flip_sigmas # documented: <1.0 = flip within a normal move
exposures.pct_of_total_gex # documented: >50% = 0DTE dominates intraday flow
Friendly to long straddle: negative_gamma with high pct_of_total_gex, OR positive_gamma with distance_to_flip_sigmas well below 1.0. Apply the negative-gamma timing-trap check from the previous section.
2. Pin risk and level clustering
pin_risk.pin_score # 0-100; endpoint labels 82 as "strong pin"
pin_risk.oi_concentration_top3_pct # higher = stronger magnet
levels.level_cluster_score # 0-100; high = levels stacked at one strike
Friendly: low pin score, scattered levels. Hostile: high pin score with cluster score above the level the endpoint flags as concentrated. The exact numeric thresholds calibrate per symbol and per session type — read both fields and form a view, do not rely on a single magic number.
3. IV ratio — entry cost, not edge
vol_context.iv_ratio_0dte_7dte # documented: <1.0 = cheap vs term; >1.0 = event premium
vol_context.zero_dte_atm_iv # actual IV being paid
vol_context.skew_25d # asymmetry signal (next section)
A common mistake is treating "cheap IV" as a payoff-probability signal. It is not. The IV ratio tells you about the cost of the position, not the likelihood of payoff. A ratio of 0.85 means you are paying a relatively low premium for the same expected move; it does not mean the move is more likely to happen. The right framing: a cheap IV ratio reduces the gravity pulling the position toward zero; it does not push it toward profit.
An IV ratio above 1.0 is an event premium. If you cannot name the event that justifies it, assume the market knows something you do not and skip the trade.
4. Skew as a directional bias check
vol_context.skew_25d is the 25-delta risk reversal in IV percentage points. Positive = put-skew (downside vol bid); negative = call-skew. A long straddle is direction-agnostic, but heavy skew tells you which leg is doing the implied-move work. If you have a directional view that disagrees with the skew, that is a soft caution. If your view aligns with the skew, the relevant question is whether a directional position (long call or long put) would be cheaper than the straddle.
5. Liquidity and execution
liquidity.atm_spread_pct # feeds the slippage math
liquidity.weighted_spread_pct # OI-weighted across the requested window
liquidity.execution_score # 0-100 composite; read directionally per API docs
metadata.snapshot_age_seconds # <30s for trade decisions
The endpoint's own documentation flags execution_score as a heuristic to read directionally, not as a tradable threshold. On SPY and SPXW the score is reliably high during regular hours. On smaller-cap names with 0DTE listings, the score below the API's "good" band combined with a wide ATM spread is a hard veto, because the round-trip slippage will exceed any plausible edge.
Catalyst alignment
The structural read above tells you what dealer positioning looks like. It does not tell you whether the day has a reason to move. The most powerful predictor of realised 0DTE vol is whether the session contains a scheduled catalyst:
- Macro releases — CPI, PCE, NFP, retail sales, ISM, FOMC announcements and minutes
- Earnings — for single-name 0DTE straddles, post-close vs pre-open earnings matters because the 0DTE expiry usually does not capture the move if the report is after-hours
- Geopolitical events — central bank meetings outside the Fed, treaty deadlines, scheduled OPEC announcements
- Auction days — long-dated treasury auctions, particularly 30Y, sometimes trigger meaningful afternoon vol
A catalyst-aligned day is the environment a long straddle needs. A catalyst-empty day with friendly structure is a thinner setup. A catalyst-empty day with hostile structure is the average session that drains straddle premium. Cross-check the economic calendar before reading the API.
Read all five structural fields in one call
The /v1/exposure/zero-dte/{symbol} endpoint returns regime, pin score, IV ratio, skew and execution score in a single response. Combine with the economic calendar before sizing.
See the API docs →
Strangle as the cheaper alternative
The long strangle is the OTM cousin of the straddle: buy a call above spot and a put below, both same-day. The combined premium is a fraction of the ATM straddle (often 40-60%), but the breakeven moves out by the same fraction. The trade-offs:
- Lower entry cost — less premium at risk, lower theta per hour
- Wider breakeven — the move needs to be larger to pay
- Lower vega — less hurt by IV crush
- Higher gamma asymmetry — the closer-to-money leg accelerates faster when the move comes
Use a strangle instead of a straddle when the IV ratio is elevated (you do not want to pay event premium on ATM contracts) or when the structural read is friendly but you suspect the move will be larger than implied. The strangle is a higher-conviction expression of "the move will be big" because the breakeven is further out.
Sizing
The maximum loss on a long straddle is the combined premium paid. The unit is dollars per contract, and every US equity, ETF and index option contract carries a 100x multiplier. The dollar loss formula:
Max Dollar Loss Per Position
$$ \text{Max Loss} = (C + P) \cdot 100 \cdot N + \text{fees} $$
Where (C + P) is the combined mid in dollars per share, 100 is the contract multiplier for US listed options, N is the number of contracts and fees include broker commissions plus regulatory fees. A SPY straddle quoted at $1.62 is $162 of risk per contract, not $1.62. Sized at 5 contracts that is $810 of risk before fees.
Size as if the position goes to zero, because that is the modal outcome on sessions that do not deliver realised vol. If 1% of account is the loss tolerance, total dollar risk (not contract count) is the constraint. The Kelly criterion adjusted for a sub-50% win rate often suggests even smaller sizes — see the Kelly sizing endpoint for the math.
Settlement and exercise risk at expiration
Two settlement regimes apply to 0DTE products and they behave very differently if a leg is in-the-money at the close.
- Cash-settled index options (SPXW, XSP, NDX, RUT): the in-the-money amount settles to cash. No stock position is created, no overnight risk, no exercise paperwork. The position simply pays out and closes.
- Physically-settled equity and ETF options (SPY, QQQ, IWM, NVDA, TSLA, single names): any leg in-the-money at expiration is auto-exercised by the OCC under the standard threshold (typically $0.01 ITM at close). For a long straddle, that means the call leg buys 100 shares per contract at the strike, or the put leg shorts 100 shares per contract — at Friday close, with the resulting position carried into Monday open. If the account cannot finance the long-stock buy or borrow for the short, the broker may liquidate at Monday's opening print, which is often gapped against the trader.
The practical implication for a long straddle held into the final minutes:
- If trading SPY/QQQ/NVDA-style equity or ETF options: close both legs before 4:00 PM ET on the expiry, even the worthless one. Letting a near-zero leg expire OTM is fine; letting a profitable leg expire ITM creates a stock position you did not size for.
- If trading SPXW or other cash-settled index options: you can let positions go to settlement. The exit-by-close discipline still applies if you want to lock the screen P&L, since the settlement print uses a special opening-rotation price the next morning for AM-settled contracts (SPXW is PM-settled, but check the contract specs).
- "Do-not-exercise" instructions exist at most brokers for ITM long contracts you do not want auto-exercised. Useful as a backstop, but treat it as a backstop and not as your primary close-of-day plan.
This is the most common way a 0DTE long-straddle trader ends up surprised on Monday morning. Do not skip the close-out.
Exit rules tied to live fields
Arbitrary time-based exits ("exit at noon") work only because the average straddle decays predictably. A more robust rule set ties exits to the same live fields used on entry:
- Implied-move compression stop. Compare the entry
expected_move.remaining_1sd_dollars to the current value. If the remaining implied move has compressed to a fraction of entry (the trade has been "outwaited" by the clock without realised move appearing), exit. The IV is now too low and the time is now too short for the position to recover.
- Regime-flip stop. If
regime.label transitions from the regime you entered on into the opposite regime, and spot moves back toward the straddle strike, exit. The structural reason for the trade has reversed.
- Pin-score escalation stop. If
pin_risk.pin_score climbs into the API's "strong pin" range while the underlying is near the strike, exit before the magnet finishes its work.
- Profit lock. When one leg has gained substantially and the other is approaching worthless, close the winning leg. Letting it ride is a directional bet you did not size for.
The point is that every exit rule references a field you can read, not a clock-time you made up.
When not to buy — three recurring traps
The morning IV crush. Buying at 9:31 AM, when overnight IV is still elevated and the day's range is unknown. The 0DTE IV typically declines through the first 30-60 minutes as the market settles. Wait for the IV ratio to stabilise before committing.
The mid-day pin trap. Buying at 1:30 PM with the pin score already elevated, hoping for an afternoon breakout that the gamma profile is actively resisting. The breakout occasionally happens; the more common outcome is a slow drift to the magnet strike and a near-total premium loss into close.
The "move already happened" entry. Buying after the underlying has already realised a meaningful fraction of the morning's implied 1-sigma. Two things have moved against you. Front-of-day IV has typically crushed (the vol uncertainty that priced the morning straddle is partly resolved), and the session has less time remaining for a fresh move. You are not buying a fresh setup at a new ATM strike; you are buying the residual of a move someone else captured. Chasing the same direction is a second-sigma bet, structurally less likely than the first.
Reading the data — extract and label
The script below pulls the relevant fields and labels each as buyer-friendly or buyer-hostile based on the API's documented anchors. It does not emit a buy/sell signal, because the right entry depends on calibration, catalysts and your own risk tolerance that the endpoint cannot know.
import requests
r = requests.get(
"https://lab.flashalpha.com/v1/exposure/zero-dte/SPY",
headers={"X-Api-Key": "YOUR_API_KEY"}
)
d = r.json()
# Pull the structural fields
regime = d["regime"]["label"]
flip_sigmas = d["regime"]["distance_to_flip_sigmas"]
zdte_share = d["exposures"]["pct_of_total_gex"]
pin = d["pin_risk"]["pin_score"]
cluster = d["levels"]["level_cluster_score"]
iv_ratio = d["vol_context"]["iv_ratio_0dte_7dte"]
skew = d["vol_context"]["skew_25d"]
exec_score = d["liquidity"]["execution_score"]
atm_spread = d["liquidity"]["atm_spread_pct"]
straddle_mid = d["expected_move"]["straddle_price"]
implied_1sd = d["expected_move"]["implied_1sd_dollars"]
remaining_1sd= d["expected_move"]["remaining_1sd_dollars"]
# Slippage estimate — atm_spread_pct is already the avg of call+put spread %.
# Round-trip slippage as % of premium ≈ atm_spread_pct.
est_slippage_pct = atm_spread
# remaining_1sd / implied_1sd ≈ sqrt(t_remain / t_full).
# This is the time-decay scaling of the implied move, NOT realized price movement.
# To assess realized range, fetch today's high/low from a separate quote source.
implied_time_decay_pct = (1 - remaining_1sd / implied_1sd) * 100
def tag(label, friendly):
return f"{label}: {'OK' if friendly else 'WARN'}"
print(tag("Regime",
regime == "negative_gamma" or (flip_sigmas is not None and flip_sigmas < 1.0)))
print(tag("0DTE dominates flow", zdte_share > 50)) # API-documented anchor
print(tag("IV not event-priced", iv_ratio is not None and iv_ratio < 1.0))
print(tag("Pin not forming", pin is not None and pin < 70)) # 82 = "strong pin" per API
print(tag("Levels scattered", cluster is not None and cluster < 70))
print()
print(f"Straddle mid: ${straddle_mid:.2f} (market-quoted expected move)")
print(f"Implied 1sd (full): ${implied_1sd:.2f}")
print(f"Remaining 1sd: ${remaining_1sd:.2f}")
print(f"Implied-move time decay:{implied_time_decay_pct:5.0f}% (time only — not realized)")
print(f"ATM spread: {atm_spread:.2f}%")
print(f"Approx round-trip slippage: {est_slippage_pct:.2f}% of premium")
print(f"Execution score: {exec_score} (read directionally per API docs)")
print(f"25d skew: {skew}")
print()
print("Note: realized range must be checked separately — fetch today's OHLC")
print("and compare day's high-low to implied_1sd_dollars.")
The output gives you a structured read of the setup, not a verdict. Combine with your catalyst check and your own risk sizing.
Curl version for quick checks
curl -H "X-Api-Key: $FLASHALPHA_API_KEY" \
"https://lab.flashalpha.com/v1/exposure/zero-dte/SPY" \
| jq '{
regime: .regime.label,
flip_sigmas: .regime.distance_to_flip_sigmas,
zdte_share: .exposures.pct_of_total_gex,
pin: .pin_risk.pin_score,
cluster: .levels.level_cluster_score,
iv_ratio: .vol_context.iv_ratio_0dte_7dte,
skew: .vol_context.skew_25d,
exec: .liquidity.execution_score,
atm_spread_pct: .liquidity.atm_spread_pct,
straddle_mid: .expected_move.straddle_price,
remaining_1sd: .expected_move.remaining_1sd_dollars,
implied_1sd: .expected_move.implied_1sd_dollars
}'
The short answer
A long 0DTE straddle is a small-edge trade fighting four structural forces — theta acceleration, pin risk, vol crush and slippage. The setups where the buyer wins are sessions where the structural read is friendly (negative gamma not yet realised, low pin, IV not event-priced, levels scattered, execution clean) and a catalyst gives the day a reason to move. The FlashAlpha /v1/exposure/zero-dte endpoint returns the structural picture in one call. It does not give you a signal; it gives you the data to form one. The discipline is in the filter, the catalyst check, and the willingness to skip the trade on the majority of sessions where the structure does not align.
MOST POPULAR
Read the 0DTE structure live for every symbol
Growth tier: regime, pin score, expected move, IV ratio, skew and execution score on SPY, SPXW, QQQ, NVDA, TSLA and 6,000+ tickers — plus full-chain GEX/DEX/VEX/CHEX, IV rank, vol surface and the live screener.
See Growth pricing — from $239/mo billed annually →