Per spec 2026-05-20-continuous-reasoning-trader-design.md §3.3 and §8:
decision_stride is REMOVED, not deprecated. No backwards-compat shim,
no fallback. Every consumer migrates in this commit per
feedback_no_partial_refactor.
Removed from:
- bin/fxt-backtest: RunArgs CLI flag, SweepBase field, SweepCell
override field, default_decision_stride() function, all three
BacktestHarnessConfig and RunArgs construction sites
- crates/ml-backtesting/src/harness.rs: BacktestHarnessConfig field,
MultiHorizonLoaderConfig decision_stride initializer, `let stride`
local, `if event_count % stride == 0` gate around
step_decision_with_latency; forward_step_into + step_decision now
share a single window-full guard (merged into one `if` block)
- crates/ml-alpha/src/data/loader.rs: MultiHorizonLoaderConfig field,
next_sequence stride logic simplified to stride=1 (consecutive
snapshots only)
- crates/ml-alpha/src/trainer/perception.rs: PerceptionTrainerConfig
field and Default impl; all four dt_s locals replaced with 1.0_f32
(training K-loop, graph-capture K-loop, forward_step_into CfC step,
eval K-loop)
- crates/ml-alpha/examples/alpha_train.rs: CLI flag, trainer_cfg and
both loader configs
- crates/ml/examples/alpha_baseline.rs: CLI flag, train + eval stride
gates replaced with unconditional read_all()
- config/ml/*.yaml: decision_stride: lines removed from
sweep_smoke, sweep_threshold_tuning, sweep_deployability,
sweep_decision_stride_example (file repurposed as generic example)
- tests: forward_step_golden, perception_overfit (×7 structs including
the stride=4 smoke repurposed as a second convergence check),
multi_horizon_loader (stride=4 spacing test repurposed as
ts_ns monotonicity check), ring3_replay, trainer_parity
Harness loop now invokes BOTH forward_step_into AND
step_decision_with_latency on every event whenever the snapshot window
is full. forward_step_into advances SSM state and writes alpha_probs_d;
step_decision_with_latency reads alpha_probs_d immediately after —
no CPU roundtrip, no stride gate.
n_decisions ≈ events_processed - seq_len + 1 after this commit
(vs ~9999 at stride=200 in the S2 baseline).
cargo check --workspace: clean
cargo test -p ml-backtesting --lib: 33 passed
cargo test -p ml-alpha --lib: 33 passed (6 ignored)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
27 lines
909 B
YAML
27 lines
909 B
YAML
# Example sweep grid for `fxt-backtest sweep`.
|
|
# A1: decision_stride removed. This file previously swept stride={1,2,4,8};
|
|
# those cell overrides are now no-ops. Repurposed as a threshold sweep example.
|
|
#
|
|
# Run:
|
|
# fxt-backtest sweep --grid config/ml/sweep_decision_stride_example.yaml \
|
|
# --out results/sweep_example
|
|
# Produces results/sweep_example/{cell_1,...}/{summary.json,trades.csv,pnl_curve.bin}
|
|
# plus aggregate.parquet + pareto_frontier.json at the root.
|
|
|
|
base:
|
|
data: test_data/futures-baseline/ES.FUT
|
|
n_parallel: 1
|
|
latency_ns: 100000000 # 100 ms IBKR + Scaleway baseline
|
|
target_annual_vol_units: 50.0
|
|
annualisation_factor: 825.0
|
|
max_lots: 5
|
|
max_events: 0 # exhaust the input stream
|
|
seed: 12648430
|
|
# checkpoint: path/to/trained.bin # uncomment to use real weights
|
|
|
|
cells:
|
|
- name: cell_1
|
|
- name: cell_2
|
|
- name: cell_3
|
|
- name: cell_4
|