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