apple-quant-algorithmic 0.4.0

Apple Quant's algorithmic library.
Documentation
pub mod dependency;
mod builder;
mod client;
mod execution_expectation;
mod partial_fill;
mod remote;
mod state_goal;
mod state_update;
mod timing;
mod tracker;

use thiserror::Error;

use crate::{
	volume::{DirectionalIntentVolume, DirectionlessVolume},
	instrument::InstrumentSpec, liquidity::LiquidityEstimation, price::AbsolutePrice,
};

pub use builder::*;
pub use client::*;
pub use dependency::*;
pub use execution_expectation::*;
pub use partial_fill::*;
pub use remote::*;
pub use state_goal::*;
pub use state_update::*;
pub use timing::*;
pub use tracker::*;

#[derive(Debug, Error)]
pub enum DesiredVolumeOrderError {
	#[error("Order does not have a visible volume desire.")]
	DesireHidden,
}

pub trait DesiredVolumeOrder<IS: InstrumentSpec> {
	fn desired_directionless_volume(
		&self,
	) -> Result<&DirectionlessVolume<IS>, DesiredVolumeOrderError>;

	fn desired_directional_intent_volume(
		&self,
	) -> Result<DirectionalIntentVolume<IS>, DesiredVolumeOrderError>;
}

pub trait MatchableOrder<IS: InstrumentSpec> {
	fn is_liquidable(
		&self,
		liquidity_estimation: &LiquidityEstimation<IS>,
	) -> Option<AbsolutePrice<IS>>;
}