From 05e67c73df0c002efec15711dd5ef066d817abec Mon Sep 17 00:00:00 2001 From: boris Date: Sat, 5 Sep 2026 03:01:18 +0800 Subject: [PATCH] Revert "perf: freeze standard rolling lookbacks" This reverts commit 32e403044209d9f28e6315c23b0b1507fedcf0fd. --- .../fidc-core/src/platform_expr_strategy.rs | 64 +++++++++---------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/crates/fidc-core/src/platform_expr_strategy.rs b/crates/fidc-core/src/platform_expr_strategy.rs index 379cdd6..6a41155 100644 --- a/crates/fidc-core/src/platform_expr_strategy.rs +++ b/crates/fidc-core/src/platform_expr_strategy.rs @@ -1055,8 +1055,7 @@ pub struct PlatformExprStrategy { stock_filter_quote_usage: StockFilterQuoteUsage, stock_filter_expr_present: bool, selection_quote_usage: StockFilterQuoteUsage, - stock_close_lookbacks: [usize; 7], - stock_volume_lookbacks: [usize; 5], + stock_rolling_requirements: StockRollingRequirements, stock_current_rolling_mean_required: bool, stock_snapshot_field_requirements: StockSnapshotFieldRequirements, stock_extra_factors_required: bool, @@ -1336,28 +1335,6 @@ impl PlatformExprStrategy { let selection_quote_usage = Self::selection_quote_usage_for_config(&config, &normalized_stock_filter_expr); let stock_rolling_requirements = Self::stock_rolling_requirements_for_config(&config); - let required_rolling = |field: &'static str, lookback: usize| { - stock_rolling_requirements - .requires(field, lookback) - .then_some(lookback) - .unwrap_or(0) - }; - let stock_close_lookbacks = [ - required_rolling("close", config.stock_short_ma_days), - required_rolling("close", config.stock_mid_ma_days), - required_rolling("close", config.stock_long_ma_days), - required_rolling("close", 5), - required_rolling("close", 10), - required_rolling("close", 20), - required_rolling("close", 30), - ]; - let stock_volume_lookbacks = [ - required_rolling("volume", 5), - required_rolling("volume", 10), - required_rolling("volume", 20), - required_rolling("volume", 60), - required_rolling("volume", 100), - ]; let stock_current_rolling_mean_required = Self::stock_current_rolling_mean_required_for_config(&config); let stock_snapshot_field_requirements = @@ -1403,8 +1380,7 @@ impl PlatformExprStrategy { stock_filter_quote_usage, stock_filter_expr_present, selection_quote_usage, - stock_close_lookbacks, - stock_volume_lookbacks, + stock_rolling_requirements, stock_current_rolling_mean_required, stock_snapshot_field_requirements, stock_extra_factors_required, @@ -4130,14 +4106,36 @@ impl PlatformExprStrategy { }) }) .flatten(); + let required_rolling = |field: &'static str, lookback: usize| { + self.stock_rolling_requirements + .requires(field, lookback) + .then_some(lookback) + .unwrap_or(0) + }; + let close_lookbacks = [ + required_rolling("close", self.config.stock_short_ma_days), + required_rolling("close", self.config.stock_mid_ma_days), + required_rolling("close", self.config.stock_long_ma_days), + required_rolling("close", 5), + required_rolling("close", 10), + required_rolling("close", 20), + required_rolling("close", 30), + ]; + let volume_lookbacks = [ + required_rolling("volume", 5), + required_rolling("volume", 10), + required_rolling("volume", 20), + required_rolling("volume", 60), + required_rolling("volume", 100), + ]; let rolling_means = ctx .data .market_standard_rolling_means_by_symbol_id_with_calendar_index( date, calendar_index, symbol_id, - &self.stock_close_lookbacks, - &self.stock_volume_lookbacks, + &close_lookbacks, + &volume_lookbacks, false, ); let close_rolling = |index: usize| rolling_means.close[index].unwrap_or(f64::NAN); @@ -14543,10 +14541,6 @@ mod tests { #[test] fn current_rolling_helpers_do_not_load_factor_maps_or_decision_rollings() { - let direct = PlatformExprStrategy::new(PlatformExprStrategyConfig::microcap_rotation()); - assert_eq!(direct.stock_close_lookbacks, [5, 10, 20, 5, 10, 20, 0]); - assert_eq!(direct.stock_volume_lookbacks, [0; 5]); - let mut cfg = PlatformExprStrategyConfig::microcap_rotation(); cfg.stock_filter_expr = concat!( "rolling_mean_current(\"close\", 5) > rolling_mean_current(\"close\", 10)", @@ -14557,8 +14551,10 @@ mod tests { let strategy = PlatformExprStrategy::new(cfg); assert!(!strategy.stock_extra_factors_required); - assert_eq!(strategy.stock_close_lookbacks, [0; 7]); - assert_eq!(strategy.stock_volume_lookbacks, [0; 5]); + assert!(!strategy.stock_rolling_requirements.requires("close", 5)); + assert!(!strategy.stock_rolling_requirements.requires("close", 10)); + assert!(!strategy.stock_rolling_requirements.requires("volume", 5)); + assert!(!strategy.stock_rolling_requirements.requires("volume", 100)); assert!(strategy.stock_current_rolling_mean_required); let mut signal_only = PlatformExprStrategyConfig::microcap_rotation();