From 362d85773aad701e96208a5cbf77cb85cbf079ee Mon Sep 17 00:00:00 2001 From: boris Date: Sat, 29 Aug 2026 06:15:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=8D=E7=94=A8=E6=A0=87=E5=87=86rolling?= =?UTF-8?q?=E7=9A=84=E4=BA=A4=E6=98=93=E6=97=A5=E8=BE=B9=E7=95=8C=E7=B4=A2?= =?UTF-8?q?=E5=BC=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/fidc-core/src/data.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/crates/fidc-core/src/data.rs b/crates/fidc-core/src/data.rs index 69f10de..bba85e9 100644 --- a/crates/fidc-core/src/data.rs +++ b/crates/fidc-core/src/data.rs @@ -1964,10 +1964,13 @@ impl DataSet { volume_lookbacks: &[usize; 5], include_now: bool, ) -> StandardRollingMeans { + // Both series are built from the same market-date sequence. Reuse the + // indexed boundary lookup instead of repeating it for close and volume. + let series_end = self.market_series_end_index_by_symbol_id(date, symbol_id, include_now); let close = if close_lookbacks.iter().any(|lookback| *lookback > 0) { self.adjusted_close_series_by_symbol_id(symbol_id) .map(|series| { - self.market_series_end_index_by_symbol_id(date, symbol_id, include_now) + series_end .map(|end| series.moving_averages_at_end(end, close_lookbacks)) .unwrap_or_else(|| series.moving_averages(date, close_lookbacks, include_now)) }) @@ -1978,7 +1981,7 @@ impl DataSet { let volume = if volume_lookbacks.iter().any(|lookback| *lookback > 0) { self.market_series_by_symbol_id(symbol_id) .map(|series| { - self.market_series_end_index_by_symbol_id(date, symbol_id, include_now) + series_end .map(|end| series.volume_moving_averages_at_end(end, volume_lookbacks)) .unwrap_or_else(|| { series.volume_moving_averages(date, volume_lookbacks, include_now)