1use crate::constant::{Direction, Exchange, Offset};
4use crate::time::DtNs;
5
6#[derive(Debug, Clone, PartialEq, Default)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9pub struct TradeData {
10 pub gateway_name: String,
12 pub symbol: String,
14 pub exchange: Exchange,
16 pub orderid: String,
18 pub tradeid: String,
20 pub direction: Option<Direction>,
22 pub offset: Offset,
24 pub price: f64,
26 pub volume: f64,
28 pub datetime: Option<DtNs>,
30
31 pub commission: f64,
33 pub slippage: f64,
35 pub trade_pnl: f64,
37
38 pub name: String,
41 pub traded_amount: f64,
43}
44
45impl TradeData {
46 pub fn en_symbol(&self) -> String {
48 let mut buf = String::with_capacity(self.exchange.as_str().len() + 1 + self.symbol.len());
49 self.en_symbol_into(&mut buf);
50 buf
51 }
52
53 pub fn en_symbol_into(&self, buf: &mut String) {
55 crate::symbol::write_vt_symbol(buf, &self.symbol, self.exchange);
56 }
57
58 pub fn en_orderid(&self) -> String {
60 format!("{}.{}", self.gateway_name, self.orderid)
61 }
62
63 pub fn en_tradeid(&self) -> String {
65 format!("{}.{}", self.gateway_name, self.tradeid)
66 }
67}