apple-quant-algorithmic 0.3.0

Apple Quant's algorithmic library.
use tokio::{fs::File, io::BufReader};

use crate::{
	backend::{OrdersBackendUpdate, OrdersBackendUpdateRecycle},
	instrument::InstrumentSpec, order_manager::OrdersCapacitySpec, strategy::Strategy,
	timestamp::TimestampRangeExclusive, Frontend,
};

use super::{HistoricalDataBackend, MarketDataDecoderProvider, OrdersBackend};

pub trait DataBackend<
	'instrument_data,
	'aggregated_data,
	IS: InstrumentSpec,
	OB: OrdersBackend<IS>,
	OrdersCS: OrdersCapacitySpec,
	S: Strategy<IS, OB, OrdersCS>,
>: MarketDataDecoderProvider<IS> {
	fn new(
		data_key: Option<&str>,
		frontend: Frontend<'instrument_data, 'aggregated_data, IS, OB, OrdersCS, S>,
		orders_backend_update_receiver: thingbuf::mpsc::Receiver<
			OrdersBackendUpdate<IS>,
			OrdersBackendUpdateRecycle,
		>,
	) -> Self;

	fn file_name_postpend() -> &'static str;

	fn backtest(
		&mut self,
		walk_range: TimestampRangeExclusive,
	) -> impl Future<Output = ()>;

	fn decode_market_data(
		buf_readers: impl ExactSizeIterator<Item = BufReader<File>>,
	) -> impl Future<Output = Self::MarketDataDecoder>;

	fn historical_mut(
		&mut self,
	) -> Option<Result<&mut impl HistoricalDataBackend<IS>, ()>>;
}