Skip to content

View translation

BtcSpotDeribitWeeklyCoveredCallVolPremium

Hypotheses

BTC Spot + Deribit Weekly OTM Covered Call Overlay (Vol Premium Harvest)

Hypotheses

Cross-venue hedged strategy that holds spot BTC on Binance Spot while systematically writing weekly out-of-the-money calls on Deribit. The mechanism captures the well-documented crypto IV premium (BTC option implied vol consistently 20-40% above realized vol per Carr-Wu 2009-style decomposition and updated 2022-2024 crypto evidence) as recurring cash flow yield layered on a long-BTC position. Each week the strategy holds 1 BTC long spot + 1 BTC short ~0.20-delta call, lets the call cash-settle on Deribit at Friday 08:00 UTC expiry, then re-writes the next weekly. Hedged because the long spot covers the short call's upside obligation 1-for-1 (synthetically equivalent to a short put). Fills two large portfolio gaps simultaneously: options coverage (0% vs 15% quota target) and cross-venue (6.3% vs 15% target). Avoids every recent failure cluster: no supplementary-data dependency (no OI/funding/taker_ratio), no pattern recognition on 4H bars, no ratio mean reversion, no cointegration assumption, no late-entry volatility chase, and no cross-sectional accounting complexity.

Hypotheses

Iteration 2 fix (Layer 2 synthetic). The error 'super(type, obj): obj must be an instance or subtype of type' comes from the Layer 2 _StrategyProxy, which rebinds the strategy's methods onto a plain wrapper that is not a subtype of the class and then calls on_extra_bar (via feed_extra_bar, before the primary bar). The zero-arg super().on_extra_bar(bar) then fails the instance check. Since on_extra_bar is not overridden anywhere in the RollingOptionsStrategy->FactoryStrategy chain (the base is a no-op, and extra-bar buffering happens in on_bar), that super() call was functionally dead, so I simply removed it — on_extra_bar now only records the spot price. All other super() calls (on_bar, on_start) are untouched: the proxy never invokes them, and in the real engine self is a genuine instance so they resolve correctly. No imports, the rolling-options roll logic, the cover-maintenance sizing, or the smoke path were changed, preserving every earlier passing layer. The strategy still implements the hypothesis exactly: long spot covering a rolled weekly short OTM Deribit call to harvest the crypto IV premium.

Hypotheses

options_no_option_trades: options strategy produced 0 option-leg trades (0 underlying trades) — degenerated to the underlying / smoke path; the option chain never traded

Implementation

Cross-venue covered-call vol-premium harvest: holds long BTC spot on Binance Spot while systematically writing weekly ~0.20-delta OTM BTC calls on Deribit. Each week the base RollingOptionsStrategy sells and rolls the front-week OTM call per the auto-resolved Deribit weekly chain; the overlay maintains a long spot position matched to the open call's contracts so the upside obligation is covered 1-for-1 (synthetically a short put). PnL is the recurring IV-over-RV premium collected on the short call, layered on the long-BTC carry. A gated smoke path trades only when no real option schedule exists (verification plumbing); the analyzed backtest always trades real option legs.

Verification Results

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['contracts', 'leg_sides', 'risk_frac', 'cover_frac', 'call_offset', 'min_notional', 'smoke_risk_pct', 'rolling_options', 'smoke_hold_bars', 'cover_instrument', 'roll_buffer_hours', 'smoke_warmup_bars', 'cover_qty_precision'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: super(type, obj): obj must be an instance or subtype of type (bar timestamp: 1735689600000) - steady_downtrend: TypeError: super(type, obj): obj must be an instance or subtype of type (bar timestamp: 1735689600000) - flat_ranging: TypeError: super(type, obj): obj must be an instance or subtype of type (bar timestamp: 1735689600000) - volatility_spike: TypeError: super(type, obj): obj must be an instance or subtype of type (bar timestamp: 1735689600000) - zero_volume: TypeError: super(type, obj): obj must be an instance or subtype of type (bar timestamp: 1735689600000) - price_gap: TypeError: super(type, obj): obj must be an instance or subtype of type (bar timestamp: 1735689600000)

Outcome Summary

This cross-venue strategy aimed to capture the documented BTC implied-vs-realized vol premium by writing weekly OTM Deribit calls covered by a matched long Binance spot position. Across 2 iterations the backtest failed to come alive: zero bars were processed, no option legs traded, and a runtime error ('_min_notional' missing) left all metrics at zero and unreliable. With the option chain never trading, the run collapsed to the underlying/smoke path and was abandoned under 'options_no_option_trades' before reaching backtest review, optimization, or analyst stages. The decisive takeaway is that the option-chain expansion and leg execution must be proven to work before the strategy's vol-premium thesis can ever be tested.

Outcome Summary

An options-overlay strategy must verify that the historical Deribit weekly chain actually expands and trades real legs (and that base attributes like _min_notional are initialized) before any vol-premium edge can be measured.

Outcome Summary

Abandoned for 'options_no_option_trades' — the option chain never traded and the strategy degenerated to the underlying/smoke path, so no real covered-call legs were executed; it never reached backtest-review, optimization, or analyst evaluation.

Outcome Summary

Harvest the persistent crypto implied-vol premium by holding long BTC spot on Binance Spot while systematically writing weekly ~0.20-delta OTM calls on Deribit, with the spot leg covering the short call 1-for-1.

Outcome Summary

It never produced a tradeable backtest: 0 total trades, 0 option-leg trades, 0 bars processed, 0% total return and 0.0 Sharpe, with metrics flagged unreliable and a runtime error (missing '_min_notional' attribute).
Strategy report

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