apple_quant_algorithmic/backends/simulated/
specs.rs1use 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}