Skip to main content

ek_data/
bar.rs

1//! K 线对象(`object.py:123-148`;公共字段版——股票估值四件套
2//! pe/pb/float_mv/total_mv 按共识移除,持久层批次另立)。
3
4use crate::constant::{Exchange, Interval};
5use crate::time::DtNs;
6
7/// 一段周期内的蜡烛数据。
8#[derive(Debug, Clone, PartialEq, Default)]
9#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
10pub struct BarData {
11    /// 上游网关名
12    pub gateway_name: String,
13    /// 合约代码
14    pub symbol: String,
15    /// 交易所
16    pub exchange: Exchange,
17    /// 时间戳(UTC 纪元纳秒;Python 为本地 naive datetime)
18    pub datetime: DtNs,
19
20    /// K 线间隔(缺省 None;Python 缺省 None)
21    pub interval: Option<Interval>,
22    /// 周期成交量
23    pub volume: f64,
24    /// 周期成交额
25    pub turnover: f64,
26    /// 持仓量/流通量
27    pub open_interest: f64,
28    /// 开盘价
29    pub open_price: f64,
30    /// 最高价
31    pub high_price: f64,
32    /// 最低价
33    pub low_price: f64,
34    /// 收盘价
35    pub close_price: f64,
36    /// 涨跌幅(%)
37    pub pct_change: f64,
38}
39
40impl BarData {
41    /// `en_symbol`(派生方法;分配一次)。
42    pub fn en_symbol(&self) -> String {
43        let mut buf = String::with_capacity(self.exchange.as_str().len() + 1 + self.symbol.len());
44        self.en_symbol_into(&mut buf);
45        buf
46    }
47
48    /// 零分配版本:追加到复用缓冲。
49    pub fn en_symbol_into(&self, buf: &mut String) {
50        crate::symbol::write_vt_symbol(buf, &self.symbol, self.exchange);
51    }
52}