Add order runtime lookup

This commit is contained in:
boris
2026-04-23 19:57:02 -07:00
parent c12a883d28
commit 9f10afddec
8 changed files with 351 additions and 8 deletions

View File

@@ -410,6 +410,8 @@ where
execution_date,
default_stage_time(ScheduleStage::BeforeTrading),
),
order_events: result.order_events.as_slice(),
fills: result.fills.as_slice(),
})?;
publish_phase_event(
&mut self.strategy,
@@ -443,6 +445,8 @@ where
&mut process_events,
&mut self.process_event_bus,
default_stage_time(ScheduleStage::BeforeTrading),
result.order_events.as_slice(),
result.fills.as_slice(),
)?;
self.apply_strategy_directives(
execution_date,
@@ -501,6 +505,8 @@ where
&mut process_events,
&mut self.process_event_bus,
default_stage_time(ScheduleStage::OpenAuction),
result.order_events.as_slice(),
result.fills.as_slice(),
)?;
auction_decision.merge_from(self.strategy.open_auction(&StrategyContext {
execution_date,
@@ -517,6 +523,8 @@ where
execution_date,
default_stage_time(ScheduleStage::OpenAuction),
),
order_events: result.order_events.as_slice(),
fills: result.fills.as_slice(),
})?);
publish_phase_event(
&mut self.strategy,
@@ -615,6 +623,8 @@ where
execution_date,
default_stage_time(ScheduleStage::OnDay),
),
order_events: result.order_events.as_slice(),
fills: result.fills.as_slice(),
})
})
.transpose()?
@@ -635,6 +645,8 @@ where
&mut process_events,
&mut self.process_event_bus,
default_stage_time(ScheduleStage::OnDay),
result.order_events.as_slice(),
result.fills.as_slice(),
)?);
publish_phase_event(
&mut self.strategy,
@@ -685,6 +697,8 @@ where
&mut process_events,
&mut self.process_event_bus,
default_stage_time(ScheduleStage::Bar),
result.order_events.as_slice(),
result.fills.as_slice(),
)?);
decision.merge_from(self.strategy.on_bar(&StrategyContext {
execution_date,
@@ -701,6 +715,8 @@ where
execution_date,
default_stage_time(ScheduleStage::Bar),
),
order_events: result.order_events.as_slice(),
fills: result.fills.as_slice(),
})?);
publish_phase_event(
&mut self.strategy,
@@ -831,6 +847,8 @@ where
&mut process_events,
&mut self.process_event_bus,
Some(tick_time),
result.order_events.as_slice(),
result.fills.as_slice(),
)?;
tick_decision.merge_from(self.strategy.on_tick(
&StrategyContext {
@@ -845,6 +863,8 @@ where
process_events: &process_events,
active_process_event: None,
active_datetime: Some(quote.timestamp),
order_events: result.order_events.as_slice(),
fills: result.fills.as_slice(),
},
&quote,
)?);
@@ -919,6 +939,18 @@ where
portfolio.update_prices(execution_date, &self.data, PriceField::Close)?;
let post_trade_open_orders = self.broker.open_order_views();
let visible_order_events = result
.order_events
.iter()
.cloned()
.chain(report.order_events.iter().cloned())
.collect::<Vec<_>>();
let visible_fills = result
.fills
.iter()
.cloned()
.chain(report.fill_events.iter().cloned())
.collect::<Vec<_>>();
publish_phase_event(
&mut self.strategy,
&mut self.process_event_bus,
@@ -950,6 +982,8 @@ where
execution_date,
default_stage_time(ScheduleStage::AfterTrading),
),
order_events: visible_order_events.as_slice(),
fills: visible_fills.as_slice(),
})?;
publish_phase_event(
&mut self.strategy,
@@ -983,6 +1017,8 @@ where
&mut process_events,
&mut self.process_event_bus,
default_stage_time(ScheduleStage::AfterTrading),
visible_order_events.as_slice(),
visible_fills.as_slice(),
)?;
self.apply_strategy_directives(
execution_date,
@@ -1014,6 +1050,18 @@ where
report.account_events.extend(close_report.account_events);
report.diagnostics.extend(close_report.diagnostics);
let post_close_open_orders = self.broker.open_order_views();
let visible_order_events_after_close = result
.order_events
.iter()
.cloned()
.chain(report.order_events.iter().cloned())
.collect::<Vec<_>>();
let visible_fills_after_close = result
.fills
.iter()
.cloned()
.chain(report.fill_events.iter().cloned())
.collect::<Vec<_>>();
publish_phase_event(
&mut self.strategy,
&mut self.process_event_bus,
@@ -1061,6 +1109,8 @@ where
execution_date,
default_stage_time(ScheduleStage::Settlement),
),
order_events: visible_order_events_after_close.as_slice(),
fills: visible_fills_after_close.as_slice(),
})?;
publish_phase_event(
&mut self.strategy,
@@ -1094,6 +1144,8 @@ where
&mut process_events,
&mut self.process_event_bus,
default_stage_time(ScheduleStage::Settlement),
visible_order_events_after_close.as_slice(),
visible_fills_after_close.as_slice(),
)?;
self.apply_strategy_directives(
execution_date,
@@ -1620,6 +1672,8 @@ fn collect_scheduled_decisions<S: Strategy>(
process_events: &mut Vec<ProcessEvent>,
process_event_bus: &mut ProcessEventBus,
current_time: Option<chrono::NaiveTime>,
order_events: &[OrderEvent],
fills: &[FillEvent],
) -> Result<crate::strategy::StrategyDecision, BacktestError> {
let mut combined = crate::strategy::StrategyDecision::default();
for rule in scheduler.triggered_rules_at(execution_date, stage, current_time, rules) {
@@ -1652,6 +1706,8 @@ fn collect_scheduled_decisions<S: Strategy>(
process_events: process_events.as_slice(),
active_process_event: None,
active_datetime: stage_datetime(execution_date, current_time),
order_events,
fills,
},
rule,
)?);
@@ -1713,6 +1769,8 @@ fn publish_phase_event<S: Strategy>(
process_events,
active_process_event: Some(&event),
active_datetime: None,
order_events: &[],
fills: &[],
};
strategy.on_process_event(&event_ctx, &event)?;
events.push(event);
@@ -1748,6 +1806,8 @@ fn publish_process_events<S: Strategy>(
process_events,
active_process_event: Some(&event),
active_datetime: None,
order_events: &[],
fills: &[],
};
strategy.on_process_event(&event_ctx, &event)?;
target.push(event);
@@ -1783,6 +1843,8 @@ fn publish_custom_process_event<S: Strategy>(
process_events,
active_process_event: Some(&event),
active_datetime: None,
order_events: &[],
fills: &[],
};
strategy.on_process_event(&event_ctx, &event)?;
target.push(event);