Skip to main content

apple_quant_algorithmic/backend/
data.rs

1use tokio::{fs::File, io::BufReader};
2
3use crate::{
4	backend::{OrdersBackendUpdate, OrdersBackendUpdateRecycle},
5	instrument::InstrumentSpec, order_manager::OrdersCapacitySpec, strategy::Strategy,
6	timestamp::TimestampRangeExclusive, Frontend,
7};
8
9use super::{HistoricalDataBackend, MarketDataDecoderProvider, OrdersBackend};
10
11pub trait DataBackend<
12	'instrument_data,
13	'aggregated_data,
14	IS: InstrumentSpec,
15	OB: OrdersBackend<IS>,
16	OrdersCS: OrdersCapacitySpec,
17	S: Strategy<IS, OB, OrdersCS>,
18>: MarketDataDecoderProvider<IS> {
19	fn new(
20		data_key: Option<&str>,
21		frontend: Frontend<'instrument_data, 'aggregated_data, IS, OB, OrdersCS, S>,
22		orders_backend_update_receiver: thingbuf::mpsc::Receiver<
23			OrdersBackendUpdate<IS>,
24			OrdersBackendUpdateRecycle,
25		>,
26	) -> Self;
27
28	fn file_name_postpend() -> &'static str;
29
30	fn backtest(
31		&mut self,
32		walk_range: TimestampRangeExclusive,
33	) -> impl Future<Output = ()>;
34
35	fn decode_market_data(
36		buf_readers: impl ExactSizeIterator<Item = BufReader<File>>,
37	) -> impl Future<Output = Self::MarketDataDecoder>;
38
39	fn historical_mut(
40		&mut self,
41	) -> Option<Result<&mut impl HistoricalDataBackend<IS>, ()>>;
42}