# BTC 4H chronological pipeline comparison — preregistration Declared 2026-09-21 before candidate training or results. No promotion, production parameter change, or Pine export is authorized by this protocol. All historical windows have been inspected previously: this is retrospective chronological evaluation, not an untouched holdout. ## Scope and chronology Use the current ordered 55-input, dense 16/8-hidden tanh architecture (55 slots, including repeated feature names). Outer windows are calendar 2023, 2024, 2025, and 2026 through the final retained export bar. End bounds are exclusive. Expanding starts 2017-12-01; trailing windows start exactly three/five calendar years before each origin. Earliest origin 2023 ensures complete five-year source coverage; 2022 bear is not an outer test. Regimes use the prior day's completed close against a lagged 200-day SMA, independently of model performance. For each origin O, reserve [O−6 months,O) for seed/threshold calibration. Weight-fitting uses [history start,O−6 months). Phase-one early stopping uses its final three months; supervised training ends earlier. Purge ten-bar labels crossing the supervised/validation boundary and discard labels with endpoints outside the fit frame. CMA optimizes two six-month fit periods [O−18 months,O−12 months) and [O−12 months,O−6 months). Those periods are fitting objectives, not independent validation. No weight refit occurs after calibration. ## Equal bounded budget Three arms × four origins × two seeds (101,202) = 24 fits. Each fit: at most 60 phase-one epochs with existing patience 20; CMA 8 generations × population 8, sigma 0.05 and L2 anchor 0.001. Stop convergence is recorded. Exactly 128 calibration configurations per seed: the CMA recommendation plus 127 draws from one identical fixed RNG stream, entry uniform[-600,600], exit and exit-confirmation uniform[-750,750], trailing stop one of 0,5,…45 percent. Exit confirmation on, entry confirmation off, score windows 1, MVRV suppression off, regime gating off throughout. No additional models, signals, incumbent neighborhoods, or adaptive rounds. CMA objective: mean of calendar Calmar on both fit periods, with undefined Calmar mapped to 0 solely for selection, plus existing L2 anchor. All periods retained, including inactive periods. Calibration rank is calendar Calmar (undefined 0), then net return, then smaller drawdown; ties retain first encountered candidate. No outer statistic participates. Training/tuning budgets are maxima, actual counts saved. A wall-clock 30-minute ceiling terminates the whole comparison with failed status, never a partial winner. Dry validation performs no fitting. No budget change based on candidate results. ## Accounting and evidence Use strategies.mlp_accounting on full signals before selecting metric windows: existing close-to-close, full-equity long-only execution; 0.5% additive entry/exit commissions; initial-capital drawdown; calendar annualization. Flat starts for fitting subperiods, calibration, and outer windows; preceding observations warm signal crossings, never create carry-in holdings. Entry commission falls on the next return interval, matching the existing engine. A final-bar entry remains open and its deferred commission falls outside the available window; disclose terminal positions. Terminal open positions are marked to market, not liquidated. This is the Python accounting contract, not asserted TradingView fill/slippage parity. Compare buy-and-hold, cash, and a predeclared trend position held when previous completed daily close exceeds its prior-history 200-day SMA. All use same fees/accounting and start flat. Show current promoted model separately as hindsight-selected reference; it is never included in candidate selection. Preserve every annual period and all daily returns. Descriptive paired daily-block bootstrap intervals may be added by the audit report without changing selection or decisions. Freeze selected artifact bytes/hash and exact parameters in selection.json before any outer candidate replay. Save both seeds' artifacts, all 128-per-seed calibration metrics, split boundaries, data/schema/protocol hashes, runtime and actual evaluation counts. Input gate: strict increasing finite timestamps, positive finite prices, every required feature column and finite values after leading warmup, sufficient history. Drop final export row conservatively before evaluation; record its timestamp. No interpolation of missing interior features. Inputs are stale exports, not fresh September data. Higher-timeframe realtime confirmation, macro/on-chain revisions, and missing publication vintages prevent a point-in-time deployability claim. ## Decision and failure rules An arm is promising only if its chained outer return exceeds the trend baseline, it beats trend in at least 3/4 periods, and every outer period has at least 3 completed trades. Otherwise classify as not demonstrated; insufficient trade coverage is inconclusive, not a successful cash prediction. Report all arms, never promote or pick a production winner. Data gate failures, temporal leakage, nonfinite fitting results, schema changes, or timeout abort a valid-comparison claim. Results may remain useful diagnostics but do not become a completed partial experiment. Reproducibility: CPU phase-one training uses one PyTorch thread and deterministic algorithms; seed, backend, dependency versions and code hashes are recorded. The runner captures parameter-sync, Pine and chart-data gates before training. Every nonempty output directory is refused; use a separate directory for dry validation. Selection JSON and artifact hashes are rechecked before replay, together with source hashes. Floating-point identity across other platforms is not assumed.