Strategies
BTC Daily Momentum with Volatility Filter
Outcome: Abandoned
BtcDailyMomentumVolatilityFilterLongShort
Outcome Summary
BtcDailyMomentumVolatilityFilterLongShort was a deliberately simple three-parameter bet on BTC's daily momentum persistence, gated by a self-normalizing volatility-expansion filter to avoid ranging-market whipsaws. The base backtest was honestly marginal — Sharpe 0.23, profit factor 1.07, a 43% drawdown, and returns concentrated in a handful of outlier days — but its dense 120-trade sample earned an optimization slot. Optimization produced a flashy Sharpe 1.18 by over-thinning the book to just 20 trades, and although the walk-forward overfit flag read false, that was propped by two lucky OOS windows (one with zero trades) while the time-ordered holdout collapsed to a 0.224 ratio. The analyst abandoned it as a structural overfit — deflated Sharpe 0.0 far below the 9.53 luck bar, PBO 0.64, and four sensitivity cliffs on the core params including the vol gate itself — the same overfit-to-few-trades signature as prior abandoned single-asset trend strategies.
Hypothesis
A simple daily-timeframe momentum strategy on BTCUSDT futures. Enters in the direction of recent momentum when volatility is expanding (favorable for trend continuation) and stays out during low-volatility chop. Uses only 2 core indicators (ROC and ATR ratio) with 3 tunable parameters, minimizing overfitting risk. Daily bars mean ~1-2 trades per week, keeping fee drag negligible. This is deliberately simple — the edge comes from BTC's well-documented momentum persistence at the daily timeframe, filtered by a volatility regime gate to avoid whipsaws in ranging markets.
Implements the BTC daily momentum-with-volatility-filter hypothesis with deliberate minimalism. calculate_signal returns the signed ROC (continuous, varies every bar) as the momentum signal and caches the volatility regime gate (short ATR / long ATR) plus ATR for risk. should_enter requires the volatility ratio to exceed vol_ratio_min (vol expanding -> favorable for trend continuation) before taking a position in the momentum direction; this filters out low-vol ranging markets where momentum signals whipsaw. The volatility gate is expressed as a dimensionless ATR ratio so it remains valid across BTC's large multi-year price/vol regime shifts (an absolute ATR threshold would drift out of range). Routed to the BINANCE futures venue because the strategy is genuinely long-short. Daily bars produce ~1-2 trades/week, keeping round-trip fee drag negligible relative to the per-trade move. Risk is bounded by an ATR stop and a time stop; only three indicators/parameters are tuned to minimize overfitting.
Implementation
Simple daily-timeframe momentum strategy on BTCUSDT.BINANCE (USD-M perp), long-short, on 1-DAY bars. Direction comes from rate-of-change (ROC) over roc_period days; trades are only permitted when volatility is expanding, measured by a dimensionless ratio of a short-window ATR to a longer baseline ATR (>= vol_ratio_min). It goes long on positive momentum and short on negative momentum during vol-expansion regimes, and stays flat in low-volatility chop. Exits when momentum flips against the position, an ATR stop (3x ATR) is hit, or a 30-day max-hold time stop expires. Three core tunable parameters (roc_period, atr_period, vol_ratio_min). Positions sized at 50% of account equity.
Backtest Review
- Sharpe
- 0.23
- Total return
- 34.06%
- Max drawdown
- 43.09%
- Trades
- 120
- Win rate
- 32.5%
- Profit factor
- 1.07
Positive expectancy (+$131/trade), total return +34% across a dense 120-trade sample over 6.4 years — adequate for walk-forward.
Trend payoff geometry (avg_win 2.2x avg_loss at 32% win rate); simple design (3 core params, low overfit surface); recent years positive (2025 +1.4%, 2026 +20.1%).
Clear tuning lever: roc_threshold is currently 0.0 (enters on any momentum direction — crude); raising it plus tuning vol_ratio_min can lift selectivity and cut chop losses.
Thin, fee-fragile edge: profit_factor only 1.07, Sharpe 0.23 with CI straddling 0 (sharpe_ci_low -0.83).
Large drawdown (43%) and a catastrophic 2022 (-23.9%); outlier-dependent (return_kurtosis 87.7 — the +34% rests on ~4 huge days).
Tiny capacity ($11.5M) with impact 9.3% of gross at the backtested size.
These properties make it a strong candidate to fail the deflated-Sharpe/holdout gates post-optimization.
Analysis
Optimized headline metrics look superficially good (Sharpe 1.18, PF 2.72, max_DD 25.5%)
Walk-forward is_overfitted flag is technically FALSE
Deflated Sharpe 0.0 (is_significant FALSE): optimized Sharpe 1.18 is far below the expected-max luck bar of 9.53 over 225 trials — indistinguishable from best-of-N selection noise
Holdout FAILED: ratio 0.224 (holdout 0.625 vs WF-OOS 2.79), well below the 0.70 floor — forward window collapses
Sensitivity FAILED with 4 cliffs on core params (atr_period, roc_period, atr_long_mult, vol_ratio_min) — the volatility regime gate itself is a knife's edge
PBO 0.6389 (>0.5) and sharpe_ci_low -0.69 (CI straddles 0)
Optimization over-thinned 120 trades down to 20 — curve-fit to a tiny sample; one walk-forward OOS window produced zero trades
Base backtest was already marginal (Sharpe 0.226, PF 1.07, max_DD 43%)
Outcome Summary
Adding a volatility-expansion gate to a basic momentum signal trades trade-count for fragile cliff-dependence: when optimization must over-thin a weak base to a tiny sample and the regime filter is a knife's-edge parameter, the headline Sharpe is selection noise that collapses in the honest holdout.
It passed backtest review (verdict: optimize) but the analyst abandoned it after optimization: deflated Sharpe 0.0 vs a 9.53 expected-max luck bar, a failed holdout (ratio 0.224 vs the 0.70 floor), PBO 0.64, sharpe_ci_low -0.69, and a failed sensitivity test with 4 cliffs on the core parameters — including the volatility-regime gate itself — while the optimizer over-thinned 120 trades down to 20.
A deliberately simple long-short BTCUSDT daily momentum strategy that traded in the direction of rate-of-change when a short-window ATR exceeded a longer-baseline ATR (volatility-expansion regime gate) and stayed flat in low-vol chop, exiting on momentum flips, an ATR stop, or a time stop — using only three core tunable parameters to limit overfitting.
The base backtest was marginal over ~6.4 years: 120 trades (61 long, 59 short), a 32.5% win rate, profit factor 1.07, Sharpe 0.23 (CI straddling zero, low -0.83), a +34% total return resting on ~4 outlier days (kurtosis 87.7), and a 43% max drawdown. Optimization thinned it to 20 trades with a superficially strong headline (Sharpe 1.18, profit factor 2.72, max drawdown 25.5%).
Backtest and paper results are hypothetical. Trading involves risk of loss.