apple-quant-algorithmic 0.4.0

Apple Quant's algorithmic library.
Documentation
use std::marker::ConstParamTy;

pub trait CapacitySpec {
	type const STREAM: usize;
	type const FLIGHT: usize;
	type const WORKING: usize;
	type const FILLED: usize;
}

pub struct CapacitySpecLowFrequencyTrades;

impl CapacitySpec for CapacitySpecLowFrequencyTrades {
	type const STREAM: usize = 64;
	type const FLIGHT: usize = 4;
	type const WORKING: usize = 4;
	type const FILLED: usize = 10_000;
}

pub struct CapacitySpecHighFrequencyTrades;

impl CapacitySpec for CapacitySpecHighFrequencyTrades {
	type const STREAM: usize = 64;
	type const FLIGHT: usize = 16;
	type const WORKING: usize = 16;
	type const FILLED: usize = 1_000_000;
}

#[derive(ConstParamTy, Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct LatencyDistribution {
	pub min_ns: u32,
	pub max_ns: u32,
	pub mean_ns: u32,
	pub std_dev_ns: u32,
}

pub trait PhysicalLocationLD: 'static {
	type const LATENCY_DISTRIBUTION: LatencyDistribution;
}

pub struct PhysicalLocationLDPrimaryBareMetal;

impl PhysicalLocationLD for PhysicalLocationLDPrimaryBareMetal {
	type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
		min_ns: 2_000,
		max_ns: 10_000,
		mean_ns: 4_000,
		std_dev_ns: 500,
	};
}

pub struct PhysicalLocationLDProximityBareMetal;

impl PhysicalLocationLD for PhysicalLocationLDProximityBareMetal {
	type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
		min_ns: 300_000,
		max_ns: 1_000_000,
		mean_ns: 400_000,
		std_dev_ns: 25_000,
	};
}

pub trait OrderRouterLD: 'static {
	type const LATENCY_DISTRIBUTION: LatencyDistribution;
}

pub struct OrderRouterLDILink;

impl OrderRouterLD for OrderRouterLDILink {
	type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
		min_ns: 500,
		max_ns: 1_500,
		mean_ns: 1_000,
		std_dev_ns: 250,
	};
}

pub struct OrderRouterLDRithmicDiamond;

impl OrderRouterLD for OrderRouterLDRithmicDiamond {
	type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
		min_ns: 10_000,
		max_ns: 50_000,
		mean_ns: 25_000,
		std_dev_ns: 5_000,
	};
}

pub struct OrderRounterLDRithmicFull;

impl OrderRouterLD for OrderRounterLDRithmicFull {
	type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
		min_ns: 500_000,
		max_ns: 2_000_000,
		mean_ns: 750_000,
		std_dev_ns: 50_000,
	};
}

pub trait ExchangeLD: 'static {
	type const LATENCY_DISTRIBUTION: LatencyDistribution;
}

pub struct ExchangeLD_CME;

impl ExchangeLD for ExchangeLD_CME {
	type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
		min_ns: 10_000,
		max_ns: 100_000,
		mean_ns: 40_000,
		std_dev_ns: 5_000,
	};
}