apple_quant_algorithmic/order/dependency/client/
submit.rs1use crate::{
2 backend::{OrderIdGenerator, OrdersBackend},
3 instrument::InstrumentSpec,
4 order::{
5 ActiveOrderGoals, ActiveStateGoal, ClientOrder, ClientOrderTracker, OrderDependency,
6 TriggerError,
7 },
8 order_manager::{OrderManager, OrdersCapacitySpec},
9 price::BidAskPriceSpread,
10 timestamp::TickTimestamp,
11 volume::DirectionalExposure,
12};
13
14use super::ClientDeployedRemoteDependency;
15
16#[derive(Debug, Clone, PartialEq, Eq, Hash)]
17pub struct SubmitClientOrder<IS: InstrumentSpec> {
18 pub client_order_tracker: ClientOrderTracker,
19 pub client_order: ClientOrder<IS>,
20 pub client_deployed_remote_dependency: ClientDeployedRemoteDependency<IS>,
21}
22
23impl<IS: InstrumentSpec> SubmitClientOrder<IS> {
24 pub(crate) fn parent_processed(
25 &mut self,
26 bid_ask_price_spread: &BidAskPriceSpread<IS>,
27 ) {
28 self.client_order
29 .parent_processed(bid_ask_price_spread);
30 }
31}
32
33impl<IS: InstrumentSpec> OrderDependency<IS> for SubmitClientOrder<IS> {
34 async fn trigger<OB: OrdersBackend<IS>, CS: OrdersCapacitySpec>(
35 &self,
36 tick_timestamp: &TickTimestamp,
37 order_manager: &mut OrderManager<IS, CS>,
38 orders_backend: &mut OB,
39 order_id_generator: &mut OrderIdGenerator,
40 directional_exposure: &mut DirectionalExposure<IS>,
41 active_order_goals: &mut ActiveOrderGoals<IS>,
42 active_state_goal: &mut ActiveStateGoal,
43 ) -> Result<(), TriggerError>
44 where
45 IS: Send,
46 {
47 let Self {
48 client_order_tracker,
49 client_order,
50 client_deployed_remote_dependency,
51 } = self;
52
53 order_manager
54 .pending_client_orders
55 .submit::<OB>(
56 tick_timestamp,
57 directional_exposure,
58 client_order_tracker,
59 client_order.clone(),
60 client_deployed_remote_dependency.clone(),
61 )?;
62
63 Ok(())
64 }
65}