use crate::{
backend::{OrderIdGenerator, OrdersBackend},
instrument::{InstrumentData, InstrumentSpec},
order::{DeferredOrderActions, StateGoal},
order_manager::{OrderManager, OrdersCapacitySpec},
timestamp::TickTimestamp, volume::DirectionalExposure,
};
pub trait Strategy<
IS: InstrumentSpec,
OB: OrdersBackend<IS>,
CS: OrdersCapacitySpec,
> {
#[allow(unused_variables)]
fn initialize<'instrument_data, 'aggregated_data>(
&mut self,
tick_timestamp: &TickTimestamp,
instrument_data: &InstrumentData<'instrument_data, 'aggregated_data, IS>,
deferred_order_actions: &mut DeferredOrderActions<IS>,
order_id_generator: &mut OrderIdGenerator,
) -> impl Future<Output = anyhow::Result<()>> {
async {
Ok(())
}
}
#[allow(unused_variables)]
fn data_update<'instrument_data, 'aggregated_data>(
&mut self,
tick_timestamp: &TickTimestamp,
instrument_data: &InstrumentData<'instrument_data, 'aggregated_data, IS>,
order_manager: &OrderManager<IS, CS>,
directional_exposure: &DirectionalExposure<IS>,
state_goal: &StateGoal,
deferred_order_actions: &mut DeferredOrderActions<IS>,
order_id_generator: &mut OrderIdGenerator,
) -> impl Future<Output = anyhow::Result<()>> {
async {
Ok(())
}
}
}