Add daily strategy lifecycle hooks
This commit is contained in:
@@ -190,10 +190,22 @@ where
|
||||
)?;
|
||||
self.extend_result(&mut result, delisting_report);
|
||||
|
||||
let decision = execution_idx
|
||||
let decision_slot = execution_idx
|
||||
.checked_sub(self.config.decision_lag_trading_days)
|
||||
.map(|decision_idx| {
|
||||
let decision_date = execution_dates[decision_idx];
|
||||
.map(|decision_idx| (decision_idx, execution_dates[decision_idx]));
|
||||
let (decision_index, decision_date) =
|
||||
decision_slot.unwrap_or((execution_idx, execution_date));
|
||||
let daily_context = StrategyContext {
|
||||
execution_date,
|
||||
decision_date,
|
||||
decision_index,
|
||||
data: &self.data,
|
||||
portfolio: &portfolio,
|
||||
};
|
||||
self.strategy.before_trading(&daily_context)?;
|
||||
|
||||
let decision = decision_slot
|
||||
.map(|(decision_idx, decision_date)| {
|
||||
self.strategy.on_day(&StrategyContext {
|
||||
execution_date,
|
||||
decision_date,
|
||||
@@ -215,6 +227,16 @@ where
|
||||
|
||||
portfolio.update_prices(execution_date, &self.data, PriceField::Close)?;
|
||||
|
||||
let post_trade_context = StrategyContext {
|
||||
execution_date,
|
||||
decision_date,
|
||||
decision_index,
|
||||
data: &self.data,
|
||||
portfolio: &portfolio,
|
||||
};
|
||||
self.strategy.after_trading(&post_trade_context)?;
|
||||
self.strategy.on_settlement(&post_trade_context)?;
|
||||
|
||||
let benchmark =
|
||||
self.data
|
||||
.benchmark(execution_date)
|
||||
|
||||
Reference in New Issue
Block a user