修正预计算rolling缺失回退

This commit is contained in:
boris
2026-07-08 04:52:18 +08:00
parent 6a98d9b0bd
commit 188376b75a
@@ -2834,13 +2834,14 @@ impl PlatformExprStrategy {
lookback: usize,
) -> Option<f64> {
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")
);