nautilus_binance/common/
consts.rs1use std::{num::NonZeroU32, sync::LazyLock};
19
20use nautilus_model::identifiers::Venue;
21use nautilus_network::ratelimiter::quota::Quota;
22use ustr::Ustr;
23
24use super::enums::{BinanceRateLimitInterval, BinanceRateLimitType};
25
26pub const BINANCE: &str = "BINANCE";
28
29pub static BINANCE_VENUE: LazyLock<Venue> = LazyLock::new(|| Venue::new(BINANCE));
31
32pub const BINANCE_NAUTILUS_SPOT_BROKER_ID: &str = "TD67BGP9";
36
37pub const BINANCE_NAUTILUS_FUTURES_BROKER_ID: &str = "aHRE4BCj";
41
42pub const BINANCE_SPOT_HTTP_URL: &str = "https://api.binance.com";
44
45pub const BINANCE_FUTURES_USD_HTTP_URL: &str = "https://fapi.binance.com";
47
48pub const BINANCE_FUTURES_COIN_HTTP_URL: &str = "https://dapi.binance.com";
50
51pub const BINANCE_OPTIONS_HTTP_URL: &str = "https://eapi.binance.com";
53
54pub const BINANCE_SPOT_TESTNET_HTTP_URL: &str = "https://testnet.binance.vision";
56
57pub const BINANCE_FUTURES_USD_TESTNET_HTTP_URL: &str = "https://demo-fapi.binance.com";
59
60pub const BINANCE_FUTURES_COIN_TESTNET_HTTP_URL: &str = "https://testnet.binancefuture.com";
62
63pub const BINANCE_SPOT_DEMO_HTTP_URL: &str = "https://demo-api.binance.com";
65
66pub const BINANCE_FUTURES_USD_DEMO_HTTP_URL: &str = "https://demo-fapi.binance.com";
68
69pub const BINANCE_FUTURES_COIN_DEMO_HTTP_URL: &str = "https://testnet.binancefuture.com";
71
72pub const BINANCE_SPOT_WS_URL: &str = "wss://stream.binance.com:9443/ws";
74
75pub const BINANCE_FUTURES_USD_WS_URL: &str = "wss://fstream.binance.com/market/ws";
77
78pub const BINANCE_FUTURES_USD_WS_PUBLIC_URL: &str = "wss://fstream.binance.com/public/ws";
80
81pub const BINANCE_FUTURES_USD_WS_PRIVATE_URL: &str = "wss://fstream.binance.com/private/ws";
83
84pub const BINANCE_FUTURES_COIN_WS_URL: &str = "wss://dstream.binance.com/ws";
86
87pub const BINANCE_OPTIONS_WS_URL: &str = "wss://nbstream.binance.com/eoptions";
89
90pub const BINANCE_SPOT_SBE_WS_URL: &str = "wss://stream-sbe.binance.com/ws";
92
93pub const BINANCE_SPOT_SBE_WS_API_URL: &str =
95 "wss://ws-api.binance.com:443/ws-api/v3?responseFormat=sbe&sbeSchemaId=3&sbeSchemaVersion=3";
96
97pub const BINANCE_FUTURES_USD_WS_API_URL: &str = "wss://ws-fapi.binance.com/ws-fapi/v1";
99
100pub const BINANCE_FUTURES_USD_WS_API_TESTNET_URL: &str =
102 "wss://testnet.binancefuture.com/ws-fapi/v1";
103
104pub const BINANCE_SPOT_SBE_WS_API_TESTNET_URL: &str = "wss://ws-api.testnet.binance.vision/ws-api/v3?responseFormat=sbe&sbeSchemaId=3&sbeSchemaVersion=3";
106
107pub const BINANCE_SPOT_SBE_WS_API_DEMO_URL: &str =
109 "wss://demo-ws-api.binance.com/ws-api/v3?responseFormat=sbe&sbeSchemaId=3&sbeSchemaVersion=3";
110
111pub const BINANCE_SPOT_TESTNET_WS_URL: &str = "wss://stream.testnet.binance.vision/ws";
113
114pub const BINANCE_SPOT_DEMO_WS_URL: &str = "wss://demo-stream.binance.com/ws";
116
117pub const BINANCE_FUTURES_USD_TESTNET_WS_URL: &str = "wss://fstream.binancefuture.com/ws";
119
120pub const BINANCE_FUTURES_COIN_TESTNET_WS_URL: &str = "wss://dstream.binancefuture.com/ws";
122
123pub const BINANCE_API_KEY_HEADER: &str = "X-MBX-APIKEY";
125
126pub const BINANCE_SPOT_API_PATH: &str = "/api/v3";
128
129pub const BINANCE_FAPI_PATH: &str = "/fapi/v1";
131
132pub const BINANCE_DAPI_PATH: &str = "/dapi/v1";
134
135pub const BINANCE_EAPI_PATH: &str = "/eapi/v1";
137
138#[derive(Clone, Copy, Debug)]
140pub struct BinanceRateLimitQuota {
141 pub rate_limit_type: BinanceRateLimitType,
143 pub interval: BinanceRateLimitInterval,
145 pub interval_num: u32,
147 pub limit: u32,
149}
150
151pub const BINANCE_SPOT_RATE_LIMITS: &[BinanceRateLimitQuota] = &[
156 BinanceRateLimitQuota {
157 rate_limit_type: BinanceRateLimitType::RequestWeight,
158 interval: BinanceRateLimitInterval::Minute,
159 interval_num: 1,
160 limit: 1_200,
161 },
162 BinanceRateLimitQuota {
163 rate_limit_type: BinanceRateLimitType::Orders,
164 interval: BinanceRateLimitInterval::Second,
165 interval_num: 1,
166 limit: 10,
167 },
168 BinanceRateLimitQuota {
169 rate_limit_type: BinanceRateLimitType::Orders,
170 interval: BinanceRateLimitInterval::Day,
171 interval_num: 1,
172 limit: 100_000,
173 },
174];
175
176pub const BINANCE_FAPI_RATE_LIMITS: &[BinanceRateLimitQuota] = &[
181 BinanceRateLimitQuota {
182 rate_limit_type: BinanceRateLimitType::RequestWeight,
183 interval: BinanceRateLimitInterval::Minute,
184 interval_num: 1,
185 limit: 2_400,
186 },
187 BinanceRateLimitQuota {
188 rate_limit_type: BinanceRateLimitType::Orders,
189 interval: BinanceRateLimitInterval::Second,
190 interval_num: 1,
191 limit: 50,
192 },
193 BinanceRateLimitQuota {
194 rate_limit_type: BinanceRateLimitType::Orders,
195 interval: BinanceRateLimitInterval::Minute,
196 interval_num: 1,
197 limit: 1_200,
198 },
199];
200
201pub const BINANCE_DAPI_RATE_LIMITS: &[BinanceRateLimitQuota] = &[
206 BinanceRateLimitQuota {
207 rate_limit_type: BinanceRateLimitType::RequestWeight,
208 interval: BinanceRateLimitInterval::Minute,
209 interval_num: 1,
210 limit: 1_200,
211 },
212 BinanceRateLimitQuota {
213 rate_limit_type: BinanceRateLimitType::Orders,
214 interval: BinanceRateLimitInterval::Second,
215 interval_num: 1,
216 limit: 20,
217 },
218 BinanceRateLimitQuota {
219 rate_limit_type: BinanceRateLimitType::Orders,
220 interval: BinanceRateLimitInterval::Minute,
221 interval_num: 1,
222 limit: 1_200,
223 },
224];
225
226pub const BINANCE_EAPI_RATE_LIMITS: &[BinanceRateLimitQuota] = &[
231 BinanceRateLimitQuota {
232 rate_limit_type: BinanceRateLimitType::RequestWeight,
233 interval: BinanceRateLimitInterval::Minute,
234 interval_num: 1,
235 limit: 3_000,
236 },
237 BinanceRateLimitQuota {
238 rate_limit_type: BinanceRateLimitType::Orders,
239 interval: BinanceRateLimitInterval::Second,
240 interval_num: 1,
241 limit: 5,
242 },
243 BinanceRateLimitQuota {
244 rate_limit_type: BinanceRateLimitType::Orders,
245 interval: BinanceRateLimitInterval::Minute,
246 interval_num: 1,
247 limit: 200,
248 },
249];
250
251pub static BINANCE_WS_SUBSCRIPTION_QUOTA: LazyLock<Quota> = LazyLock::new(|| {
255 Quota::per_second(NonZeroU32::new(5).expect("non-zero")).expect("valid constant")
256});
257
258pub static BINANCE_WS_CONNECTION_QUOTA: LazyLock<Quota> = LazyLock::new(|| {
263 Quota::per_second(NonZeroU32::new(1).expect("non-zero")).expect("valid constant")
264});
265
266pub static BINANCE_RATE_LIMIT_KEY_SUBSCRIPTION: LazyLock<[Ustr; 1]> =
268 LazyLock::new(|| [Ustr::from("subscription")]);
269
270pub const BINANCE_GTX_ORDER_REJECT_CODE: i64 = -5022;
274
275pub const BINANCE_NEW_ORDER_REJECTED_CODE: i64 = -2010;
280
281pub const BINANCE_SPOT_POST_ONLY_REJECT_MSG: &str = "Order would immediately match and take.";
285
286pub const BINANCE_BOOK_DEPTHS: [u32; 7] = [5, 10, 20, 50, 100, 500, 1000];