Files
zhixing-system/.trellis/tasks/08-08-migrate-zhixing-b1/prd.md
T
2026-08-08 22:41:45 +08:00

90 lines
4.7 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.
# 迁移知行B1选股策略
## Goal
在新项目中迁移旧项目的 `xg_composite` 选股逻辑,并将新策略名称统一为
`zhixing_b1`,让系统能够基于 PostgreSQL 中的历史市场数据执行可复现的知行
B1 选股。
首期采用“公式级垂直切片”:从通达信公式、指标计算、7 个子信号、信号结果、
市场数据读取到历史验证用例打通一条完整链路;不在本任务内铺开其他策略或完整
前端产品能力。
## Background and confirmed facts
- 旧项目的 `xg_composite` 对应通达信选股公式,包含 7 个子信号;实现位于
`zgnb-project/src/zgnb/domain/strategy/xg_composite.py`,公式原文位于
`zgnb-project/docs/references/formulas/tongdaxin_xuangu_formula.txt`。
- 旧项目的共享指标实现位于 `zgnb-project/src/zgnb/shared/xg_indicators.py`,
其中包含知行线、BBI、KDJ、RSI、振幅、趋势、回踩和 7 个子信号条件。
- 旧项目目前只返回第一个命中的 XG 子信号;本任务以公式/业务意图为准,允许
同一股票同一交易日产生多条不同分类的信号。
- 新项目已确定 PostgreSQL 为市场数据事实源、价格使用 qfq 日线、股票池为当前
沪深非 ST A 股,并保留 6 年数据窗口。
- 新项目当前已有 `market_daily_bar`、`market_daily_basic` 和市场数据领域端口,
但还没有策略读取端口、选股信号模型或策略 API。
## Requirements
### R1. 迁移策略身份
- 新策略的业务标识为 `zhixing_b1`。
- 领域逻辑不得继续依赖旧项目的 `xg_composite` 命名作为对外策略身份。
- 7 个子信号保留独立分类,并可在同一股票同一交易日同时出现。
### R2. 公式语义
- 以通达信公式和已确认的 v1203 业务调整为主要依据,旧 Python 实现作为迁移
参考和差异线索。
- 不复制旧流程中将最新市值写入全部历史 K 线、按当前日期查询历史 B1 信号等
不能支持历史重放的行为。
- 对公式中涉及的代码板块、涨跌幅放宽系数、振幅区间、缩量、大绿棒、趋势、
回踩和 7 个子信号条件建立可测试的实现。
### R3. 市场数据读取
- 策略使用市场数据领域端口读取目标交易日之前的足够 warm-up 日线数据。
- OHLCV 指标使用 `market_daily_bar` 的 qfq 价格与成交量;换手率等估值/交易
条件使用同一交易日的 `market_daily_basic` 快照。
- 策略计算不得直接依赖 PostgreSQL、Pandas SQL 查询或具体 HTTP 层实现。
- 历史选股必须显式使用 `target_trade_date`,不得隐式退化为“当前最后一行”。
### R4. 信号结果
- 信号至少包含股票、交易日、策略标识、子信号分类、收盘价和可解释的关键指标
详情。
- 信号提供由“股票、交易日、策略标识、子信号分类”组成的稳定身份;不同子信号
分类不得被合并丢失,为后续持久化提供幂等依据。
### R5. 验证
- 为共享指标和每个子信号建立边界条件测试,覆盖缺数据、暖机期、除零和板块
参数差异。
- 提供固定历史样本的策略级验证,能够判断新实现是否符合公式语义,并明确记录
与旧实现的有意差异。
- 验证不得访问真实 Tushare、生产数据库或依赖实时网络。
## Out of scope
- `bowl_rebound`、`b1`、`b1b2`、`brick_chart` 的迁移。
- 完整选股批次编排、自动调度、前端页面和图表生成。
- 选股信号 PostgreSQL 表、信号持久化实现和 HTTP API。
- 实盘交易、回测收益评价和策略参数优化。
- 为解决本任务而改变既有市场数据同步的股票池、qfq 或六年保留契约。
## Acceptance Criteria
- [ ] 新项目存在名为 `zhixing_b1` 的领域策略,并能在显式目标交易日上运行。
- [ ] 7 个子信号均有独立分类;同一股票同日多信号不会互相覆盖,并具有稳定身份。
- [ ] 策略只通过市场数据端口获得 qfq 日线和同日交易指标,不直接耦合存储实现。
- [ ] 公式关键分支、暖机边界、缺失值和除零场景均有自动化测试。
- [ ] 固定历史样本验证可重复运行,并以固定 golden 结果对比新旧实现或公式差异。
- [ ] 关键公式分支同时有人工确认案例和单元测试,golden 对比范围保持为少量固定样本。
- [ ] 未实现其他策略、前端页面或实时数据能力,且不改变现有市场数据同步契约。
## Notes
- Keep `prd.md` focused on requirements, constraints, and acceptance criteria.
- Lightweight tasks can remain PRD-only.
- For complex tasks, add `design.md` for technical design and `implement.md` for execution planning before `task.py start`.