apple-quant-algorithmic 0.3.0

Apple Quant's algorithmic library.
use crate::{
	instrument::{InstrumentData, InstrumentSpec, InstrumentTicker},
	order::{DeferredOrderActions, StateGoal},
	order_manager::{OrderManager, OrdersCapacitySpec},
	strategy::Strategy, timestamp::TradeTimestamp, volume::DirectionalExposure,
};

use super::{OrderIdGenerator, OrdersBackend};

pub(crate) trait RealtimeDataBackend<
	'instrument_data,
	'aggregated_data,
	IS: InstrumentSpec,
	OB: OrdersBackend<IS>,
	OrdersCS: OrdersCapacitySpec,
	S: Strategy<IS, OB, OrdersCS> + Send,
> {
	fn initialize_realtime(
		&mut self,
		instrument_ticker: &InstrumentTicker,
		recent_trade_timestamp: Option<&TradeTimestamp>,
	) -> impl Future<Output = ()>;

	fn poll_realtime(
		&mut self,
		instrument_data: &'instrument_data mut InstrumentData<
			'instrument_data,
			'aggregated_data,
			IS,
		>,
		strategy: &mut S,
		order_manager: &OrderManager<IS, OrdersCS>,
		directional_exposure: &DirectionalExposure<IS>,
		state_goal: &mut StateGoal,
		deferred_order_actions: &mut DeferredOrderActions<IS>,
		order_id_generator: &mut OrderIdGenerator,
		recent_trade_timestamp: Option<&TradeTimestamp>,
	) -> impl Future<Output = ()>;
}