fix(strategy): require exact feature-date market snapshots

This commit is contained in:
boris
2026-09-13 06:06:17 +08:00
committed by boris
parent cf4498668b
commit 20e73d567b
@@ -1043,7 +1043,6 @@ impl<'a> StockStateSnapshotSource<'a> for IndexedStockStateSnapshotSource<'a> {
} }
self.data self.data
.market_by_symbol_id(self.factor_date, symbol_id) .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> { fn factor(&self, symbol_id: u32) -> Option<&'a DailyFactorSnapshot> {
@@ -1072,7 +1071,6 @@ impl<'a> StockStateSnapshotSource<'a> for ViewStockStateSnapshotSource<'a, '_> {
} }
self.factor self.factor
.market(symbol_id) .market(symbol_id)
.or_else(|| self.execution_market(symbol_id))
} }
fn factor(&self, symbol_id: u32) -> Option<&'a DailyFactorSnapshot> { fn factor(&self, symbol_id: u32) -> Option<&'a DailyFactorSnapshot> {
@@ -4743,7 +4741,6 @@ impl PlatformExprStrategy {
symbol: symbol.to_string(), symbol: symbol.to_string(),
}) })
})?; })?;
let feature_market = source.feature_market(symbol_id).unwrap_or(market);
let factor = source.factor(symbol_id).ok_or_else(|| { let factor = source.factor(symbol_id).ok_or_else(|| {
BacktestError::Data(crate::data::DataSetError::MissingSnapshot { BacktestError::Data(crate::data::DataSetError::MissingSnapshot {
kind: "factor", kind: "factor",
@@ -4751,6 +4748,13 @@ impl PlatformExprStrategy {
symbol: symbol.to_string(), 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() let intraday_same_day_factor = self.uses_intraday_execution_quotes()
&& factor_date == date && factor_date == date
&& !ctx.is_lagged_execution(); && !ctx.is_lagged_execution();