EthDeribitWeeklyShortIronCondorVrpGated
Hypotheses
ETH Deribit Weekly Delta-Neutral Short Iron Condor — Variance Risk Premium Harvest with IV-RV Gate (Defined-Risk, 3-Parameter, Market-Neutral)
Hypotheses
A DELTA-NEUTRAL, DEFINED-RISK options-selling strategy on ETH Deribit weekly expiries that harvests the variance risk premium (VRP) — the structural tendency of crypto implied volatility to exceed subsequently-realized volatility because option buyers persistently overpay for convexity/hedging. Each Friday at the weekly expiry roll, IF the VRP gate is open (current ATM implied vol exceeds trailing 7-day realized vol by >= vrp_threshold AND IV is above its 30-day median, i.e. only sell vol when it is both rich in absolute and relative terms), open a SHORT IRON CONDOR on the next weekly ETH expiry: sell a short_delta-delta put and a short_delta-delta call (e.g. ~15-delta each, roughly +/-1 weekly sigma OTM), and BUY further-OTM wings (wing_width strikes beyond each short leg) to cap tail risk. Net position is delta-neutral at inception, short gamma/vega, long theta. Max loss is hard-bounded by the wings (no naked tail). This is fundamentally different from the BTC put-write already in pipeline: it is two-sided market-neutral (not directional/put-only), defined-risk (not synthetic-spot), on ETH (not BTC), and explicitly gated on the IV-RV spread rather than a price trend filter. Only ONE condor open at a time; if the gate is closed, sit in cash that week. Targets 25-40 positions/year (one per eligible weekly roll), avg net credit collected ~0.8-1.5% of max-loss-defined notional per cycle, comfortably above the ~0.06% Deribit RT cost.
Hypotheses
Iteration 4 fix. Layer 3 reported 'No trades produced' with the misleading diagnostic 'should_enter() returned a side 0 times over 0 evaluated bars'. That counter is structurally always 0 for any RollingOptionsStrategy, because the base fully overrides on_bar() and never calls _maybe_process_primary() — so the entry logic was never the problem. Reading logs/factory.log for the failing run (e493eb94, 19:06:30) showed 81,263 ETH-PERPETUAL bars resolved but NO 'Expanded rolling options' line, and pipeline_processor.py only expands the chain when parameters['rolling_options'] is truthy. The previous config omitted that key, so option_chain_schedule was empty, RollingOptionsStrategy built ZERO periods, the roll loop iterated over nothing, and _enter_leg was never invoked. ROOT CAUSE = missing config spec, not the signal. The fix adds the rolling_options spec (ETH, weekly, dte_target 7, 1-HOUR, four legs at +-5% short / +-10% wings — all inside the ~10% liquid moneyness band so the chain probe finds candles) plus leg_sides, roll_buffer_hours, contracts and risk_frac. Code changes are deliberately minimal so Layers 1 and 2 stay green: no imports touched, no signal scaffolding touched. The one substantive code edit enforces the hypothesis's defined-risk invariant — _build_leg_sides now requires >=2 strikes of a kind before marking one SELL, and _enter_leg refuses any unmapped leg instead of falling back to the base's kind-keyed SELL default, which would have opened a NAKED short whenever a wing failed to resolve. The strategy still has no underlying smoke-path fallback: if the chain is genuinely unavailable it trades nothing rather than fabricating a delta-1 backtest.
Hypotheses
Defined-risk Deribit VRP structure with a negative per-notional edge on a structurally single-regime option sample — not worth 2 hours of optimization. avg_trade_return_pct is -0.0999% (per-trade return measured against the wing-defined max-loss notional is NEGATIVE) and profit_factor is only 1.077; the positive USD expectancy (+$9.1/trade) is a scale artifact, not edge. This is the L67 defined-risk Deribit condor/VRP family (positive-ish Sharpe/PF but negative avg_trade_return_pct) already abandoned repeatedly. It is also statistically empty: realized Sharpe 0.68 with bootstrap CI [-1.22, 2.89] straddling zero and PSR 0.59. And it is unmeasurable across regimes: despite the 8-year ETH-PERP clock, the Deribit weekly option legs only exist from ~2025-08, so the effective backtest is ~1 year (Sept 2025–Sept 2026, one vol regime), effective_daily_obs 48, 48 weekly rolls — the walk-forward OOS and 20% holdout would each contain a handful of rolls in a single regime, and the crash the condor exists to survive is barely sampled. The build is clean (delta-neutral, hard-capped wings, no artifact blowup) and benchmark_meaningful is correctly false, but a negative per-notional edge, PF 1.08, Sharpe CI straddling zero, on one regime of option data is not an optimizable candidate; the always-on VRP gate (vrp_threshold 0.0) gives little to tune and no parameter buys the missing multi-year option history. Failure pattern: no_edge/fee_edge defined-risk Deribit VRP (L67) + structurally single-regime option history.
Implementation
Delta-neutral, defined-risk weekly short iron condor on ETH Deribit weekly expiries, gated on the variance risk premium. Each Friday roll (entry at 7 DTE, close 24h before expiry) the strategy sells a 5%-OTM put and a 5%-OTM call and buys 10%-OTM wings of each kind, capping max loss at the wing width. Entry is filtered by a VRP gate: Deribit DVOL (ATM implied vol) must exceed trailing 7-day realized vol by vrp_threshold, optionally also sitting at/above its 30-day median. Gate closed -> sit in cash that week. One condor at a time; sized via risk_frac of equity. No naked short is ever opened: a leg kind whose wing fails to resolve in the chain is dropped entirely.
Verification Results
CLEAN RESTART 2026-09-04 — this run's verdict history and learning records were removed and it was restarted from verification. Its previous abandonment came from the pipeline, not from the market: the Layer-2 harness mis-bound @staticmethod helpers (fixed), QA issued terminal performance verdicts on an unoptimized smoke test (removed — QA now judges correctness only), and sandbox timeouts came from backtest-slot starvation (fixed). The hypothesis and the strategy code are unchanged. Verify the code on its merits; performance is decided later by the full backtest and the optimizer.
Backtest Review
Clean defined-risk construction: delta-neutral at inception (net delta -9.6), short vega -291, long theta +1099, hard-capped wings, no naked-tail or settlement-mark artifact; low drawdown 4.1%
Backtest Review
Negative per-notional edge: avg_trade_return_pct -0.0999%, profit_factor 1.077 — the L67 defined-risk Deribit VRP signature (positive USD expectancy but negative per-max-loss-notional return)
Backtest Review
No significance: realized Sharpe 0.68 with bootstrap CI [-1.22, 2.89] straddling zero, PSR 0.59, information_ratio null
Backtest Review
Structurally single-regime: Deribit weekly option legs only exist from ~2025-08, so the effective test is ~1 year (Sept 2025–Sept 2026), effective_daily_obs 48, 48 weekly rolls — walk-forward OOS and holdout would each hold a handful of rolls in one vol regime; the tail event the condor bears is barely sampled
Backtest Review
VRP gate effectively always-on (vrp_threshold 0.0) — little to tune, and no parameter buys the missing multi-year option history
Iteration History
Verification failed (Layer 1 — static analysis):
- Required method not implemented: should_enter (line None)
- Required method not implemented: should_exit (line None)
- Required method not implemented: position_size (line None)
- Required method not implemented: calculate_signal (line None)
Iteration History
Verification failed (Layer 3 — sandbox backtest): No trades produced
Bar type used: ETH-PERPETUAL.DERIBIT-1-HOUR-LAST-EXTERNAL, Bars processed: 63501
Diagnostics: should_enter() returned a side 0 times over 0 evaluated bars -> your ENTRY CONDITION never triggered. Loosen the entry logic / thresholds.
Ensure your strategy produces trades with the given data and parameters.
Backtest and paper results are hypothetical. Trading involves risk of loss.