Skip to content

View original

VolTargetedDualTimeframeTrendLSBasketDaily

Hypotheses

Binance USD-M Volatility-Targeted Dual-Timeframe Trend Long-Short Basket (Majors, Fast+Slow Trend Agreement, Constant-Vol Risk Overlay, Weekly Rebalance)

Hypotheses

A long-short managed-futures basket across ~12 full-history Binance USD-M MAJOR perpetuals whose distinguishing feature is its RISK-MANAGEMENT construction, not a new signal. Two differentiators from the trend baskets already in the pipeline (time-series, cross-sectional, dual-momentum, Donchian): (1) the directional signal requires TWO TIMEFRAMES of the same asset's absolute trend to AGREE — a fast trend and a slow trend — going LONG only when both point up, SHORT only when both point down, FLAT on disagreement (this is multi-timeframe agreement, distinct from dual-momentum's absolute+relative conjunction); (2) position sizing applies a CONSTANT PORTFOLIO-VOLATILITY TARGET — gross exposure is scaled inversely to recent realized portfolio volatility toward a fixed annualized target — so the book runs steady risk through calm and turbulent regimes (the recognized 'volatility targeting' enhancement that improves trend-following Sharpe and cuts tail drawdowns, and directly answers the regime-aware mandate). It stays strictly on the only reliably-backtestable surface — Binance USD-M majors, pure OHLCV, full history — deliberately avoiding every infrastructure block hit this session (Deribit options no data, COIN-M inverse sizing broken, Hyperliquid alt bars unavailable, liquidations live-WS-only, multi-leg funding primary-symbol-only) and every refuted class (no funding, no basis, no ratio MR). Majors-only also sidesteps the alt-breadth/short-history data risk that troubled the broad-universe baskets. Same-venue, same daily timestamps; few parameters to resist overfitting; long-short to improve the portfolio's 87%-long skew.

Hypotheses

Iteration-2 fix for the Layer-2 failure: `_bar_ts` was a `@staticmethod` (single `bar` param). Under the Layer-2 synthetic proxy the method is invoked bound, so `self` was passed as an extra positional arg → 'takes 1 positional argument but 2 were given'. Converted `_bar_ts` to a normal instance method `def _bar_ts(self, bar)` so the arity matches the bound call. This is the only change; all imports, signal logic, dual-timeframe agreement, bounded vol-targeting overlay, sizing, and rebalance mechanics (which passed Layer 1) are untouched. leverage=1.5 is consumed in `_rebalance` via `budget = min(budget, equity * self._leverage)` and the scalar_cap, so the setting is not inert.

Hypotheses

failed deflated Sharpe: DSR=0.0036, expected-max=1.3257 over 225 trials — the selected optimized Sharpe (0.458) sits FAR below the best-of-N luck bar and is statistically indistinguishable from noise (is_significant=false, sharpe_ci_low=-0.2115 straddling 0; probabilistic_sharpe 0.9222 vs DSR 0.0036 is the textbook PSR-vs-DSR selection-inflation trap). The walk-forward is is_overfitted=TRUE: avg IS 1.354 collapses to avg OOS 0.332 with two of three OOS windows negative ([-0.54, +1.84, -0.30]), and the untouched time-ordered HOLDOUT FAILED (ratio 0.049, holdout_sharpe 0.0163 ~0). The strategy carries a NEGATIVE information ratio in both base (-0.38) and optimized (-0.29) forms, its sensitivity surface has a cliff at rebalance_days (0.29<->0.49 on a one-step change), and its headline +454% total return is unreliable — end_unrealized_pct 156.6 means the return is driven mostly by an un-exited open position at backtest end, with the edge outlier/bull-concentrated (2021 +284%, kurtosis 53.7, skew 4.96; 2025 -19.8%). Not iterate: this is the final optimization attempt (2 of 2), and the binding failures are structural (best-of-225 Sharpe below the 1.33 luck bar, overfit walk-forward with negative OOS windows, failed holdout), so a third sweep re-selects the same sub-significant config. Not revise_hypothesis: Binance USD-M majors is a valid, data-rich surface and the vol-targeted TS-momentum basket family already has promoted siblings — per the overfit->abandon rule this is high-IS/low-and-negative-OOS overfitting on a fine instrument set, not a proven mechanism stranded on a dead target, and the dual-timeframe-agreement + vol-overlay variant added no distinct promotable edge. FAILURE PATTERN: layering a fast+slow trend-AGREEMENT gate and a bounded constant-vol overlay onto a 12-major Binance USD-M long-short basket does NOT inherit promotability — it yields the managed-futures multiple-testing/overfit signature (DSR 0.0036 with optimized Sharpe 0.458 below a 1.33 luck bar, is_overfitted IS 1.35 -> OOS 0.33 with two negative windows, failed holdout, negative information ratio, a rebalance_days cliff, and a headline inflated by 156% open-position unrealized). A clean bounded-vol build and a positive full-sample total return measure consistency and survivability, not significance or forward-generalization.

Implementation

Long-short managed-futures basket across 12 full-history Binance USD-M major perpetuals on daily bars, rebalanced weekly. Each asset is directional only when its fast (20d) and slow (60d) trends agree — long if both up, short if both down, flat on disagreement. Gross exposure is scaled inversely to conservatively-estimated realized portfolio vol toward a fixed 40% annualized target, with the vol scalar hard-clamped to [0, 1.5] and all vol denominators floored, so the constant-vol overlay cannot blow up. Per-asset weights are inverse-vol, normalized to sum to 1 and capped at 20%.

Verification Results

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['assets', 'vol_floor', 'max_weight', 'scalar_cap', 'vol_target', 'resize_frac', 'min_notional', 'vol_lookback', 'fast_lookback', 'qty_precision', 'slow_lookback', 'rebalance_days', 'default_qty_precision'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: VolTargetedDualTimeframeTrendLSBasketDaily._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735693260000) - steady_downtrend: TypeError: VolTargetedDualTimeframeTrendLSBasketDaily._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735693260000) - flat_ranging: TypeError: VolTargetedDualTimeframeTrendLSBasketDaily._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735693260000) - volatility_spike: TypeError: VolTargetedDualTimeframeTrendLSBasketDaily._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735693260000) - zero_volume: TypeError: VolTargetedDualTimeframeTrendLSBasketDaily._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735693260000) - price_gap: TypeError: VolTargetedDualTimeframeTrendLSBasketDaily._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735693260000)

Backtest Review

Functions across the entire 6.5-year window with no liquidation and bounded daily losses (worst day -21.9%) — unlike the recent baskets that blew up.

Backtest Review

Vol-targeting overlay is calibrated: achieved annualized vol 40.8% ≈ target 40%, confirming effective leverage ~1x despite the inflated exposure_pct metric.

Backtest Review

Edge spans regimes, not just 2021: positive in 4/7 years (2024 +29%, 2025 +103%, 2026 +24%), PF 1.29, Sortino 0.92, Calmar 3.8, expectancy +340.

Backtest Review

benchmark_meaningful=false correctly flags the long-short basket; probabilistic_sharpe 0.949; 709 trades is enough to populate the walk-forward.

Backtest Review

Sharpe only 0.51 with sharpe_ci_low -0.19 straddling 0 — significance not yet established (the optimization robustness gates must confirm it).

Backtest Review

exposure_pct reads 814% (multi-leg metric quirk; achieved vol and the budget cap imply ~1x effective) — verify during optimization.

Backtest Review

Trend-following drawdown years (2022 -28%, 2023 -23%), max_drawdown 42.2%, max_consecutive_losses 16.

Backtest Review

fast_lookback/slow_lookback remain tunable — the same overfit vector that collapsed the prior vol-targeted variant; the optimizer must target OOS robustness, not max-IS Sharpe.

Backtest Review

modest, CI straddles 0 — for optimization to resolve

Backtest Review

high but survivable for a 1x CTA

Analysis

Clean bounded-vol construction (no liquidation, avg_position_pct ~20%), mostly-clean sensitivity (only 1 cliff), healthy trade count (1575 optimized)

Analysis

Same-venue Binance majors, full history — genuinely backtestable, dense OOS windows (no event-sparsity)

Analysis

Fails deflated Sharpe decisively: DSR 0.0036 vs 0.95; optimized Sharpe 0.458 FAR below the 225-trial expected-max luck bar of 1.3257

Analysis

is_significant=false, sharpe_ci_low -0.2115 (CI straddles 0); PSR 0.9222 vs DSR 0.0036 is the selection-inflation trap

Analysis

Walk-forward is_overfitted=TRUE: avg IS 1.354 -> OOS 0.332 with two of three OOS windows negative [-0.54, +1.84, -0.30]

Analysis

Forward HOLDOUT FAILED: ratio 0.049, holdout_sharpe 0.0163 (~0) vs WF-OOS 0.332

Analysis

Negative information ratio (base -0.38, optimized -0.29); headline +454% is mostly unrealized (end_unrealized_pct 156.6) — realized edge far smaller

Analysis

1 sensitivity cliff (rebalance_days 0.29<->0.49); outlier/bull-concentrated returns (2021 +284%, kurtosis 53.7, skew 4.96); 2025 -19.8%

Outcome Summary

This strategy proposed a risk-construction twist on trend-following: require fast and slow trends to agree before taking a directional position, and scale gross exposure to hold portfolio volatility near a fixed target. It cleared the pre-optimization backtest-review gate on the strength of survivability — no liquidation, bounded daily losses, +341% over 6.5 years at achieved vol matching its 40% target — earning an 'optimize' verdict. But the three-phase optimization exposed the trend-basket overfit signature: an in-sample Sharpe of 1.35 collapsed to 0.33 out-of-sample with two negative windows, the holdout failed outright, and the selected Sharpe of 0.458 sat far below the best-of-225-trials luck bar with a deflated Sharpe of essentially zero. On the second and final optimization attempt, the analyst abandoned it as statistically indistinguishable from noise, concluding the dual-timeframe-agreement and vol-overlay additions did not inherit the promotability of the strategy's siblings.

Outcome Summary

Layering a dual-timeframe agreement gate and a bounded constant-vol overlay onto a trend-following majors basket improves survivability and full-sample return but does not add a statistically significant, forward-generalizing edge — a clean bounded-vol build and positive total return measure consistency, not significance.

Outcome Summary

The analyst abandoned it at the post-optimization ANALYZING stage: it failed the deflated Sharpe test (DSR 0.0036 vs a 225-trial expected-max luck bar of 1.3257), was flagged overfit (avg in-sample Sharpe 1.354 collapsing to 0.332 out-of-sample with two of three windows negative), failed the time-ordered holdout (ratio 0.049, holdout Sharpe ~0.016), and carried a negative information ratio (-0.29).

Outcome Summary

A long-short managed-futures basket over ~12 Binance USD-M major perpetuals that went long/short only when an asset's fast and slow trends agreed, sizing the book with a bounded constant-portfolio-volatility overlay targeting steady risk across regimes.

Outcome Summary

The base backtest returned +341% over ~6.5 years with a Sharpe of 0.51 (CI low -0.19), profit factor 1.29, 42.2% max drawdown and 709 trades, and it survived with no liquidation; after optimization it showed +454.7% and 1,575 trades but Sharpe fell to 0.458.
Strategy report

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