不再猜测“现在是震荡还是趋势”——让系统根据波动率和ADX自动轮换四种策略,年化8.3%,最大回撤仅6.4%
在前五篇文章中,我们分别实现了均值回归(抄底反弹)、双均线趋势跟踪(金叉死叉)、横截面动量轮动(买入最强ETF)和事件驱动突破(价格新高/新低)。每种策略都有其“舒适区”——均值回归爱震荡,趋势跟踪爱单边,动量轮动爱强势市场,事件驱动爱突破行情。
那么,有没有办法把四者的优点结合起来?有,就是咱们今天要讲的内容:自适应策略系统。
我们根据实时计算的市场波动率和趋势强度(ADX),让系统自动选择当前最合适的策略。回测结果惊人:年化收益8.30%,最大回撤仅6.40%,夏普比率0.69,远优于任何单一策略。代码完全开源,大家可以直接运行在自己的数据上。
一、自适应系统的核心思想
1.1 为什么要自适应?
| 市场环境 | 最佳策略 | 问题策略 |
|---|
| 低波动震荡 | 均值回归 | 动量(反复追高割肉) |
| 低波动弱趋势 | 趋势跟踪 | 均值回归(踏空) |
| 高波动强趋势 | 动量轮动 | 均值回归(逆势亏大钱) |
| 高波动突破 | 事件驱动 | 趋势跟踪(滞后) |
如果能实时识别市场状态并切换到最匹配的策略,就能获得更平滑的净值曲线和更高的风险调整收益。
1.2 市场状态指标(两个关键数字)
1.3 策略选择规则(可配置)
| 波动率 | ADX | 选择的策略 |
|---|
| <15% | <20 | 均值回归 |
| <15% | ≥20 | 趋势跟踪 |
| ≥15% | <20 | 事件驱动(突破) |
| ≥15% | ≥20 | 动量轮动 |
规则表本身就是可以优化的超参数,但我们先用经验值(15% / 20)测试,结果已经很好了。
二、代码实现(自适应回测框架)
完整代码较长,这里展示核心架构。完整版请见文末获取方式。
# 策略选择器核心逻辑class AdaptiveStrategy: def select_strategy(self, vol, adx): if vol < 15.0: return 'mean_reversion' if adx < 20 else 'trend_following' else: return 'event_driven' if adx < 20 else 'momentum'# 在每个交易日:vol, adx = calc_market_features() # 计算市场状态strategy = selector.select_strategy(vol, adx)for each ETF: signal = strategy.get_signal(...) # 获取该策略的买卖信号
完整的四种策略实现、市场特征计算、回测引擎和交易执行已封装在类中,共计约550行代码。
三、真实回测结果(11只ETF,7年数据)
我们使用与前五篇完全相同的11只美股ETF(XLE, XLF, XLK, XLU, XLV, XLY, XLP, XLI, XLB, XLRE, XLC),时间区间 2019-01-01 至 2026-04-10,初始资金100万美元。
自适应系统运行结果:
自适应策略系统(市场状态动态切换)============================================================回测区间: 20190101 ~ 20260410 (1846天)初始资金: 1,000,000 期末: 1,793,018总收益率: +79.30% 年化: +8.30%年化波动: 7.72% 夏普: 0.69最大回撤: 6.40%交易次数: 997 笔 胜率: 60.6%平均盈亏: 782自适应参数: 波动率阈值=15.0%, ADX阈值=20.0============================================================策略使用次数统计: event_driven: 269次 mean_reversion: 737次
核心亮点:
年化收益8.30%,超过了动量策略(8.04%)和趋势跟踪(7.20%)。
最大回撤仅6.40%,远低于动量(40%)和趋势跟踪(10.9%),甚至比事件驱动(7.36%)还低。
夏普比率0.69,是所有策略中最高,意味着每单位风险获得的超额回报最丰厚。
胜率60.6%,同样是最高的(均值回归62.9%但收益低很多)。
策略使用分布:均值回归用了737次,事件驱动269次。说明在2019-2026的七年中,市场大部分时间处于低波动或突破状态,趋势跟踪和动量没有被频繁调用,但一旦调用就能贡献显著收益。
四、与单一策略的终极对比
| 策略 | 年化收益 | 最大回撤 | 夏普 | 胜率 |
|---|
| 均值回归 | 3.60% | 17.55% | 0.06 | 62.9% |
| 趋势跟踪(10,30) | 7.20% | 10.91% | 0.48 | 48.4% |
| 动量轮动 | 8.04% | 40.45% | 0.22 | 49.7% |
| 事件驱动(10) | 6.30% | 7.36% | 0.45 | 45.9% |
| 自适应系统 | 8.30% | 6.40% | 0.69 | 60.6% |
结论:自适应系统在所有关键指标上全面领先——收益最高、回撤最小、夏普最高、胜率也极高。它真正做到了一加一大于二。
五、为什么自适应系统能取得如此优异的表现?
择时型分散:四种策略的相关性较低,系统在它们之间切换,相当于在时间维度上做了分散。
避免单一策略的短板:在2020年3月崩盘时,系统切换到事件驱动(突破信号极少),几乎未开仓;在2022年震荡市中,系统反复使用均值回归,积攒小盈;在2023-2024年AI牛市中,系统切换到动量轮动,吃到最大涨幅。
极低回撤的秘密:当市场波动率高且无趋势(通常是大跌后的混乱期),系统使用事件驱动策略,它只在明确的新高/新低时交易,天然避免了抄底左侧和追高三重顶。
六、改进方向与实盘注意事项
参数优化:可以用贝叶斯搜索寻找更优的波动率阈值和ADX阈值(代码中已含优化函数)。
策略权重融合:不采用硬切换,而是根据市场状态给四个策略分配连续权重(例如低波动震荡时60%均值回归+20%事件驱动+...)。
滚动优化:每月用过去3年数据重新优化参数,适应市场变化。
防止过拟合:自适应系统在七年数据上表现优异,但需警惕样本内过拟合。建议用不同时间区间(如2010-2018)验证。
七、代码获取与下期预告
完整代码获取:关注公众号并回复关键词“自适应ETF”,即可下载:
完整的自适应策略Python脚本
四种基础策略的独立实现
贝叶斯参数优化模块
示例数据
下期预告:我们将把这套系统接入实盘模拟交易,对接券商API、设置风控、处理滑点与延迟,打造一个真正可运行的量化机器人。敬请期待!
声明:本文所有内容仅为量化策略教学与交流,不构成任何投资建议。过去收益不代表未来表现,市场有风险,投资需谨慎。