feat libs,sdk,trend
This commit is contained in:
45
docs/zt.md
45
docs/zt.md
@@ -19,39 +19,22 @@ zt_max_price: 200
|
||||
## SQLite 状态存储
|
||||
|
||||
`libs/orderbook.py` 使用标准库 `sqlite3`,数据库路径为
|
||||
`{qmt_data_dir}/zt_{account_id}_state.db`,每个账户/策略独立存储,由一个策略实例串行更新。
|
||||
启动时仅创建当前表结构和索引,不执行数据迁移或旧 JSON 导入。
|
||||
`{qmt_data_dir}/zt_{account_id}_state.db`,每个账户/策略由单个实例串行更新。
|
||||
启动时仅创建当前表结构和索引,不执行迁移或旧 JSON 导入。
|
||||
|
||||
`OrderBook` 初始化后调用 `load()`,填充 `positions`(按代码)、`deals`(按系统订单号)
|
||||
和 `deals_sys_ids`(系统订单号集合)。`sync_deals(list[DealItem])` 根据该集合过滤已保存及
|
||||
同批重复成交,再以单个事务批量插入,提交成功后刷新缓存;不修改持仓。
|
||||
`sys_order_id` 对应 API 的 `m_strOrderSysID`,`local_order_id` 从 `m_strRemark` 的首段提取。
|
||||
两表使用 SDK 同名字段;另有自增主键 `id`,成交表增加从 `remark` 提取的 `order_local_id`:
|
||||
|
||||
| 表 | 字段与用途 | 索引 |
|
||||
| 表 | 数据模型 | 索引 |
|
||||
| --- | --- | --- |
|
||||
| `positions` | 自增 `id`、股票代码 `code`、底仓订单/数量/成本 `base_order_id/base_qty/base_cost`、补仓订单/次数/数量/成本 `added_order_id/added_num/added_qty/added_cost`、状态 `status` | `code` 唯一索引;`base_order_id`;`added_order_id` |
|
||||
| `deals` | `id`、系统/本地订单号、证券信息、方向、API 状态、剩余/成交数量、委托日期时间、备注、委托价格及成交均价/金额,字段映射见下表 | `id` 主键;`sys_order_id` 唯一;`local_order_id`;`(code, insert_date)`;`(insert_date, insert_time)` |
|
||||
| `positions` | `PositionItem`:`stock_code`、`stock_name`、`direction`、`volume`、`open_price`、`open_cost`、`float_profit`、`market_value`、`stock_holder`、`frozen_volume`、`can_use_volume`、`on_road_volume`、`yesterday_volume`、`last_price`、`profit_rate`、`future_trade_type`、`expire_date` | `stock_code` 唯一索引 |
|
||||
| `deals` | `DealItem`:`stock_code`、`order_sys_id`、`ref`、`order_ref`、`direction`、`offset_flag`、`price`、`volume`、`trade_amount`、`trade_date`、`trade_time`、`remark`、`close_profit`,以及 `order_local_id` | `order_sys_id` 唯一索引;`order_local_id`;`stock_code`;`trade_date` |
|
||||
|
||||
SDK 的 `DealItem` 与成交表业务字段一致:
|
||||
`load()` 只更新 `positions`、`deals`、`deals_sys_ids` 缓存,无返回值。
|
||||
`sync_positions(list[PositionItem])` 保存完整持仓快照,同一证券更新时保留自增 ID。
|
||||
`sync_deals(list[DealItem])` 按系统订单号去重后批量写入;同批重复记录仅写一次。
|
||||
`order_local_id` 取 `DealItem.local_order_id`(`remark` 首段),为空时拒绝写入。
|
||||
成交日期规范为 `YYYY-MM-DD`,金额缺失时用成交价格乘数量补足。
|
||||
|
||||
| API 字段 | SDK / SQLite 字段 |
|
||||
| --- | --- |
|
||||
| `m_strOrderSysID` | `sys_order_id` |
|
||||
| `m_strInstrumentID`、`m_strExchangeID` | `instrument_id`、`exchange_id`,组合生成 `code` |
|
||||
| `m_strInstrumentName` | `name` |
|
||||
| `m_nOffsetFlag` | `offset_flag`,解析生成买卖方向 `side` |
|
||||
| `m_nOrderStatus` | `status` |
|
||||
| `m_nVolumeTotal`、`m_nVolumeTraded` | `remaining_volume`、`traded_volume` |
|
||||
| `m_nOrderTime` | `order_time` |
|
||||
| `m_strInsertDate`、`m_strInsertTime` | `insert_date`、`insert_time` |
|
||||
| `m_strRemark` | `remark`,提取 `local_order_id` |
|
||||
| `m_dPrice`、`m_dTradePrice`、`m_dTradeAmount` | `price`、`trade_price`、`trade_amount` |
|
||||
|
||||
API 返回已成交数据,每个系统订单号仅入库一次;`status` 保存 API 原值,不增加确认流程。
|
||||
成交金额缺失时仅使用成交均价乘成交数量补足,不使用委托价格。
|
||||
买卖方向使用 `side`,ZT 通过本地委托号前缀区分底仓买入与做 T 买回。
|
||||
ZT 根据实际成交数量及金额更新持仓,日期取 API 提供的 `insert_date`,入库时规范为 `YYYY-MM-DD`。
|
||||
首次接管持仓仅写持仓表。活动委托和重复下单检查由 `libs/order.py` 的委托簿负责。
|
||||
持仓快照与新增成交在同一事务内保存,历史成交只追加;写入失败回滚数据库并恢复内存状态。
|
||||
持仓更新按 `code` 保留原有自增 ID。ZT 将轮次状态写入 `status`,卖出、买回数量及均价、
|
||||
轮次日期在重启时从 `deals` 重建;补仓字段预留,ZT 买回不计为补仓。
|
||||
ZT 使用 `volume/open_price` 保存底仓数量与成本,做 T 轮次从成交历史恢复,
|
||||
不再使用持仓表的旧状态、底仓订单或补仓字段。买卖方向由 `offset_flag` 计算,
|
||||
本地订单号从 `remark` 提取。持仓与新增成交在同一事务提交,失败时回滚并恢复内存。
|
||||
|
||||
Reference in New Issue
Block a user