在量化交易的体系中,策略开发是皇冠上的明珠,但在此之前,如何高效、科学地筛选出优质的交易标的,往往是决定策略成败的先决条件。对于T0交易(日内回转交易)而言,这一步骤尤为关键。本篇文章将分享一套系统的量化筛选框架,教你如何从海量ETF中,精准定位那些最适合网格策略的“完美震荡器”。
很多人对T0交易的印象停留在“高频”与“手速”上。实际上,对于大部分投资者和小型量化团队,基于网格(Grid Trading)的震荡策略更为稳健。这类策略不依赖对方向的精准预测,而是依赖于价格在特定区间内反复波动的特性,通过低买高卖赚取差价。
那么,什么样的标的才是网格策略的“梦中情标”?答案呼之欲出:震荡、活跃、有量。下面,我们将从数据获取到核心逻辑,再到代码实践,完整拆解这一筛选过程。
一、 数据准备:界定T0交易标的池
1. T0标的范围
受限于A股的T+1制度,我们通常聚焦于两类可实现日内回转交易的标的:
- 制度性T0标的:主要包括跨境ETF(QDII)、债券ETF、黄金ETF、货币ETF等。它们在交易规则上明确允许当日买入并卖出,无需底仓,资金利用率高。
- 底仓T0标的:通过持有股票底仓,进行当日的买卖对冲操作。
本系列首先聚焦于前者,因其逻辑纯粹,是实现自动化T0策略的理想起点。
2. 获取基础清单
主流量化接口(如MiniQMT)通常不直接提供“支持T0”的标签。我们可以从财经数据网站获取基础列表。例如,同花顺的ETF专区提供了相关筛选。
数据源示例:同花顺T0 ETF列表页面
手动从网页获取并维护清单效率低下。因此,一个更高效的做法是编写脚本自动抓取和更新。我已经整理好了一份持续更新的CSV清单,便于后续的本地化分析(获取方式见文末)。
3. 初步定性筛选
拿到基础清单后,我们可以进行第一轮快速的定性排除:
- 货币型ETF:波动率极低,价格曲线近乎直线,扣除手续费后几无利润空间,建议直接剔除。
- 债券型ETF:整体波动较小,需根据具体债券类型(如国债、城投债)和久期进一步甄别。
- 股票型/QDII ETF:涵盖纳指、恒生、日经等境外指数,通常波动性足、流动性好,是重点考察对象。
定性筛选后,我们得到了一个待量化的“候选池”。接下来的核心问题是:如何从几十甚至上百个候选标的中,量化评估并排序出最适合T0的那一个?
二、 核心逻辑:逆向应用机器学习的“好信号”指标
筛选逻辑的灵感源于一篇关于设备寿命预测的机器学习论文《An attention-based stacked BiLSTM framework for predicting remaining useful life of rolling bearings》。

论文的目标是寻找那些单调性好、趋势性强、可预测性高的“好信号”,以便于模型进行准确预测。然而,对于网格型T0策略,我们的目标恰恰相反!我们惧怕单边暴涨(易卖飞)或单边暴跌(易套牢),我们渴望的是高频、均值回归式的震荡。
因此,我们将论文中的核心特征指标进行了巧妙的“逆向应用”。

1. 单调性 (Monotonicity)
- 通俗理解:衡量价格在一段时间内是“一根筋”地朝一个方向运动,还是“来回摇摆”。单调性为1表示严格单边上涨或下跌;接近0则表示涨跌次数相当。
- T0筛选逻辑:越小越好。我们期望价格呈现完美的“锯齿状”震荡,而非单边行情。
2. 趋势性 (Trendability)
- 通俗理解:衡量价格的长期“漂移”程度。即价格是在一个水平箱体内波动,还是伴随着明显的长期上涨或下跌趋势。
- T0筛选逻辑:越小越好。我们希望价格围绕中枢震荡,长期斜率接近0,这样网格策略最安全,不易因趋势性破位而失效。
3. 可预测性/预后性 (Prognosability)
- 通俗理解:反映信号在失效阶段(类比价格大幅波动阶段)的变异程度。在金融时序中,可以理解为收益率序列的自相关性。高自相关意味着今天涨,明天很可能接着涨(趋势惯性)。
- T0筛选逻辑:适中或偏小为佳。过高的自相关性意味着趋势惯性大,不利于我们的“涨多就跌,跌多就涨”的均值回归假设。我们希望价格运动更接近随机游走。
核心思想总结:论文寻找的是“确定性”,而我们寻找的是 “稳定的、无序的波动性” 。这套逆向应用的机器学习思想,为我们的量化筛选提供了坚实的理论基石。
三、 实战风控:不可或缺的流动性与波动性指标
理想的形态需要搭配充足的“血液”(流动性)和合适的“心跳幅度”(波动率),才能构成一个可交易的标的。
4. 日内波动率 (Intraday Volatility)
- 计算:每日(最高价-最低价)/开盘价的百分比,再取一段时间内的平均值。
- 评分逻辑:寻找“甜点区”,例如 0.5% - 3.0%。
- < 0.5%:波动太小,利润难以覆盖交易成本。
- > 3.0%:波动过大,单次亏损风险高,对网格间距和风控要求苛刻。
- 0.5%~3.0%:最佳交易区间,有足够的波动空间产生利润,同时风险相对可控。
5. 流动性得分 (Liquidity Score)
流动性差的标的犹如陷阱,看似有机会,实则难以脱身。
- 维度A:日均成交量:必须达到绝对门槛(例如>1000万元),确保大单进出滑点小。
- 维度B:成交量稳定性:使用成交量序列的变异系数(CV)来衡量。CV越小,说明成交量全天分布均匀,流动性持续性好;CV过大则意味着成交量脉冲式爆发,可能长时间缺乏交易对手盘,极为危险。
四、 Python实践:从代码到可视化结果
理论需要实践验证。我构建了一套完整的Python自动化筛选框架,其核心结构如下:
T0_ETF筛选研究/
├── download_t0_etf_1min_data.py # [第一步] 数据下载脚本
├── t0_etf_daily_metrics_screening.py # [第二步] 核心筛选算法脚本
├── visualize_t0_results.py # [第三步] 结果可视化分析脚本
├── T0_ETF_List.csv # 基础 ETF 代码清单
└── README.md # 简要说明
download_t0_etf_1min_data.py: 利用量化接口(如xtquant)下载近一年的1分钟级K线数据。
t0_etf_daily_metrics_screening.py: 筛选引擎核心。遍历每个ETF,计算上述五大指标,并按权重进行综合打分(分数越低,排名越靠前)。
visualize_t0_results.py: 将筛选结果进行多维度可视化对比,生成分析图表。
加权模型设计
当前模型的权重分配体现了对风险因素的优先级排序(总分越低越好):
- 趋势性 (Trend): 高权重(最重要,坚决规避单边市)
- 单调性 (Mono): 中权重
- 可预测性 (Prog): 中权重
- 波动率 (Vol): 低权重(对过低或过高波动进行惩罚)
- 流动性 (Liq): 低权重但有一票否决权(极差流动性直接淘汰)
筛选结果深度分析
运行代码后,我们得到了排序榜单。以下是基于模拟数据的分析展示(为避嫌,源码中加入了随机扰动,鼓励读者自行调参实践)。
说明:本文核心是分享量化筛选的思路与框架,非具体投资建议。提供的源码包含随机扰动,每次运行排名会有细微变化,以鼓励大家理解逻辑后,自行调整参数构建专属股票池。
1. 波动率分布:锁定“甜点区”

图表解读:
- 绿色区域(0.5%-3.0%)为定义的“甜点区”。
- 前20名(绿点)几乎全部落在甜点区内,平均波动率约1.8%,完美契合T0需求。
- 后20名(红方)平均波动率仅0.05%,形同“织布机”,无法产生有效利润。
- 波动率差异高达36倍,直观展现了“活水”与“死水”的天壤之别。
实战启示:波动率是T0策略的“氧气”,必须将其作为首要筛选门槛。
2. ETF类别分布:揭示主力赛道

图表解读:
- 全市场:QDII(境外)和行业主题ETF是主力。
- 前20名:QDII、商品型(如黄金、原油)、Smart Beta ETF占比最高。它们通常跟踪境外指数或大宗商品,波动来源丰富,容易形成日内震荡。
- 后20名:货币基金占绝对主导。这验证了我们初步筛选时将其剔除的正确性。
- 结论:应重点关注跨境、商品及策略型ETF,主动避开货币型等低波品种。
3. 优劣标的走势对比
优质标的特征(高分示例):高频震荡,流动性均匀。

- 价格频繁穿越均线:呈现明显的均值回归特性。
- 无极端走势:日内无突发性暴涨暴跌,走势平稳。
- 成交量连续:全天交易活跃,没有长时间的断层,利于随时进出。
劣质标的特征(低分示例):低波死水,毫无生气。

- 价格近乎直线:波动极小,完全没有交易空间。
- 成交量低迷:市场关注度极低,流动性风险大。
通过这套系统的量化分析框架,我们得以超越主观经验,用数据驱动的方式,从数百个标的中快速、精准地定位出那些最适合T0网格策略的“完美震荡器”。
五、 总结与后续
至此,我们完成了T0交易万里长征的第一步——科学地筛选交易标的。我们不仅获取了数据,更建立了一套融合了逆向机器学习思想、流动性风控和波动率管理的综合量化打分模型。
下一步,我们将基于这份精选的“白名单”,深入探讨如何构建一个自适应网格交易策略,包括网格间距的动态调整、仓位管理以及回测验证,从而将“好标的”转化为“好策略”。欢迎在云栈社区继续关注后续的技术分享与讨论。
附:资源获取提示
本文涉及的完整T0 ETF基础清单与Python筛选框架源码,已整理归档。读者可通过技术社区或知识库平台进行查找与学习交流,以复现和优化本文所述的完整流程。