Expose strategy runtime data APIs

This commit is contained in:
boris
2026-04-23 19:29:12 -07:00
parent 1760fc6cd1
commit c3ef0bd49a
9 changed files with 678 additions and 6 deletions

View File

@@ -406,6 +406,10 @@ where
subscriptions: &self.subscriptions,
process_events: &process_events,
active_process_event: None,
active_datetime: stage_datetime(
execution_date,
default_stage_time(ScheduleStage::BeforeTrading),
),
})?;
publish_phase_event(
&mut self.strategy,
@@ -509,6 +513,10 @@ where
subscriptions: &self.subscriptions,
process_events: &process_events,
active_process_event: None,
active_datetime: stage_datetime(
execution_date,
default_stage_time(ScheduleStage::OpenAuction),
),
})?);
publish_phase_event(
&mut self.strategy,
@@ -603,6 +611,10 @@ where
subscriptions: &self.subscriptions,
process_events: &process_events,
active_process_event: None,
active_datetime: stage_datetime(
execution_date,
default_stage_time(ScheduleStage::OnDay),
),
})
})
.transpose()?
@@ -685,6 +697,10 @@ where
subscriptions: &self.subscriptions,
process_events: &process_events,
active_process_event: None,
active_datetime: stage_datetime(
execution_date,
default_stage_time(ScheduleStage::Bar),
),
})?);
publish_phase_event(
&mut self.strategy,
@@ -828,6 +844,7 @@ where
subscriptions: &self.subscriptions,
process_events: &process_events,
active_process_event: None,
active_datetime: Some(quote.timestamp),
},
&quote,
)?);
@@ -929,6 +946,10 @@ where
subscriptions: &self.subscriptions,
process_events: &process_events,
active_process_event: None,
active_datetime: stage_datetime(
execution_date,
default_stage_time(ScheduleStage::AfterTrading),
),
})?;
publish_phase_event(
&mut self.strategy,
@@ -1036,6 +1057,10 @@ where
subscriptions: &self.subscriptions,
process_events: &process_events,
active_process_event: None,
active_datetime: stage_datetime(
execution_date,
default_stage_time(ScheduleStage::Settlement),
),
})?;
publish_phase_event(
&mut self.strategy,
@@ -1626,6 +1651,7 @@ fn collect_scheduled_decisions<S: Strategy>(
subscriptions,
process_events: process_events.as_slice(),
active_process_event: None,
active_datetime: stage_datetime(execution_date, current_time),
},
rule,
)?);
@@ -1686,6 +1712,7 @@ fn publish_phase_event<S: Strategy>(
subscriptions,
process_events,
active_process_event: Some(&event),
active_datetime: None,
};
strategy.on_process_event(&event_ctx, &event)?;
events.push(event);
@@ -1720,6 +1747,7 @@ fn publish_process_events<S: Strategy>(
subscriptions,
process_events,
active_process_event: Some(&event),
active_datetime: None,
};
strategy.on_process_event(&event_ctx, &event)?;
target.push(event);
@@ -1754,6 +1782,7 @@ fn publish_custom_process_event<S: Strategy>(
subscriptions,
process_events,
active_process_event: Some(&event),
active_datetime: None,
};
strategy.on_process_event(&event_ctx, &event)?;
target.push(event);
@@ -1772,6 +1801,13 @@ fn stage_label(stage: ScheduleStage) -> &'static str {
}
}
fn stage_datetime(
date: NaiveDate,
time: Option<chrono::NaiveTime>,
) -> Option<chrono::NaiveDateTime> {
time.map(|value| date.and_time(value))
}
fn should_run_tick_events(rules: &[ScheduleRule], subscriptions: &BTreeSet<String>) -> bool {
!subscriptions.is_empty() || rules.iter().any(|rule| rule.stage == ScheduleStage::Tick)
}