Files

90 lines
4.7 KiB
Markdown
Raw Permalink Normal View History

2026-08-08 22:41:45 +08:00
# 迁移知行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`.