ETF筛选流程与核心要点整理

  • 一、基础数据获取与初步过滤

获取ETF列表:通过get_all_securities([‘etf’])获取全市场ETF,筛选2013年1月1日前成立的(start_date < 2023-01-01),确保历史数据充足。
排除低流动性ETF:手动剔除成交额均值过低的特定ETF(如159003.XSHE招商快线ETF、159005.XSHE汇添富快钱ETF等,成交额均值≤2.92kw)。

  • 二、ETF日线数据与收益率计算
    数据范围:获取截至当前日期(today)前240个交易日的收盘价数据。
    收益率处理:计算日收益率(pchg = close.pct_change()),形成ETF收益率矩阵(prices,行=交易日,列=ETF代码)。
  • 三、K-Means聚类去重(基于走势相似性)
    聚类目标:将走势相似的ETF聚为一类,减少重复标的。
    参数设置:聚类数n_clusters=30(避免簇太少导致不相似ETF误聚),使用KMeans算法,随机种子random_state=42。
    簇内筛选:每个簇保留成立时间最早的ETF,原因:
    成立早→成交额通常更大(流动性更好);
    成立早→历史数据更多(利于模型训练)。
  • 四、轮廓系数评估聚类效果
    计算聚类轮廓系数:0.4511880967361387(中等水平,说明簇内紧密度与簇间分离度尚可,但需进一步优化)。
  • 五、相关系数二次过滤(进一步降低相关性)
    相关系数矩阵:计算ETF收益率的相关系数矩阵(corr = prices[df.code].corr())。
    高相关对处理:筛选相关系数>0.85的ETF对,每对中仅保留成立时间更早的ETF,剔除其余(如剔除159922.XSHE、512100.XSHG等)。
  • 六、可选:过滤成立较晚的ETF(提升数据质量)
    设定阈值:剔除2020年后成立的ETF(如513060.XSHG恒生医疗、515790.XSHG光伏ETF等),确保剩余ETF历史数据更丰富(适用于模型训练场景)。
  • 七、注意事项与补充建议
    国债ETF特殊处理:若用于模型训练,需剔除511010.XSHE国债ETF——其走势接近直线(类似余额宝),波动极小,会干扰模型对波动特征的学习,且无预测必要性。
    下跌ETF的取舍:结果中可能包含长期下跌ETF(如医药ETF、地产ETF),是否剔除取决于策略目标:
    若追求稳健收益可剔除;
    若策略在含下跌ETF时仍表现良好,可能说明策略鲁棒性强(但需注意“未来函数”风险,无法预知下跌ETF是否反转)。
    可视化验证:绘制剩余ETF走势图(如2017年以来收盘价),人工检查相关性是否符合预期(低相关且分布合理)。
    最终筛选逻辑总结
    通过“初始过滤→聚类去重→相关系数二次过滤→(可选)成立时间过滤”四步,得到流动性好、走势低相关、历史数据充足的ETF池,核心目标是为策略或模型提供多样化、高质量的基础标的。
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 评论
  • 转发
  • 分享
评论
请输入评论内容
请输入评论内容
暂无评论