Skip to content
All strategies

Strategies

ETH Variance-Risk-Premium Regime Long on the Binance USD-M Perp: Hold ETHUSDT.BINANCE While Deribit ETH DVOL Minus 7-Day Realized Vol Is in the Top 30% of Its Trailing 90 Days, Exit When It Falls Below the Median, One Decision per Day at 00:00 UTC, Flat ~60% of the Time (1H bars + deribit_dvol, long-only, 2 thresholds)

Outcome: Abandoned

EthDvolVrpRegimeLong

Outcome Summary

EthDvolVrpRegimeLong re-routed a never-measured ETH variance-risk-premium regime long from Deribit's perp to the Binance USD-M perp. It went long when implied minus realized vol ranked in the top 30% of its trailing 90 days. The point-in-time backtest gave 64 trades at Sharpe 0.22 and PF 1.15, far below the pre-study's Sharpe 0.78, but it cleared the cost floor and passed backtest review to optimization. Optimization showed no out-of-sample edge (OOS Sharpe -0.009, PBO 0.63, holdout Sharpe -0.74 on 3 trades), so after 2 iterations the analyst abandoned it as overfit, and it flagged a possible engine marking artifact for separate review.

Hypothesis

Re-routing of a hypothesis that was never measured. The earlier 'ETH VRP Regime Long on Deribit's Own Linear Perp' (ETH_USDC-PERPETUAL.DERIBIT) died with options_no_option_trades: the pipeline treated the DERIBIT venue as an options strategy and aborted because no option leg traded. It produced no edge verdict. This version keeps the mechanism and trades the most liquid ETH linear perp, ETHUSDT.BINANCE (USD-M, 0.05% taker). The signal is the supplementary key `deribit_dvol`, which supp_collector loads by base……Show moreShow less

Re-routing of a hypothesis that was never measured. The earlier 'ETH VRP Regime Long on Deribit's Own Linear Perp' (ETH_USDC-PERPETUAL.DERIBIT) died with options_no_option_trades: the pipeline treated the DERIBIT venue as an options strategy and aborted because no option leg traded. It produced no edge verdict. This version keeps the mechanism and trades the most liquid ETH linear perp, ETHUSDT.BINANCE (USD-M, 0.05% taker). The signal is the supplementary key `deribit_dvol`, which supp_collector loads by base currency for any ETH primary (loaders['deribit_dvol'] -> load_deribit_dvol(dir, deribit_underlying_currency(base))). This is not signal-on-A / trade-B (L143): DVOL is the options-implied 30-day vol of the same ETH price that the perp tracks. Mechanism (instrument stripped): hold the underlying long when option buyers pay an unusually large premium of implied over realized volatility, and go flat when that premium compresses. How this differs from the abandoned DVOL runs: 'BTC IV-regime trend' used the IV level as a gate on a trend signal, and 'BTC IV extreme reversal' faded IV spikes, long-short. Here the input is the IV-minus-RV spread, there is no price-trend component and there is no short side. In the pre-study the short side had PF 0.88-1.02 on ETH and 0.51-0.60 on BTC, so it is excluded. POINT-IN-TIME PRE-STUDY (2026-09-29, catalog ETHUSDT.BINANCE 1H plus dvol_ETH.parquet stamped at hour-close, 0.05%/side cost, 1x): daily decision at 00:00 UTC, VRP = DVOL - annualized 168h RV, p = the fraction of the prior 90 daily VRP values below today's. - Enter at p>=0.70, exit at p<0.50 (the proposed rule): 65 trades from 2021-06 to 2026-09, in market 40%, calendar Sharpe 0.78, PF 2.0, avg trade +2.74%, median hold 8 days. Yearly sums: 2021 +0.69, 2022 -0.05, 2023 +0.54, 2024 +0.18, 2025 +0.16, 2026 +0.24. Max DD 41.9% at 1x. ETH buy-and-hold Sharpe over the same span is 0.30. - Neighbouring thresholds and windows give the same result. The 180d window gives Sharpe 0.79 and the 365d window 0.74. 0.6/0.4 on the 365d window gives 0.85. 0.8/0.5 on the 90d window with an 8h decision gives 0.99. Every variant has PF 1.9-2.4. - Decomposition controls on the same rule: low-RV alone gives Sharpe 0.16 and high-IV alone gives 0.50. The spread beats both of its parts. - BTC cross-check (not proposed): Sharpe 0.66 on the 180d window and 0.92 on the 365d window. Honest caveats: the Sharpe of 0.78 is below L166's 1.0 pre-study bar, and there are about 60 lifetime trades because DVOL starts 2021-03. The per-trade move is about 27x the round trip, so the binding risk is the sample size, not fees. Risk and sizing: 0.7x equity notional, one position at most, a -12% catastrophe stop on hourly closes, and a lockout until p falls below 0.50 again. Expected flat about 60% of the time.

This iteration fixes QA's critical finding. deribit_dvol rows are stamped at the candle's open but hold the candle's close value, so the value stamped T is only known at T+1h. The strategy now reads supp_as_of('deribit_dvol', ts - 1h), the last candle completed at the bar close. That removes the 1-hour look-ahead from every VRP value, percentile rank and decision. It also addresses QA's missing-data warning: a day with no DVOL or RV is no longer used up, and the decision retries on the next bar of the same day. Signal, thresholds and sizing are unchanged. The root cause is in load_deribit_dvol, which should stamp rows at ts_open + resolution. If the loader is fixed, this -1h shift must be removed or the read becomes an extra hour stale. The shift is conservative, but it is still wrong once the loader changes. Funding is not modeled in the sandbox, so the analyst should subtract long-perp funding over the days in the market. The pre-study Sharpe of 0.78 used the same peeking DVOL read and must be re-measured.

Failure code: overfit (first measured report: 64 trades, Sharpe 0.22, PF 1.15, Sharpe CI -0.51 to 0.93; avg_trade 1.31% against the 0.15% USD-M floor, so NOT fee_edge). Four hard gates fail. (1) CPCV: the in-sample winner's OOS Sharpe is -0.009 averaged over 252 splits, against IS 0.75, and is_overfitted=true. (2) PBO is 0.63. (3) The holdout (2025-04 to 2026-08) has Sharpe -0.74 on 3 trades. (4) The optimizer only found a positive full-period number by moving to a degenerate corner, entry_pct 0.997, with 15……Show moreShow less

Failure code: overfit (first measured report: 64 trades, Sharpe 0.22, PF 1.15, Sharpe CI -0.51 to 0.93; avg_trade 1.31% against the 0.15% USD-M floor, so NOT fee_edge). Four hard gates fail. (1) CPCV: the in-sample winner's OOS Sharpe is -0.009 averaged over 252 splits, against IS 0.75, and is_overfitted=true. (2) PBO is 0.63. (3) The holdout (2025-04 to 2026-08) has Sharpe -0.74 on 3 trades. (4) The optimizer only found a positive full-period number by moving to a degenerate corner, entry_pct 0.997, with 15 trades and 2021 carrying 131% of the profit. DSR is 0.38 against an expected-max of 0.35 over 17 effective trials, and the result does not survive programme FDR. The pre-study's result (Sharpe 0.78, PF 2.0, a flat plateau across thresholds and windows) was not reproduced in the engine. Sensitivity finds cliffs, not a plateau, around a base OOS Sharpe near zero. Only 1 of 5 pre-registered predictions was met. The mechanism was tested on its intended instrument and failed out of sample, so the verdict is abandon rather than revise: moving the same DVOL-minus-RV long gate to BTC or another window would re-fit the same noise, because the pre-study's own BTC and window variants come from the same unreplicated analysis. Note for the Research Lead: do not re-propose DVOL/VRP regime gates on BTC or ETH perps (this is the 4th DVOL-signal death, after IV-regime trend, IV-extreme reversal and VRP-gated momentum). The pre-study harness also needs checking against the engine, since it overstated Sharpe by about 3.5x on the identical rule. Separately, and not verified: repeated paired -X%/+X% daily MTM swings on flat days, plus a -12%/-8% final-bar print, suggest an engine marking artifact that needs review.

Implementation

Long-only regime strategy on the ETHUSDT.BINANCE perp. Once per UTC day it computes VRP = Deribit ETH DVOL minus annualized 168h realized vol, using the last completed hourly DVOL candle. It goes long when VRP's percentile against the prior 90 daily values is at least 0.70 and exits when it drops below 0.50. A -12% catastrophe stop on hourly closes exits early and blocks re-entry until the percentile falls below 0.50 again. Position size is 0.7x equity notional.

Verification Results

Leave the code as it is. When the loader is fixed, remove the -_HOUR_NS offset in the same change. Better still, have the loader own the stamping so strategies never shift the timestamp themselves.

The -1h shift in the DVOL read is correct today. I checked it: dvol_ETH.parquet has 48,363 contiguous hourly rows (every diff is 3,600,000 ms). load_deribit_dvol stamps each row at the candle's open ms but stores the candle's close, and supp_as_of(ts - 1h) returns the last fully completed candle at the bar close. The shift depends on the loader, though. If load_deribit_dvol is changed to stamp rows at open + 1h, this read becomes 1h stale without anyone noticing.

Keep the stop and sizing as registered. The analyst should compare max DD with the hypothesis's stated 41.9% at 1x.

Per-trade risk (L148). The stop is -12% of a 0.7x-notional position, checked on hourly closes, so the nominal worst loss is about 8.4% of equity per trade, and more if price gaps through the stop. The largest sandbox loss was -$14.7k, about 15% of starting capital. This is above the 1-2% guideline, but the design is not a compounding blowup: it has a flat state, one position, a fixed 0.7 fraction x leverage 1.0 with no dynamic scalar, and worst-case gross of 0.7x equity. The hypothesis also pre-registers exactly this sizing and stop.

No change needed. Just be aware of it when reading the holdout trade count.

min_bars_required is 170, but a first decision also needs 168 hourly returns and then 90 daily VRP values before p is valid. The effective warm-up is therefore about 97 days after the data starts. That is harmless, because the decision stays gated on _p_valid, but it shortens the usable sample for a strategy that already has few trades. DVOL starts on 2021-03-24, so the first possible decision is around late June 2021, which matches the pre-study's start of 2021-06.

The sandbox covers 834 days: 25 long trades, PF 1.20, Sharpe 0.31 with a CI of -1.04 to 1.52, and beta 0.23. That is well below the pre-study's PF 2.0 and Sharpe 0.78. The pre-study read DVOL one hour ahead (the open-stamped row), so its numbers are not a valid baseline. Funding is not folded into the result (funding_folded=false), so long-perp funding over the ~40% of time in market has to be subtracted; in 2021 and 2024 bull phases that can reach several % a year. The calm-vol tercile loses 16%. About 60 lifetime trades is the binding constraint, so the analyst should check the holdout trade count against the ≥10 floor before optimizing.

Backtest Review

Sharpe
0.22
Total return
29.49%
Max drawdown
39.22%
Trades
64
Win rate
51.6%
Profit factor
1.15

The trades implement the mechanism as stated: 64 long-only trades (the pre-study predicted 65), 37.5% in market (predicted about 40%), average hold 11 days (predicted median 8), no shorts. The point-in-time DVOL read (supp_as_of(ts-1h)) is correct.

Per-trade economics clear costs by a wide margin: avg_trade_return_pct 1.31% against the 0.15% USD-M floor (8.7x). Commission is 2.5% of gross and impact 8.4%. Funding is folded in (funding_folded=true).

The numeric review guard is met: 64 trades (>= 30), PF 1.15 (>= 1.05), Sharpe +0.22, DD 39.2% (< 60%), metrics_reliable=true, end_unrealized only 0.05%.

The edge is weak and not statistically distinguishable from zero. Sharpe is 0.22 with a CI of -0.51 to 0.93, PSR 0.63 and PF 1.15. Alpha is -2.9%/yr and the information ratio is -0.89 against ETH buy-and-hold. The pre-study reported Sharpe 0.78 and PF 2.0; QA traced the gap to a one-hour DVOL lookahead in the pre-study. This point-in-time run is the honest baseline.

QA's edge concern is largely borne out. Full history gives Sharpe 0.22 and PF 1.15, close to the sandbox's 0.31 and 1.20. Annual returns are 2021 -3.8%, 2022 -17.4%, 2023 +39.6%, 2024 +11.8%, 2025 +6.3%, 2026 -13.8%: 3 of 6 years positive, below the 60% validity floor. 2023 carries most of the profit.

The sample is thin. DVOL starts in 2021-03, which leaves about 64 lifetime trades. That is below L178's roughly 100-trade advisory bar, and the holdout (last 20%) will hold only about 12-13 trades against the 10-trade floor.

Beta check (L170): beta is 0.14 and max DD is 39% at about 0.7x notional with 37.5% exposure. That is well below ETH buy-and-hold's roughly 80% drawdown over the span, so the result is not pure beta. But the strategy loses money in stressed regimes (luna -19.5%, rate shock -19.6%) and the drawdown lasted 602 days.

Unverified: recurring paired MTM days of about -12% / +13% while in position (2025-04-14/15, 2025-10-15/16, 2026-01-15/16, 2026-04-17/18, 2026-07-18/19), plus a -12.3% final bar on 2026-08-17. These match the paired-swing symptom seen in other runs. They roughly cancel in return but inflate volatility and depress Sharpe. The mechanism has not been independently verified, and the engine's marking should be reviewed.

Analysis

Per-trade economics are far above the cost floor. The base run makes avg_trade 1.31% against the USD-M floor of 0.15%, about 9x, and the optimized run makes 4.92%. Fees are not the problem (commission is 2.5% of gross).

The code implements the premise. Every trade is long-only, exposure is 37.5% (close to the ~40% the pre-study predicted) and the DVOL read is point-in-time.

It is not a beta clone. Max drawdown is 39% at 0.7x and 37.5% exposure, against roughly 80% for ETH buy-and-hold over the same period. Beta is 0.14, but alpha is about 0 (-0.03) and IR is -0.89.

The pre-registered rule did not reproduce the pre-study. The pre-study claimed Sharpe 0.78, PF 2.0, avg +2.74% and max DD 41.9% on 65 trades. The engine gives Sharpe 0.22, PF 1.15, avg 1.31%, PSR 0.63 and a Sharpe CI of -0.51 to 0.93 on 64 trades. The yearly pattern also differs: the pre-study had 2021 at +0.69, the engine has 2021 at -3.8% and 2022 at -17.4%.

CPCV finds no edge. The in-sample winner's OOS Sharpe averages -0.009 across 252 splits against an IS average of 0.75, with PBO 0.63 and is_overfitted=true. The chosen parameters were the IS winner in only 20% of splits.

The optimizer escaped to a degenerate corner. entry_pct went to 0.997 (enter only when today's VRP is the 90-day maximum), exit_pct to 0.44 and rv_hours to 237. That leaves 15 trades, 12% exposure, and 2021 carries 131% of the profit. The claimed plateau across 0.6-0.8 and 0.4-0.55 is not there: sensitivity flags 6 of 7 parameters as cliffs around a base Sharpe of about -0.09, and the heatmap is noisy between -0.02 and 0.45.

The holdout failed. It covers 2025-04-19 to 2026-08-16, 484 days, and produced Sharpe -0.74 on only 3 trades. Both the sign and the sample-size part of the hard gate fail.

Deflation fails. DSR is 0.38, and expected-max Sharpe is 0.35 over 17 effective trials. The strategy does not survive programme FDR (p=0.62).

Pre-registered predictions met: 1 of 5. min_trades was 15 against 50, OOS Sharpe -0.009 against 0.55, max DD 30.4% against 30%, and PF 1.36 against 1.5. Only the avg-trade prediction was met.

Possible engine artifact, not verified: both curves show repeated paired -X%/+X% day swings on days the book appears flat. In the optimized run this is -4.41/+4.61 on 2021-12-06/07, 2022-03-08/09 and 2022-06-08/09, and -4.27/+4.46 in 2022-12, 2023-03, 2023-06 and 2023-09. The final bar shows -12.3% in the base run and -8.2% in the optimized run on 2026-08-17 with end_unrealized about 0.05%. These can inflate DD and distort Sharpe and should go to engine review. They do not change the verdict, because the OOS and holdout failures come from trade-level results.

Benjamini-Hochberg at q=0.10 over 341 programme candidates keeps 8. A candidate that does not survive here is not distinguishable from the programme's own noise, however good its individual statistics look.

Iteration History

Verification failed (Layer 4 — QA review) [class=code_defect]: - [edge_concern] The sample is thin by construction: about 65 lifetime trades because DVOL starts 2021-03, and the sandbox has 24 trades with a Sharpe CI of -0.96 to 1.52. Nothing in the regime split was stressed-only: calm lost 19%, normal and stressed each gained about 20%. Funding was not charged (funding_folded=false, funding_events_available=0). A long USD-M perp held about 40% of the time pays positive funding in most bull phases, often 5-15% a……Show moreShow less

Verification failed (Layer 4 — QA review) [class=code_defect]: - [edge_concern] The sample is thin by construction: about 65 lifetime trades because DVOL starts 2021-03, and the sandbox has 24 trades with a Sharpe CI of -0.96 to 1.52. Nothing in the regime split was stressed-only: calm lost 19%, normal and stressed each gained about 20%. Funding was not charged (funding_folded=false, funding_events_available=0). A long USD-M perp held about 40% of the time pays positive funding in most bull phases, often 5-15% a year, and that is not in these numbers. The pre-study used the same open-stamped DVOL file described as 'stamped at hour-close', so its Sharpe of 0.78 carries the same 1h peek. Re-measure it after the timestamp fix. - [critical] The DVOL read has a 1-hour look-ahead. dvol_ETH.parquet rows come straight from Deribit get_volatility_index_data and are stamped at candle OPEN. load_deribit_dvol does not shift them, and each row's value is the candle CLOSE. So the row stamped T holds the DVOL print at T+1h. supp_as_of('deribit_dvol', ts) uses bisect_right, which includes ts == T. At the 00:00 decision bar (close-stamped T) the strategy therefore reads DVOL as of 01:00, an unpublished value. I checked this empirically on the stored data. corr(log(DVOL close/open) at stamp T, ETH 1H return of the bar stamped T+1h) = -0.222. At the same stamp T it is -0.066, and at every other lag it is about 0. The DVOL candle stamped T covers T to T+1h, the same hour as the ETH bar that closes at T+1h. The hypothesis says the file is 'stamped at hour-close', and that is false. Every VRP value, and so every p-rank and every entry and exit decision, uses a future IV print. This is a point-in-time violation of the edge input itself. (line 76) — fix: Read the last COMPLETED candle: iv = self.supp_as_of('deribit_dvol', ts - 3_600_000). The row stamped T-1h has its close at T. Better still, fix load_deribit_dvol to stamp rows at ts_open + resolution, matching the catalog's close-stamp convention, so that every DVOL consumer is point-in-time. Then re-run the pre-study numbers. - [warning] Per-trade risk (L148). The -12% catastrophe stop on 0.7x equity notional puts about 8.4% of equity at risk per trade, before an hourly gap-through, which is above the 1-2% guideline. This is not a compounding blowup: there is a flat state (about 60%), one position, 1x leverage and a fixed 0.7 fraction with no dynamic scalar. Worst-case gross is 0.7 x equity x 1 leg, which is within the 20x venue cap. The largest sandbox loss was -$14.5k, about 14% of starting capital. (line 126) — fix: Keep the pre-registered sizing. The analyst should read the worst-trade loss and max DD (41.9% at 1x in the pre-study) against the hypothesis's drawdown floor. - [warning] If DVOL is missing on a day's first bar, that day is consumed (_last_decision_day is set) without a decision and without appending to _vrp_hist. A held position then gets no signal exit until the next day with DVOL; only the -12% stop protects it. DVOL coverage is hourly and continuous (48,362 uniform 1h diffs), so the impact is negligible. (line 104) — fix: Acceptable. Optionally, retry the decision on later bars of the same day when DVOL is missing. - [warning] Funding is not modeled in this backtest (funding_folded=false, funding_events_available=0). For a long-only perp carry the result omits a material, usually negative, cost stream. — fix: Make sure the full backtest folds Binance USD-M funding for ETHUSDT, or have the analyst haircut the returns by the realized funding over the in-market days.

Outcome Summary

The pre-study harness overstated Sharpe by about 3.5x on the same rule (QA traced it to a one-hour DVOL lookahead), so pre-study results should be checked against the point-in-time engine, and DVOL/VRP regime gates on BTC/ETH perps should not be proposed again (this is the 4th DVOL-signal failure).

The analyst abandoned it as overfit after it failed four hard gates: CPCV OOS Sharpe -0.009 against an IS Sharpe of 0.75 (is_overfitted=true), PBO 0.63, a holdout Sharpe of -0.74 on 3 trades, and an optimizer result that relied on a degenerate 15-trade corner. It also had DSR 0.38, did not survive programme FDR, and met only 1 of 5 pre-registered predictions. Fees were not the problem.

Hold ETHUSDT.BINANCE long (0.7x equity, long-only) when the Deribit ETH DVOL minus 168h realized-vol spread ranks in the top 30% of its trailing 90 daily values, exit when it falls below the median, deciding once per day at 00:00 UTC.

The pre-registered rule made 64 trades with Sharpe 0.22 (CI -0.51 to 0.93), PF 1.15, avg trade 1.31% of notional, total return 29.5% and max drawdown 39.2%, against a pre-study claim of Sharpe 0.78 and PF 2.0. Optimization moved to entry_pct 0.997 with only 15 trades (Sharpe 0.24, avg trade 4.92%), while walk-forward OOS Sharpe averaged -0.009, PBO was 0.63, and the holdout returned Sharpe -0.74 on 3 trades.

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