From 59a500b879725f03f87c4597ed4287a250232c2d Mon Sep 17 00:00:00 2001 From: boris Date: Fri, 17 Jul 2026 23:05:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=BD=93=E5=89=8D=E5=A4=8D?= =?UTF-8?q?=E6=9D=83=E5=9D=87=E7=BA=BF=E9=A2=84=E8=AE=A1=E7=AE=97=E5=91=BD?= =?UTF-8?q?=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/fidc-core/src/platform_expr_strategy.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/crates/fidc-core/src/platform_expr_strategy.rs b/crates/fidc-core/src/platform_expr_strategy.rs index 18753a9..e411e89 100644 --- a/crates/fidc-core/src/platform_expr_strategy.rs +++ b/crates/fidc-core/src/platform_expr_strategy.rs @@ -770,7 +770,10 @@ fn precomputed_stock_current_rolling_mean( }; match field.trim().to_ascii_lowercase().as_str() { "close" | "prev_close" | "stock_close" | "price" => { - value_for(&format!("ma{lookback}_current_close")) + // `rolling_mean_current("close", ...)` uses the framework's + // back-adjusted close series. Source Lake `maN_current_close` is + // calculated from raw close and is therefore not interchangeable. + value_for(&format!("ma{lookback}_current_back_adjusted_close")) } "volume" | "stock_volume" => value_for(&format!("avg_volume{lookback}_current")), _ => None, @@ -787,6 +790,7 @@ fn is_precomputed_stock_current_rolling_key(key: &str) -> bool { } has_numeric_window(key, "ma", "_current_close") + || has_numeric_window(key, "ma", "_current_back_adjusted_close") || has_numeric_window(key, "avg_volume", "_current") } @@ -28590,6 +28594,7 @@ mod tests { extra_factors.insert("ma30_prev_close".to_string(), 97.0); extra_factors.insert("avg_volume5".to_string(), 88.0); extra_factors.insert("avg_volume100".to_string(), 99.0); + extra_factors.insert("ma5_current_close".to_string(), 999.0); extra_factors.insert("adjustment_factor_backward1".to_string(), 1.0); let data = DataSet::from_components( vec![Instrument { @@ -28795,7 +28800,10 @@ mod tests { effective_turnover_ratio: None, extra_factors: BTreeMap::from([ ("adjustment_factor_backward1".to_string(), 1.0), - ("ma5_current_close".to_string(), current_close), + ( + "ma5_current_back_adjusted_close".to_string(), + current_close, + ), ("avg_volume5_current".to_string(), current_volume), ]), },