Skip to main content

bybit_api/models/
market.rs

1//! Market data models.
2
3use rust_decimal::Decimal;
4use serde::Deserialize;
5
6/// Server time response.
7#[derive(Debug, Clone, Deserialize)]
8#[serde(rename_all = "camelCase")]
9pub struct ServerTime {
10    /// Server time in seconds
11    pub time_second: String,
12    /// Server time in nanoseconds
13    pub time_nano: String,
14}
15
16/// Instruments info response.
17#[derive(Debug, Clone, Deserialize)]
18#[serde(rename_all = "camelCase")]
19pub struct InstrumentsInfo {
20    /// Category
21    pub category: String,
22    /// List of instruments
23    pub list: Vec<InstrumentInfo>,
24    /// Next page cursor
25    #[serde(default)]
26    pub next_page_cursor: String,
27}
28
29/// Single instrument info.
30#[derive(Debug, Clone, Deserialize)]
31#[serde(rename_all = "camelCase")]
32pub struct InstrumentInfo {
33    /// Symbol name
34    pub symbol: String,
35    /// Contract type
36    #[serde(default)]
37    pub contract_type: String,
38    /// Trading status
39    pub status: String,
40    /// Base coin
41    #[serde(default)]
42    pub base_coin: String,
43    /// Quote coin
44    #[serde(default)]
45    pub quote_coin: String,
46    /// Settle coin
47    #[serde(default)]
48    pub settle_coin: String,
49    /// Launch time
50    #[serde(default)]
51    pub launch_time: String,
52    /// Delivery time
53    #[serde(default)]
54    pub delivery_time: String,
55    /// Delivery fee rate
56    #[serde(default)]
57    pub delivery_fee_rate: String,
58    /// Price scale
59    #[serde(default)]
60    pub price_scale: String,
61    /// Leverage filter
62    #[serde(default)]
63    pub leverage_filter: Option<LeverageFilter>,
64    /// Price filter
65    #[serde(default)]
66    pub price_filter: Option<PriceFilter>,
67    /// Lot size filter
68    #[serde(default)]
69    pub lot_size_filter: Option<LotSizeFilter>,
70}
71
72/// Leverage filter.
73#[derive(Debug, Clone, Deserialize)]
74#[serde(rename_all = "camelCase")]
75pub struct LeverageFilter {
76    /// Min leverage
77    pub min_leverage: String,
78    /// Max leverage
79    pub max_leverage: String,
80    /// Leverage step
81    pub leverage_step: String,
82}
83
84/// Price filter.
85#[derive(Debug, Clone, Deserialize)]
86#[serde(rename_all = "camelCase")]
87pub struct PriceFilter {
88    /// Min price
89    pub min_price: String,
90    /// Max price
91    pub max_price: String,
92    /// Tick size
93    pub tick_size: String,
94}
95
96/// Lot size filter.
97#[derive(Debug, Clone, Deserialize)]
98#[serde(rename_all = "camelCase")]
99pub struct LotSizeFilter {
100    /// Max order qty
101    #[serde(default)]
102    pub max_order_qty: String,
103    /// Min order qty
104    #[serde(default)]
105    pub min_order_qty: String,
106    /// Qty step
107    #[serde(default)]
108    pub qty_step: String,
109    /// Post only max order qty
110    #[serde(default)]
111    pub post_only_max_order_qty: String,
112    /// Base precision
113    #[serde(default)]
114    pub base_precision: String,
115    /// Quote precision
116    #[serde(default)]
117    pub quote_precision: String,
118    /// Min order amt
119    #[serde(default)]
120    pub min_order_amt: String,
121    /// Max order amt
122    #[serde(default)]
123    pub max_order_amt: String,
124}
125
126/// Orderbook response.
127#[derive(Debug, Clone, Deserialize)]
128#[serde(rename_all = "camelCase")]
129pub struct Orderbook {
130    /// Symbol
131    pub s: String,
132    /// Bids [price, size]
133    pub b: Vec<[String; 2]>,
134    /// Asks [price, size]
135    pub a: Vec<[String; 2]>,
136    /// Timestamp
137    pub ts: u64,
138    /// Update ID
139    pub u: u64,
140}
141
142/// Tickers response.
143#[derive(Debug, Clone, Deserialize)]
144#[serde(rename_all = "camelCase")]
145pub struct Tickers {
146    /// Category
147    pub category: String,
148    /// List of tickers
149    pub list: Vec<Ticker>,
150}
151
152/// Single ticker.
153#[derive(Debug, Clone, Deserialize)]
154#[serde(rename_all = "camelCase")]
155pub struct Ticker {
156    /// Symbol
157    pub symbol: String,
158    /// Last price
159    #[serde(default)]
160    pub last_price: String,
161    /// Index price
162    #[serde(default)]
163    pub index_price: String,
164    /// Mark price
165    #[serde(default)]
166    pub mark_price: String,
167    /// Previous 24h price
168    #[serde(default)]
169    pub prev_price_24h: String,
170    /// Price change 24h percentage
171    #[serde(default)]
172    pub price_24h_pcnt: String,
173    /// High price 24h
174    #[serde(default)]
175    pub high_price_24h: String,
176    /// Low price 24h
177    #[serde(default)]
178    pub low_price_24h: String,
179    /// Previous 1h price
180    #[serde(default)]
181    pub prev_price_1h: String,
182    /// Open interest
183    #[serde(default)]
184    pub open_interest: String,
185    /// Open interest value
186    #[serde(default)]
187    pub open_interest_value: String,
188    /// Turnover 24h
189    #[serde(default)]
190    pub turnover_24h: String,
191    /// Volume 24h
192    #[serde(default)]
193    pub volume_24h: String,
194    /// Funding rate
195    #[serde(default)]
196    pub funding_rate: String,
197    /// Next funding time
198    #[serde(default)]
199    pub next_funding_time: String,
200    /// Bid price
201    #[serde(default)]
202    pub bid_1_price: String,
203    /// Bid size
204    #[serde(default)]
205    pub bid_1_size: String,
206    /// Ask price
207    #[serde(default)]
208    pub ask_1_price: String,
209    /// Ask size
210    #[serde(default)]
211    pub ask_1_size: String,
212}
213
214/// Kline response.
215#[derive(Debug, Clone, Deserialize)]
216#[serde(rename_all = "camelCase")]
217pub struct Klines {
218    /// Category
219    pub category: String,
220    /// Symbol
221    pub symbol: String,
222    /// List of klines [timestamp, open, high, low, close, volume, turnover]
223    pub list: Vec<Vec<String>>,
224}
225
226/// Parsed kline data.
227#[derive(Debug, Clone)]
228pub struct Kline {
229    /// Start time in milliseconds
230    pub start_time: u64,
231    /// Open price
232    pub open: Decimal,
233    /// High price
234    pub high: Decimal,
235    /// Low price
236    pub low: Decimal,
237    /// Close price
238    pub close: Decimal,
239    /// Volume
240    pub volume: Decimal,
241    /// Turnover
242    pub turnover: Decimal,
243}
244
245/// Funding rate history response.
246#[derive(Debug, Clone, Deserialize)]
247#[serde(rename_all = "camelCase")]
248pub struct FundingHistory {
249    /// Category
250    pub category: String,
251    /// List of funding records
252    pub list: Vec<FundingRecord>,
253}
254
255/// Single funding record.
256#[derive(Debug, Clone, Deserialize)]
257#[serde(rename_all = "camelCase")]
258pub struct FundingRecord {
259    /// Symbol
260    pub symbol: String,
261    /// Funding rate
262    pub funding_rate: String,
263    /// Funding rate timestamp
264    pub funding_rate_timestamp: String,
265}
266
267/// Recent trades response.
268#[derive(Debug, Clone, Deserialize)]
269#[serde(rename_all = "camelCase")]
270pub struct RecentTrades {
271    /// Category
272    pub category: String,
273    /// List of trades
274    pub list: Vec<Trade>,
275}
276
277/// Single trade.
278#[derive(Debug, Clone, Deserialize)]
279#[serde(rename_all = "camelCase")]
280pub struct Trade {
281    /// Exec ID
282    pub exec_id: String,
283    /// Symbol
284    pub symbol: String,
285    /// Price
286    pub price: String,
287    /// Size
288    pub size: String,
289    /// Side
290    pub side: String,
291    /// Time
292    pub time: String,
293    /// Is block trade
294    #[serde(default)]
295    pub is_block_trade: bool,
296}
297
298/// Open interest response.
299#[derive(Debug, Clone, Deserialize)]
300#[serde(rename_all = "camelCase")]
301pub struct OpenInterest {
302    /// Category
303    pub category: String,
304    /// Symbol
305    pub symbol: String,
306    /// List of open interest data
307    pub list: Vec<OpenInterestRecord>,
308    /// Next page cursor
309    #[serde(default)]
310    pub next_page_cursor: String,
311}
312
313/// Single open interest record.
314#[derive(Debug, Clone, Deserialize)]
315#[serde(rename_all = "camelCase")]
316pub struct OpenInterestRecord {
317    /// Open interest
318    pub open_interest: String,
319    /// Timestamp
320    pub timestamp: String,
321}
322
323/// Risk limit response.
324#[derive(Debug, Clone, Deserialize)]
325#[serde(rename_all = "camelCase")]
326pub struct RiskLimits {
327    /// Category
328    pub category: String,
329    /// List of risk limits
330    pub list: Vec<RiskLimit>,
331}
332
333/// Single risk limit.
334#[derive(Debug, Clone, Deserialize)]
335#[serde(rename_all = "camelCase")]
336pub struct RiskLimit {
337    /// ID
338    pub id: i32,
339    /// Symbol
340    pub symbol: String,
341    /// Risk limit value
342    pub risk_limit_value: String,
343    /// Maintenance margin
344    pub maintenance_margin: String,
345    /// Initial margin
346    pub initial_margin: String,
347    /// Max leverage
348    pub max_leverage: String,
349}