Files
kyugao aef27dcd3f docs: R-007 需求归档,迭代 05 完结
- R-007 移入已完成/(完整需求摘要+决策+实现记录)
- 需求池索引更新(已实现/已归档)
- 迭代 05 复盘更新(验收通过,老师确认完结)
2026-09-01 14:47:26 +08:00

100 lines
6.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# R-007 交易记录接入(订单与成交数据 + 时间段查询)· 已完成
> 归档日期:2026-09-01 需求状态:**已完成**
> 原索引:docs/05-需求池/需求池索引.md(主索引保留 R-007 条目,指向本归档)
> 实现迭代:05-交易记录接入(验收通过,迭代复盘见 docs/04-迭代记录/05-交易记录接入/迭代复盘.md)
> 关联计划:PLAN-006docs/02-计划/计划-交易记录接入.md)
---
> 状态:**已定稿**(2026-09-01,老师确认)| 登记日期:2026-09-01
> 来源:老师指令(2026-09-01
> 优先级:P1
## 需求描述
在神之一手(one-divine-lot 插件)的「交易记录」tab 接入 QMT Bridge **当日委托(/trade/orders)与当日成交(/trade/trades**
- **单表合并展示**:委托为主行,按 m_strOrderSysID 合并成交信息(聚合成交量/加权均价/金额/费用),点击展开逐笔成交明细;
- **时间段查询**:标题 + 时间段控件同一行(今日/本周/本月快捷按钮 + 手动起止日期),匹配历史接口按时间范围查询的形态;
- **费用计算**:佣金费率 = 万分之 m_dCommission(如 0.852 = 万0.852),不足 5 元按 5 元(账号没免五);卖出加印花税(万分之5);双向过户费(万分之0.1);**同一委托分笔成交合并算一次佣金**;
- **排序**:委托主行默认降序,支持表头点击手动排序;
- **日期导航**:为老师完善 QMT Bridge 历史成交接口预留(历史范围本期占位)。
## 核心逻辑(定稿版)
1. **单表合并**:委托行 = 一笔委托,按 m_strOrderSysID 聚合该委托全部成交(成交量 Σ、加权均价、金额 Σ、费用 Σ);展开/折叠查看每笔成交明细(2026-09-01 老师拍板);
2. **方向判定**m_nDirection=48 恒为 EEntrustBS 操作标记(官方 innerApi 字典),真实方向在 m_nOffsetFlag48=买入/49=卖出)+ m_strOptName 交叉验证(Q3 闭环);
3. **交互单向模型**:preset 意图状态记录用户点的快捷按钮(操作→状态→UI),不做「范围反推按钮」反向推断;手动改日期清除 preset(2026-09-01 老师纠正);
4. **快捷范围(完整互斥)**:今日=最近交易日单日;本周=所在自然周周一~周五(不考虑周六日);本月=所在自然月1号~月末(2026-09-01 老师纠正:不做截至今天截断);
5. **费用计算**
- 佣金 = Σ成交额 × (万分之m_dCommission),不足 5 元按 5 元(没免五);
- 印花税 = 卖出单边 × 万分之5(2023-08-28 起标准);
- 过户费 = 双向 × 万分之0.1(2022-04-29 起标准,无最低,中登收取);
- **同一委托分笔成交合并算一次佣金**;多笔独立委托各自算(2026-09-01 老师修正);
6. **数据时效**/trade/orders 与 /trade/trades 仅当日数据(get_trade_detail_data 读客户端缓存,官方 Q&A 确认),历史查询需老师完善 QMT Bridge 接口;
7. **刷新**:仅「今日」范围 4s 轮询;其他范围一次性查询。
## 数据模型(语义化映射)
**Order**orderId/code/name/exchange/direction/directionCode/optName/status/orderVolume/tradedVolume/totalVolume/limitPrice/tradedPrice/amount/insertDate/insertTime/cancelInfo/errorMsg
**Trade**tradeId/orderId/code/name/exchange/direction/directionCode/optName/price/volume/amount/commissionRateWan(佣金费率万分之)/tradeDate/tradeTime
**费用**calcOrderFees(委托级):totalAmount/commission(最低5元一次)/stampTax(卖出)/transferFee(双向)/total
## 边界(不做)
- 历史(非当日)交易数据查询实现(老师完善 QMT Bridge 接口后接入,服务端已预留 start/end 透传);
- 交易数据本地持久化(Q5 本期不做,跨日复盘待历史接口就绪后评估);
- 按策略过滤交易(Q10 后续迭代,strategy_name 与插件策略体系打通);
- 下单/撤单等交易操作(目标-007 人机合一控制权另议)。
## 关键决策(Q1-Q11 结论)
| # | 问题 | 结论 |
|---|---|---|
| Q1 | 展示范围 | 单表合并:委托主行 + 展开成交明细(老师拍板) |
| Q2 | 刷新机制 | 服务端中转 + 前端 4s 轮询(仅今日范围) |
| Q3 | 方向判定 | m_nOffsetFlag48买/49卖)+ m_strOptName 交叉验证 |
| Q4 | 状态展示 | 全量 + 状态列中文映射(未报/已报/部成/已成/已撤/废单) |
| Q5 | 持久化 | 本期不做(跨日复盘待历史接口) |
| Q6 | 关联形态 | 单表合并 + 展开/折叠(老师拍板) |
| Q7 | 方向着色 | 红买绿卖 |
| Q8 | 精度 | 成交额/金额 2 位、手续费/费用 2 位、成交量整数 |
| Q9 | 优先级 | P1 |
| Q10 | 策略联动 | 本期不做(后续迭代) |
| Q11 | 时间段查询 | 今日/本周/本月快捷 + 手动起止;完整互斥范围;单向交互模型 |
## 讨论与修正记录
- 2026-09-01 登记 + 技术研究(API 字段全表 / 方向判定 / 数据时效 / sample data);
- 2026-09-01 范围定稿:当日订单+成交 + 日期导航(老师将完善历史接口);
- 2026-09-01 展示设计定稿:单表合并 + 展开明细 + 排序降序;
- 2026-09-01 修正一:快捷按钮 今日/本周/上周 → 今日/本周/本月;
- 2026-09-01 修正二:快捷范围为完整时间段(不做截至今天截断,操作逻辑问题);
- 2026-09-01 修正三:交互单向模型(操作→状态→UI,不做反向推断);
- 2026-09-01 修正四:本周 = 周一~周五(不考虑周六日);
- 2026-09-01 修正五:佣金按委托级合并计费(分笔成交只收一次佣金);
- 2026-09-01 费用规则:m_dCommission = 佣金费率万分之,最低5元,印花税/过户费费率确认。
## 实现记录
| 项 | 内容 |
|---|---|
| 实现迭代 | 05-交易记录接入 |
| 服务端 | QmtBridgeRestDataSourcegetOrders/getTrades/getTradingDates/calcOrderFees)、api/trades.jsorders/trades/trading-dates |
| 客户端 | TradeRecordsTab.jsx(单表合并+排序+轮询)、RangeSelector.jsx(时间段选择) |
| 构建安装 | pnpm run build + 宿主重启(服务端)/ 页面刷新(客户端) |
| 提交 | bb3f8bd(迭代03-05)、8caeb76(佣金合并计费)、08c4ad3(箭头样式) |
## 验收结果
- 服务端三端点端到端实测:✅(orders/trades/trading-dates 返回真实数据)
- 单表合并 + 展开明细:✅(博纳影业卖出 200股@6.00 委托+成交完整链路)
- 费用计算:✅(佣金5 + 印花税0.6 + 过户费0.012 = 5.612;委托级合并计费验证通过)
- 时间段查询(今日/本周/本月 + 手动):✅
- 排序(默认降序 + 表头手动):✅
- 方向判定(m_nOffsetFlag + optName):✅
- 现有功能不回归:✅(持仓/策略/行情/连接配置正常)