diff --git a/crates/ml-features/src/mbp10_loader.rs b/crates/ml-features/src/mbp10_loader.rs index b08986c1d..de1ff6641 100644 --- a/crates/ml-features/src/mbp10_loader.rs +++ b/crates/ml-features/src/mbp10_loader.rs @@ -661,8 +661,16 @@ pub fn mbp10_to_imbalance_bars( // Sort by timestamp (files should be chronological but ensure correctness) all_trades.sort_by(|a, b| a.timestamp.cmp(&b.timestamp)); - tracing::info!( - "Extracted {} trade ticks, feeding into ImbalanceBarSampler (threshold={}, alpha={})", + // wgdc8 experiment: EWMA adaptation bypassed. With α=0.1 the configured + // threshold is washed out within ~5 bars (recursion: T_new = 0.1·T_old + + // 0.9·observed; fixed point is the data's natural imbalance scale, not + // the configured value). To make `imbalance_bar_threshold` actually + // honored — and the resolution-hypothesis smoke meaningful — use the + // fixed-threshold constructor. ewma_alpha=0.1 is logged for cache-key + // continuity but does not drive bar formation on this branch. + tracing::warn!( + "wgdc8: EWMA adaptation BYPASSED. Feeding {} trade ticks into \ + ImbalanceBarSampler with FIXED threshold={} (config alpha={} ignored)", all_trades.len(), threshold, ewma_alpha, @@ -671,7 +679,7 @@ pub fn mbp10_to_imbalance_bars( // Initialize sampler with first trade let first = &all_trades[0]; let mut sampler = - ImbalanceBarSampler::new_with_ewma(first.price, threshold, first.timestamp, ewma_alpha); + ImbalanceBarSampler::new(first.price, threshold, first.timestamp); let mut bars: Vec = Vec::new(); for trade in &all_trades {