apple-quant-algorithmic 0.1.0

Apple Quant's algorithmic trading api
Documentation
use crate::{
	instrument::InstrumentSpec,
	liquidity::LiquidityEstimation,
	price::AbsolutePrice,
	volume::{DirectionalIntentVolume, DirectionlessVolume},
};

use thiserror::Error;

mod client;
pub mod dependency;
mod execution_expectation;
mod goal;
mod partial_fill;
mod remote;
mod state_update;
mod timing;
mod tracker;

pub use client::*;
pub use dependency::*;
pub use execution_expectation::*;
pub use goal::*;
pub use partial_fill::*;
pub use remote::*;
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>>;
}