Skip to main content

apple_quant_algorithmic/
order.rs

1use 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}