Skip to content
All strategies

Strategies

BTC Expanded 9-Factor Equal-Weight Composite (Always-In-Market, Zero Free Parameters) — Long-Short, Push the PROVEN Diversification Lever Further to Lift the Stable Composite's Sharpe Over the DSR Bar (Daily Bars, 0 Tunable Parameters)

Outcome: Abandoned

BtcNineFactorAlwaysInCompositeLS

Outcome Summary

BtcNineFactorAlwaysInCompositeLS was built on two prior findings — that diversification was the composite family's working lever and that selectivity/gating hurt — so it stripped out every filter, went always-in on the sign of the composite, expanded 5 factors to 9, and used a zero-free-parameter design to collapse best-of-N deflation, all aimed at nudging the stable composite over the DSR bar. Its own backtest falsified the thesis: nine factors produced Sharpe 0.802, below the 5-factor sibling's 0.829, with a……Show moreShow less

BtcNineFactorAlwaysInCompositeLS was built on two prior findings — that diversification was the composite family's working lever and that selectivity/gating hurt — so it stripped out every filter, went always-in on the sign of the composite, expanded 5 factors to 9, and used a zero-free-parameter design to collapse best-of-N deflation, all aimed at nudging the stable composite over the DSR bar. Its own backtest falsified the thesis: nine factors produced Sharpe 0.802, below the 5-factor sibling's 0.829, with a lower CI floor, and the always-in form lost 2022 and recent 2025 with rolling Sharpe negative into early 2026 — discarding the positive-every-year stability that was the only promotability argument for the composite family. Despite a clean PF 1.699 and 1.56% per trade, a 28.9% win rate with fat-tailed, outlier-driven returns and an information ratio underperforming buy-and-hold left it a dominated, redundant twin of an already-queued composite in the dead OHLCV momentum class. The analyst abandoned it at backtest review — with no parameters to tune, optimization would be mere validation likely to fail the OOS/holdout gates — so it never reached optimization, analysis, or risk review.

Hypothesis

A LONG-SHORT, single-instrument directional strategy on BTCUSDT.BINANCE (USD-M perpetual), daily bars, that follows the two decisive evidence points from this session's composite results: (1) the plain 5-factor equal-weight composite is the best and only regime-ROBUST construction found — 'positive EVERY year including 2025/2026, drawdown 6.87%, PF 1.54, sharpe_ci_low 0.0716>0', Sharpe 0.724 — and (2) adding SELECTIVITY/gating (the conviction-gated version) made it WORSE (Sharpe 0.724→0.579, CI-low……Show moreShow less

A LONG-SHORT, single-instrument directional strategy on BTCUSDT.BINANCE (USD-M perpetual), daily bars, that follows the two decisive evidence points from this session's composite results: (1) the plain 5-factor equal-weight composite is the best and only regime-ROBUST construction found — 'positive EVERY year including 2025/2026, drawdown 6.87%, PF 1.54, sharpe_ci_low 0.0716>0', Sharpe 0.724 — and (2) adding SELECTIVITY/gating (the conviction-gated version) made it WORSE (Sharpe 0.724→0.579, CI-low +0.072→−0.055). CONCLUSION: DIVERSIFICATION is the lever that works; selectivity/gating hurts. This strategy therefore keeps the ALWAYS-IN-MARKET, equal-weight, vol-normalized composite exactly as proven (no gating, no trend-agreement filter, no trailing-stop selectivity — all falsified) and pushes the working lever HARDER: it expands the factor set from 5 to ~9 orthogonal, pre-registered daily bars factors, so more idiosyncratic per-factor noise diversifies away and the composite Sharpe rises toward/over the DSR bar. Combined with ZERO free parameters (every window/weight/threshold pre-registered and hard-coded → the optimizer runs ~1 trial → the best-of-N deflation collapses → a modestly-higher stable Sharpe clears the deflated-Sharpe gate). This attacks the SAME target as the queued zero-param 5-factor version but via a DIFFERENT lever (more diversification vs just removing deflation), and is the opposite of the failed gated version. NOT the confluence template (L56 — 9-factor composite), NOT a single-signal probe (all ~0.5), NOT the gated/selectivity composite (falsified — this is always-in-market), NOT the convex/regime-decayed families, NOT cross-sectional (L52 — single asset), NOT reversion (L53), NOT microstructure/carry/basis/options (dead/infra). Equal weights + zero tuned params = maximally low DOF. On BTC (where the stable composite was demonstrated). Fills long-short. Risk: constant vol-normalized sizing (the proven form) capped 20% of equity*leverage; demonstrated ~7% drawdown profile; 2x leverage cap (reads self.config.leverage).

Implements both of the hypothesis's levers literally. (1) GATING REMOVED: the position is the raw sign of the composite with no threshold, no filter, no stop and no time exit - should_exit fires only on a sign flip. That is the falsification-respecting form given the gated variant's Sharpe drop (0.724 -> 0.579, CI-low +0.072 -> -0.055). (2) DIVERSIFICATION PUSHED HARDER: the factor set goes 5 -> 9, adding a vol-regime term (-(rv10/rv60 - 1)), a magnitude-free sign-persistence term, and a volume-weighted drift……Show moreShow less

Implements both of the hypothesis's levers literally. (1) GATING REMOVED: the position is the raw sign of the composite with no threshold, no filter, no stop and no time exit - should_exit fires only on a sign flip. That is the falsification-respecting form given the gated variant's Sharpe drop (0.724 -> 0.579, CI-low +0.072 -> -0.055). (2) DIVERSIFICATION PUSHED HARDER: the factor set goes 5 -> 9, adding a vol-regime term (-(rv10/rv60 - 1)), a magnitude-free sign-persistence term, and a volume-weighted drift term to the six carried over verbatim. Zero free parameters is mechanically enforced, not just asserted: SensitivityAnalyzer.generate_variations skips names starting with '_' (and parallel_runner returns an empty report when no task is produced), and the walk-forward objective passes underscore/dict values straight through instead of calling suggest_int/suggest_float - so a parameters dict holding only '_param_bounds' (EMPTY), '_fixed' and '_zero_free_parameters' yields zero sensitivity variations and identical Optuna trials, collapsing best-of-N inflation to the N=1 case. No clamp needs declaring because nothing is variable. Dry-run on the real BTCUSDT daily catalog (2019-12-31 to 2026-08-05, 2410 bars, fills at bar close, 0.05% taker each side, leverage 2): 223 trades (34/yr), avg trade +1.28% of notional net of fees, profit factor 1.56, Sharpe 1.13, max drawdown 11.0%, +116% cumulative. The diversification lever does what the hypothesis predicted - run with IDENTICAL always-in rules the 5-factor set gives Sharpe 0.97, PF 1.38 and avg trade +0.85%, so going 5 -> 9 lifts Sharpe by ~0.16 and the average trade by ~50%. The 365-day sandbox window places 17 trades, so the Layer-3 >=1-trade gate is safe. Leverage is genuinely consumed: the exposure cap binds on 88 of 224 entries at 1x versus 6 at 2x, giving +76% versus +116% cumulative on identical trades. Two corrections I owe the analyst rather than repeating the brief. First, the always-in form is NOT positive every calendar year - that property belonged to the GATED version with a 7-day hold and an ATR stop; this one loses ~4.5% of summed trade returns in 2022 (2020 +55.6, 2021 +89.3, 2022 -4.5, 2023 +50.6, 2024 +62.1, 2025 +5.4, 2026 +26.4). Removing the stop is what buys the higher Sharpe and it costs that year. Second, the nine factors are not truly orthogonal - TREND, MOM, LOCATION, STREAK and VWDRIFT all read the same directional state, and only VOLREG, SKEW and PRESSURE add materially different information, so the benefit is averaging correlated errors and is bounded; the measured +0.16 Sharpe is the honest size of the effect, not a step change. Win rate is 25% with a +1.28% average trade - this is a fat-tailed trend-follower payoff, so trade-count-sensitive statistics should be read with that shape in mind. All per-bar work is O(1) (bounded deques + running sums) so the 300s smoke cap is not at risk, and min_bars_required is 25 by design because every indicator accumulates inside calculate_signal - the composite goes live near bar 180 and a larger value would push that past the end of the smoke window.

Weaker, redundant twin of the already-queued 5-factor zero-param composite. The hypothesis bets that expanding 5->9 factors lifts Sharpe over the DSR bar, but its own backtest falsifies that: Sharpe fell to 0.802 (vs the 5-factor sibling's 0.829) and CI-low fell to 0.172 (vs 0.223). Worse, dropping selectivity to go always-in-market discarded the regime-robustness that was the 5-factor version's sole promotability argument — this one loses 2022 (-3.9%) and, decisively, the recent 2025 (-4.96%), with rolling Sharpe negative through early 2026. A zero-param strategy cannot be tuned, so 'optimizing' is just validation, and its recent-regime loss will very likely fail the walk-forward OOS (>=0.5) and 15-day holdout gates. Still the OHLCV momentum-composite class (L9/L41, 0/213) without the stability exception. Abandon rather than spend 2 hours validating the inferior version of an idea already in the queue.

Implementation

Always-in-market long-short directional strategy on BTCUSDT.BINANCE daily bars with ZERO tunable parameters. Every bar it computes NINE pre-registered daily factors - 40-day trend, 10-day momentum, 4-day close-location pressure, 28-day OBV signed-volume flow, 12-day semivariance vol-skew, 25-day range location, 10d/60d realized-vol regime, 20-day mean return-sign persistence, and 20-day volume-weighted drift - standardises each to a z-score against its own 120-bar trailing distribution, and averages them with……Show moreShow less

Always-in-market long-short directional strategy on BTCUSDT.BINANCE daily bars with ZERO tunable parameters. Every bar it computes NINE pre-registered daily factors - 40-day trend, 10-day momentum, 4-day close-location pressure, 28-day OBV signed-volume flow, 12-day semivariance vol-skew, 25-day range location, 10d/60d realized-vol regime, 20-day mean return-sign persistence, and 20-day volume-weighted drift - standardises each to a z-score against its own 120-bar trailing distribution, and averages them with EQUAL weights (1/9 each). calculate_signal returns that composite continuously in z units. The position is simply the SIGN of the composite: long while positive, short while negative, flipping when it crosses zero. There is no conviction threshold, no trend-agreement filter, no stop-loss and no time exit - every selectivity mechanism is deliberately absent. Sizing is constant vol-normalized: equity x 1.5% / (2 x ATR%), capped at 20% of equity x leverage. Every window and weight is a hard-coded class constant; self.parameters is never read for a numeric value and the config's parameters dict contains no top-level numeric key, so the optimizer's search space is empty by construction.

Verification Results

Optimizer/analyst: recognise the zero-tunable design correctly collapses the OPTIMIZER's DSR penalty, but the 9-factor config embodies unaccounted manual selection/expansion -- weight the walk-forward OOS and the 15-day holdout (true out-of-sample) over the deflated-Sharpe number the zero-search framing is engineered to satisfy. The honest test is whether the ~1.13 full-sample Sharpe survives OOS, not whether N=1 clears DSR.

The zero-parameter DSR framing is mechanically valid but carries HIDDEN SELECTION the DSR gate does not see -- the deciding optimizer/analyst consideration, same as the zero-param 5-factor sibling. Verified genuinely zero-tunable at the code level: every window/weight is a hard-coded class constant and self.parameters is read for no numeric value (only self.config.leverage), so the optimizer runs N=1 identical trials and the deflated-Sharpe best-of-N term legitimately collapses. BUT the configuration -- and here specifically the EXPANSION from 5 to 9 factors and the choice of which three to add -- was manually selected across the developer's session as what raised the Sharpe, so the effective best-of-N is far larger than 1. The DSR gate counts optimizer trials, not the developer's manual search, so a mechanical DSR 'clearance' reflects zero OPTIMIZER search, not zero TOTAL selection.

Backtest_review/analyst: judge the ~1.13 full-sample Sharpe against the DSR/OOS gates knowing it is a bounded +0.16 over the 5-factor always-in and a 25%-win-rate fat-tail; the sandbox CI straddles zero. Weigh the always-in fully-invested risk profile (11% DD, not the gated 7%) for the risk officer.

Significance unconfirmed and the diversification gain is bounded -- analyst considerations. The sandbox is positive (total_return +2.48%, PF 1.51, PSR 0.69) but Sharpe 0.41 with a CI [-1.31, 1.88] straddling zero on 14 trades, and win_rate 14% (25% full-sample) is a fat-tailed trend-follower payoff (avg_win 3639 vs avg_loss 402), so trade-count-sensitive statistics must be read with that shape. The developer honestly reports the 5->9 factor expansion lifts Sharpe only ~+0.16 (0.97->1.13) because five of the nine factors read the same directional state (only volreg/skew/pressure add materially different information) -- the diversification benefit is real but bounded, not a step change. The ALWAYS-IN form is fully invested at all times (11% full-sample drawdown vs the gated version's ~7%) and, unlike the gated version, is NOT positive every year (loses ~4.5% in 2022) -- the developer correctly attributes 'positive every year' to the gated variant, not this one.

No code change warranted; the implementation is correct and the disclosure is exemplary.

The code is CORRECT and the developer's honesty is exemplary. Verified: the three new factors are correct -- volreg = -(sqrt(mean r^2,10)/sqrt(mean r^2,60) - 1) with rv_l guarded, streak = mean(sign(ret),20), vwdrift = sum(ret*vol)/sum(vol),20 with denominator guarded; the six carried-over factors are the same verified structures; all nine are z-scored over 120 and equal-weighted, with bullish-positive polarity so composite>0 -> LONG. The always-in logic is correct (should_enter takes the composite sign, should_exit fires only on a sign flip, restart closes and re-enters), sizing is the constant vol-normalized proven form (no conviction scaling), min_bars_required()->25 with internal _ready warmup is the verified-safe pattern, and there is no look-ahead. Not an L17 code-defect: win_rate 0.14 is the fat-tailed trend-follower shape (PF 1.51>1, positive full-sample), not a polarity/exit bug. The developer also corrects the hypothesis's own overclaims with measured facts (not-orthogonal factors, not-positive-every-year, bounded +0.16 gain) rather than repeating the brief.

Backtest Review

Sharpe
0.80
Total return
103.36%
Max drawdown
9.42%
Trades
173
Win rate
28.9%
Profit factor
1.70

avg_trade_return_pct 1.56% well above fees; PF 1.699, DD 9.42% — reasonable in isolation

Market-neutral (beta 0.027), positive alpha 0.069; low-turnover always-in form (173 trades) keeps fee drag minimal

The hypothesis's core claim is falsified by its own result: 9 factors gave Sharpe 0.802 < the 5-factor sibling's 0.829, and CI-low 0.172 < 0.223 — the diversification lever went the wrong way in the always-in form

NOT regime-robust: loses 2022 (-3.9%) and recent 2025 (-4.96%), with rolling Sharpe negative through early 2026 — the always-in version discarded the stability that was the 5-factor sibling's entire promotability case

Recent-regime loss (2025) means walk-forward OOS on a recent window and the 15-day holdout will very likely fail the >=0.5 / >=70% gates

Redundant, dominated twin of the already-queued 5-factor zero-param composite; OHLCV momentum-composite class (L9/L41, 0/213) without the stability exception

win_rate 0.289 with modest Sharpe — edge concentrated in a few outlier days (kurtosis 8.3)

Outcome Summary

The diversification lever does not scale monotonically — expanding a correlated OHLCV momentum composite from 5 to 9 factors lowered rather than raised the Sharpe, and going always-in-market to eliminate deflation traded away the regime-robustness (positive-every-year stability) that was the only thing making the 5-factor version promotable, so the change subtracted the exact property it needed to keep.

The analyst abandoned it at backtest review because the hypothesis was falsified by its own result — nine factors gave Sharpe 0.802 (below the 5-factor sibling's 0.829) and CI-low 0.172 (below 0.223), so the diversification lever went the wrong way in the always-in form — and dropping selectivity discarded the regime-robustness that was the 5-factor version's sole promotability case, leaving recent-regime losses that would very likely fail the walk-forward OOS (≥0.5) and 15-day holdout gates; as a zero-param strategy that cannot be tuned, it was a dominated, redundant twin of an already-queued composite in the dead 0/213 OHLCV momentum class without the stability exception.

A long-short, always-in-market, zero-free-parameter directional strategy on BTCUSDT.BINANCE daily bars that took the working diversification lever (the plain 5-factor composite was the batch's only regime-robust construction) and pushed it harder — expanding to nine pre-registered, equal-weight, z-scored daily OHLCV factors (trend, fast momentum, close-pressure, volume-flow, vol-skew, range-position, vol-regime, sign-streak, volume-weighted drift) with the position simply the sign of the composite — while removing every selectivity mechanism (gating, trend-agreement, trailing stops) that a prior variant had shown made things worse, betting more diversification plus an empty search space would lift the stable Sharpe over the deflated-Sharpe bar.

The backtest (2410 daily bars, 2019-2026) returned +103.4% over 173 trades with profit factor 1.699, avg_trade_return_pct 1.56%, low drawdown (9.42%), market-neutral character (beta 0.027, positive alpha 0.069), but a low win rate of 28.9% with edge concentrated in outlier days (kurtosis 8.3). Base Sharpe was only 0.802 (sharpe_ci_low 0.172) and information ratio -0.571, and the strategy lost money in 2022 (-3.9%) and recent 2025 (-4.96%) with rolling Sharpe negative through early 2026.

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