From 188376b75a6d58503db31328e6d3745c1ec64d3e Mon Sep 17 00:00:00 2001 From: boris Date: Wed, 8 Jul 2026 04:52:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E9=A2=84=E8=AE=A1=E7=AE=97ro?= =?UTF-8?q?lling=E7=BC=BA=E5=A4=B1=E5=9B=9E=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/fidc-core/src/platform_expr_strategy.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/crates/fidc-core/src/platform_expr_strategy.rs b/crates/fidc-core/src/platform_expr_strategy.rs index 4af1784..adc26d1 100644 --- a/crates/fidc-core/src/platform_expr_strategy.rs +++ b/crates/fidc-core/src/platform_expr_strategy.rs @@ -2834,13 +2834,14 @@ impl PlatformExprStrategy { lookback: usize, ) -> Option { let precomputed = precomputed_stock_rolling_mean(extra_factors, field, lookback); + let computed = || { + ctx.data + .market_decision_numeric_moving_average(date, symbol, field, lookback) + }; if self.config.prefer_precomputed_rolling_factors { - precomputed + precomputed.or_else(computed) } else { - let computed = ctx - .data - .market_decision_numeric_moving_average(date, symbol, field, lookback); - computed.or(precomputed) + computed().or(precomputed) } } @@ -25887,7 +25888,7 @@ mod tests { } #[test] - fn platform_stock_state_keeps_missing_precomputed_rolling_as_missing() { + fn platform_stock_state_falls_back_when_precomputed_rolling_is_missing() { let current = d(2025, 5, 30); let start = current - chrono::Duration::days(100); let symbol = "300022.SZ"; @@ -25994,10 +25995,10 @@ mod tests { let stock = strategy .stock_state_with_factor_date(&ctx, current, current, symbol) .expect("stock state"); - assert!(stock.stock_volume_ma100.is_nan()); + assert_eq!(stock.stock_volume_ma100, 1_000.0); let day = strategy.day_state(&ctx, current).expect("day state"); assert!( - !strategy + strategy .stock_passes_expr(&ctx, &day, &stock) .expect("stock expr") );