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