IV Crush Detector
Quantify the post-event vol drop on long options.
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.
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.
Δprice ≈ vega · ΔIV (per 1% IV change)
Real IV Crush Detector bot, running on real Yahoo data when the symbol is available. Drag the params — the bot re-runs instantly.
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.
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),
},
};
},
};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.
- Copy the whole block above.
- On /quant, click + Import your bot in the bot library.
- Paste, hit save. It hot-loads into your workspace.
- Edit any param defaults or logic to your taste — it's now yours.
- ·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).
- ·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.
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.