Files
tac-exp-dev/queue/designs/q10_hmm_regime_overlay.md
T
zhaoli c0eb65efa7 queue: pre-registered experiment backlog to prove better-trading-performance hypotheses
Mined from book/ on the 'book' branch (HEAD 436692a). 11 queued runs,
each = hypothesis + one-variable change vs the exp-26 reference + acceptance
metric, per the ch.02 isolation/falsification discipline.

- workflows/: 5 runnable config-only YAMLs (Q01 M2 repro, Q02 seed10, Q03 topk20,
  Q04 label10d, Q05 label22d) byte-derived from the exp-26 reference
- designs/: 6 design docs needing custom strategy modules or tool-only A/B
  (Q06 Kelly, Q07 weekly rebalance, Q08 risk-limit A/B, Q09 long-short,
   Q10 HMM overlay, Q11 standalone reversal)
2026-08-19 15:30:46 +00:00

1.8 KiB

QUEUE-10 — HMM regime overlay on the exp-26 book (overlay, not feature)

Status: QUEUED · Priority: P2 · Effort: custom strategy + feature compute + run

Hypothesis (prove)

Regime flags failed as model features (exp 9 idea, exp 25 clean-lake confirmation that model-specific families regress), but the surviving use is as an overlay: a long-only/regime-gate that holds names only in the favourable HMM state should cut drawdown / improve net IR on the same signal. Source: book/chapters/01 regime section + chat-ideas.md (TODO(evidence-needed: HMM regime gate as overlay on exp-26 book)).

Change vs exp-26 reference (ONE variable)

  • Strategy: plain TopkDropout (topk 10, n_drop 1) → custom RegimeGateDropoutStrategy: identical selection, but when the per-symbol HMM posterior (sp_hmm_p_regime1) is below a calibrated threshold the name is held in cash instead of bought (entry gate); no new features enter the model — sp_hmm_p_regime1 is computed for gating only, fit on the train window (no lookahead), via get_lake_sp with fit_end=<train end>.
  • All signal/config unchanged.

Acceptance

  • net_max_drawdown < 7.69% (reference) AND net_IR >= 0.21. If the gate never binds at a sensible threshold → the gate is a no-op on this signal (exp 20 pattern) → recorded REFUTED/neutral, not a failure.
  • Calibrate the threshold on the valid window only (avoid the exp 13/14 threshold-overfit trap).

Execution prerequisites

  1. Persist sp_hmm_p_regime1 for the universe (get_lake_sp, fit_end = 2025-09-01) WITHOUT adding it to feature_fields of the model.
  2. New contrib module tac_qlib/contrib/strategy/regime_gate.py, copy to the venv site-packages copy.
  3. Workflow YAML wiring the strategy.
  4. Trace + run + snapshot.