修复延迟执行选股风控语义

This commit is contained in:
boris
2026-07-04 03:02:02 +08:00
parent 8e4b3d15a4
commit 5f2697540a
3 changed files with 128 additions and 30 deletions
+14 -5
View File
@@ -50,15 +50,20 @@ pub struct SelectionContext<'a> {
pub data: &'a DataSet,
pub dynamic_universe: Option<&'a BTreeSet<String>>,
pub risk_config: Option<&'a FidcRiskControlConfig>,
pub defer_selection_risk: bool,
}
impl SelectionContext<'_> {
fn eligible_universe(&self) -> Vec<EligibleUniverseSnapshot> {
let eligible = match self.risk_config {
Some(risk_config) => self
.data
.eligible_universe_on_with_risk_config(self.decision_date, risk_config),
None => self.data.eligible_universe_on(self.decision_date).to_vec(),
let eligible = if self.defer_selection_risk {
self.data.fundamental_universe_on(self.decision_date)
} else {
match self.risk_config {
Some(risk_config) => self
.data
.eligible_universe_on_with_risk_config(self.decision_date, risk_config),
None => self.data.eligible_universe_on(self.decision_date).to_vec(),
}
};
match self.dynamic_universe {
Some(symbols) if !symbols.is_empty() => eligible
@@ -70,6 +75,9 @@ impl SelectionContext<'_> {
}
fn selection_risk_decisions(&self) -> Vec<FidcRiskDecisionAudit> {
if self.defer_selection_risk {
return Vec::new();
}
let default_risk_config;
let risk_config = match self.risk_config {
Some(value) => value,
@@ -403,6 +411,7 @@ mod tests {
data: &data,
dynamic_universe: None,
risk_config: Some(&FidcRiskControlConfig::default()),
defer_selection_risk: false,
});
let rules = diagnostics