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") );