From 1b60c78141f93b0688a23e96d9e496c0962f7966 Mon Sep 17 00:00:00 2001 From: boris Date: Sat, 29 Aug 2026 20:33:04 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E8=AE=A1=E7=AE=97=E7=AD=96=E7=95=A5?= =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E7=AA=97=E5=8F=A3=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fidc-core/src/platform_expr_strategy.rs | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/crates/fidc-core/src/platform_expr_strategy.rs b/crates/fidc-core/src/platform_expr_strategy.rs index 21f6da6..c266eeb 100644 --- a/crates/fidc-core/src/platform_expr_strategy.rs +++ b/crates/fidc-core/src/platform_expr_strategy.rs @@ -987,7 +987,8 @@ pub struct PlatformExprStrategy { prelude_declared_identifiers: BTreeSet, stock_filter_quote_usage: StockFilterQuoteUsage, selection_quote_usage: StockFilterQuoteUsage, - stock_rolling_requirements: StockRollingRequirements, + stock_close_lookbacks: [usize; 7], + stock_volume_lookbacks: [usize; 5], stock_extra_factors_required: bool, stock_extra_factor_identifiers: BTreeSet, stock_extra_factor_map_required: bool, @@ -1265,6 +1266,28 @@ 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_extra_factors_required = Self::stock_extra_factors_required_for_config(&config, &prelude_declared_identifiers); let stock_extra_factor_identifiers = @@ -1310,7 +1333,8 @@ impl PlatformExprStrategy { prelude_declared_identifiers, stock_filter_quote_usage, selection_quote_usage, - stock_rolling_requirements, + stock_close_lookbacks, + stock_volume_lookbacks, stock_extra_factors_required, stock_extra_factor_identifiers, stock_extra_factor_map_required, @@ -4038,33 +4062,11 @@ impl PlatformExprStrategy { None }; let instrument = ctx.data.instrument(symbol); - 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( date, symbol_id, - &close_lookbacks, - &volume_lookbacks, + &self.stock_close_lookbacks, + &self.stock_volume_lookbacks, false, ); let close_rolling = |index: usize| rolling_means.close[index].unwrap_or(f64::NAN); @@ -14005,10 +14007,8 @@ mod tests { let strategy = PlatformExprStrategy::new(cfg); assert!(!strategy.stock_extra_factors_required); - 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_eq!(strategy.stock_close_lookbacks, [0; 7]); + assert_eq!(strategy.stock_volume_lookbacks, [0; 5]); } #[test]