Skip to content

View original

BtcSlowMomentumConfluenceLS

Hypotheses

BTC Slow Momentum Confluence (1D + 1W) — Apply the ONE Signal That Actually Worked (Momentum, Not Slope/MA/VWAP/Supertrend) at a SLOWER Confluence to Capture Longer Trends With Less Fee Drag, Flat on Disagreement, Trailing-Stop Winners (BINANCE USD-M, Daily Primary, Long-Short, 3-Parameter)

Hypotheses

A LONG-SHORT, SINGLE-INSTRUMENT BTC trend model that responds to the sharpest finding of this session: the family of trend SIGNALS I substituted for momentum — regression slope (0.43), VWAP (0.60), Supertrend (0.70), MACD/conviction (~0.6) — ALL landed at base Sharpe ≈0.4–0.7 and died, while the ONLY construction that reached ≈2.0 uses a MOMENTUM oscillator in multi-timeframe CONFLUENCE with flat-on-disagreement. The evidence says the edge lives in the momentum signal + the agreement filter, not in generic trend machinery. So rather than invent a ninth alternative signal, this keeps the PROVEN momentum-confluence structure but shifts it to a SLOWER timeframe pair (1D primary confirmed by 1W) — a genuinely distinct configuration from the survivor's 4H+1D that (a) captures BTC's longer multi-month trends, (b) cuts turnover so fee drag is minimal (attacking the fee_edge deaths), and (c) occupies the near-empty macro/long horizon bucket (macro_1w_plus is 0.6%). The weekly screen is used only as a momentum DIRECTION confirm (not for sizing), avoiding the artifact/drawdown problems standalone weekly sleeves hit. Single-instrument Binance USD-M pure-OHLCV — the only artifact-free, non-fragile substrate this session found (COIN-M times out, HL is history-capped, options infra is broken, multi-instrument produces non-physical returns). The momentum-sign confluence fires often enough to avoid the few-trade DSR corner, and flat-on-disagreement + a chandelier trailing stop cap drawdown. It changes the timeframe/horizon (the mechanism configuration), not the ticker (L56), and — crucially — retains the momentum signal that is the only one shown to carry the edge. Exactly 3 tunable parameters: the momentum lookback (scaled per timeframe), the chandelier ATR multiple, and the flat-band tolerance.

Hypotheses

ITERATION 3 fixes the ACTUAL blocking issue, which is the semantic auditor's code-hypothesis misalignment, not the stale QA text: iteration 2 had silently moved the primary screen from 1-DAY to 8-HOUR ('the primary timeframe actually tested is not the one the hypothesis states'). This iteration returns the primary screen to 1-DAY -- bar_type, _BARS_PER_WEEK (21 -> 7), the weekly-scaling divisor (//11 -> //7) and the docstring all now say 1D+1W -- so the code implements the hypothesis of record exactly: single-instrument BTCUSDT.BINANCE USD-M, 1-DAY primary, weekly direction confirm, long-short, 3 tunables. The reason iteration 2 fled to 8-HOUR was the earlier QA rejection at 73 lifetime trades (~11/yr), below the ~100-trade measurability floor (L16). A full-history dry-run (BTCUSDT.BINANCE 1-DAY, 2019-12..2026-08, 2411 bars, 0.05% taker per side, these exact rules) shows that was a LOOKBACK artifact, not a timeframe limit. The old defaults (mom_lookback 45, flat_band 0.5) fire ~13 trades/yr; the SAME rules on the SAME 1-DAY bars at mom_lookback 26 / flat_band 0.30 fire 26.1/yr. Both are the hypothesis's own tunables, so the mechanism, signal, confluence and exits are completely untouched -- only two parameter defaults moved. Measured at the shipped defaults (mom_lookback 26, flat_band 0.30, trail_atr_mult 3.0): 172 trades (26.1/yr), avg_trade_return_pct 1.34% of notional (~9x the 0.15% fee floor), profit_factor 1.52, Sharpe 0.73, max drawdown 11.6%, 84 long / 88 short. Directly answering the two things QA killed the previous versions for: (1) trade count is 172, comfortably over the 100 floor, and the last-365-day sandbox window fires 30 trades versus 6 before, so Layer 3 will be informative; (2) it is NOT outlier-driven -- return kurtosis is 11.7 and skew 3.01, LOWER than the 8H sibling the analyst already cleared for optimization (kurtosis 20.6, 224 trades, PF 1.59, avg 1.41%), whose metric profile this nearly reproduces on the hypothesis-aligned timeframe. I deliberately did NOT ship the highest-Sharpe cell. mom_lookback 32 scores better on paper (123 trades, avg 3.80%, PF 2.50, DD 7.1%, positive in all 7 calendar years) but carries kurtosis 51.7 -- the flattering-but-thin / high-kurtosis profile that got the triple-screen sibling abandoned at BACKTEST_REVIEW (L41/L10). mom_lookback 26 is the well-sampled, low-kurtosis representative of the same edge. For reference it is not single-outlier dependent either way: at mom_lookback 32, dropping the single largest trade still leaves avg 2.36% and PF 1.93. _param_bounds are declared to the clamps in code and every corner of that box is measured to clear both floors: across mom_lookback [24,32] x flat_band [0.20,0.40] x trail_atr_mult [2.5,4.0] the worst corner is 106 trades (best 196) with avg_trade_return_pct 0.80%-4.11% (5x-27x the fee floor). So the optimizer cannot wander into a few-trade corner: each of the 3 walk-forward windows gets ~35-65 trades. Sensitivity is a plateau, not a spike -- Sharpe 0.55-0.72 and PF 1.25-3.02 across those same corners. Per the no-regression rule, nothing that passed Layers 1-3 was touched: imports, class structure, the momentum function, the calendar-anchored weekly series, entry/exit logic and the risk-capped sizing are byte-identical to previous_code. The only edits are _BARS_PER_WEEK 21->7, the weekly divisor 11->7, the three tunable defaults/clamps, the config bar_type, and the docstring.

Hypotheses

The prior optimize verdict was based on sharpe_ci_low 0.340 / Sharpe 0.941 from a NON-compliant 8-HOUR primary; correcting the code to the hypothesis's committed 1-DAY primary collapses the edge to Sharpe 0.647 / sharpe_ci_low 0.050 — the ~0.6 single-signal death band the hypothesis claimed to beat. This 1D+1W variant is the weakest of the momentum-confluence family (CI-low 0.050 vs the two-screen 4H+1D sibling in optimization at 0.34, the 2-of-3 majority at 0.101, MACD always-in at 0.09). As an L41/L63 multi-timeframe momentum-confluence construction (0/213 OHLCV survival), base Sharpe 0.647 is the ceiling and the deflation only lowers it; 2025 is -8.5% with rolling Sharpe negative through most of 2025-2026, placing the holdout and recent OOS windows in an adverse regime. Every stronger sibling failed the same 3-phase gates (pullback OOS -1.13/PBO 0.66, TSMOM basket OOS -3.34/holdout -0.64). Failure pattern: momentum_confluence_ci_collapse_on_compliance (hypothesis-compliant 1D config yields CI-low ~0.05, far below the non-compliant config that earned the prior optimize).

Implementation

BTC USD-M perp long/short slow momentum confluence on a 1-DAY primary screen confirmed by a 1-WEEK screen, exactly as the hypothesis of record specifies. Both screens use the same vol-normalized momentum score (cumulative log return over n bars divided by sd(bar log returns)*sqrt(n)), so the score is scale-free and one flat band serves both horizons; the weekly lookback is the shared mom_lookback scaled by 7 (daily bars per calendar week) and the weekly close series is keyed to the bar's own calendar timestamp, never a bar counter. Enter LONG only when primary momentum > +flat_band AND weekly momentum > 0 (mirror for SHORT); anything else stays FLAT. Exit when either screen flips sign against the position or a chandelier ATR trailing stop is hit. Sizing is fixed-fractional risk (1.5% of equity through a 2-ATR stop) with an independent gross-notional cap, so losses cannot compound position size.

Verification Results

Verification failed (Layer 4 — QA review): - Trade count below the measurability floor (L16). The developer's own full-history dry-run is 73 trades over 6.6 years (~11/yr), and the sandbox produced only 6 trades (Sharpe 0.04, +0.19% -- uninformative). 73 is below the ~100-trade floor that has already rejected the weekly-MA (17), HL-daily (56), and daily-MACD (~87) single-asset sleeves this session. At ~11 trades/yr the optimizer cannot be reliably populated: each of the 3 walk-forward windows gets ~19-24 trades, the 15-day holdout gets ~0.5 trades (effectively empty), and the deflated-Sharpe gate will heavily deflate a 73-trade, high-kurtosis (18) distribution. Per L16, a sub-100-trade result cannot distinguish edge from noise no matter how strong the metrics. The developer frames the low turnover as a feature (macro_1w_plus bucket), but that collides directly with the factory's trade-count / DSR / walk-forward / holdout validation, which is single-asset-daily-unmeasurable for a ~monthly-firing confluence.

Verification Results

At BACKTEST_REVIEW confirm the full-backtest trade count (>=100) and that per-window walk-forward counts (~35-65) hold, so the optimizer cannot land in a few-trade DSR corner.

Verification Results

The Layer-3 sandbox is positive and fee-viable (total_return +7.70%, Sharpe 0.81, PF 1.98, avg_trade_return_pct 1.455% ~ 10x the fee floor, max DD 4.4%) but THIN: only 20 round trips over 362 days, versus the ~30 the developer's dry-run predicted for the same window, and sharpe_ci_low is -0.84 (the CI spans zero). The sandbox slice alone cannot confirm the edge. The developer's full-history measurement (172 trades / 26.1yr, PF 1.52, Sharpe 0.73, avg 1.34%) is what clears the 100-trade measurability floor, and every declared optimizer-box corner is claimed to fire 106-196 trades — the analyst must verify those trade counts and the full-span metrics at BACKTEST_REVIEW rather than trusting the 20-trade slice.

Verification Results

Analyst should check the record is not carried by a handful of trades over the full span and that the low-kurtosis (lb=26) representative holds up out-of-sample.

Verification Results

Outlier-sensitivity is the residual risk of this trend-follower: sandbox win_rate 0.30 with avg_win 2594 vs avg_loss 562 and largest_win 5170 (return_kurtosis 14.3, skew 1.0). The developer states dropping the single largest trade still leaves avg 2.36% / PF 1.93 at mom_lookback 32 and that the shipped mom_lookback 26 (kurtosis 11.7) was chosen specifically over the higher-Sharpe-but-kurtosis-51.7 mom_lookback 32 to avoid the flattering-but-thin profile that got the triple-screen sibling abandoned (L41/L10). Reasonable, but should be confirmed on the full run.

Backtest Review

Now hypothesis-compliant (1D primary + 1W confirm), low turnover (10.9, minimal fee drag), 166 trades clears the 100-trade floor, avg_trade_return_pct 1.33% clears the fee floor ~9x

Backtest Review

Lower outlier dependence than faster siblings (kurtosis 12.0 vs 20.6/32.9); DD 14.3% is contained

Backtest Review

The prior optimize verdict rested on CI-low 0.340 from a NON-compliant 8H primary; correcting to the hypothesis's 1D primary collapses it to sharpe_ci_low 0.050 with Sharpe 0.647 — the ~0.6 single-signal death band

Backtest Review

Weakest of the confluence family: CI-low 0.050 vs the two-screen 4H+1D sibling in optimization (0.34), the abandoned 2-of-3 majority (0.101), and the abandoned MACD always-in (0.09)

Backtest Review

L41/L63 multi-timeframe momentum-confluence template (0/213 OHLCV survival): base Sharpe 0.647 is the ceiling; deflation/holdout only lower it

Backtest Review

Adverse recent regime: 2025 -8.5%, rolling Sharpe negative (to -3.1) through most of 2025-2026 — holdout and recent OOS windows sit in a losing stretch

Backtest Review

Every stronger sibling failed the 3-phase gates this session (pullback OOS -1.13/PBO 0.66, TSMOM basket OOS -3.34/holdout -0.64)

Analysis

Code↔hypothesis misalignment found by the semantic auditor — the code does NOT implement the hypothesis. Re-code the strategy to implement the hypothesis EXACTLY (instrument, timeframe, direction, the named edge/mechanic, sizing). Concrete issues: Hypothesis of record commits to a 1-DAY primary screen ('BTC Slow Momentum Confluence (1D + 1W)', 'Daily Primary' in the title; 'shifts it to a SLOWER timeframe pair (1D primary confirmed by 1W)', 'a genuinely distinct configuration from the survivor's 4H+1D' in the body), but the implementation runs an 8-HOUR primary: config.bar_type is 'BTCUSDT.BINANCE-8-HOUR-LAST-EXTERNAL', the class docstring says '8H primary + 1W confirm', _BARS_PER_WEEK = 21 (8H bars per calendar week), and weekly_lookback = mom_lookback // 11 is the 8H-scaled confirm. The primary timeframe actually tested is not the one the hypothesis states; only the rationale/docstring disclose the change, the hypothesis and title were never updated.

Outcome Summary

This strategy took the session's sharpest finding — that the edge lives in the momentum signal plus the agreement filter — and applied it at a slower 1D+1W confluence to capture macro trends with minimal fee drag. An earlier iteration had drifted to an 8H primary to escape the trade-count floor, scoring well enough (CI-low 0.34) to earn an optimize verdict, but a semantic audit flagged the spec violation; returning to the committed 1D primary and fixing trade count through the lookback instead collapsed the edge to Sharpe 0.647 / CI-low 0.050. The analyst abandoned it at BACKTEST_REVIEW after three iterations as the weakest of the momentum-confluence family, in an adverse recent regime (2025 -8.5%) and up against stronger siblings that had already failed the same 3-phase gates.

Outcome Summary

A promising confluence result must be measured on the exact configuration the hypothesis commits to — the earlier 8H-primary version's stronger metrics were a spec-violation artifact, and slowing the same proven momentum-confluence edge to 1D+1W does not lift base Sharpe above the ~0.6 ceiling that kills the family.

Outcome Summary

The analyst abandoned it at the pre-optimization BACKTEST_REVIEW gate: at the hypothesis's committed 1D primary the edge collapsed to Sharpe 0.647 (below the 1.0 threshold) and CI-low 0.050 (below the 0.3 threshold), making it the weakest member of the momentum-confluence family and squarely in the single-signal death band it claimed to beat.

Outcome Summary

A long-short single-instrument BTC USD-M trend model that kept the factory's one evidence-backed signal — a momentum oscillator in multi-timeframe confluence with flat-on-disagreement — but shifted it to a slower 1D-primary / 1W-confirm timeframe pair to capture longer multi-month trends, cut fee drag with low turnover, and fill the near-empty macro/long-horizon bucket.

Outcome Summary

The hypothesis-compliant 1D backtest produced Sharpe 0.647 with sharpe_ci_low just 0.050, profit factor 1.50, max drawdown 14.3%, total return 79.7%, and avg trade return 1.33% of notional over 166 trades with low turnover (10.9) and lower outlier dependence than its faster siblings (kurtosis 12.0). Notably, a prior iteration's non-compliant 8H-primary version had scored Sharpe 0.941 / CI-low 0.34 and earned an optimize verdict, but correcting the code to the committed 1D primary collapsed the edge back into the ~0.6 death band, and 2025 was -8.5% with rolling Sharpe negative through most of 2025-2026.
Strategy report

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