Files
zhixing-system/.trellis/tasks/08-08-strategy-execution-results/prd.md
T

84 lines
5.1 KiB
Markdown
Raw 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.
# 补充策略执行结果查询接口和前端页面
## Goal
为已完成的知行 B1 历史选股逻辑提供可使用的查询入口,让研究人员能够在 Web
页面选择目标交易日并查看策略命中的股票及子信号结果。
## Background and confirmed facts
- 上一个任务 `08-08-migrate-zhixing-b1` 已完成 `zhixing_b1` 策略领域逻辑、历史
qfq 行情读取适配器和单只股票评估用例。
- 当前领域入口是
`EvaluateZhixingB1.execute(ts_code, target_trade_date)`,返回
`SelectionEvaluation`,状态包括 `selected`、`no_signal`、`insufficient_history`、
`missing_target_bar` 和 `data_error`。
- `SelectionSignal` 已包含股票代码、名称、目标交易日、策略标识、七种独立子信号
分类、收盘价和可序列化详情;稳定身份为
`(ts_code, target_trade_date, strategy, category)`。
- 当前没有选股结果数据库表、结果持久化、全市场批量执行用例或 selection HTTP
路由;selection presentation 包仍为空。
- 后端 HTTP 通过 `/api/v1` 统一挂载,稳定响应使用 Pydantic 模型;前端按 feature
组织 API 类型、Query hook 和页面,并通过同源 `/api/v1/...` 请求后端。
- 当前前端首页侧栏的“选股策略”入口仍是禁用按钮,路由树只有 `/` 首页。
## Product decisions
- 结果按每日策略批次持久化;页面查询已保存的策略执行批次,不在查询请求中重新
计算策略。
- 策略执行通过 HTTP 触发,不新增 CLI 作为本任务的主要入口。
- 当用户重复执行或重试失败批次时,服务端必须先清空指定目标交易日、指定策略的
旧结果,再执行一次;前端在每次重执行前弹窗确认,确认后才发起 HTTP 请求。
- 执行接口需要能区分首次执行、已有结果的重复执行和执行中的冲突,不能因重复点击
产生重复信号或多个互相冲突的当前结果。
- HTTP 采用异步批次模式:`POST` 只创建/清空并启动批次,返回 `202` 和 `run_id`;
前端通过 `GET` 轮询批次状态,完成后展示持久化结果。全股票池计算不得要求浏览器
长时间保持原始执行请求。
## Requirements
- 策略执行结果必须按目标交易日和策略批次持久化,并可被后续 HTTP 查询读取。
- `zhixing_b1` 的多种独立子信号必须分别保存,不能因同一股票同日多分类而覆盖或
合并;结果身份继续遵循
`(ts_code, target_trade_date, strategy, category)`。
- 查询页面展示已保存批次的执行状态、目标交易日、参与数量、命中数量以及股票和
子信号明细;查询失败、执行失败和无命中必须有可区分的用户可见状态。
- 同一策略同一目标交易日重复执行必须具备幂等语义,不能产生重复信号或多个互相
冲突的“最新结果”;按用户确认的重跑规则,重跑前清空该日该策略旧结果。
- 结果应关联产生它所依赖的市场数据同步批次,并保留实际参与股票数和数据覆盖率,
以便判断结果是否完整。
- HTTP 应提供策略执行触发接口,支持指定目标交易日和策略;首次执行、重跑确认、
执行中冲突和失败重试应有明确响应语义。
- HTTP 响应使用稳定的 Pydantic 契约;前端使用 feature API 类型、React Query 和
独立的策略结果页面,不在页面中直接发起 `fetch`。
## Acceptance Criteria
- [ ] 已执行的 `zhixing_b1` 批次及其信号结果可以写入 PostgreSQL,并能通过稳定
唯一身份幂等重跑;重跑不会残留上一次执行的信号。
- [ ] HTTP 可以查询最新批次和/或指定目标交易日的持久化结果,响应包含批次状态、
覆盖率、命中统计和全部独立子信号明细。
- [ ] HTTP 可以触发指定目标交易日和策略的执行;已有结果重跑和失败重试遵循清空后
重算规则,并对执行中的重复请求返回可识别冲突。
- [ ] 前端“选股策略”入口可进入结果页面,能够查看加载中、无数据、执行失败、查询
失败、无命中和正常结果状态。
- [ ] 前端每次重跑/失败重试都会先展示确认弹窗;取消不会发起执行请求,确认后能显示
执行中状态并刷新持久化结果。
- [ ] 执行触发接口返回异步批次标识,前端可通过状态查询感知运行中、成功、无命中和
失败,并在结束后读取同一批次结果。
- [ ] 结果页面的股票明细能区分同一股票同日命中的多个子信号,并展示目标交易日、
股票代码/名称、收盘价及关键详情。
- [ ] 后端迁移、应用用例、HTTP 契约和前端页面测试覆盖成功、重复执行、无结果和
失败场景。
## Out of scope
- 不迁移其他选股策略,不改变 `zhixing_b1` 公式语义或市场数据同步规则。
- 不实现收益率、持仓、交易撮合或实盘交易能力;本任务展示的是选股信号结果。
- 不把执行调度扩展为独立任务队列或跨进程工作流;本期只提供 HTTP 触发和项目现有
运行边界内的异步批次执行机制。
## Open questions
无。