📄 Pipeline v4 Filter 集成测试报告

任务: ETF周度重训  |  执行日期: 2026-06-29_周一_pipeline_v4_test  |  生成时间: 2026-07-29 11:50:42

Pipeline v4 Filter 集成测试报告

测试日期: 2026-06-29
数据基准日: 2026-06-26 (最新周五)
测试对象: etf_ml_pipeline_v54.py 中的 select_top12_with_limit v4五层过滤
对比参考: 独立脚本 filter_v4_analysis.py


1. v4 Filter 各层过滤统计

1.1 独立脚本(filter_v4_analysis.py)

独立脚本直接计算MA、斜率、偏差,不经过pandas panel。

过滤层 输入 输出 淘汰数 说明
总计 91 - - 排除<250天数据的ETF
F1 空头排列 91 55 36 close < MA20 < MA60 < MA120
F2 短期趋势 55 33 22 MA20斜率≥-0.0005, dev20∈(-4%,12%)
F3 MA60确认 33 30 3 dev60>-8%, MA60斜率≥-0.001
F4 长期方向 30 29 1 left=1 (513090 港股), neutral=0
F5 量价 29 29 0 vol_ratio>0.3
最终通过 29 31.9% of total

1.2 Pipeline(select_top12_with_limit / generate_outputs)

Pipeline通过 engineer_features() 生成 ma_bearishma_slope_20ma_dist_20 等特征,基于panel数据进行过滤。

过滤层 输入 输出 淘汰数 说明
总计 65 - - 最新日期panel中ETF数
F1 空头排列 65 39 26 ma_bearish > 0 (close<MA20<MA60<MA120)
F2 短期趋势 39 25 14 MA20斜率≥-0.005, dev20∈(-4%,12%)
├ slope 11 ma_slope_20 < -0.005
├ dev_low 0 ma_dist_20 < -0.04
└ dev_high 3 ma_dist_20 > 0.12 (泡沫化)
F3 MA60确认 25 25 0 dev60>-8%, ma_slope_60≥-0.03
F4 长期方向 25 25 0 left=0, neutral=0 (全部right)
F5 量价 25 25 0 vol_ratio_20d > 0.3
最终通过 25 38.5% of total

1.3 淘汰数差异分析

差异来源 Standalone Pipeline 原因
总ETF数 91 65 Pipeline panel有35只ETF在最新日期无数据/被合并丢弃
F1淘汰 36 26 输入集不同导致
F2淘汰 22 14 核心差异: 斜率定义不同
F3淘汰 3 0 阈值不同: standalone price slope≥-0.001 vs pipeline ma_slope≥-0.03
F4淘汰 1 0 513090不出现在pipeline panel中
F5淘汰 0 0 一致

F2淘汰差异的关键原因:

这是两个完全不同的指标
- 价格斜率:反映价格趋势
- MA斜率:反映均线趋势(更平滑,滞后更大)

因此两者的淘汰结果有差异是预期行为,不代表有bug。


2. F1 淘汰详情(空头排列)

Pipeline F1淘汰了26只ETF(ma_bearish > 0),完整列表:

代码 名称 品类
159605 广发中证海外中国互联网30(QDII-ETF) 中概
159745 国泰中证全指建筑材料ETF 建材
159766 富国中证旅游主题ETF 消费
159825 富国中证农业主题ETF 畜牧
159852 嘉实中证软件服务ETF AI
159869 华夏中证动漫游戏ETF 传媒
159937 博时黄金ETF 黄金
159996 国泰中证全指家用电器ETF 家电
510270 中银上证国企100ETF 央企
512200 南方中证房地产ETF 地产
512560 军工信息化ETF 军工
512660 国泰中证军工ETF 军工
512810 华宝中证军工ETF 军工
512890 华泰柏瑞中证红利低波ETF 宽基
512980 广发中证传媒ETF 传媒
513730 华泰柏瑞南方东英新交所泛东南亚科技ETF(QDII) 海外
515080 招商中证红利ETF 宽基
515170 食品饮料ETF 消费
515230 软件ETF AI
515250 智能汽车ETF 新能源
515400 大数据ETF AI
515790 华泰柏瑞中证光伏产业ETF 新能源
516110 国泰中证800汽车与零部件ETF 汽车
516510 易方达中证云计算与大数据主题ETF 云计算
516950 银华中证基建ETF 基建
560080 汇添富中证中药ETF 中药

说明:以上ETF均处于 收盘价 < MA20 < MA60 < MA120 的空头排列状态,直接淘汰。


3. F4 长期方向判断结果

3.1 Pipeline F4 判断(25只F3通过ETF)

全部25只均为 right(右侧确认),无 left / neutral / turning。

代码 名称 品类 F4信号
159001 易方达保证金货币A 货币 right
159338 国泰中证A500ETF 宽基 right
159339 银华中证A500ETF 宽基 right
159591 富国中证A50ETF 宽基 right
159686 国证2000ETF 宽基 right
159845 华夏中证1000ETF 宽基 right
159901 易方达深证100ETF 宽基 right
159915 易方达创业板ETF 宽基 right
159919 嘉实沪深300ETF 宽基 right
159949 华安创业板50ETF 宽基 right
159994 银华中证5G通信主题ETF 通信 right
510050 华夏上证50ETF 宽基 right
510180 华安上证180ETF 宽基 right
510300 华泰柏瑞沪深300ETF 宽基 right
510330 华夏沪深300ETF 宽基 right
510500 南方中证500ETF 宽基 right
511010 国泰上证5年期国债ETF 债券 right
511220 海富通上证城投债ETF 债券 right
512100 中证1000ETF 宽基 right
513500 博时标普500ETF(QDII) 美股 right
513880 华安日经225ETF(QDII) 海外 right
560530 摩根中证A500ETF 宽基 right
563300 华泰柏瑞中证2000ETF 宽基 right
563360 华泰柏瑞中证A500ETF 宽基 right
588450 招商上证科创板50成份增强策略ETF 宽基 right

3.2 独立脚本 F4 淘汰

独立脚本F4淘汰1只:

代码 名称 品类 F4信号 dev250
513090 香港证券ETF 港股 left -10.9%

该ETF在pipeline panel中不存在(513090为含港股ETF,在最新panel日期因港交所停牌/数据缺失等原因未进入panel)。

3.3 F4 信号一致性

Pipeline F3与Standalone F3共有的21只ETF中,F4信号100%一致(全部right)。


4. 最终候选池(F1-F5通过)

4.1 Pipeline候选池(25只,按ML得分排序)

# 代码 名称 品类 ML得分 F4标签
1 588450 招商上证科创板50成份增强策略ETF 宽基 -0.4243 right
2 159994 银华中证5G通信主题ETF 通信 -0.6315 right
3 511220 海富通上证城投债ETF 债券 -0.9155 right
4 159915 易方达创业板ETF 宽基 -0.9643 right
5 159949 华安创业板50ETF 宽基 -1.0315 right
6 511010 国泰上证5年期国债ETF 债券 -1.0533 right
7 513880 华安日经225ETF(QDII) 海外 -1.1414 right
8 510500 南方中证500ETF 宽基 -1.4048 right
9 159001 易方达保证金货币A 货币 -1.6115 right
10 510050 华夏上证50ETF 宽基 -1.8780 right
11 513500 博时标普500ETF(QDII) 美股 -1.9681 right
12 159901 易方达深证100ETF 宽基 -2.0208 right
13 563360 华泰柏瑞中证A500ETF 宽基 -2.0807 right
14 512100 中证1000ETF 宽基 -2.1201 right
15 563300 华泰柏瑞中证2000ETF 宽基 -2.1235 right
16 510180 华安上证180ETF 宽基 -2.1260 right
17 159845 华夏中证1000ETF 宽基 -2.1281 right
18 560530 摩根中证A500ETF 宽基 -2.1364 right
19 159686 国证2000ETF 宽基 -2.1761 right
20 159339 银华中证A500ETF 宽基 -2.2891 right
21 159338 国泰中证A500ETF 宽基 -2.2908 right
22 159591 富国中证A50ETF 宽基 -2.3321 right
23 159919 嘉实沪深300ETF 宽基 -2.3347 right
24 510330 华夏沪深300ETF 宽基 -2.3566 right
25 510300 华泰柏瑞沪深300ETF 宽基 -2.3783 right

品类分布
- 宽基: 19只 (76%)
- 债券: 2只
- 货币: 1只
- 通信: 1只
- 美股: 1只
- 海外: 1只

⚠️ 注:ML得分全为负数,说明模型在当前市场环境下对所有ETF都给出了偏悲观的预测。得分越高(越接近0)越好。得分范围:-2.38 ~ -0.42。


5. Top12 完整列表

品类限制:每品类最多3只,选取得分最高的。

# 代码 名称 品类 ML得分 F4标签 5日动量 RSI
1 588450 招商上证科创板50成份增强策略ETF 宽基 -0.4243 right +4.0% 71
2 159994 银华中证5G通信主题ETF 通信 -0.6315 right -2.1% 55
3 511220 海富通上证城投债ETF 债券 -0.9155 right +0.0% 57
4 159915 易方达创业板ETF 宽基 -0.9643 right -1.3% 53
5 159949 华安创业板50ETF 宽基 -1.0315 right -1.9% 52
6 511010 国泰上证5年期国债ETF 债券 -1.0533 right -0.5% 26
7 513880 华安日经225ETF(QDII) 海外 -1.1414 right +1.0% 60
8 159001 易方达保证金货币A 货币 -1.6115 right +0.0% 45
9 513500 博时标普500ETF(QDII) 美股 -1.9681 right -3.2% 34

⚠️ Top12仅产出9只 — 因为候选池中19/25为宽基(限3只),仅6只非宽基(覆盖通信/债券/海外/货币/美股5个品类)。品类限制(max_per_cat=3)在此次候选池中无法填满12只。510500(宽基#8候选)因宽基已满3只被跳过。


6. 独立v4脚本 vs Pipeline v4 Filter 结果对比

6.1 最终通过列表对比

对比维度 独立脚本 Pipeline
总输入ETF 91 65
最终通过数 29 25
交集(两者均通过) 21
仅独立脚本通过 8
仅Pipeline通过 4

6.2 仅独立脚本通过的ETF(8只)

代码 名称 品类 为何pipeline未通过
159326 电网设备ETF 电力 Pipeline F1淘汰(ma_bearish)或不在panel
159755 电池ETF 新能源 Pipeline F1淘汰或不在panel
159959 银华中证央企结构调整ETF 央企 Pipeline F1淘汰或不在panel
512880 证券ETF 金融 Pipeline F1淘汰或不在panel
515880 通信ETF 通信 Pipeline F2淘汰(ma_slope_20 < -0.005 或 dev20>12%)
562500 机器人ETF AI Pipeline F1淘汰或不在panel
562800 稀有金属ETF 稀土 Pipeline F1淘汰或不在panel
588120 国泰上证科创板100ETF 宽基 Pipeline F2淘汰(dev20>12%泡沫化)

6.3 仅Pipeline通过的ETF(4只)

代码 名称 品类 为何独立脚本未通过
159591 富国中证A50ETF 宽基 独立脚本F2淘汰(slope_20=-0.00068 < -0.0005)
159686 国证2000ETF 宽基 不在独立脚本etf_sector_map中或数据不足
512100 中证1000ETF 宽基 不在独立脚本etf_sector_map中或数据不足
513500 博时标普500ETF(QDII) 美股 独立脚本F2淘汰(slope_20=-0.00153 < -0.0005)

6.4 差异根因分析

核心差异1:斜率定义不同
- 独立脚本: calc_slope(closes, 20) = 对收盘价做polyfit → 价格趋势斜率
- Pipeline: ma_slope_20 = MA20曲线自身变化率(ma_20 / shift(ma_20, 10) - 1) → 均线趋势斜率

这是根本性差异。MA斜率比价格斜率更平滑、响应更慢。例如:
- 513500(标普500ETF): 价格斜率=-0.00153(<独立脚本阈值-0.0005),但ma_slope_20 >= pipeline阈值-0.005
- 159591(富国中证A50ETF): 价格斜率=-0.00068(<独立脚本阈值),但ma_slope_20 >= pipeline阈值

核心差异2:F3斜率阈值不同
- 独立脚本: F3 slope_60 >= -0.001(价格60日斜率)
- Pipeline: F3 ma_slope_60 >= -0.03(MA60曲线斜率,backward 30日)

核心差异3:ETF输入集不同
- 独立脚本: 91只(排除<250天数据的ETF)
- Pipeline: 65只(最新panel日期有数据的ETF,35只因panel构造/合并时被丢弃)
- 丢失的主要是含港股数据的ETF(如513090)和较早时间序列不完整的ETF


7. 重叠率

7.1 最终通过列表重叠

指标
独立脚本通过数 29
Pipeline通过数 25
交集 21
仅独立脚本 8
仅Pipeline 4
重叠率 (取较大者作分母) 21/29 = 72.4%
Jaccard相似度 21/33 = 63.6%

7.2 F4 信号一致性

指标
F3共同ETF数 21
F4信号一致 21 (100%)
F4信号分歧 0

✅ F4 long_term_signal 逻辑在两套实现中100%一致。


8. 结论与建议

8.1 v4 Filter集成状态确认

v4五层过滤已正确集成到 select_top12_with_limit
- F1-F5 五层过滤均在 apply_v4_filter / apply_v4_filter_final 中实现
- 过滤统计(各层淘汰数)会被记录并打印
- Top12选股前会先应用v4过滤缩小候选池
- 支持分层回退(放松F2→放松F3→允许F4 neutral)

8.2 独立脚本与Pipeline差异评估

⚠️ 两套v4过滤不完全等价,根因在F2/F3层的斜率定义不同:
1. 独立脚本用价格斜率 (polyfit收盘价)
2. Pipeline用MA斜率 (MA_20/shift(MA_20,L)-1)

这导致约72.4%的重叠率。建议:
- 在Pipeline中增加价格斜率特征(如 price_slope_20, price_slope_60
- 或将独立脚本的F2/F3过滤逻辑与Pipeline对齐后再对比

8.3 Top12生成注意事项

⚠️ 当前候选池品类分布极度集中(19/25为宽基),导致品类限制后仅能产出9只Top12:
- 这反映了当前市场环境的特征:非宽基行业ETF多数处于空头排列
- 建议在品类限制后仍不足12只时,放宽宽基限制从3→6以填满Top12
- 或在回退逻辑中也加入"品类限制放松"步骤

8.4 F1淘汰ETF特征

26只F1淘汰ETF涵盖:军工(3)、AI(3)、新能源(2)、消费(2)、传媒(2)、地产、畜牧、黄金、中药、建材、汽车、基建、云计算、中概等方向。这些板块处于 close < MA20 < MA60 < MA120 空头排列中。


报告生成时间: 2026-06-29 14:28 CST
Pipeline版本: v5.4 (etf_ml_pipeline_v54.py)
独立脚本: filter_v4_analysis.py
数据源: etf_history.json (100 ETFs, latest date: 2026-06-26)