merge latest engine main before portfolio risk integration

This commit is contained in:
boris
2026-09-09 10:23:02 +08:00
@@ -14,7 +14,7 @@ use crate::data::EligibleUniverseSnapshot;
use crate::data::{ use crate::data::{
BACKWARD_ADJUSTMENT_FACTOR_FIELD, CandidateEligibility, DailyFactorSnapshot, BACKWARD_ADJUSTMENT_FACTOR_FIELD, CandidateEligibility, DailyFactorSnapshot,
DailyMarketSnapshot, DailySnapshotView, DataSet, PriceField, decision_free_float_cap_bn, DailyMarketSnapshot, DailySnapshotView, DataSet, PriceField, decision_free_float_cap_bn,
NumericFactorMap, decision_market_cap_bn, decision_market_cap_bn,
}; };
use crate::engine::BacktestError; use crate::engine::BacktestError;
use crate::events::{OrderSide, ProcessEvent, ProcessEventKind}; use crate::events::{OrderSide, ProcessEvent, ProcessEventKind};
@@ -974,7 +974,7 @@ struct StockExpressionState {
stock_volume_ma60: f64, stock_volume_ma60: f64,
stock_volume_ma100: f64, stock_volume_ma100: f64,
current_series_end: Option<usize>, current_series_end: Option<usize>,
extra_factors: NumericFactorMap, extra_factors: BTreeMap<String, f64>,
extra_text_factors: BTreeMap<String, String>, extra_text_factors: BTreeMap<String, String>,
} }
@@ -4806,7 +4806,7 @@ impl PlatformExprStrategy {
self.stock_extra_factor_map_required self.stock_extra_factor_map_required
|| self.stock_extra_factor_identifiers.contains(field.as_ref()) || self.stock_extra_factor_identifiers.contains(field.as_ref())
}) })
.map(|(field, value)| (field.clone(), *value)) .map(|(field, value)| (field.to_string(), *value))
.collect() .collect()
} else { } else {
BTreeMap::new() BTreeMap::new()
@@ -4824,7 +4824,7 @@ impl PlatformExprStrategy {
.and_then(|row| row.extra_factors.get(field.as_str())) .and_then(|row| row.extra_factors.get(field.as_str()))
.copied() .copied()
.unwrap_or(f64::NAN); .unwrap_or(f64::NAN);
extra_factors.insert(field.clone().into(), value); extra_factors.insert(field.clone(), value);
} }
} }
} }
@@ -4835,10 +4835,7 @@ impl PlatformExprStrategy {
.contains(BACKWARD_ADJUSTMENT_FACTOR_FIELD)) .contains(BACKWARD_ADJUSTMENT_FACTOR_FIELD))
&& let Some(value) = factor.adjustment_factor_backward1 && let Some(value) = factor.adjustment_factor_backward1
{ {
extra_factors.insert( extra_factors.insert(BACKWARD_ADJUSTMENT_FACTOR_FIELD.to_string(), value);
std::borrow::Cow::Borrowed(BACKWARD_ADJUSTMENT_FACTOR_FIELD),
value,
);
} }
let state = StockExpressionState { let state = StockExpressionState {