1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
//! # ek-data —— enkeep ek 生态的交易数据契约
//!
//! 快速开始与示例见下(即仓库 README,示例由 doctest 验证,不会腐烂):
//!
//! ---
//!
//!
//! ---
//!
//! Python 原稿:`enkeep_trade/enkeep_trade/trader/constant.py`(枚举,207 行)
//! 与 `enkeep_trade/enkeep_trade/trader/object.py`(数据对象,819 行)。
//!
//! ## 全局决定(DESIGN.md 有全文)
//!
//! 1. **一个结构体一个文件**:每个 struct + 它的 inherent 方法内聚单文件;
//! 枚举不是结构体,群聚在 [`constant`] 一处。
//! 2. **派生 ID 方法化**:Python 靠 `__post_init__` 把 `en_symbol / en_orderid /
//! en_positionid / available` 算成暂存字段,Rust 版一律**方法即时计算**,
//! 不存冗余状态,不存在不同步。
//! 3. **枚举线值用英文令牌**(`LONG / OPEN / ALLTRADED ...`),
//! [`FromStr`](std::str::FromStr) 额外容忍 Python 时代的中文线值(`"多" / "开" ...`),
//! 新存档写英文、旧归档照读。例外:交易所名以 Python `.value` 为准
//! (`CBOT` 线值为 `CBT`,`EUREX` 线值为 `EUX`,`ETF_INDEX` 线值为 `ETF_index`)。
//! 4. **零依赖底线**:default 路径没有任何依赖;时间用自带 civil↔epoch 换算
//! (不走 chrono);`serde` 为 optional feature(default off)。
//! 5. 对象层零 IO 零锁:数据对象只做纯读写与纯函数,复杂决策归插件层。
//!
//! ## Python → Rust 对照总表
//!
//! | Python(constant.py / object.py) | Rust |
//! | --- | --- |
//! | `constant.py:8 Direction` | [`constant::Direction`] |
//! | `constant.py:18 Offset` | [`constant::Offset`] |
//! | `constant.py:30 Status` | [`constant::Status`] |
//! | `constant.py:43 Asset` | [`constant::Asset`] |
//! | `constant.py:69 InstrumentType` | [`constant::InstrumentType`] |
//! | `constant.py:100 OrderType` | [`constant::OrderType`] |
//! | `constant.py:113 OptionType` | [`constant::OptionType`] |
//! | `constant.py:122 Exchange` | [`constant::Exchange`] |
//! | `constant.py:184 Currency` | [`constant::Currency`] |
//! | `constant.py:195 Interval` | [`constant::Interval`] |
//! | `object.py:21 ACTIVE_STATUSES` | [`constant::ACTIVE_STATUSES`] |
//! | `object.py:37 TickData` | [`tick::TickData`] |
//! | `object.py:123 BarData` | [`bar::BarData`] |
//! | `object.py:152 OrderData` | [`order::OrderData`] |
//! | `object.py:199 TradeData` | [`trade::TradeData`] |
//! | `object.py:235 PositionData` | [`position::PositionData`] |
//! | `object.py:268 AccountData` | [`account::AccountData`] |
//! | `object.py:286 LogData` | [`log::LogData`] |
//! | `object.py:340 ContractData` | [`contract::ContractData`] |
//! | `object.py:507 SubscribeRequest` | [`subscribe_request::SubscribeRequest`] |
//! | `object.py:521 OrderRequest` | [`order_request::OrderRequest`] |
//! | `object.py:592 CancelRequest` | [`cancel_request::CancelRequest`] |
//! | `object.py:607 HistoryRequest` | [`history_request::HistoryRequest`] |
//! | `object.py:25 BaseData(gateway_name 基座)` | 各对象直接携带 `gateway_name` 字段(不引入继承) |
//! | `event.py:7-24 字面常量` | [`event`] 模块的 8 个 `EVENT_*` 常量 |
//! | `__post_init__ 暂存 en_symbol` | `en_symbol()` 派生方法(全局决定 2) |
//! | `utility.py extract_vt_symbol` | [`symbol::parse_vt_symbol`] |
//!
//! **defer 清单**(属 UI/组合/通知批次,共识另立):QuoteData / QuoteRequest /
//! HedgeContractData / ContractData2 / ProductInfo / HedgeSetting /
//! StockData / SectorData / KlineChartData / NotifyData / AlertData。
//! BarData 的股票估值四件套(pe/pb/float_mv/total_mv)按共识移除,持久层立项时另设。
pub use AccountData;
pub use BarData;
pub use CancelRequest;
pub use ;
pub use ContractData;
pub use ;
pub use HistoryRequest;
pub use ;
pub use OrderData;
pub use OrderRequest;
pub use PositionData;
pub use ;
pub use SubscribeRequest;
pub use ;
pub use TickData;
pub use ;
pub use TradeData;