# 旧项目知行 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` 选取少量普通代码、宽幅 代码和已命中日期作为固定样本。由于旧实现没有记录同日多分类命中,需另加人工 构造样本验证新任务要求的多信号结果。