aef27dcd3f
- R-007 移入已完成/(完整需求摘要+决策+实现记录) - 需求池索引更新(已实现/已归档) - 迭代 05 复盘更新(验收通过,老师确认完结)
6.8 KiB
6.8 KiB
R-007 交易记录接入(订单与成交数据 + 时间段查询)· 已完成
归档日期:2026-09-01 | 需求状态:已完成 原索引:docs/05-需求池/需求池索引.md(主索引保留 R-007 条目,指向本归档) 实现迭代:05-交易记录接入(验收通过,迭代复盘见 docs/04-迭代记录/05-交易记录接入/迭代复盘.md) 关联计划:PLAN-006(docs/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 历史成交接口预留(历史范围本期占位)。
核心逻辑(定稿版)
- 单表合并:委托行 = 一笔委托,按 m_strOrderSysID 聚合该委托全部成交(成交量 Σ、加权均价、金额 Σ、费用 Σ);展开/折叠查看每笔成交明细(2026-09-01 老师拍板);
- 方向判定:m_nDirection=48 恒为 EEntrustBS 操作标记(官方 innerApi 字典),真实方向在 m_nOffsetFlag(48=买入/49=卖出)+ m_strOptName 交叉验证(Q3 闭环);
- 交互单向模型:preset 意图状态记录用户点的快捷按钮(操作→状态→UI),不做「范围反推按钮」反向推断;手动改日期清除 preset(2026-09-01 老师纠正);
- 快捷范围(完整互斥):今日=最近交易日单日;本周=所在自然周周一
周五(不考虑周六日);本月=所在自然月1号月末(2026-09-01 老师纠正:不做截至今天截断); - 费用计算:
- 佣金 = Σ成交额 × (万分之m_dCommission),不足 5 元按 5 元(没免五);
- 印花税 = 卖出单边 × 万分之5(2023-08-28 起标准);
- 过户费 = 双向 × 万分之0.1(2022-04-29 起标准,无最低,中登收取);
- 同一委托分笔成交合并算一次佣金;多笔独立委托各自算(2026-09-01 老师修正);
- 数据时效:/trade/orders 与 /trade/trades 仅当日数据(get_trade_detail_data 读客户端缓存,官方 Q&A 确认),历史查询需老师完善 QMT Bridge 接口;
- 刷新:仅「今日」范围 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_nOffsetFlag(48买/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-交易记录接入 |
| 服务端 | QmtBridgeRestDataSource(getOrders/getTrades/getTradingDates/calcOrderFees)、api/trades.js(orders/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):✅
- 现有功能不回归:✅(持仓/策略/行情/连接配置正常)