From 20e73d567b8e4337fd6bf54c991ab73ab1925c83 Mon Sep 17 00:00:00 2001 From: boris Date: Sun, 13 Sep 2026 06:06:17 +0800 Subject: [PATCH] fix(strategy): require exact feature-date market snapshots --- crates/fidc-core/src/platform_expr_strategy.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/crates/fidc-core/src/platform_expr_strategy.rs b/crates/fidc-core/src/platform_expr_strategy.rs index cdf0c0a..d7783ca 100644 --- a/crates/fidc-core/src/platform_expr_strategy.rs +++ b/crates/fidc-core/src/platform_expr_strategy.rs @@ -1043,7 +1043,6 @@ impl<'a> StockStateSnapshotSource<'a> for IndexedStockStateSnapshotSource<'a> { } self.data .market_by_symbol_id(self.factor_date, symbol_id) - .or_else(|| self.execution_market(symbol_id)) } fn factor(&self, symbol_id: u32) -> Option<&'a DailyFactorSnapshot> { @@ -1072,7 +1071,6 @@ impl<'a> StockStateSnapshotSource<'a> for ViewStockStateSnapshotSource<'a, '_> { } self.factor .market(symbol_id) - .or_else(|| self.execution_market(symbol_id)) } fn factor(&self, symbol_id: u32) -> Option<&'a DailyFactorSnapshot> { @@ -4743,7 +4741,6 @@ impl PlatformExprStrategy { symbol: symbol.to_string(), }) })?; - let feature_market = source.feature_market(symbol_id).unwrap_or(market); let factor = source.factor(symbol_id).ok_or_else(|| { BacktestError::Data(crate::data::DataSetError::MissingSnapshot { kind: "factor", @@ -4751,6 +4748,13 @@ impl PlatformExprStrategy { symbol: symbol.to_string(), }) })?; + let feature_market = source.feature_market(symbol_id).ok_or_else(|| { + BacktestError::Data(crate::data::DataSetError::MissingSnapshot { + kind: "feature_market", + date: factor_date, + symbol: symbol.to_string(), + }) + })?; let intraday_same_day_factor = self.uses_intraday_execution_quotes() && factor_date == date && !ctx.is_lagged_execution();