Options-Expiry Gamma-Wall Unwind Slippage Playbook

2026-03-08 · finance

Options-Expiry Gamma-Wall Unwind Slippage Playbook

Date: 2026-03-08 Category: research

Why this matters

Execution cost around options expiry is often mis-modeled as “just higher volatility.” In reality, dealer hedging flow can create strike-pinning (mean reversion toward large OI strikes) and then rapidly flip into unwind flow (directional acceleration after pin breaks or post-expiry de-hedging).

A static impact model calibrated on normal days will usually:

This playbook treats expiry windows as a separate microstructure regime with explicit state control.


Core intuition

Near expiry, large open interest (OI) strikes act like local potential wells:

So the execution question is not only “how much volatility?” but:

  1. Are we in pinning, fragile pin, or unwind?
  2. What is the probability of a pin-break transition during our execution horizon?
  3. How does cost distribution (q50/q95) shift by state?

Data contract (minimum)

1) Spot + order book features

2) Options-derived features

3) Flow/transition features


Regime labels (practical)

Define three operational states:

  1. PINNED

    • spot oscillates near high-OI strike
    • low directional drift, higher mean reversion
    • passive fill odds look good, but directional progress is slow
  2. FRAGILE_PIN

    • drift/flow imbalance increases
    • spread/depth instability rises
    • transition risk to break/unwind increases
  3. UNWIND

    • post-break directional movement
    • impact persistence and sweep risk rise
    • “wait for reversion” assumptions fail more often

Use a lightweight classifier (logit/GBM) for state probability vector:

[ P_t = (p_{pinned}, p_{fragile}, p_{unwind}) ]

with daily recalibration and strict monitoring of probability calibration.


Slippage model design

Model expected and tail cost jointly:

[ \hat C_{q}(x_t) = \sum_{s \in S} p_s(x_t) \cdot \hat C_{q}^{(s)}(x_t), \quad q \in {0.5, 0.95} ]

where each state-specific model includes:

Recommended branch decomposition

For each child decision (join/improve/take):

[ E[C] = P(fill)\cdot C_{fill} + (1-P(fill))\cdot C_{miss+catchup} ]

Do not train fills-only. Include miss/cancel branches to avoid survivorship bias.


Control policy (state-aware)

Use a simple 4-level action policy:

Suggested mapping

Add hysteresis to prevent flip-flop.


Calibration and validation loop

Offline (weekly)

Online (intraday)

[ Burn_t = \frac{RealizedCost_t}{PlannedBudget_t} ]

Escalate control level when burn-rate breaches thresholds.


Execution heuristics that usually help

  1. Near strong pin, avoid fake progress chasing
    • passive fills may be high but directional completion weak.
  2. When fragile-pin signals rise, shorten dwell time
    • queue age becomes less valuable; reset tax can explode.
  3. After confirmed break, avoid binary panic sweeps
    • move to staged aggression with hard tail budget gates.
  4. Separate expiry-day parameter set
    • do not rely on non-expiry pooled calibration.

Rollout plan

  1. Shadow mode (2–4 weeks)
    • produce state probs + recommended control action without execution changes.
  2. Canary (5–10% flow)
    • only allow GREEN/WATCH decisions initially.
  3. Expanded canary
    • enable STRESS/SAFE with strict rollback criteria.
  4. Full deploy with champion/challenger
    • keep baseline controller as automatic fallback.

Rollback triggers


Minimal KPI dashboard


Common failure modes


Bottom line

On expiry windows, execution quality depends on state transitions (pin → fragile → unwind), not just spread/vol snapshots.

A practical edge comes from:

That is how you prevent “looked fine at q50” from becoming expensive at q95 when gamma support disappears.