Add order runtime lookup
This commit is contained in:
@@ -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(),
|
||||
},
|
||||
"e,
|
||||
)?);
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user