The question
Markets move through spells that look different: calm drifts, choppy ranges, violent swings. The study asks whether a model that first recognises which spell the market is in, and then uses a classifier trained for that spell, predicts short-horizon direction better than one classifier trained on everything.
The answer matters less as a trading edge than as a test of method: can the terminal show, honestly and repeatably, where such a model helps, where it does not, and how much of that can be trusted?
Method
- Data
M5 bars for XAUUSD (gold) and QQQM (a Nasdaq-100 ETF), with D1/H4/H1/M15/M5 context aligned to the M5 observation coordinate. Prices stay on the owner's computer and are not published.
Source:
experiments/cp2_report_draft2_v1/manuscript_v1/CH03/CH03_DRAFT2.md§3.2.1 · source-inspected- Regimes
A Gaussian hidden Markov model with K4 states and diag covariance assigns each bar a latent state; the model is frozen after training.
Source:
experiments/cp2_report_draft2_v1/manuscript_v1/CH03/CH03_DRAFT2.md§3.2.4 Table 3.3 · source-inspected- Target
Down, Neutral or Up from the close return to the sixth subsequent M5 row: Up when r_t>0.001, Down when r_t<−0.001, Neutral in between, with an elapsed horizon of 25–35 minutes.
Source:
experiments/cp2_report_draft2_v1/manuscript_v1/CH03/CH03_DRAFT2.md§3.2.2 · source-inspected- Models
Adaptive: an eligible state-specific XGBoost bundle chosen by the regime model, with a global fallback. Global: one XGBoost classifier that pools the original feature population.
Source:
experiments/cp2_report_draft2_v1/manuscript_v1/CH03/CH03_DRAFT2.md§3.2.4 · source-inspected- Evaluation
Four expanding walk-forward development folds, a fixed holdout and a later historical fresh period, each reported separately. Accuracy, fixed-three-class Macro-F1, support-weighted F1 and confusion matrices describe complementary aspects of classification.
Source:
experiments/cp2_report_draft2_v1/manuscript_v1/CH03/CH03_DRAFT2.md§3.2.6, §3.4.1 · source-inspected
Results at a glance
| Finding | Result | Evidence |
|---|---|---|
| Regime decoding check (MR-01) | CHECKReplication gate pass in every population. Causal and whole-sequence labels agree on 0.9861179970252851 to 0.9985443959243085 of rows. Largest change in Macro-F1: not in the results export. | reported (owner-run; metrics file as posted; not recomputed) |
| Adaptive vs global | COMPARISONWhole-sequence Macro-F1 of the regime-routed model next to the relisted global model for each instrument's fixed holdout and historical fresh period, as the claims ledger records them (chart below). Count of populations in which it is ahead: not in the results export. | reported |
| TimesFM 2.5, zero-shot | NEGATIVEMean absolute error, model minus persistence (above 0 = model worse): holdout 9.049291580353995e-05, fresh 0.00015244070356988247. | reported · containment_qualified: false |
| EDL study | EXPLORATORYK01: positive exploratory diagnostic; K02–K10, K16–K22: inconclusive. Development period only; not confirmed and not a claim. | reported · not confirmatory |
| Synthetic regime recovery | SYNTHETICNumber of synthetic fits: 1920. Number of parameter cells: not in the results export. They verify the method; they say nothing about real markets. | reported (owner-run on SACF; file as delivered; not re-fitted) |
Each result is read at build time from committed result files, with its source and evidence label. Negative and inconclusive results are shown as found.
Every value in the results export, with source and evidence
Headline model figures: development, fixed holdout and historical fresh
- values as written in the Chapter 4 claims ledger
- populations reported separately, never pooled
Direction-model figures exactly as the Chapter 4 results-claims ledger of the CP2 report draft records them: the regime-adaptive model under its original whole-sequence regime labels, and the unchanged global model relisted from its saved metrics, for each instrument on the development folds (equal mean of the four folds, as the file gives it), the fixed holdout and the historical fresh period. Populations are named as the ledger names them; the ledger rows give no calendar dates. Exploratory research results, not a trading recommendation and not investment advice.
| Value | Result | Evidence | Source |
|---|---|---|---|
| QQQM development (equal mean of the four folds) whole-sequence Macro-F1 (C04-R179) | 0.3896784170912872 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R179/value_as_written |
| QQQM development (equal mean of the four folds) whole-sequence accuracy (C04-R181) | 0.468969167659124 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R181/value_as_written |
| QQQM fixed holdout whole-sequence Macro-F1 (C04-R99) | 0.391185042763235 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R99/value_as_written |
| QQQM fixed holdout whole-sequence accuracy (C04-R101) | 0.47222013946164804 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R101/value_as_written |
| QQQM fixed holdout global Macro-F1 (relisted) (C04-R105) | 0.3559988734227451 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R105/value_as_written |
| QQQM historical fresh whole-sequence Macro-F1 (C04-R109) | 0.3943384106077888 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R109/value_as_written |
| QQQM historical fresh whole-sequence accuracy (C04-R111) | 0.44534412955465585 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R111/value_as_written |
| QQQM historical fresh global Macro-F1 (relisted) (C04-R115) | 0.3624472129438476 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R115/value_as_written |
| XAUUSD development (equal mean of the four folds) whole-sequence Macro-F1 (C04-R185) | 0.3439477396205161 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R185/value_as_written |
| XAUUSD development (equal mean of the four folds) whole-sequence accuracy (C04-R187) | 0.7081746552856205 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R187/value_as_written |
| XAUUSD fixed holdout whole-sequence Macro-F1 (C04-R159) | 0.40280872264291845 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R159/value_as_written |
| XAUUSD fixed holdout whole-sequence accuracy (C04-R161) | 0.4931092987260388 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R161/value_as_written |
| XAUUSD fixed holdout global Macro-F1 (relisted) (C04-R165) | 0.3634154387733373 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R165/value_as_written |
| XAUUSD historical fresh whole-sequence Macro-F1 (C04-R169) | 0.37821750685585914 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R169/value_as_written |
| XAUUSD historical fresh whole-sequence accuracy (C04-R171) | 0.4774417451660882 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R171/value_as_written |
| XAUUSD historical fresh global Macro-F1 (relisted) (C04-R175) | 0.3465026681071915 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R175/value_as_written |
MR-01: causal versus whole-sequence regime labels
REPLICATION GATE PASS IN EVERY POPULATION- sensitivity analysis of a stated limitation; exploratory; not a new model, not confirmatory
- primary variant: causal_online_viterbi_cold
The original regime labels were decoded over whole sequences, which can use bars after the row being labelled. MR-01 re-decoded them causally (online, no later bars) and compared the two. For each instrument and population the table gives the replication-gate status and the share of rows on which the causal labels equal the whole-sequence labels, as written in the metrics file. Populations are not pooled and instruments are not averaged.
| Value | Result | Evidence | Source |
|---|---|---|---|
| Label recorded with the result | sensitivity analysis of a stated limitation; exploratory; not a new model, not confirmatory | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /label |
| Primary causal variant | causal_online_viterbi_cold | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /primary_variant |
| Run date | 2026-11-02 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /run_date |
| QQQM development fold 1: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1development_fold_1/status |
| QQQM development fold 1: label agreement, causal vs whole-sequence | 0.9958978430594151 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1development_fold_1/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| QQQM development fold 2: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1development_fold_2/status |
| QQQM development fold 2: label agreement, causal vs whole-sequence | 0.9943099113404791 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1development_fold_2/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| QQQM development fold 3: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1development_fold_3/status |
| QQQM development fold 3: label agreement, causal vs whole-sequence | 0.9915310308323408 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1development_fold_3/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| QQQM development fold 4: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1development_fold_4/status |
| QQQM development fold 4: label agreement, causal vs whole-sequence | 0.9985443959243085 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1development_fold_4/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| QQQM fixed holdout: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1fixed_holdout/status |
| QQQM fixed holdout: label agreement, causal vs whole-sequence | 0.9939266701657045 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1fixed_holdout/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| QQQM historical fresh: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1historical_fresh/status |
| QQQM historical fresh: label agreement, causal vs whole-sequence | 0.9919028340080972 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1historical_fresh/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| XAUUSD development fold 1: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1development_fold_1/status |
| XAUUSD development fold 1: label agreement, causal vs whole-sequence | 0.9983453709783322 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1development_fold_1/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| XAUUSD development fold 2: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1development_fold_2/status |
| XAUUSD development fold 2: label agreement, causal vs whole-sequence | 0.9965331582403152 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1development_fold_2/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| XAUUSD development fold 3: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1development_fold_3/status |
| XAUUSD development fold 3: label agreement, causal vs whole-sequence | 0.9977675640183847 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1development_fold_3/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| XAUUSD development fold 4: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1development_fold_4/status |
| XAUUSD development fold 4: label agreement, causal vs whole-sequence | 0.9962967826657912 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1development_fold_4/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| XAUUSD fixed holdout: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1fixed_holdout/status |
| XAUUSD fixed holdout: label agreement, causal vs whole-sequence | 0.9903559947612811 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1fixed_holdout/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| XAUUSD historical fresh: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1historical_fresh/status |
| XAUUSD historical fresh: label agreement, causal vs whole-sequence | 0.9861179970252851 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1historical_fresh/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
SYNTH: regime recovery on synthetic series
- synthetic method verification only; says nothing about real markets
Synthetic method verification only; says nothing about real markets. The CP2 hidden-Markov configuration was fitted to simulated series whose true regimes are known, over a grid of regime counts, persistence, separation and series length. Recovery is the adjusted Rand index (ARI) between true and fitted states, where 1 is exact. The chart places every grid cell's stored mean ARI by regime separation, for whole-sequence and causal decoding.
| Value | Result | Evidence | Source |
|---|---|---|---|
| Label recorded with the result | synthetic method verification only; says nothing about real markets | reported (owner-run on SACF; file as delivered; not re-fitted) | experiments/cp2_synth_regime_v1/results/run1/synth_regime_metrics_v1.json @ fa88153ed383 · /label |
| Number of fits | 1920 | reported (owner-run on SACF; file as delivered; not re-fitted) | experiments/cp2_synth_regime_v1/results/run1/synth_regime_metrics_v1.json @ fa88153ed383 · /n_fits |
| Fitted model: number of states | 4 | reported (owner-run on SACF; file as delivered; not re-fitted) | experiments/cp2_synth_regime_v1/results/run1/synth_regime_metrics_v1.json @ fa88153ed383 · /fitted_config/n_states |
| Fitted model: covariance type | diag | reported (owner-run on SACF; file as delivered; not re-fitted) | experiments/cp2_synth_regime_v1/results/run1/synth_regime_metrics_v1.json @ fa88153ed383 · /fitted_config/covariance_type |
POWER: design sensitivity of the TimesFM and EDL results
- design-sensitivity analysis from committed summaries; approximate; not a re-analysis of the data
How small an effect the committed TimesFM and EDL designs could have detected, computed from their committed summaries. It does not re-test any hypothesis, does not change a committed result and does not say that a result would change with more data; sessions-needed figures are planning magnitudes only.
| Value | Result | Evidence | Source |
|---|---|---|---|
| Label recorded with the result | design-sensitivity analysis from committed summaries; approximate; not a re-analysis of the data | independently computed from committed summaries (method experiments/cp2_power_v1/METHOD.md); inputs reported | experiments/cp2_power_v1/results/power_metrics.json @ fa88153ed383 · /label |
| TimesFM holdout: sessions | 185 | independently computed from committed summaries (method experiments/cp2_power_v1/METHOD.md); inputs reported | experiments/cp2_power_v1/results/power_metrics.json @ fa88153ed383 · /timesfm/regions/1/n_sessions |
| TimesFM holdout: observed direction | model_worse | independently computed from committed summaries (method experiments/cp2_power_v1/METHOD.md); inputs reported | experiments/cp2_power_v1/results/power_metrics.json @ fa88153ed383 · /timesfm/regions/1/observed_direction |
| TimesFM holdout: minimum detectable improvement at 80% power, as a fraction of persistence MAE | 0.021622812464768215 | independently computed from committed summaries (method experiments/cp2_power_v1/METHOD.md); inputs reported | experiments/cp2_power_v1/results/power_metrics.json @ fa88153ed383 · /timesfm/regions/1/sensitivity/mde_fraction_of_mae_persistence/power_0.80 |
| TimesFM fresh: sessions | 15 | independently computed from committed summaries (method experiments/cp2_power_v1/METHOD.md); inputs reported | experiments/cp2_power_v1/results/power_metrics.json @ fa88153ed383 · /timesfm/regions/0/n_sessions |
| TimesFM fresh: observed direction | model_worse | independently computed from committed summaries (method experiments/cp2_power_v1/METHOD.md); inputs reported | experiments/cp2_power_v1/results/power_metrics.json @ fa88153ed383 · /timesfm/regions/0/observed_direction |
| TimesFM fresh: minimum detectable improvement at 80% power, as a fraction of persistence MAE | 0.06134196370543393 | independently computed from committed summaries (method experiments/cp2_power_v1/METHOD.md); inputs reported | experiments/cp2_power_v1/results/power_metrics.json @ fa88153ed383 · /timesfm/regions/0/sensitivity/mde_fraction_of_mae_persistence/power_0.80 |
| EDL smallest effect size of interest (frozen contract) | 0.0001 | independently computed from committed summaries (method experiments/cp2_power_v1/METHOD.md); inputs reported | experiments/cp2_power_v1/results/power_metrics.json @ fa88153ed383 · /edl/constants/sesoi |
| EDL alpha (one-sided) | 0.05 | independently computed from committed summaries (method experiments/cp2_power_v1/METHOD.md); inputs reported | experiments/cp2_power_v1/results/power_metrics.json @ fa88153ed383 · /edl/constants/alpha |
| EDL K01: committed sessions | 293 | independently computed from committed summaries (method experiments/cp2_power_v1/METHOD.md); inputs reported | experiments/cp2_power_v1/results/power_metrics.json @ fa88153ed383 · /edl/contrasts/0/aggregate/committed_sessions |
| EDL K01: power at the SESOI (one-sided alpha 0.05) | 0.08793576060301156 | independently computed from committed summaries (method experiments/cp2_power_v1/METHOD.md); inputs reported | experiments/cp2_power_v1/results/power_metrics.json @ fa88153ed383 · /edl/contrasts/0/aggregate/alpha_one_sided/power_at_sesoi |
| EDL K01: minimum detectable effect at 80% power | 0.000853645832344737 | independently computed from committed summaries (method experiments/cp2_power_v1/METHOD.md); inputs reported | experiments/cp2_power_v1/results/power_metrics.json @ fa88153ed383 · /edl/contrasts/0/aggregate/alpha_one_sided/mde/power_0.80 |
| EDL K01: sessions for 80% power at the SESOI (planning magnitude) | 21352 | independently computed from committed summaries (method experiments/cp2_power_v1/METHOD.md); inputs reported | experiments/cp2_power_v1/results/power_metrics.json @ fa88153ed383 · /edl/contrasts/0/aggregate/alpha_one_sided/sessions_needed/power_0.80 |
TimesFM 2.5 zero-shot versus last-close persistence
negative- containment_qualified: false
- exploratory, descriptive; opened periods; not confirmatory
- evidence_label: reported
Does one pinned TimesFM 2.5 checkpoint forecast the six-bar-ahead endpoint better than assuming no change (last-close persistence)? The primary measure is the paired MAE difference, model minus persistence, in the holdout and fresh regions, reported separately. A positive value means the model was worse. The bootstrap interval is exploratory, not a confirmatory confidence interval.
| Value | Result | Evidence | Source |
|---|---|---|---|
| containment_qualified | false | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /containment_qualified |
| Source label | exploratory, descriptive; opened periods; not confirmatory | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /source_label |
| Run date | 2026-11-01 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /run_date |
| holdout: primary, MAE model minus persistence (above 0 = model worse) | 9.049291580353995e-05 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/24/value |
| holdout: bootstrap interval p05 (exploratory) | 6.812455443949697e-05 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/24/ci/lower_p05 |
| holdout: bootstrap interval p95 (exploratory) | 0.0001130125802933661 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/24/ci/upper_p95 |
| holdout: sessions | 185 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/24/n_sessions |
| holdout: MAE, TimesFM | 0.0018584222789986195 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/25/value |
| holdout: MAE, last-close persistence | 0.0017679293631950796 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/26/value |
| fresh: primary, MAE model minus persistence (above 0 = model worse) | 0.00015244070356988247 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/0/value |
| fresh: bootstrap interval p05 (exploratory) | 8.82182977763805e-05 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/0/ci/lower_p05 |
| fresh: bootstrap interval p95 (exploratory) | 0.00021964950229628156 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/0/ci/upper_p95 |
| fresh: sessions | 15 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/0/n_sessions |
| fresh: MAE, TimesFM | 0.0019771235873262297 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/1/value |
| fresh: MAE, last-close persistence | 0.0018246828837563472 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/2/value |
| Verdict (claims ledger) (C04-R17) | negative | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R17/value_as_written |
EDL: development-period diagnostics
K01: positive exploratory diagnostic; K02–K10, K16–K22: inconclusive- containment_qualified: false
- EDL E2 development-period metrics written by the cp2_edl_runner_v1 E2 runner on the owner's PC; exploratory, assumption-conditional diagnostics; not confirmatory
- evidence_label: reported
Exploratory, assumption-conditional diagnostics of the EDL trading-rule candidates on the development period only, in paper-money units (fraction of a notional K). Contrast K01 compares candidate C02 with C01. No holdout or fresh EDL result exists in a committed file. Not confirmatory; no study-wide error rate is certified.
| Value | Result | Evidence | Source |
|---|---|---|---|
| containment_qualified | false | reported | experiments/cp2_tfm_edl_results_v1/results/edl/edl_metrics.json @ fa88153ed383 · /containment_qualified |
| Region | development | reported | experiments/cp2_tfm_edl_results_v1/results/edl/edl_metrics.json @ fa88153ed383 · /region |
| Run date | 2026-11-01 | reported | experiments/cp2_tfm_edl_results_v1/results/edl/edl_metrics.json @ fa88153ed383 · /run_date |
| K01 (C02−C01): development summary, fraction of K | 0.0010162989890025384 | reported | experiments/cp2_tfm_edl_results_v1/results/edl/edl_metrics.json @ fa88153ed383 · /edl_contrasts/0/development_summary |
| K01: empirical p (one-sided) | 0.0015369660828796455 | reported | experiments/cp2_tfm_edl_results_v1/results/edl/edl_metrics.json @ fa88153ed383 · /edl_contrasts/0/empirical_p |
| K01: Holm-adjusted p | 0.04457201640350972 | reported | experiments/cp2_tfm_edl_results_v1/results/edl/edl_metrics.json @ fa88153ed383 · /edl_contrasts/0/adjusted |
| K01: fold 4 mean | -0.0004321240777458181 | reported | experiments/cp2_tfm_edl_results_v1/results/edl/edl_metrics.json @ fa88153ed383 · /edl_contrasts/0/folds/4/mean |
| One-SE selection: status | QUALIFIED | reported | experiments/cp2_tfm_edl_results_v1/results/edl/edl_metrics.json @ fa88153ed383 · /edl_one_se/status |
| One-SE selection: selected candidate | C02 | reported | experiments/cp2_tfm_edl_results_v1/results/edl/edl_metrics.json @ fa88153ed383 · /edl_one_se/selected |
| K01 verdict (claims ledger) (C04-R41) | positive exploratory diagnostic | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R41/value_as_written |
| K02–K10, K16–K22 verdict (claims ledger) (C04-R44) | inconclusive | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R44/value_as_written |
| Holdout and fresh EDL families (claims ledger) (C04-R55) | NO QUALIFIED EDL EMPIRICAL RESULTS | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R55/value_as_written |
Regime decoding check
Historical regime labels were decoded with the whole sequence, which quietly uses later bars. The MR-01 study re-decoded every bar causally, using only the past, and compared the two.
experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383; evidence reported (owner-run; metrics file as posted; not recomputed). sensitivity analysis of a stated limitation; exploratory; not a new model, not confirmatoryValues in this chart, with source and evidence
| Value | Result | Evidence | Source |
|---|---|---|---|
| QQQM development fold 1: label agreement, causal vs whole-sequence | 0.9958978430594151 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1development_fold_1/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| QQQM development fold 1: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1development_fold_1/status |
| QQQM development fold 2: label agreement, causal vs whole-sequence | 0.9943099113404791 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1development_fold_2/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| QQQM development fold 2: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1development_fold_2/status |
| QQQM development fold 3: label agreement, causal vs whole-sequence | 0.9915310308323408 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1development_fold_3/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| QQQM development fold 3: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1development_fold_3/status |
| QQQM development fold 4: label agreement, causal vs whole-sequence | 0.9985443959243085 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1development_fold_4/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| QQQM development fold 4: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1development_fold_4/status |
| QQQM fixed holdout: label agreement, causal vs whole-sequence | 0.9939266701657045 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1fixed_holdout/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| QQQM fixed holdout: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1fixed_holdout/status |
| QQQM historical fresh: label agreement, causal vs whole-sequence | 0.9919028340080972 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1historical_fresh/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| QQQM historical fresh: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/QQQM~1historical_fresh/status |
| XAUUSD development fold 1: label agreement, causal vs whole-sequence | 0.9983453709783322 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1development_fold_1/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| XAUUSD development fold 1: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1development_fold_1/status |
| XAUUSD development fold 2: label agreement, causal vs whole-sequence | 0.9965331582403152 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1development_fold_2/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| XAUUSD development fold 2: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1development_fold_2/status |
| XAUUSD development fold 3: label agreement, causal vs whole-sequence | 0.9977675640183847 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1development_fold_3/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| XAUUSD development fold 3: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1development_fold_3/status |
| XAUUSD development fold 4: label agreement, causal vs whole-sequence | 0.9962967826657912 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1development_fold_4/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| XAUUSD development fold 4: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1development_fold_4/status |
| XAUUSD fixed holdout: label agreement, causal vs whole-sequence | 0.9903559947612811 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1fixed_holdout/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| XAUUSD fixed holdout: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1fixed_holdout/status |
| XAUUSD historical fresh: label agreement, causal vs whole-sequence | 0.9861179970252851 | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1historical_fresh/variants/causal_online_viterbi_cold/label_agreement_with_whole_sequence |
| XAUUSD historical fresh: replication gate | PASS | reported (owner-run; metrics file as posted; not recomputed) | experiments/cp2_mr01_causal_v1/results/mr01_metrics.json @ fa88153ed383 · /populations/XAUUSD~1historical_fresh/status |
Adaptive vs global
In the same files, the regime-routed model's Macro-F1 sits beside the single global model's, population by population. Development values are not trading evidence.
Values in this chart, with source and evidence
| Value | Result | Evidence | Source |
|---|---|---|---|
| QQQM development (equal mean of the four folds) whole-sequence Macro-F1 (C04-R179) | 0.3896784170912872 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R179/value_as_written |
| QQQM fixed holdout whole-sequence Macro-F1 (C04-R99) | 0.391185042763235 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R99/value_as_written |
| QQQM fixed holdout global Macro-F1 (relisted) (C04-R105) | 0.3559988734227451 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R105/value_as_written |
| QQQM historical fresh whole-sequence Macro-F1 (C04-R109) | 0.3943384106077888 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R109/value_as_written |
| QQQM historical fresh global Macro-F1 (relisted) (C04-R115) | 0.3624472129438476 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R115/value_as_written |
| XAUUSD development (equal mean of the four folds) whole-sequence Macro-F1 (C04-R185) | 0.3439477396205161 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R185/value_as_written |
| XAUUSD fixed holdout whole-sequence Macro-F1 (C04-R159) | 0.40280872264291845 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R159/value_as_written |
| XAUUSD fixed holdout global Macro-F1 (relisted) (C04-R165) | 0.3634154387733373 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R165/value_as_written |
| XAUUSD historical fresh whole-sequence Macro-F1 (C04-R169) | 0.37821750685585914 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R169/value_as_written |
| XAUUSD historical fresh global Macro-F1 (relisted) (C04-R175) | 0.3465026681071915 | reported | experiments/cp2_report_draft2_v1/manuscript_v1/CH04/CH04_RESULTS_CLAIMS.csv @ fa88153ed383 · C04-R175/value_as_written |
Foundation-model test
A separate, pre-registered test asked whether one pinned TimesFM 2.5 checkpoint, used zero-shot, forecasts the six-bar-ahead return better than simply assuming no change. The result is published as found.
Values in this chart, with source and evidence
| Value | Result | Evidence | Source |
|---|---|---|---|
| holdout: MAE, last-close persistence | 0.0017679293631950796 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/26/value |
| holdout: MAE, TimesFM | 0.0018584222789986195 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/25/value |
| holdout: primary, MAE model minus persistence (above 0 = model worse) | 9.049291580353995e-05 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/24/value |
| holdout: sessions | 185 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/24/n_sessions |
| fresh: MAE, last-close persistence | 0.0018246828837563472 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/2/value |
| fresh: MAE, TimesFM | 0.0019771235873262297 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/1/value |
| fresh: primary, MAE model minus persistence (above 0 = model worse) | 0.00015244070356988247 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/0/value |
| fresh: sessions | 15 | reported | experiments/cp2_tfm_edl_results_v1/results/timesfm/timesfm_metrics.json @ fa88153ed383 · /metrics/0/n_sessions |
Limitations
- Target-maturity purge not established (MR02).The inspected original adjacent split functions did not establish an explicit target-maturity purge for overlapping targets. No affected-row count is calculated and no performance correction is claimed.
Source:
experiments/cp2_report_draft2_v1/manuscript_v1/CH03/CH03_DRAFT2.md§3.2.2 · source-inspected - Exploratory, not confirmatory.No study-wide error rate is certified. The separate EDL study found one positive exploratory diagnostic in development; it is not confirmed.
- Synthetic checks are only that.Synthetic fits verify the regime method's recovery; they say nothing about real markets.
- Development numbers are not trading evidence.Costs are fixed assumptions; no live trading took place.
- Retrospective regime decoding (MR-01).Original whole-window decoding lets later evaluation emissions influence earlier state assignments. The original result is retrospective conditional classification evidence, not established row-by-row causal adaptive superiority.
Source:
experiments/cp2_report_draft2_v1/manuscript_v1/CH03/CH03_DRAFT2.md§3.2.5 · source-inspected - Descriptive, not general.The two instruments have different observed histories and sessions. Their comparison is descriptive across these two datasets, not a general experiment over gold and equity asset classes.
Source:
experiments/cp2_report_draft2_v1/manuscript_v1/CH03/CH03_DRAFT2.md§3.1.1 · source-inspected - No trading claim.Neither predictive robustness nor decision support implies that the system is profitable or deployment-ready. The decision-support prototype is paper-only and executes no broker orders.
Source:
experiments/cp2_report_draft2_v1/manuscript_v1/CH03/CH03_DRAFT2.md§3.1.1 · source-inspected
Model cards
References
Andrew Ang; Geert Bekaert (2002). International Asset Allocation with Regime Shifts. The Review of Financial Studies, 15(4), 1137–1187. DOI 10.1093/rfs/15.4.1137.
Matthew Wang; Yi-Hong Lin; Ilya Mikhelson (2020). Regime-Switching Factor Investing with Hidden Markov Models. Journal of Risk and Financial Management, 13(12), 311. DOI 10.3390/jrfm13120311.
Abhimanyu Das; Weihao Kong; Rajat Sen; Yichen Zhou (2024). A decoder-only foundation model for time-series forecasting. ICML; Proceedings of Machine Learning Research, 235, 10148–10167.
Christoph Bergmeir; Rob J. Hyndman; Bonsoo Koo (2018). A note on the validity of cross-validation for evaluating autoregressive time series prediction. Computational Statistics & Data Analysis, 120, 70–83. DOI 10.1016/j.csda.2017.11.003.
Vitor Cerqueira; Luis Torgo; Igor Mozetič (2020). Evaluating time series forecasting models: an empirical study on performance estimation methods. Machine Learning, 109, 1997–2028. DOI 10.1007/s10994-020-05910-7.
Sokolova, Marina; Lapalme, Guy (2009). A systematic analysis of performance measures for classification tasks. Information Processing & Management45(4),427–437. DOI10.1016/j.ipm.2009.03.002.
A selection from the citation ledgers of the CP2 report draft. The full list with links is on the References and data sources page. Every number on this page is read from a committed result file at build time; none is typed by hand.