apple_quant_algorithmic/
order.rs1use crate::{
2 instrument::InstrumentSpec,
3 liquidity::LiquidityEstimation,
4 price::AbsolutePrice,
5 volume::{DirectionalIntentVolume, DirectionlessVolume},
6};
7
8use thiserror::Error;
9
10mod client;
11pub mod dependency;
12mod execution_expectation;
13mod goal;
14mod partial_fill;
15mod remote;
16mod state_update;
17mod timing;
18mod tracker;
19
20pub use client::*;
21pub use dependency::*;
22pub use execution_expectation::*;
23pub use goal::*;
24pub use partial_fill::*;
25pub use remote::*;
26pub use state_update::*;
27pub use timing::*;
28pub use tracker::*;
29
30#[derive(Debug, Error)]
31pub enum DesiredVolumeOrderError {
32 #[error("Order does not have a visible volume desire.")]
33 DesireHidden,
34}
35
36pub trait DesiredVolumeOrder<IS: InstrumentSpec> {
37 fn desired_directionless_volume(
38 &self
39 ) -> Result<&DirectionlessVolume<IS>, DesiredVolumeOrderError>;
40
41 fn desired_directional_intent_volume(
42 &self
43 ) -> Result<DirectionalIntentVolume<IS>, DesiredVolumeOrderError>;
44}
45
46pub trait MatchableOrder<IS: InstrumentSpec> {
47 fn is_liquidable(
48 &self,
49 liquidity_estimation: &LiquidityEstimation<IS>,
50 ) -> Option<AbsolutePrice<IS>>;
51}