← All setups
S015 · forward-collect · paper

Earnings short-premium — forward-paper tracking

earnings-straddle-overpricing-midcap-v1
6 completed 0 open (awaiting exit) liquidity-ok 33% forward paper · 2026-06-18 → 2026-06-30
Cumulative P&L over time — EV% of notional, equal-weight per trade; labels = cumulative since start (★ = best)
-14.3%+0.0%06-1806-2306-2406-30report date-4.7%-9.3%
S024 naked · -9.3%S015 fly (lead) · -4.7%
StructureEventsMean EV%Win%Worst
S024 · naked straddle6-1.55%33.3%-10.46%
S015 · iron fly6-0.79%16.7%-3.00%

Per-event paper positions — entry snapshot vs exit re-quote

ReportTickerImpl.Real.S015 fly EV%S024 naked EV%
2026-06-30NKE AMC9.49%3.02%+2.14%+4.65%
2026-06-24MU illiq12.79%0.36%-0.50%+0.33%
2026-06-23CCL 6.90%6.37%-1.05%-0.98%
2026-06-23FDX illiq7.68%0.08%-0.28%-0.20%
2026-06-18ACN illiq8.59%18.20%-3.00%-10.46%
2026-06-18KR illiq6.23%7.95%-2.02%-2.61%

EV% = per-event P/L as a percentage of strike notional, net of 0.75% friction (worse-than-mid). Both structures are scored on the same events for an honest side-by-side. Monitoring only — no gate is frozen yet; the binding forward Stage-1 gate (tail-first: worst single trade for S024) is written once enough events accumulate. Win-rate is never the headline for a short-premium tail.

Setup detail · S015

ID: S015 Slug: earnings-straddle-overpricing-midcap-v1 Type: OPT Skip stages: 1, 2 — no historical option chains; validated forward (Tastytrade), not on history Forward collect: earnings-premium Date added: 2026-06-08 Last revised: 2026-06-12 (rationale rewrite; cross-cap control added as non-gating exploratory by recorded decision; universe split; forward-collect plan; peer-escalation exploratory; decay tripwire — all revised before any Stage 1 run; no gate was frozen at time of revision) Status: blocked (data) — promoted from lab/candidates/earnings-straddle-overpricing-midcap-v1.md Wall: 1 — Too small to bother with (downgraded from assumed to hypothesized; see Rationale and the cross-cap control below)

Blocked on: historical option chains. Tastytrade is fine for the forward side (live IV, OI, greeks) but not a reliable historical source (DXLink/dxFeed — gappy per-contract history, weak on expired contracts). Stage 1 cannot run honestly until either (a) a dedicated options-history vendor is in place (Cboe HistData, OptionMetrics, or equivalent), or (b) the forward-collect archive (see §Data) has accumulated enough events for a forward-only validation with a gate written around that constraint. Sits here pre-registered so the queue is visible. Partial unblock: the stock-side half of the measurement (realised-move predictability, cross-cap comparison, peer-escalation) requires no options data and can run now.


One-line setup

We expect that iron flies sold the afternoon before scheduled earnings on mid-cap names ($1–10B) where the option-implied move materially exceeds the trailing-N-quarter realised post-earnings move predict positive expected value, net of friction, when closed the morning after the report in the liquid US mid-cap universe over a multi-year sample, because the implied-vs-realised earnings premium gap is a documented market-wide phenomenon, and we hypothesize it is widest in the mid-cap band where option flow is sellable but too small to attract dedicated vol-arb capacity.

Rationale (the "because", expanded)

Two claims are stacked here, and they have different evidentiary status. Keeping them separate is the point of this revision.

Claim 1 — the gap exists (documented). Options around earnings carry a volatility risk premium: implied moves systematically exceed realised moves on average, across the market. This is one of the better-documented options anomalies. More specifically, the relative-value form this setup trades — conditioning on implied vs. trailing realised earnings moves — has direct academic support: Milian (2023, JRFM) finds straddle returns are significantly predictable from the ratio of historical earnings moves to option-implied earnings moves, and concludes weekly straddle prices around earnings are not efficient. That is this setup's filter, tested and published. Claim 1 is not what Stage 1 needs to prove from scratch; Stage 1 needs to prove it survives friction in our universe and our structure.

Claim 2 — the gap is widest in mid-caps (hypothesized, contested). The original candidate narrative treated "vol desks don't bother below $10B" as fact. It is not established. The literature is mixed and partially points the other way: Barth et al. find excess implied volatility around earnings is higher for larger firms and industry leaders, not smaller ones. On the other side, there is a structural argument that mega-cap single-name implied moves are partially suppressed by index-level hedging flows (SPY/QQQ), creating a wedge between index and single-name vol pricing — but suppressed mega-cap implied is not the same thing as overpriced mid-cap implied.

Claim 2 is therefore a prediction this setup tests, not an assumption it may rest on — measured by the cross-cap control (exploratory analysis 1), which by recorded decision does not gate. If the gap turns out equal across cap buckets, the trade can still clear its EV gates and proceed — but Wall 1 is falsified, the "why does this edge persist" story is downgraded to unknown, and the decay tripwire (Notes) becomes the only line of defense against silent edge death.

Regime warning (recorded pre-test): the most recent earnings season (Q1 2026 reporting) ran the other way — realised moves consistently exceeded implied, producing one of the best seasons for straddle buyers in years (ORATS season review). Short-premium EV is regime-dependent; the tail-check and both-halves gates below exist precisely because a multi-year mean can hide one season of ruin.

Portfolio logic unchanged: closest cousin to the existing put-selling book, but the failure mode is event-driven gaps rather than a grinding selloff, so it diversifies when the book bleeds. The trade sells the implied-vs-realised premium gap; it predicts magnitude, never direction.

Data required

Stock-side (available now — Tiingo EOD + earnings calendar): - Earnings calendar with date + before/after-market flag, point-in-time (the calendar as visible the afternoon before; see look-ahead traps) - Daily OHLCV for the full cap spectrum (mid-cap universe and large-cap control bucket) - Market cap and dollar-volume history for PIT universe construction

Option-side (blocked — vendor or forward-collect): - Historical option chains by expiry + strike (implied move, ATM straddle bid/ask, OI, volume) — Tastytrade insufficient for history - Forward-collect job (start immediately, independent of Stage 1): a daily job snapshots, for every name reporting the next session, the ATM straddle mid/bid/ask, implied move, OI, and spread via Tastytrade each afternoon. This builds our own PIT chain archive at zero marginal cost. Every quarter of collection converts the "forward-only validation" path from hypothetical to concrete. Snapshots are write-once, timestamped, and never edited.

Universe & suitability filters (all point-in-time)

Stock-side filters (backtestable today): - Market cap $1–10B as of decision date (PIT, not current cap) - Average daily dollar volume ≥ floor [value to freeze with gate] - Listed with ≥ 8 trailing quarterly earnings events (required for the trailing realised-move baseline) - Exclusion of binary-event names where "earnings" proxies for a different catalyst (e.g. development-stage biotech): defined mechanically by SIC/sector code list fixed at freeze time, not by discretion

Option-side filters (define now, enforceable only with chain data): - ATM straddle bid-ask spread ≤ X% of mid [to freeze] - Minimum option volume / open interest floor [to freeze] - Weekly expiration available within N days after the report - These filters are load-bearing: multi-leg structures on mid-cap chains live or die on the spread. Any backtest that cannot enforce them overstates EV and must say so in its result writeup.

Control bucket: identical filters except market cap > $50B. Same measurement, same dates, same structure. Exists solely to test Claim 2.

Quick-kill gate (Stage 1)

Will be considered to have passed Stage 1 if:

  • Mean per-trade EV ≥ +0.50% of notional [suggested, to freeze]
  • Welch p < 0.05 AND mean > 0 (direction-aware, per-trade EV vs zero) [suggested, to freeze]
  • Win rate ≥ 65% [suggested, to freeze]
  • Sample size ≥ 300 earnings events in the mid-cap bucket [suggested, to freeze]
  • Effect present in both sample halves (no single 2-year window carrying the result) [suggested, to freeze]
  • Worst single trade ≤ −5× mean win (tail check — short premium must not blow up on one print) [suggested, to freeze]

Decision recorded 2026-06-12, before any run: the cross-cap control is non-gating (exploratory analysis 1 below). Rationale: a mid-vs-large EV difference is a correlational signature consistent with Wall 1, not proof of mechanism — gating on it would be false rigor. EV gates decide; mechanism evidence informs. The trade-off (no mechanism theory for edge decay) is covered by a mandatory decay tripwire at Stage 3+ (see Notes).

Pre-registered exploratory analyses (non-gating)

Recorded here before any run so they cannot be mistaken for post-hoc rescues. Results are reported regardless of direction; none of them can pass or fail this setup.

  1. Cross-cap control (mechanism check for Wall 1). Identical measurement on the large-cap control bucket (> $50B, same filters, same dates, same structure). Wall 1 predicts mid-cap mean EV > large-cap mean EV, the difference positive in both sample halves. Reporting rule: if the EV gates pass but the gap is flat across caps, the result writeup records "EV present, Wall 1 falsified" — the setup still passes, but the persistence story is downgraded to unknown and the decay tripwire (Notes) becomes the only line of defense.
  2. Peer-escalation conditioning. For each trade, compute: of the same-sector names that already reported this earnings season, the fraction whose realised move exceeded their own trailing baseline. Hypothesis: high peer-escalation regimes (sector sentiment dominating idiosyncratic news — e.g. seasons where names gap down on good numbers) are when the trailing-realised estimator underestimates and short premium gets hurt. Direction is irrelevant to the structure (a −8% gap on good numbers and a −8% gap on bad numbers are the same outcome for an iron fly); only magnitude vs. implied matters. Stock-side data only; runnable now. If predictive, it becomes the core of earnings-straddle-overpricing-midcap-v2 under a new S-number — it does not get bolted onto v1 mid-test.
  3. Gap monotonicity across cap deciles. Beyond the binary mid-vs-large control: is the implied-vs-realised gap monotonic in market cap? Claim 2 predicts yes (decreasing in cap).
  4. Before/after-market split. EV difference between BMO and AMC reporters (overnight vs. intraday gap risk differs).

What I expect to find

Implied-vs-realised gap probably present but smaller than the candidate narrative suggests once friction (bid-ask + commission on multi-leg structures) is applied. Probability of clearing the gate is moderate (~40-50%) given that the underlying anomaly is well-documented but compressed by retail option flow in recent years. Most likely failure mode is the tail-check gate — short-premium strategies routinely show positive mean EV that gets erased by 2-3 catastrophic prints per decade. Separate forecast for the non-gating cross-cap control: genuinely uncertain (~50/50) whether the mid-cap gap exceeds the large-cap gap — Barth et al. gives real reason to expect it might not. Recording both now so the result writeup can be scored against this forecast.

Look-ahead-trap analysis

Data input PIT discipline
Earnings calendar Must be the announced schedule as of decision time (afternoon before). Companies move dates; simulation uses the calendar version visible then, never the post-announcement record.
Market cap / universe membership As of decision date from PIT history, not current constituents.
Trailing realised moves Only quarters fully completed before decision date.
Implied move (forward-collect) Snapshot timestamped at capture; never recomputed from later data.
Peer-escalation feature Only same-season reporters whose results were public before decision time on the trade date.
Sector classification Code list frozen at gate-freeze time; no reclassification mid-sample.

Operational definitions

  • Entry: afternoon before the scheduled report (define exact time window at freeze, e.g. 14:30–15:45 ET), iron fly centered ATM, wings at [distance to freeze — recipe-private].
  • Exit: first session after the report, morning window [to freeze]. No management in between; the binary nature of the event leaves no time for adjustment, which is why the structure is defined-risk.
  • Structure: iron fly over naked strangle for tail control even pre-blowup.
  • Dedupe: one position per underlying per earnings event.
  • Friction: assume the pessimistic end for mid-cap multi-leg — [50–100bps round-trip of notional, exact value to freeze] — consistent with the lab's friction lessons.

Position sizing

  • Account base: $100,000 (small account — deliberately smaller than the $1M put-selling book). Mid-cap option chains are thin; a small base keeps achievable contract counts realistic and makes the liquidity cap, not capital, the binding constraint. (Returns are %-based, so curves stay comparable to the $1M book despite the different base.)
  • Method: empirical, tail-aware half-Kelly (0.50×). Computed from the realised per-event P/L distribution collected forward — never a Gaussian approximation, since the risk is the fat left tail. The iron fly's max loss is bounded (wing width − net credit), so Kelly is well-defined here (unlike the naked sibling [[S024]], sized at 0.25×).
  • The Kelly fraction (0.50×) is the only sizing number frozen now; the Kelly base (edge / loss-variance) is computed from the collected distribution at gate-freeze — contract counts cannot be set until the edge is measured.
  • Hard liquidity cap (binding): position ≤ [X]% of the contract's open interest / average daily option volume (both captured per event). The smaller of half-Kelly and this cap wins. If half-Kelly routinely exceeds the cap, that is itself a recorded finding — the edge does not scale on mid-caps. [X to freeze]

Notes

  • Decay tripwire (mandatory at Stage 3+, consequence of the non-gating mechanism decision): because no mechanism evidence is required for promotion, there is no theory predicting when this edge dies — so decay must be detected empirically. Before Stage 3 starts, freeze a rolling decay criterion alongside the paper-trade gate (e.g. trailing-N-event mean EV below a floor, or M consecutive events with realised > implied). Breach = automatic review with failure as the default outcome. The exact parameters are frozen with the Stage 3 gate, not chosen after drawdowns begin. This applies doubly if the cross-cap exploratory comes back flat (Wall 1 falsified): an edge with unknown persistence story may only trade under active decay monitoring.
  • Data dependency remains the real blocker for the full backtest, but the work has been resequenced: stock-side measurement (realised-move predictability, cross-cap comparison, peer-escalation) runs now; the forward-collect archive starts now; the options-history vendor decision can be made with half the evidence already in hand.
  • Forward-only alternative path: if no vendor, the Stage 1 gate gets rewritten around live Tastytrade fills + 8–12 weeks of forward evidence. That is a different gate and gets frozen as such — it does not reuse the backtest gate above.

References (for the result writeup, not for the public page)

  • Milian, J.A. (2023), "The Efficiency of Weekly Option Prices around Earnings Announcements," JRFM 16(5) — relative-value predictability of straddle returns from historical-vs-implied earnings moves.
  • Barth et al. (Stanford WP), "Risk Premiums and Non-Diversifiable Earnings Announcement Risk" — excess implied volatility higher for larger firms; the counter-evidence to Claim 2.
  • ORATS season review (Feb 2026) — realised > implied across the recent season; regime dependence of short-premium EV.
  • Convex glossary note on index-hedging suppression of mega-cap single-name implied moves — the structural wedge argument.

Disclosure boundary

This setup file is internal. Downstream result.md / kill.md writeups must follow lab/DISCLOSURE_POLICY.md §2: method public, recipe (exact strike distances, sweep ranges, sizing %s, friction $ in the chrome) wrapped in <!-- PRIVATE --> or kept in the ## For the specialist appendix. The render layer auto-gates that section for living strategies. Pre-publish: run python -m pytest tests/test_disclosure.py.

Mechaniq provides information, not investment advice. We do not execute trades. Past results are no guarantee for future performance. You are solely responsible for your trading decisions.

Lab · Methodology · Greeks Lab · About · FAQ · Glossary · Privacy · Terms · mechaniq.trade © 2026

07 Jul 2026, 07:08