Files
zhixing-system/.trellis/tasks/08-08-migrate-zhixing-b1/research/legacy-zhixing-b1.md
T

51 lines
2.5 KiB
Markdown
Raw Normal View History

2026-08-08 22:41:45 +08:00
# 旧项目知行 B1 逻辑研究
## 来源
- 公式原文:`/Users/yuxuanhui/bcc-github/quant-project/zgnb/zgnb-project/docs/references/formulas/tongdaxin_xuangu_formula.txt`
- 旧策略入口:`/Users/yuxuanhui/bcc-github/quant-project/zgnb/zgnb-project/src/zgnb/domain/strategy/xg_composite.py`
- 旧指标实现:`/Users/yuxuanhui/bcc-github/quant-project/zgnb/zgnb-project/src/zgnb/shared/xg_indicators.py`
- 旧数据字段转换:`/Users/yuxuanhui/bcc-github/quant-project/zgnb/zgnb-project/src/zgnb/infrastructure/data_source/tushare_adapter.py`
## 已确认逻辑
`xg_composite` 先计算趋势白线、大哥黄线、BBI、短期/长期振荡器、KDJ、RSI、
振幅区间、缩量、大绿棒、异动、趋势和回踩条件,再执行 7 个子信号 mask:
1. 超卖缩量拐头 B
2. 超卖缩量 B
3. 原始 B1
4. 超卖超缩量 B
5. 回踩白线 B
6. 回踩超级 B
7. 回踩黄线 B
旧实现将 7 个 mask OR 为 `_存在B`,在 `select()` 中按优先级找到第一个匹配后
`break`。新任务明确改为返回全部命中分类。
## 迁移时必须保留的语义
- 数据升序;`REF` 使用前一交易日,不能用自然日偏移。
- `趋势白线 = EMA(EMA(C, 10), 10)`。
- `大哥黄线 = (MA(C,14)+MA(C,28)+MA(C,57)+MA(C,114))/4`。
- `短期` 使用 3 日最低价和 3 日最高收盘价,`长期` 使用 21 日窗口。
- 宽幅代码为 `68`、`30`、`4`、`8`、`9` 开头;普通代码如果最近 200 行内出现
超过 15% 的上涨,也使用宽幅参数。
- v1203 调整包含上涨十字星涨幅上限和原始 B1 的适当缩量分支。
## 旧实现与新任务的有意差异
- 新策略标识为 `zhixing_b1`,不再使用 `xg_composite` 作为运行时名称。
- 新分类值使用 `zhixing_b1_*` 前缀,不依赖旧 `SignalCategory.XG_*`。
- 新实现保留同一股票同一交易日的全部命中分类。
- 新实现目标日由显式 `target_trade_date` 决定,不取数据最后一行作为隐式目标。
- 新实现只使用新项目 PostgreSQL 的 qfq 日线;旧项目 CSV 中的 `market_cap` 是
初始化时取到的最新市值复制值,不能作为历史事实。
- 新测试运行时不导入旧项目;旧项目只用于生成固定 fixture 和 golden 期望。
## 现有 fixture 线索
旧项目已有完整 CSV 和 SQLite 信号结果,可从 `data/raw` 选取少量普通代码、宽幅
代码和已命中日期作为固定样本。由于旧实现没有记录同日多分类命中,需另加人工
构造样本验证新任务要求的多信号结果。