ek-data 0.2.0

Trading data contracts for the enkeep ek ecosystem: venue enums, zero-dep epoch-nanosecond time, decimal-exact price rounding, vt-symbol convention, bus event dictionary, tick/bar/order/trade/position/account/contract objects and request objects (Python enkeep_trade trader/object.py + constant.py, faithfully ported).
Documentation
# ek-data

enkeep `ek` 生态的**交易数据契约** crate:交易所/方向/状态等类型枚举、
零依赖纪元纳秒时间面、**十进制精确**的价格取整、`vt_symbol` 标识约定、
总线事件字典,以及 tick/bar/order/trade/position/account/contract
与四个请求对象。

由 Python 原稿 `enkeep_trade/trader/constant.py` + `trader/object.py`
**逐字段逐方法**移植(对照表见 [DESIGN.md](DESIGN.md) 与 crate 文档)。

## 快速开始

```toml
[dependencies]
ek-data = "0.2"
# 需要 JSON 收发时:
# ek-data = { version = "0.2", features = ["serde"] }
```

```rust
use ek_data::{floor_to, round_to, vt_symbol, Exchange, OrderData, Status, TickData};

// 标识约定:CFFEX.IF2506(交易所线值沿 Python .value,CBOT→CBT/EUREX→EUX)
assert_eq!(vt_symbol("IF2506", Exchange::CFFEX), "CFFEX.IF2506");

// 价格对齐最小变动价位:十进制精确(朴素 f64 会把 floor(0.3/0.1) 算成 0.2)
assert_eq!(floor_to(0.3, 0.1), 0.3);
assert_eq!(round_to(2.5, 1.0), 2.0); // half-even,同 Python round(Decimal)

// 订单与派生态
let mut order = OrderData { gateway_name: "xt".into(), orderid: "1".into(), ..Default::default() };
assert_eq!(order.en_orderid(), "xt.1");
assert!(order.is_active()); // SUBMITTING/NOTTRADED/PARTTRADED
order.status = Status::ALLTRADED;
assert!(!order.is_active());

// 时间:零依赖,i64 纪元纳秒(可表达 1677-09-21 .. 2262-04-11)
let t = ek_data::parse_civil("2024-12-25 09:30:01.5").unwrap();
assert_eq!(ek_data::format_civil(t), "2024-12-25 09:30:01.500000000");

// 逐 tick 热路径:复用缓冲,零分配拼 en_symbol
let tick = TickData { symbol: "IF2506".into(), exchange: Exchange::CFFEX, ..Default::default() };
let mut buf = String::with_capacity(32);
tick.en_symbol_into(&mut buf);
assert_eq!(buf, "CFFEX.IF2506");
```

## 设计要点

- **零依赖底线**:default 路径无任何依赖;`serde` 是 optional feature(default off)。
- **一个结构体一个文件**:改一个字段只动一个文件。
- **派生 ID 方法化**:`en_symbol/en_orderid/en_positionid/available` 即时计算,不存冗余状态。
- **枚举线值**:英文令牌为标准线值,`FromStr` 额外容忍 Python 时代中文旧值(「多」「开」…)。
- **价格工具是十进制精确的**:`round_to/floor_to/ceil_to/get_digits` 对齐 Python `Decimal` 语义。

## Feature

| feature | 作用 |
| --- | --- |
| (默认) | 纯 std,无依赖 |
| `serde` | 结构体/枚举 JSON 序列化(字段名即 Python 字段名) |

## 许可

MIT