Files
foxhunt/config/ml/sweep_threshold_tuning.yaml
jgrusewski 0d9fbc16b0 refactor(per-horizon): N_HORIZONS 5→3 — sweep configs + generator script
5 sweep YAMLs updated to reference the new checkpoint filename:
- config/ml/sweep_smoke.yaml: trunk_best_h6000.bin → trunk_best_h1000.bin
- config/ml/sweep_perhoriz_diag.yaml: same
- config/ml/sweep_threshold_tuning.yaml: same
- config/ml/sweep_deployability.yaml: same
- config/ml/sweep_smoke_perhoriz_cfc.yaml: same + 3 comment updates
  (WIN-gate criteria, header doc, best-checkpoint annotation)

scripts/generate_sweep_variants.py:61 updated atomically — without this
the next regeneration of sweep_deployability.yaml would silently
re-introduce trunk_best_h6000.bin.

Argo workflow templates (alpha-perception, alpha-cv, lob-backtest-sweep)
did NOT need text changes — they're already horizon-agnostic:
- They forward CLI flags via {{workflow.parameters.*}} to binaries
- Don't grep alpha_train_summary.json inline
- Don't reference per-horizon field names
- early-stop-metric default is "mean_auc" (horizon-agnostic)

Intentionally left:
- alpha-cv-template.yaml stacker-horizon: "6000" (unrelated TFT lookback)
- alpha-cv-template.yaml horizon: "1200" (DQN execution horizon in bars)
- lob-backtest-sweep-template.yaml ci-training-h100 (GPU pool name)

NOTE: kubectl apply of workflow templates is deferred to Task 10 (push
+ dispatch). Verified all 5 sweep YAMLs parse with python3 yaml.safe_load.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 01:40:13 +02:00

37 lines
1.9 KiB
YAML

# P6 batched flow — threshold pre-registration on W0 only.
# Single-cell, 8 sim variants (one per threshold) sharing one forward pass
# on the validation window. Selects the production threshold value by
# maximising in-sample Sharpe; selected value is persisted to
# config/ml/v2_prod_thresholds.json and committed before the deployability
# sweep runs.
base:
# P6 batched flow: data_template + cell.window interpolation produces the per-cell data path.
data_template: /mnt/training-data/futures-baseline-mbp10/ES.FUT/ES.FUT_{window}.dbn.zst
predecoded_dir: /feature-cache/predecoded
n_parallel: 1 # legacy default; overridden by variants.len() per cell
latency_ns: 200000000 # anchor (Scaleway PAR → IBKR realistic RTT)
target_annual_vol_units: 50.0
annualisation_factor: 825.0
max_lots: 5
max_events: 0 # exhaust loader (full quarter)
seed: 12648430
# __SHA__ is replaced by argo-lob-sweep.sh / the operator at submission time
# with the post-trunk-grows training short-SHA (9 chars).
checkpoint: /feature-cache/alpha-perception-runs/__SHA__/trunk_best_h1000.bin
# 8 thresholds spanning p60-p95 (5pt steps). Cost held at the realistic
# anchor (1 tick = 0.125 price units) so threshold-tuning Sharpe reflects
# what the deployability sweep will see at that cost.
sim_variants:
- { name: t60, threshold: 0.60, cost_per_lot_per_side: 0.125 }
- { name: t65, threshold: 0.65, cost_per_lot_per_side: 0.125 }
- { name: t70, threshold: 0.70, cost_per_lot_per_side: 0.125 }
- { name: t75, threshold: 0.75, cost_per_lot_per_side: 0.125 }
- { name: t80, threshold: 0.80, cost_per_lot_per_side: 0.125 }
- { name: t85, threshold: 0.85, cost_per_lot_per_side: 0.125 }
- { name: t90, threshold: 0.90, cost_per_lot_per_side: 0.125 }
- { name: t95, threshold: 0.95, cost_per_lot_per_side: 0.125 }
cells:
- { name: W0, window: 2025-Q1 }