Files

7.1 KiB
Raw Permalink Blame History

需求:R-016 策略 tab 历史持仓展示(显示/隐藏已清仓持仓 + 清仓时间范围筛选)

登记:2026-09-07 | 来源:老师指令(优化功能需求讨论)| 状态:已定稿(2026-09-07Q1-Q7 老师拍板) 归属:迭代 14 | 计划:PLAN-015 | 实现状态:已实现(2026-09-07,待老师人工验收)

归档头(2026-09-08 | 需求状态:已完成 | 归档日期:2026-09-08 | 实现迭代:14-策略tab历史持仓展示(策略 tab 历史持仓展示) 讨论记录索引:R-016.md 正文;实现细节见 04-迭代记录/14-策略tab历史持仓展示/ 归档路径:05-需求池/已完成/R-016.md 迭代状态标记:已实现(迭代 14)→ 已归档(2026-09-08 老师归档指令确认验收)

需求描述(老师原始诉求)

两个策略 tab(做T / 网格超市)title 旁边添加以下功能:

  1. 显示/隐藏已清仓的历史持仓(开关);
  2. 显示历史持仓时,默认显示近一周清仓的持仓,同时提供 近 1 个月 / 近 3 个月 / 近半年 / 近 1 年 几个范围选项。

背景

  • 策略持仓行 = QMT 快照驱动(R-014),卖出清仓后 QMT 无该持仓 → 幽灵清仓把 strategy_holdings 行转历史(closed_at 非空)→ 策略 tab 当场少一行;
  • 典型场景(2026-09-07 实际发生):早盘卖出大连热电 1000 股(做T),约 70 秒后该持仓行从做T tab 消失——当日交易记录还在(R-009 已入库、归属 holding_id=15 正确),但 tab 上锚点不可见;
  • 历史数据一直在库(strategy_holdings 全量保留),只是没有展示入口
  • R-010 持仓行展开(关联委托汇总)以 holding_id 为锚,历史持仓行天然可复用——历史行展开 = 该轮做T/清仓的完整交易复盘(本需求的核心目标:追溯该持仓相关的历史操作,老师 2026-09-07 定调)。

讨论记录(2026-09-07Q1-Q7 老师拍板)

# 问题 结论(老师拍板)
Q1 历史行展示哪些字段? 按建议:代码 / 名称(取该 holding 最近关联委托的 name 兜底,无则 —)/ 清仓时间 / 持有天数;实时行情列(现价/涨幅/涨停等)历史行显示 (不参与行情订阅);行展开沿用 R-010 看关联委托;成本价从委托推导本期不做
Q2 清仓时份额怎么显示?(closeHolding 现把 shares 置 0 显示 0 就好了(老师改判,否决 AI 的「保留 shares」方案):即使显示清仓时的份额也没多少意义,主要目标是追溯该持仓相关的历史操作;不改 closeHolding 语义,历史行份额直接显示 DB 原值(0
Q3 排序与视觉区分? 按建议:当前持仓在前(维持现状排序),历史行追加在后按清仓时间降序;历史行灰显 + 「已清仓」徽标(含清仓日期);标题计数(N 只)只数当前持仓
Q4 开关与范围选择要不要记住偏好? 按建议:会话级即可(默认关,进 tab 重置为「只看当前」)——查看历史是临时行为,「策略 tab = 当前持仓」是主语义
Q5 范围选项集合? 按建议:近一周(默认)/ 近 1 个月 / 近 3 个月 / 近半年 / 近 1 年,共 5 档;语义 = closed_at ∈ [now 范围, now];不加「全部历史」
Q6 自定义字段值(R-013 values)在历史行怎么处理? 按建议values 数据随行保留,历史行只读展示(无编辑入口;服务端本就拒绝已清仓行写入)
Q7 接口形态? 按建议:新增独立只读端点(strategy-holdings/historyargs: strategyId + range),当前持仓路径(strategy-positions / R-014 快照语义)零改动;前端两份结果合并渲染

边界(定稿)

:两个策略 tab 的历史持仓开关 + 范围筛选(title 旁按钮区);历史行展示(Q1 字段集 + Q2 份额显示 0)+ 行展开复用 R-010;配套后端历史查询端点(SqliteStore 范围查询 + DataStore 门面 + API)。

不做:全部持仓 tab 不加此功能(老师点名两个策略 tab);历史行盈亏统计(R-002 Q4 不做统计原则);清仓方式标记(手动清仓 vs 幽灵自动清仓,数据未区分);历史行实时行情;成本价/收益推导;不改 closeHolding 存储语义shares 置 0 维持,Q2);范围记忆/偏好持久化(Q4 会话级);「全部历史」档位。

关联观察(上一轮会话遗留,不在本需求范围)

  • 交易记录 tab 的归属候选(orders/attribution-candidates)只回当前持仓——清仓后当日委托无法再通过下拉关联到对应 holding(2026-09-07 大连热电实际遇到);是否立独立需求(如候选纳入近期清仓持仓)待老师定。

二轮补充(2026-09-07,Q8-Q9 老师拍板:今日已清仓默认层)

追加定稿记录(不改写 Q1-Q7 首轮定稿;本轮在首轮验收前补充,老师 2026-09-07 人工验收前的诉求收窄「历史持仓关 = 当天已清仓也看不见」的体验缺口)。

老师原始补充诉求:两个策略 tab 显示历史持仓的交互需要小的逻辑调整——当前已清仓的持仓默认也显示;「历史持仓」开关不控制当天已清仓的持仓(历史持仓关 ≠ 当天已清仓也被藏起)。

# 问题 结论(老师拍板 2026-09-07
Q8 「当天」的边界口径? 本地自然日 00:00 起(今天清仓的始终显示;跨零点后自动归入更早历史,由「历史持仓」开关控制)
Q9 今日已清仓行的视觉与计数? 沿用历史行灰显 + 「已清仓」徽标;标题计数(N 只)仍只算当前持仓,不含已清仓行

定稿语义(相对首轮 Q4「默认关 = 只看当前」的修订)

  • 已清仓行分两层:L1 今日已清仓range='today'closed_at ≥ 本地自然日 00:00默认恒显示,进 tab 即出现、随持仓重载刷新;L2 历史范围层week/month/quarter/halfYear/year,仅今天之前)仍由「历史持仓」开关控制(默认关);
  • 交互文案同步收窄:「历史持仓」开关 = 显示/隐藏今天之前已清仓的历史持仓(title/提示更新);当天清仓的持仓始终显示;
  • 展示(灰显/徽标/行情列 —/份额 0/只读字段/行展开)与计数(不含已清仓行)维持 Q1/Q2/Q3/Q6 不变,两层视觉无差异;
  • 实现:range='today' 特判本地自然日零点(不走回溯毫秒档);前端 rowsToRender 在开关关时也追加 L1(按 holdingId 去重 L1∩L2,开启历史范围不重复出两行);零写路径变更维持。

边界修订Q5 档位集语义微调为「今天之前的回溯范围」;「开关默认关 = 只看当前」修订为「开关默认关 = 当前持仓 + 今日已清仓」;其余边界(不做全部持仓 tab / 不做统计 / 不改 closeHolding / 会话级不持久化等)不变。

验收

docs/04-迭代记录/14-策略tab历史持仓展示/验收标准.md