LIVE·
fetching live quotes from Yahoo Finance…
--:--:--UTC
Learn/Bots/IV Crush Detector
Optionsid · iv-crush
💥

IV Crush Detector

Quantify the post-event vol drop on long options.

In plain English

Before earnings, options get expensive because nobody knows what'll happen. The instant the news drops, that uncertainty (volatility) collapses — and options lose value even if the stock moves your way. This bot tells you exactly how much you'd lose to vol crush before any directional move.

No jargon. Just what this bot does.
The longer version

Before earnings, options get expensive because nobody knows what'll happen. The instant the news drops, that uncertainty (volatility) collapses — and options lose value even if the stock moves your way. This bot tells you exactly how much you stand to lose to vol crush, separate from any directional move.

The math
formula
Δprice ≈ vega · ΔIV (per 1% IV change)
parameters
spotSpot $range 1 → 10000default · 100
strikeStrike $range 1 → 10000default · 100
daysDays to expiryrange 1 → 90default · 14
preIvPre-event IV %range 10 → 300default · 80
postIvPost-event IV %range 5 → 200default · 35
typeTypechoices: C, Pdefault · C
Live demo

Real IV Crush Detector bot, running on real Yahoo data when the symbol is available. Drag the params — the bot re-runs instantly.

symbolloading…
loading AMZN bars…
Source code · public

This is the actual code the bot runs — not a re-explanation, not a simplified version. Whatever ships here is what executes when you press Run All in the workbench. Read it, copy it, fork it, build a better one.

lib/quant/bots.ts·lines 794841
TypeScript · MIT-licensed
const ivCrushBot: BotDef = {
  id: "iv-crush",
  name: "IV Crush Detector",
  category: "options",
  glyph: "💥",
  tagline: "Quantify the post-event vol drop on long options.",
  formula: "Δprice ≈ vega · ΔIV (per 1% IV change)",
  params: [
    { key: "spot", label: "Spot $", kind: "number", default: 100, min: 1, max: 10000, step: 0.5 },
    { key: "strike", label: "Strike $", kind: "number", default: 100, min: 1, max: 10000, step: 0.5 },
    { key: "days", label: "Days to expiry", kind: "number", default: 14, min: 1, max: 90, step: 1 },
    { key: "preIv", label: "Pre-event IV %", kind: "number", default: 80, min: 10, max: 300, step: 1 },
    { key: "postIv", label: "Post-event IV %", kind: "number", default: 35, min: 5, max: 200, step: 1 },
    { key: "type", label: "Type", kind: "select", default: "C", options: [{ value: "C", label: "Call" }, { value: "P", label: "Put" }] },
  ],
  run: (ctx, p): BotResult => {
    const lastPx = ctx.candles[ctx.candles.length - 1]?.c ?? 100;
    const spot = num(p, "spot", lastPx);
    const strike = num(p, "strike", Math.round(lastPx));
    const days = num(p, "days", 14);
    const pre = num(p, "preIv", 80) / 100;
    const post = num(p, "postIv", 35) / 100;
    const type = (p["type"] as string) === "P" ? "P" : "C";
    const t = days / 365;
    const before = priceOption(spot, strike, t, 0.045, pre, type as "C" | "P");
    const after = priceOption(spot, strike, t, 0.045, post, type as "C" | "P");
    const drop = before.price - after.price;
    const dropPct = drop / before.price;
    return {
      signals: [],
      metrics: [
        { key: "before", label: "Pre-event $", value: `$${before.price.toFixed(2)}`, tone: "info" },
        { key: "after", label: "Post-event $", value: `$${after.price.toFixed(2)}`, tone: "info" },
        { key: "drop", label: "Crush $", value: `−$${drop.toFixed(2)}`, tone: "bear" },
        { key: "dropPct", label: "Crush %", value: `${(dropPct * 100).toFixed(1)}%`, tone: "bear" },
        { key: "vega", label: "Vega /1%", value: fmtNum(before.greeks.vega, 3), tone: "neutral" },
      ],
      summary: `IV ${(pre * 100).toFixed(0)}% → ${(post * 100).toFixed(0)}%. Long ${type === "C" ? "call" : "put"} loses ${(dropPct * 100).toFixed(1)}% on vol alone.`,
      beginner:
        "Before earnings, options get expensive because nobody knows what'll happen. The instant the news drops, that uncertainty (volatility) collapses — and options lose value even if the stock moves your way. This bot tells you exactly how much.",
      verdict: {
        side: "warn",
        text: `Buying long premium into the event risks a ${(dropPct * 100).toFixed(0)}% IV-only loss.`,
        confidence: Math.min(1, dropPct * 2),
      },
    };
  },
};
what each piece means
  • id — unique key the workbench uses to find the bot.
  • params — the sliders + inputs you see on the cell.
  • run(ctx, p) — the function that gets called with candles + your params and returns the verdict.
  • verdict — the BUY / SELL / HOLD pill at the top of the cell.
  • metrics — the small stat boxes shown in the cell body.
use this code yourself
  1. Copy the whole block above.
  2. On /quant, click + Import your bot in the bot library.
  3. Paste, hit save. It hot-loads into your workspace.
  4. Edit any param defaults or logic to your taste — it's now yours.
Specialty · when it shines, when it fails
✓ Shines when
  • ·Earnings setups. Calculate the IV-only loss before deciding whether long premium even makes sense.
  • ·Comparing pre- vs post-event vol regimes. Plug in pre-earnings IV and a typical post-earnings IV and see the damage.
  • ·Strategy selection. If IV crush is huge, sell premium (iron condor) instead of buying it (long straddle).
✗ Fails when
  • ·Underestimating directional moves. The bot only models vol; if the stock gaps 8%, the loss/gain from the move dwarfs the crush.
  • ·Calls vs puts asymmetry. IV crush is symmetric in vega; directional results aren't.
  • ·Skew changes. Real post-event vol surfaces flatten differently for different strikes; the bot uses a single IV.
How to read its verdict

Always WARN — this is a risk diagnostic, not a trade signal. The headline 'crush %' tells you the IV-only loss on a long-premium position over the event. If it's >30%, the directional move needs to be commensurately huge to be worth the long-premium bet.

FAQ
Why do options lose value if the stock moves?+
Two competing forces. Direction (delta + gamma) gains value when the stock moves your way. Vol crush (vega) loses value as IV collapses post-event. Net P&L = directional gain − vol crush. If the move is small, vol crush wins and you lose even on a 'right' direction call.
How big is typical IV crush?+
Big-cap earnings: pre-event IV is typically 60-80%, post-event drops to 25-40%. That's a 35-55% drop in IV. On a long ATM call with vega ≈ 0.20 per 1% of IV, that's a 7-11% drop in option price — before any directional move.