Skip to main content

apple_quant_algorithmic/
order.rs

1pub mod dependency;
2mod builder;
3mod client;
4mod execution_expectation;
5mod partial_fill;
6mod remote;
7mod state_goal;
8mod state_update;
9mod timing;
10mod tracker;
11
12use thiserror::Error;
13
14use crate::{
15	volume::{DirectionalIntentVolume, DirectionlessVolume},
16	instrument::InstrumentSpec, liquidity::LiquidityEstimation, price::AbsolutePrice,
17};
18
19pub use builder::*;
20pub use client::*;
21pub use dependency::*;
22pub use execution_expectation::*;
23pub use partial_fill::*;
24pub use remote::*;
25pub use state_goal::*;
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}