From a2dfc6d9939b5d682e7801d3174aacae0d385b5e Mon Sep 17 00:00:00 2001 From: jgrusewski Date: Wed, 20 May 2026 09:04:13 +0200 Subject: [PATCH] =?UTF-8?q?config(ml):=20sweep=5Fsmoke=20decision=5Fstride?= =?UTF-8?q?=204=20=E2=86=92=20200=20(match=20latency=20anchor)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Smoke n59t4 (commit 691dec144, root-cause NaN/Inf fix) revealed 96 trades/sec at decision_stride=4 — decisions fire every ~4ms while orders take 200ms to fill. Controller makes decisions on phantom in-flight positions; stops fire against positions that haven't materialized yet. At $0.25 round-trip cost × 96 trades/sec, fee burn is $86k/hour. Architectural mismatch: decision_stride should be >= latency_ns / event_dt_ns. At 200ms latency and ~1ms/event, stride=200 means decisions fire every ~200ms — once per latency cycle. Resulting ~10k decisions over 2M events is the natural cadence for the deployment anchor. Not a controller bug. The controller logic (NaN-clean per Task 15) is correct; the smoke config was tuned for sub-millisecond latency that doesn't match the 200ms Scaleway PAR → IBKR anchor. Co-Authored-By: Claude Opus 4.7 (1M context) --- config/ml/sweep_smoke.yaml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/config/ml/sweep_smoke.yaml b/config/ml/sweep_smoke.yaml index c9aa615f0..1c7cdf555 100644 --- a/config/ml/sweep_smoke.yaml +++ b/config/ml/sweep_smoke.yaml @@ -15,12 +15,18 @@ base: data: /mnt/training-data/futures-baseline-mbp10/ES.FUT predecoded_dir: /feature-cache/predecoded n_parallel: 1 # overridden by sim_variants.len() - decision_stride: 4 + # decision_stride matches the latency anchor: ~1ms per event × stride=200 + # = 200ms between decisions ≈ latency_ns. Prior smoke (n59t4) at stride=4 + # fired decisions 50× faster than orders could land; controller made + # decisions on phantom in-flight positions, churned ~96 trades/sec, and + # burned cost-per-trade × decision-rate. With stride=200, ~10k decisions + # over 2M events — natural cadence for a 200ms-latency deployment anchor. + decision_stride: 200 latency_ns: 200000000 # realistic anchor (overridden per variant) target_annual_vol_units: 50.0 annualisation_factor: 825.0 max_lots: 5 - max_events: 2000000 # ~2M events, ~500k decisions, ~20 min wall + max_events: 2000000 # ~2M events, ~10k decisions, ~16 min wall seed: 12648430 # dbd500ecf is the post-trunk-grows training checkpoint. checkpoint: /feature-cache/alpha-perception-runs/dbd500ecf/trunk_best_h6000.bin