Skip to main content

apple_quant_algorithmic/backends/simulated/
specs.rs

1use std::marker::ConstParamTy;
2
3pub trait CapacitySpec {
4	type const STREAM: usize;
5
6	type const FLIGHT: usize;
7	type const WORKING: usize;
8	type const FILLED: usize;
9}
10
11pub struct CapacitySpecLowFrequencyTrades;
12
13impl CapacitySpec for CapacitySpecLowFrequencyTrades {
14	type const STREAM: usize = 64;
15
16	type const FLIGHT: usize = 4;
17	type const WORKING: usize = 4;
18	type const FILLED: usize = 10_000;
19}
20
21pub struct CapacitySpecHighFrequencyTrades;
22
23impl CapacitySpec for CapacitySpecHighFrequencyTrades {
24	type const STREAM: usize = 64;
25
26	type const FLIGHT: usize = 16;
27	type const WORKING: usize = 16;
28	type const FILLED: usize = 1_000_000;
29}
30
31#[derive(ConstParamTy, Debug, Clone, Copy, PartialEq, Eq, Hash)]
32pub struct LatencyDistribution {
33	pub min_ns: u32,
34	pub max_ns: u32,
35
36	pub mean_ns: u32,
37	pub std_dev_ns: u32,
38}
39
40pub trait PhysicalLocationLD {
41	type const LATENCY_DISTRIBUTION: LatencyDistribution;
42}
43
44pub struct PhysicalLocationLDPrimaryBareMetal;
45
46impl PhysicalLocationLD for PhysicalLocationLDPrimaryBareMetal {
47	type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
48		min_ns: 2_000,
49		max_ns: 10_000,
50		mean_ns: 4_000,
51		std_dev_ns: 500,
52	};
53}
54
55pub struct PhysicalLocationLDProximityBareMetal;
56
57impl PhysicalLocationLD for PhysicalLocationLDProximityBareMetal {
58	type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
59		min_ns: 300_000,
60		max_ns: 1_000_000,
61		mean_ns: 400_000,
62		std_dev_ns: 25_000,
63	};
64}
65
66pub trait OrderRouterLD {
67	type const LATENCY_DISTRIBUTION: LatencyDistribution;
68}
69
70pub struct OrderRouterLDILink;
71
72impl OrderRouterLD for OrderRouterLDILink {
73	type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
74		min_ns: 500,
75		max_ns: 1_500,
76		mean_ns: 1_000,
77		std_dev_ns: 250,
78	};
79}
80
81pub struct OrderRouterLDRithmicDiamond;
82
83impl OrderRouterLD for OrderRouterLDRithmicDiamond {
84	type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
85		min_ns: 10_000,
86		max_ns: 50_000,
87		mean_ns: 25_000,
88		std_dev_ns: 5_000,
89	};
90}
91
92pub struct OrderRounterLDRithmicFull;
93
94impl OrderRouterLD for OrderRounterLDRithmicFull {
95	type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
96		min_ns: 500_000,
97		max_ns: 2_000_000,
98		mean_ns: 750_000,
99		std_dev_ns: 50_000,
100	};
101}
102
103pub trait ExchangeLD {
104	type const LATENCY_DISTRIBUTION: LatencyDistribution;
105}
106
107pub struct ExchangeLD_CME;
108
109impl ExchangeLD for ExchangeLD_CME {
110	type const LATENCY_DISTRIBUTION: LatencyDistribution = LatencyDistribution {
111		min_ns: 10_000,
112		max_ns: 100_000,
113		mean_ns: 40_000,
114		std_dev_ns: 5_000,
115	};
116}