nautilus_testkit/testers/data/
config.rs1use std::num::NonZeroUsize;
17
18use nautilus_common::actor::DataActorConfig;
19use nautilus_core::Params;
20use nautilus_model::{
21 data::bar::BarType,
22 enums::BookType,
23 identifiers::{ClientId, InstrumentId},
24};
25use serde::{Deserialize, Serialize};
26
27#[derive(Debug, Clone, Deserialize, Serialize, bon::Builder)]
29#[serde(default, deny_unknown_fields)]
30#[cfg_attr(
31 feature = "python",
32 pyo3::pyclass(module = "nautilus_trader.core.nautilus_pyo3.testkit", from_py_object)
33)]
34#[cfg_attr(
35 feature = "python",
36 pyo3_stub_gen::derive::gen_stub_pyclass(module = "nautilus_trader.testkit")
37)]
38pub struct DataTesterConfig {
39 #[builder(default)]
41 pub base: DataActorConfig,
42 #[builder(default)]
44 pub instrument_ids: Vec<InstrumentId>,
45 pub client_id: Option<ClientId>,
47 pub bar_types: Option<Vec<BarType>>,
49 #[builder(default = false)]
51 pub subscribe_book_deltas: bool,
52 #[builder(default = false)]
54 pub subscribe_book_depth: bool,
55 #[builder(default = false)]
57 pub subscribe_book_at_interval: bool,
58 #[builder(default = false)]
60 pub subscribe_quotes: bool,
61 #[builder(default = false)]
63 pub subscribe_trades: bool,
64 #[builder(default = false)]
66 pub subscribe_mark_prices: bool,
67 #[builder(default = false)]
69 pub subscribe_index_prices: bool,
70 #[builder(default = false)]
72 pub subscribe_funding_rates: bool,
73 #[builder(default = false)]
75 pub subscribe_bars: bool,
76 #[builder(default = false)]
78 pub subscribe_instrument: bool,
79 #[builder(default = false)]
81 pub subscribe_instrument_status: bool,
82 #[builder(default = false)]
84 pub subscribe_instrument_close: bool,
85 #[builder(default = false)]
87 pub subscribe_option_greeks: bool,
88 pub subscribe_params: Option<Params>,
90 pub request_params: Option<Params>,
92 #[builder(default = true)]
94 pub can_unsubscribe: bool,
95 #[builder(default = false)]
97 pub request_instruments: bool,
98 #[builder(default = false)]
100 pub request_quotes: bool,
101 #[builder(default = false)]
104 pub request_trades: bool,
105 #[builder(default = false)]
107 pub request_bars: bool,
108 #[builder(default = false)]
110 pub request_book_snapshot: bool,
111 #[builder(default = false)]
114 pub request_book_deltas: bool,
115 #[builder(default = false)]
117 pub request_funding_rates: bool,
118 #[builder(default = BookType::L2_MBP)]
121 pub book_type: BookType,
122 pub book_depth: Option<NonZeroUsize>,
124 #[builder(default = NonZeroUsize::new(1000).unwrap())]
127 pub book_interval_ms: NonZeroUsize,
128 #[builder(default = 10)]
130 pub book_levels_to_print: usize,
131 #[builder(default = true)]
133 pub manage_book: bool,
134 #[builder(default = true)]
136 pub log_data: bool,
137 #[builder(default = 5)]
139 pub stats_interval_secs: u64,
140}
141
142impl DataTesterConfig {
143 #[must_use]
149 pub fn new(client_id: ClientId, instrument_ids: Vec<InstrumentId>) -> Self {
150 Self {
151 base: DataActorConfig::default(),
152 instrument_ids,
153 client_id: Some(client_id),
154 bar_types: None,
155 subscribe_book_deltas: false,
156 subscribe_book_depth: false,
157 subscribe_book_at_interval: false,
158 subscribe_quotes: false,
159 subscribe_trades: false,
160 subscribe_mark_prices: false,
161 subscribe_index_prices: false,
162 subscribe_funding_rates: false,
163 subscribe_bars: false,
164
165 subscribe_instrument: false,
166 subscribe_instrument_status: false,
167 subscribe_instrument_close: false,
168 subscribe_option_greeks: false,
169 subscribe_params: None,
170 request_params: None,
171 can_unsubscribe: true,
172 request_instruments: false,
173 request_quotes: false,
174 request_trades: false,
175 request_bars: false,
176 request_book_snapshot: false,
177 request_book_deltas: false,
178 request_funding_rates: false,
179 book_type: BookType::L2_MBP,
180 book_depth: None,
181 book_interval_ms: NonZeroUsize::new(1000).unwrap(),
182 book_levels_to_print: 10,
183 manage_book: true,
184 log_data: true,
185 stats_interval_secs: 5,
186 }
187 }
188}
189
190impl Default for DataTesterConfig {
191 fn default() -> Self {
192 Self::builder().build()
193 }
194}