1use crate::constant::Exchange;
4use crate::time::DtNs;
5
6#[derive(Debug, Clone, PartialEq, Default)]
10#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
11pub struct TickData {
12 pub gateway_name: String,
14 pub symbol: String,
16 pub exchange: Exchange,
18 pub datetime: DtNs,
20
21 pub trading_day: Option<i32>,
23 pub action_day: Option<i32>,
25 pub update_time: String,
27 pub update_millisec: i64,
29
30 pub name: String,
32 pub volume: f64,
34 pub turnover: f64,
36 pub open_interest: f64,
38 pub last_price: f64,
40 pub last_volume: f64,
42 pub limit_up: f64,
44 pub limit_down: f64,
46
47 pub open_price: f64,
49 pub high_price: f64,
51 pub low_price: f64,
53 pub pre_close: f64,
55 pub pct_change: f64,
57
58 pub bid_price_1: f64,
60 pub bid_price_2: f64,
62 pub bid_price_3: f64,
64 pub bid_price_4: f64,
66 pub bid_price_5: f64,
68
69 pub ask_price_1: f64,
71 pub ask_price_2: f64,
73 pub ask_price_3: f64,
75 pub ask_price_4: f64,
77 pub ask_price_5: f64,
79
80 pub bid_volume_1: f64,
82 pub bid_volume_2: f64,
84 pub bid_volume_3: f64,
86 pub bid_volume_4: f64,
88 pub bid_volume_5: f64,
90
91 pub ask_volume_1: f64,
93 pub ask_volume_2: f64,
95 pub ask_volume_3: f64,
97 pub ask_volume_4: f64,
99 pub ask_volume_5: f64,
101
102 pub localtime: Option<DtNs>,
104}
105
106impl TickData {
107 pub fn en_symbol(&self) -> String {
109 crate::symbol::vt_symbol(&self.symbol, self.exchange)
110 }
111
112 pub fn reach_limit_up(&self, diff_price: f64) -> bool {
118 self.bid_price_1 + diff_price >= self.limit_up
119 }
120
121 pub fn reach_limit_down(&self, diff_price: f64) -> bool {
123 self.ask_price_1 - diff_price <= self.limit_down
124 }
125
126 pub fn reach_limit(&self, diff_price: f64) -> bool {
128 self.reach_limit_up(diff_price) || self.reach_limit_down(diff_price)
129 }
130}