Skip to content

View translation

DeribitBtcWeeklyShortStrangleDeltaHedgedVolCarry

Hypotheses

Deribit BTC Weekly Short Strangle Delta-Hedged Vol Carry (DERIBIT Options + BINANCE Perp Hedge, Market-Neutral, Theta-Positive)

Hypotheses

Volatility-risk-premium harvest on DERIBIT BTC weekly options, delta-hedged with BTCUSDT.BINANCE perpetual futures. Every Friday at 09:00 UTC (the hour after Deribit weekly settlement at 08:00 UTC), open a fresh short strangle on the new weekly BTC option chain: sell 1 OTM call near the +6% strike and sell 1 OTM put near the -6% strike (both approximately 20-delta at-entry). Simultaneously open an offsetting BTC perp position on BINANCE sized to neutralize the initial portfolio delta. Hold the structure for 7 days until the options expire (or close early on profit-target / loss-stop). Re-hedge delta once per day at 09:00 UTC if portfolio delta drifts outside ±0.10. Fills FOUR genuine portfolio gaps simultaneously that none of my four prior hypotheses (EthSpotPerpFundingCarry, SolFundingExtremeCounter, BtcSharpMoveVolumeReversal, EthBtcRatioPairs) addressed: (1) DERIBIT options venue (currently 0.2% — only 2 of 939 experiments); (2) cross-venue scope using DERIBIT + BINANCE for the hedge (currently 3.4% vs ≥15% target); (3) options mechanism class (effectively zero in current portfolio); (4) the `deribit_greeks_IV` supplementary data stream (entirely untouched across all 939 experiments). Mechanism is structurally orthogonal to every prior hypothesis: this is a volatility-risk-premium harvest, not a directional, mean-reversion, or funding-rate trade. ~50 weekly cycles per year × 4 years of usable Deribit weekly options data (Deribit weeklies have existed since 2019) ≈ 200 trade cycles, well above the 100-trade walk-forward floor that killed ADA daily.

Hypotheses

Implements the hypothesis's short-VRP harvest verbatim: sequence of weekly short strangles (not one fixed contract) via the rolling_options spec, delta-neutralized by a Binance perp (cross-venue DERIBIT+BINANCE scope), consuming the deribit_dvol supplementary stream for the hedge delta. The strategy itself is unchanged from iteration 1 — it passed all four verification layers and produced 416 genuine option trades with the correct negative-skew/fat-kurtosis short-vol PnL signature (PF 2.53, sharpe_ci_low 2.49). Iteration-1's blocker was NOT the strategy but a harness bug: the post-optimization re-backtest (pipeline_processor._run_optimized_backtest) never re-ran the option-chain expansion, so it un-subscribed every option leg (extra_instruments held only the perp hedge) and traded nothing. That has been fixed at the engineering layer by extracting the expansion into a shared expand_rolling_options_into_config() and invoking it from the re-backtest path (guarded to be a no-op for non-options strategies), so the initial backtest, optimization walk-forward, and post-opt re-backtest now all expand the chain identically and the option legs stay subscribed with their bar data loaded into the engine.

Hypotheses

optimization_error: RuntimeError: Subprocess optimization exited with code -15: Traceback (most recent call last): File "/opt/strategy-factory/src/agents/backtest_agent.py", line 347, in _run_optimization opt_result = await run_optimization_in_subprocess( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/backtesting/subprocess_runner.py", line 391, in run_optimization_in_subprocess raise last_error File "/opt/strategy-factory/src/backtesting/subprocess_runner.py", line 368, in run_optimization_in_subprocess result = await _run_subprocess(input_config, timeout, label="optimization", ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/backtesting/subprocess_runner.py", line 78, in _run_subprocess return await _run_subprocess_impl(input_config, timeout, label, max_stale_seconds) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/backtesting/subprocess_runner.py", line 228, in _run_subprocess_impl raise RuntimeError( RuntimeError: Subprocess optimization exited with code -15:

Implementation

Market-neutral volatility-risk-premium carry: every weekly Deribit BTC cycle, sell an OTM ~6%-strike call + ~6%-strike put (short strangle, theta-positive), delta-hedged with a BTCUSDT.BINANCE perp re-balanced at most once per 24h whenever net option delta drifts beyond ±0.10. Extends RollingOptionsStrategy: the backtest expander resolves the historical weekly option chain into concrete legs + a roll schedule; the strategy enters/rolls each period, early-closes on a 50%-of-premium profit target or 2x-premium loss stop, and maintains the perp hedge using a Black-Scholes delta driven by the Deribit DVOL implied-vol series.

Backtest Review

Real options path executed: 412 genuine Deribit weekly option legs (206C/206P), avg DTE 6.94, avg IV 0.51, with coherent greeks (net_entry_theta +3255, net_entry_vega -881, net_entry_delta -0.40) — trades implement the short-strangle-delta-hedged hypothesis, not the verification smoke trade.

Backtest Review

Large, statistically meaningful sample over ~4 years (well above the walk-forward trade floor); strong and temporally-consistent base metrics (Sharpe 5.26, PF 2.47, win 84%, positive in 4 of 5 years).

Backtest Review

Genuinely novel and orthogonal: fills the untouched DERIBIT options venue, cross-venue hedge, options mechanism class, and deribit_greeks/DVOL data stream — diversifying vs the trend/momentum book.

Backtest Review

Payoff shape is honest short-vol (neg skew -4.1, kurtosis 30.6, rare large losses) rather than an obviously monotonic fabricated curve; real tail losses are present and survived.

Backtest Review

Near-zero commissions on 412 option trades (total_commission 0.0002, commission_pct_of_gross 0.0) — if Deribit option fees + realistic OTM bid/ask spreads are not being charged, the VRP edge is overstated. Engine/fee-realism issue to verify post-opt, not a code defect.

Backtest Review

Sharpe 5.26 / PSR 0.997 is in suspected-artifact territory; the smooth-with-rare-crash profile means forward results can be dominated by a single untested tail move (e.g. the -38% day 2024-11-14). Must be judged on DSR + CVaR + holdout after optimization, not headline Sharpe.

Backtest Review

Some metric fields inconsistent under sparse hedge/roll-day sampling (Sharpe vs annualized_vol 0.74 / CAGR 0.84) — sampling artifact to keep in mind when reading optimization outputs.

Analysis

Genuine, plausibly-priced short-VRP edge in the initial backtest — NOT an artifact: max_drawdown 38.5% (realistic for short gamma), profit_factor 2.53, win_rate 83%, recovery_factor 9.1.

Analysis

Risk profile matches the mechanism: return_skew -3.95, kurtosis 29, tail_ratio ~1.07 (classic pick-up-pennies short-vol signature); the -37% (2024-11-15) and -23% (2026-06-05) days are real short-call-gamma losses, not pricing blowups.

Analysis

Statistically non-trivial full-sample result: sharpe_ci_low 2.49 (bootstrap lower bound solidly positive, does not straddle 0), probabilistic_sharpe 0.998.

Analysis

416 real option trades (208 calls + 208 puts) with correct entry greeks: net_entry_vega -885 (short vol), net_entry_theta +3284, delta ~-0.43 after the Binance perp hedge; avg_dte ~6.9 (weekly), avg_moneyness ~1.00.

Analysis

Fills genuinely under-represented portfolio buckets (Deribit options + cross-venue Deribit/Binance hedge), orthogonal vega sign vs existing strategies; sensitivity is clean (1 cliff, on the hedge_band re-hedge trigger).

Analysis

ZERO out-of-sample validation: walk_forward.n_trials=0, is_overfitted=TRUE, in_sample_sharpes=[0,0,0], out_of_sample_sharpes=[0,0,0].

Analysis

Holdout 'passed=true' is a divide-by-zero artifact (ratio=0 against a 0.0 WF-OOS reference; holdout_sharpe 7.64 is meaningless).

Analysis

Optimized re-run produced total_trades=0, metrics_reliable=false, with extra_instruments=['BTCUSDT.BINANCE'] only — the option legs were dropped, so nothing traded.

Analysis

deflated_sharpe is null (not computable because the optimizer never ran) — the multiple-testing gate cannot be cleared yet.

Analysis

In-sample Sharpe 5.46 is high and should be discounted for options fill optimism and delta-hedge slippage in live execution.

Analysis

At iteration limit (attempt 2 of 2) — though both attempts were consumed by the harness never running, not by genuine failed optimization.

Analysis

degenerate, not a real pass

Analysis

ratio 0 (divide-by-zero)

Analysis

plausible for short gamma

Analysis

in-sample only; discount for options fill optimism

Analysis

not computable — optimizer ran 0 trials

Analysis

degenerate: option chain not re-expanded in optimization

Analysis

all-positive

Analysis

harness dropped option legs from extra_instruments

Analysis

Do NOT abandon — this is the strongest Deribit-options candidate of the session and its initial backtest is a genuine short-VRP edge, not an artifact (38.5% DD, PF 2.53, negative skew/fat kurtosis short-vol signature, sharpe_ci_low 2.49, 416 real trades, correct short-vol greeks). The blocker is an OPTIMIZATION-HARNESS failure, not the strategy or its premise: the option-chain expansion (backtest_agent._maybe_expand_rolling_options) ran for the initial backtest (416 trades) but did NOT re-run in the optimization/walk-forward/holdout phases, so n_trials=0, in_sample/out_of_sample_sharpes=[0,0,0], the holdout 'pass' is a divide-by-zero (ratio=0 vs a 0.0 WF-OOS reference), and the optimized re-run produced 0 trades with extra_instruments=['BTCUSDT.BINANCE'] only — the resolved option legs were dropped from extra_instruments/extra_bar_types even though option_chain_schedule remained in params. With the option instruments un-subscribed, _extra_bars is empty for them and every entry gate returns False. This is the SAME systemic harness bug seen on the three other Deribit rolling-options strategies this session and is NOT fixable from strategy parameters. REQUIRED ACTION (engineering / Research Lead, not the Developer alone): preserve option_chain_schedule AND the resolved option extra_instruments/extra_bar_types into every optimizer trial and the holdout run (the Binance hedge leg is already preserved; the option legs are not), then re-run the 3-phase optimization so a genuine IS/OOS walk-forward + non-degenerate holdout + deflated Sharpe can be computed. Do not interpret the all-zero walk-forward / degenerate holdout as overfitting evidence — the optimizer simply never traded. After the fix, apply the normal promotion gate (consistent positive WF-OOS, holdout >=70% of WF-OOS, DSR>=0.95) and discount the 5.46 in-sample Sharpe for options fill optimism and hedge slippage. Detailed write-up saved to workspace/discussions/119b512f-eb97-4500-844a-4c5d87e64d1f/iteration_1_feedback.md.

Outcome Summary

This Deribit BTC weekly short-strangle strategy was designed to fill four untouched portfolio gaps at once — the Deribit options venue, a cross-venue Deribit/Binance hedge, the options mechanism class, and the DVOL/greeks data stream — via a market-neutral volatility-risk-premium carry. Its initial backtest was strong and credible: 412 real weekly option legs over four years with honest short-gamma risk (Sharpe 5.26, PF 2.47, 84% win rate, 38.5% drawdown, skew -4.1), earning an 'optimize' verdict at backtest review. But the optimization harness never actually ran the option strategy — walk-forward executed 0 trials, the holdout 'pass' was a divide-by-zero, and the optimized re-run dropped the option legs to trade nothing — so the analyst could only vote 'iterate' with zero out-of-sample validation. On the final attempt the optimization subprocess crashed outright (exit code -15), and with both iterations exhausted by harness failures rather than a real performance verdict, the strategy was abandoned before its edge could ever be validated forward.

Outcome Summary

The rolling-options expansion must be preserved through the optimization path — if the walk-forward/optimizer can't re-inject the Deribit chain into extra_instruments, a genuinely promising short-VRP edge dies on infrastructure failure rather than on its merits.

Outcome Summary

It was abandoned at the OPTIMIZING stage on the final iteration (attempt 2 of 2) due to an optimization_error — the optimization subprocess exited with code -15 (RuntimeError in run_optimization_in_subprocess); both attempts were consumed by the harness failing to re-expand the option chain and run, so the multiple-testing gate (deflated Sharpe) could never be evaluated.

Outcome Summary

A market-neutral volatility-risk-premium harvest that sold weekly ~20-delta OTM strangles (call near +6%, put near -6%) on Deribit BTC options and delta-hedged with a BINANCE BTC perp, rolling every Friday after settlement to collect theta while neutralizing directional exposure.

Outcome Summary

The initial backtest traded 412 real Deribit weekly option legs (206 calls / 206 puts, avg DTE 6.94, avg IV 0.51) over ~4 years with coherent short-vol greeks (net theta +3255, net vega -881), posting Sharpe 5.26, profit factor 2.47, 84% win rate and 38.5% max drawdown with the classic negative-skew (-4.1) short-gamma tail profile. However, the optimization stage never validated it: walk-forward ran 0 trials (is_overfitted=TRUE, IS/OOS Sharpes all 0), the holdout 'pass' was a divide-by-zero artifact, and the optimized re-run dropped the option legs and produced 0 trades.

Abandon Reason

optimization_error: RuntimeError: Subprocess optimization exited with code -15: Traceback (most recent call last): File "/opt/strategy-factory/src/agents/backtest_agent.py", line 347, in _run_optimization opt_result = await run_optimization_in_subprocess( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/backtesting/subprocess_runner.py", line 391, in run_optimization_in_subprocess raise last_error File "/opt/strategy-factory/src/backtesting/subprocess_runner.py", line 368, in run_optimization_in_subprocess result = await _run_subprocess(input_config, timeout, label="optimization", ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/backtesting/subprocess_runner.py", line 78, in _run_subprocess return await _run_subprocess_impl(input_config, timeout, label, max_stale_seconds) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/backtesting/subprocess_runner.py", line 228, in _run_subprocess_impl raise RuntimeError( RuntimeError: Subprocess optimization exited with code -15:
Strategy report

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