BtcWeeklyCoveredCallBinancePerpDeribitCall
Hypotheses
BTC Weekly Covered Call Yield Strategy (BINANCE Perp Long + DERIBIT Call Short, Cross-Venue, Options-Premium-Capture)
Hypotheses
Weekly covered call yield-harvesting strategy on BTC: long BTC perp on BINANCE as the synthetic 'underlying' position, simultaneously short a weekly OTM call option on DERIBIT to collect option premium each week. If BTC stays below the call strike at expiry, the short call expires worthless and the full premium is captured as yield. If BTC exceeds the strike, the long perp gain is capped at strike but offset by intrinsic-value loss on the short call (net: collect time-value portion of the premium). This is the SINGLE LARGEST UNDER-REPRESENTED QUOTA in the portfolio: DERIBIT + BINANCE_OPTIONS combined sit at 0.3% vs ≥15% target — a 14.7pp gap. NO options hypothesis has been generated in factory record, so the mechanism class has ZERO precedent in failure patterns. This hypothesis SIMULTANEOUSLY fills TWO under-represented quotas: (a) options venues (DERIBIT 0.2% → ≥15% combined target), (b) cross-venue scope (4.0% → ≥15% target). The strategy is institutional-real: Ribbon Finance, Friktion, QCP Capital, and Galaxy Digital all run weekly covered-call vaults on BTC; historical yield ~10-20% annualized in normal vol regimes. Mechanism is structurally distinct from every refuted strategy in batch memory — it does NOT depend on directional prediction (cap-and-collect, not breakout/momentum), does NOT use bar-pattern recognition, and does NOT rely on cross-asset transfer (single-asset BTC options).
Hypotheses
Iteration 2 fix for the Layer-2 synthetic failure (`TypeError: super(type, obj): obj must be an instance or subtype of type`). Root cause: the Layer-2 `_StrategyProxy` transfers bound methods onto a plain `_Wrapper` instance that is NOT an instance of the strategy class, then invokes `on_extra_bar` — the only reachable method that used a zero-arg `super()`. `on_bar`/`on_start` are never called by the proxy, so their `super()` calls are unaffected; `__init__`'s `super()` runs on a real instance. The base `FactoryStrategy.on_extra_bar` is a documented no-op and extra-bar buffering is already done in `on_bar` (real engine) and by the proxy's `feed_extra_bar`, so removing `super().on_extra_bar(bar)` loses nothing while eliminating the crash. This is the smallest possible change — economic/signal logic, imports, class structure, config and the smoke/real-roll gating are all unchanged, so Layer 1 (already passing) stays green and the strategy advances to Layer 3.
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
Weekly covered-call yield harvester on BTC. Each week it SELLS a fresh ~5% OTM weekly BTC call on Deribit (rolling chain, via RollingOptionsStrategy) to collect premium, while holding a matched LONG BTCUSDT Binance perp as the covering underlying. If BTC stays below the strike, the short call expires worthless and the full premium is captured; if BTC breaches the strike, the perp upside is capped but offset by the short call's intrinsic loss (net: keep the time value). The Deribit perp is the primary/roll-clock instrument and is only traded by the Layer-3 verification smoke path (gated off whenever a real option-chain schedule exists).
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 was the factory's first options hypothesis — an institutionally-real weekly BTC covered call pairing a long Binance perp with a short OTM Deribit call to harvest premium, targeting the badly under-represented options and cross-venue quotas. In practice it never got off the ground: the backtest raised a missing-attribute error, processed no bars, and executed zero option-leg trades, degenerating to the underlying/smoke path so the option chain never traded. It was abandoned at the backtest stage under 'options_no_option_trades', never reaching backtest review, optimization, or analyst evaluation. As the first options attempt on record, its failure was a plumbing/wiring problem rather than a verdict on the covered-call edge itself.
Outcome Summary
A cross-venue options strategy must first prove its real option legs actually trade — the rolling-options chain expansion and required attributes (e.g. _min_notional) have to be wired up and exercised end-to-end, or the strategy silently collapses to its no-op smoke path and never tests the intended premium-capture edge.
Outcome Summary
Later pipeline stages (backtest review, optimization, analysis, risk review) were not reached because the backtest itself failed to produce any option trades.
Outcome Summary
It was abandoned at the backtest stage with reason 'options_no_option_trades' — the options strategy produced 0 option-leg trades and 0 underlying trades, degenerating to the smoke/underlying path so the option chain never actually traded; no backtest-review, optimization, or analyst stages were reached.
Outcome Summary
A cross-venue weekly covered-call yield strategy on BTC — holding a long BTC perp on Binance as the covering underlying while selling a fresh weekly OTM BTC call on Deribit each cycle to capture option premium — intended to fill the portfolio's largest under-represented quotas (options venues and cross-venue scope).
Outcome Summary
It produced no usable performance: the backtest errored ('BtcWeeklyCoveredCallBinancePerpDeribitCall' object has no attribute '_min_notional'), processed 0 bars and 0 trades, and returned no reliable metrics (metrics_reliable false).
Backtest and paper results are hypothetical. Trading involves risk of loss.