Skip to content

View translation

DeribitBtcWeeklyIronCondorVrpHarvest

Hypotheses

Deribit BTC Weekly Iron-Condor Variance-Risk-Premium Harvest (Defined-Risk Short Strangle, IV-Rich Filter, Held to Expiry)

Hypotheses

A DEFINED-RISK, market-neutral SHORT-VOLATILITY structure on DERIBIT BTC options — the single most under-represented bucket in the portfolio (options combined = 4.9% vs 15% quota; BINANCE_OPTIONS at literally 1 experiment). This deliberately avoids every graveyard in the failure log: it is NOT a single-instrument price-move gated by a non-price feed (L46), NOT cross-sectional momentum (300x overfit), NOT a long-only structural basket that inherits full bear beta (L48), NOT a funding-carry/fee-edge play. Instead it harvests the crypto Variance Risk Premium (VRP): Deribit BTC implied vol has structurally and persistently traded above subsequent realized vol by a wide margin (typically 5–15 annualized vol points), one of the most documented and durable edges in crypto derivatives. Each week we sell a ~0.15-delta strangle (one OTM put + one OTM call) and buy ~0.05-delta wings further out, forming an IRON CONDOR — max loss is hard-capped by the long wings, which directly answers the risk_reject/drawdown failures of naked short-vol and the 52–74% DD basket blowups. We only put on the trade when IV is rich relative to trailing realized vol (VRP filter), so we skip weeks where the premium does not compensate. Low turnover (~1 structure/week, held to expiry) means fee drag is trivial against ~0.06% RT option fees.

Hypotheses

ITERATION 3 — FIXES THE 300s TIMEOUT, MECHANISM UNTOUCHED. I checked the reported cause before acting on it, and the feedback's usual suspect does not apply here: DVOL is already parsed once into sorted numpy arrays and read with a single searchsorted (O(log n)), realized vol is one numpy call over a trimmed buffer, and no supplementary series is rescanned per bar. For a rolling-options strategy the wall clock is set by the CHAIN SPEC, not the signal code: at 1-HOUR legs over 365 lookback days the sandbox resolves ~52 weekly expiries x 4 legs = ~208 option instruments, loads every one of their hourly bar series, and runs 8,760 primary bars — and RollingOptionsStrategy.on_bar re-scans every period x leg on every bar (~1.8M iterations) on top of the engine's per-instrument setup. THREE CHANGES, ALL SIZING. (1) Roll clock and option legs move from 1-HOUR to 4-HOUR — a weekly structure entered 7 days before expiry does not need hourly roll precision, and this cuts total bars ~4x. I verified 4-HOUR is actually supported for Deribit legs before choosing it (on_demand._RES_MAP maps '4-HOUR' to Deribit resolution '60' with factor 4, and the module docstring's own example is a Deribit 4-HOUR option bar type), so this cannot silently produce empty legs. roll_buffer_hours goes 2 -> 6 so the closing order still lands on a bar that exists at 4-hour spacing. (2) lookback_days 365 -> 180, halving resolved contracts to ~104. (3) Finished weeks are dropped from the base's scan list once their expiry passes, so the per-bar leg scan is proportional to the active week rather than the whole schedule. ONE CORRECTNESS CONSEQUENCE I HAD TO FIX WITH THEM: realized vol was annualized with a hard-coded 1-hour constant. On 4-HOUR bars that would overstate RV by 2x, pushing the IV/RV ratio below 1.05 almost every week and silently turning the strategy into one that never trades — a far worse outcome than the timeout. Annualization is now derived from the bar type's actual interval via _bar_interval_ns, and rv_lookback_bars is 180 (still exactly 30 calendar days). NO REGRESSION OF EARLIER LAYERS: imports are unchanged (nothing banned added), the class still declares all four inert hooks that fixed Layer 1 at iteration 2, and the leg classification, defined-risk wing enforcement, DVOL parsing and VRP gate are byte-for-byte unchanged. The underlying perp is still never traded — there is no smoke path. WHAT THIS COSTS, DISCLOSED. The evaluable span drops to 180 days, about 26 weekly structures, of which my earlier event study says roughly two thirds pass the IV-rich gate — so expect ~17 trades. That clears the sandbox's >=1 option-trade requirement and the analyst's >=5 trades / >=10 days floor, but it is a thin sample for a walk-forward, and the Research Lead should know the horizon was shortened for run-time reasons, not for edge reasons. If this clears Layer 3 with time to spare, lookback_days is the first thing to widen back toward 365. The VRP premise itself is unchanged and remains well supported: +8.21 vol points of DVOL over subsequent 7-day realized vol across 279 weekly cycles (t = +7.81, positive in 78% of weeks).

Hypotheses

Suspected backtest artifact — not a tradeable result. A DEFINED-RISK iron condor on 1-BTC notional has max loss ≈ the 5% wing width (~$3-4k) and max gain ≈ the credit (a few hundred $), yet this reports largest_win $37,977,975, avg_win $1.81M, total_return +37,972x (CAGR 540,000,000%), avg_trade_return_pct +256.9% and profit_factor 1923 — all structurally impossible for the capped-risk structure. The entire result is a single artifact trade: the 2026-05-15 daily return of +38,088x. This is an option mispricing/settlement mismark (a stale/illiquid deep-OTM leg marked at an absurd price, or an exercise/settlement artifact), the textbook 'implausibly good metrics are a red flag, not a win' case; a genuine net-short-vol book (net vega -334, theta +2115, IV 0.53) would show negative-skew small-win/large-loss, the opposite of the +2.85 skew here. Independent of the artifact, the strategy is structurally unmeasurable: the option legs only exist from 2026-02-19 onward (data_days 141, annual_returns only {2026}), so despite the 8-year perp clock the effective option history is ~4.6 months in a single regime with 44 trades — the last-20% holdout and walk-forward OOS windows would be near-empty, and Sharpe 1.61 has CI [-2.32, 2.83] straddling zero. This is the L67 defined-risk Deribit VRP family (negative per-notional edge) crossed with the recurring under-tested short-vol tail on ~one-regime option data (the crash the condor exists to bear is not sampled). No optimization can run on a PnL dominated by a 38,000x mismark; recommend manual/factory-gate review of the options settlement/marking path. Failure pattern: suspected backtest artifact + structurally limited single-regime option history.

Implementation

Weekly defined-risk iron condor on Deribit BTC options, harvesting the variance risk premium. Each week the chain resolver supplies four legs at the front-week expiry (7 DTE) on 4-HOUR bars: ~5% OTM call and put are SOLD, ~10% OTM call and put are BOUGHT as wings, so maximum loss is capped by the 5% wing width. The structure is established only when implied vol is rich versus realized: DVOL (Deribit's 30-day implied-vol index) divided by the underlying's own trailing 30-day annualized realized vol must be >= 1.05, otherwise the week is skipped entirely. Positions are held until 6 hours before expiry, then closed. Leg roles (short vs wing) are derived from strike order within each expiry, and a side is traded ONLY if both of its legs resolved — an unpaired short is dropped rather than sold naked, so risk stays defined even when the resolver cannot find a far wing. One contract per leg. Three tunable parameters: vrp_ratio_min, rv_lookback_bars, roll_buffer_hours.

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

Defined-risk construction and VRP filter are conceptually sound; wings validated in code so no naked short leg

Backtest Review

Fills the most under-represented (options) bucket

Backtest Review

Suspected backtest artifact: largest_win $37.98M and a +38,088x single-day return (2026-05-15) are impossible for a capped-risk 1-BTC iron condor — an option mispricing/settlement mismark drives the entire +37,972x total_return and +256.9% avg_trade_return_pct

Backtest Review

Net short-vol book (vega -334) should show negative-skew small-win/large-loss; instead skew +2.85, PF 1923 — inconsistent with reality

Backtest Review

Option legs exist only from 2026-02 onward: ~4.6 months, single regime, 44 trades — structurally unmeasurable; Sharpe CI [-2.32, 2.83] straddles zero

Backtest Review

L67 defined-risk Deribit VRP family (negative per-notional edge) + under-tested short-vol tail on one-regime 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): smoke test exceeded the 300s wall-clock limit. This almost always means per-bar work that scales with history — e.g. rescanning the full funding/supplementary series, or rebuilding a list and calling min()/sorted() inside calculate_signal()/on_bar() on every bar. Precompute sorted timestamp arrays ONCE in __init__ and use bisect, or cache lookups keyed by timestamp, so per-bar cost is O(log n) not O(n).
Strategy report

Backtest and paper results are hypothetical. Trading involves risk of loss.