New `fxt-backtest sweep --grid <yaml> --out <dir>` subcommand: iterates
over a grid of Run configs, writes each cell's artifacts to
<out>/<cell_name>/, then automatically invokes the existing aggregate
path to produce aggregate.parquet + pareto_frontier.json at the root.
All cells run sequentially on the same GPU (single-machine). For
cluster fan-out the underlying mechanism is the same — Argo can wrap
this binary in a workflow that runs each cell as a separate pod
(left as infra-side work for a follow-up commit; the binary's
contract is the same).
Sweep grid YAML schema:
base: # defaults applied to every cell unless overridden
data: ...
n_parallel: ...
decision_stride: ...
latency_ns: ...
target_annual_vol_units: ...
annualisation_factor: ...
max_lots: ...
max_events: ...
seed: ...
checkpoint: ... # optional — load real trained weights
cells:
- name: cell_a
decision_stride: 1 # override base
- name: cell_b
latency_ns: 250000000
...
Each SweepCell may override any subset of fields; unset fields fall
back to base defaults. --max-cells gates the run for smoke-testing
large grids.
Adds an example grid at config/ml/sweep_decision_stride_example.yaml
that re-runs the decision_stride ∈ {1, 2, 4, 8} sweep deferred from
the original plan (task #202).
Closes #201 (sweep tool). #202 (first decision_stride sweep) is now
executable end-to-end via the example grid.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
31 lines
966 B
YAML
31 lines
966 B
YAML
# Example sweep grid for `fxt-backtest sweep`.
|
|
# Mirrors the decision_stride sweep deferred from the original plan.
|
|
#
|
|
# Run:
|
|
# fxt-backtest sweep --grid config/ml/sweep_decision_stride_example.yaml \
|
|
# --out results/sweep_stride
|
|
# Produces results/sweep_stride/{stride_1,stride_2,stride_4,stride_8}/{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
|
|
decision_stride: 4
|
|
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: stride_1
|
|
decision_stride: 1
|
|
- name: stride_2
|
|
decision_stride: 2
|
|
- name: stride_4
|
|
decision_stride: 4
|
|
- name: stride_8
|
|
decision_stride: 8
|