分享

Claude Code 开发100个量化策略:行业ETF轮动策略(五年10倍)

 汉无为 2025-10-04 发布于湖北
图片
文/猫哥AI量化
ps:4000字

朋友们,猫哥的'Claude Code开发100个量化策略'系列又更新了!前两期我们分别讲了经典的海龟交易策略和稳健的全天候策略,反响热烈。

Claude Code 开发100个量化策略:海龟交易策略

Claude Code 开发100个量化策略:全天候策略

至于为什么一段时间没有更这个系列呢,是因为猫哥之前一直用Ptrade,现在正在陆续切换到QMT,所以这几天一直在熟悉接口规范、数据结构啥的。

关于Ptrade和QMT的对比,猫哥目前也是有一定的心得,就是Ptrade是运行在券商服务器上,好处是获取行情很快延迟很低,适合高频、打板类的策略,但是因为服务器资源有限,回测速度比较慢。

QMT则是运行在本地电脑上,回测速度很快,但是获取行情的速度可能就比不上Ptrade,所以适合一些低频的、需要大量回测的策略,例如因子投资、ETF轮动这种。

所以猫哥也会视策略的不同,选择合适的平台进行回测和交易。

今天猫哥给大家带来一个更有'攻击性'的策略——行业ETF轮动策略

轮动策略是什么?

说到轮动策略,很多朋友可能不太熟悉。简单来说,就是在一篮子资产中,定期挑选表现最好的进行持仓,表现差的就踢出去。

为什么轮动策略有效呢?这背后有几个市场逻辑:

  • 动量效应:涨得好的资产短期内往往会继续涨(趋势延续)
  • 行业轮动:经济周期不同阶段,不同行业表现差异巨大
  • 相对强弱:同一时期总有强势板块和弱势板块

今天我们要实现的策略,就是在9个行业ETF中,每天计算它们的'动量得分',然后选出得分最高的持仓。

图片

需要注意的是,因为股票池是固定的,所以一定程度上有过拟合的问题,股池以偏向科技类ETF居多,适合最近的市场风格,但是未来的市场风格能不能继续这样演绎下去,就见仁见智了。

策略核心逻辑

💡 核心亮点1:斜率动量打分

传统的动量策略往往只看涨跌幅,比如'买入过去20天涨幅最大的'。但这个策略更聪明,它用的是线性回归斜率

什么意思呢?举个例子:

  • ETF-A:20天涨了10%,但走势曲折,今天涨明天跌
  • ETF-B:20天也涨了10%,但走势流畅,稳步上涨

虽然涨幅一样,但ETF-B的趋势更稳定,未来继续上涨的概率更大。线性回归斜率就是用来量化这种'趋势稳定性'的。

更妙的是,策略还乘以了R²(决定系数)。R²越大,说明价格走势越接近一条直线,趋势越清晰。这样就能筛选出既涨得快、又涨得稳的优质标的。

图片

代码实现长这样:

# 计算斜率动量得分
x = np.arange(1, N_DAYS + 1)  # 时间序列
y = df['close'] / df['close'].iloc[0]  # 价格归一化

lr = LinearRegression()
lr.fit(x.reshape(-1, 1), y)

slope = lr.coef_[0]  # 斜率
r_squared = lr.score(x.reshape(-1, 1), y)  # R²

# 最终得分 = 斜率 × R² × 10000
score = 10000 * slope * r_squared

💡 核心亮点2:RSRS择时系统

光会选股还不够,还得知道什么时候该买、什么时候该躲。

这就要靠RSRS择时指标了。RSRS全称是'阻力支撑相对强度',由光大证券在2017年发布的研报《基于阻力支撑相对强度的市场择时》中提出。

  1. 对过去18天的最高价和最低价做线性回归
  2. 得到的斜率代表'上涨空间相对下跌空间的大小'
  3. 计算这个斜率在过去600天中的Z-score(标准分)
  4. 再乘以R²修正,得到最终的RSRS得分
图片
# 计算RSRS指标
high_data = data['high'].values
low_data = data['low'].values
_, slope, r2 = get_ols_regression(low_data, high_data)

# 计算Z-score
rsrs_score = get_zscore(slope_series) * r2

RSRS得分的含义:

  • 大于0.7:市场处于强势,支撑远大于阻力,可以买入
  • 小于-0.7:市场处于弱势,阻力远大于支撑,应该清仓
  • -0.7到0.7之间:震荡行情,保持现状

但光靠RSRS还不够,策略还加入了20日均线过滤

# 均线信号
today_MA = close_data.iloc[MEAN_DIFF_DAY:].mean()  # 当前均线
before_MA = close_data.iloc[:-MEAN_DIFF_DAY].mean()  # 5天前的均线

# 综合判断
if rsrs_score > 0.7and today_MA > before_MA:
    signal = 'BUY'# RSRS强势 + 均线上升 = 买入
elif rsrs_score < -0.7and today_MA < before_MA:
    signal = 'SELL'# RSRS弱势 + 均线下降 = 清仓
else:
    signal = 'KEEP'# 维持现状

这种双重确认机制,有效降低了虚假信号。

只有当市场真正转强或转弱时,才会发出交易信号。

🛠️ 如何用Claude Code开发?

好了,讲完策略原理,该说说怎么用AI开发了。

猫哥这次的开发过程也是全程AI辅助,几乎没怎么手动改代码。

关于AI写量化策略,猫哥最近也有自己的心得体会,大体分为两种方式,第二种最简单。

第一种是你脑海中有一个想法,但是没有现成的代码,所以需要给AI提出非常详细的需求描述,例如整体的逻辑是什么、如何选股、如何交易、如何设置参数、 函数应该如何命名、如何处理异常、如何持久化交易数据等等。

需要AI先阅读QMT的文档,然后根据你的需求去写代码(最好写一个完整的需求文档),相当于从头开始,不建议这样做

那么第二种是什么,第二种是你已经有了一个完整的QMT代码,虽然这个代码的交易逻辑可能跟你脑海中的想法不一样,但是在数据获取、交易下单、异常处理等模块,已经写好了现成的代码,直接就可以在其他代码里用

例如之前猫哥写了这样一篇文章:

十年26倍,ETF乖离动量轮动策略了解一下

这个代码是做宽基ETF轮动,例如创业板ETF、国债ETF、纳指ETF等等,那么我这次想做行业ETF是不是就改一下股票池就可以? 

此外这个代码是基于 90日均线的乖离率 做线性回归,但我觉得行业ETF的价格波动更剧烈想改成 价格的线性回归,是不是直接让AI改就可以? 

prompt:将 ETF乖离动量轮动策略.py 的ETF动量评分方式,修改为 直接对股价本身做线性回归。 

此外,我还可以在此基础上添加大盘择时,例如RSRS、均线等等,可以说在AI的加持下,已经可以自由将头脑中的想法,转化为量化策略去实现。

第三步:回测验证和优化

生成代码后,放到QMT或Ptrade平台回测。如果有报错或逻辑问题,直接把错误信息复制给AI,它会帮你快速定位和修复。

例如猫哥在回测的时候遇到一个问题,就是ETF数据不足,很多行业ETF上市时间不一致,如果在回测时间之后上市的,获取不到数据就会报错。

 于是我通过AI添加一个功能,加入数据完整性检测,不足25天的ETF跳过评分。

回测结果

下面看一下回测结果,回测时间是2020年1月1日-2025年9月30日:

图片
图片

回测截止到2025年9月30日,单位净值是10.162,五年10倍,年化收益率51.39%,夏普比率1.46,效果是非常好的,但是也需注意,策略在2023年之前,收益率曲线并没有很陡峭,因为股池大部分是科技类ETF,而科技牛是在2023年ChatGPT横空出世,特别是去年的九二四行情以来,市场风格偏向科技,特别是AI股的炒作,所以如果你看好未来继续延续AI科技的风格,那么此策略可以关注;如果更看好反内卷等低位板块,需要重新考虑如何设计ETF池子。

刚才展示的是添加了RSRS择时和均线择时的情况,现在展示一下取消均线择时,仅仅依靠RSRS择时是什么效果

图片
图片

可以看到,取消了均线择时,仅依靠RSRS的择时,会降低策略的表现,但效果也还不错,五年8倍,年化46.12%,夏普1.36 。

本来还想展示一下,完全不择时,满仓轮动是什么效果。但国金的QMT这几天一直登不上去,哎想研究一下策略都那么难,下午好不容易登上去了,没回测几次就崩了自动退出了,等下次有机会再更新吧。

总结

通过这个案例,我们不仅学到了一个轮动策略,更重要的是理解了几个投资思想:

1. 动量投资的本质,动量投资不是追涨杀跌,而是识别趋势并跟随趋势。斜率×R²这个指标,本质上是在量化'趋势的强度和确定性'。

2. 择时的必要性,纯轮动策略在单边下跌中也会亏损,加入择时功能可以在系统性风险来临时及时止损。但择时不是预测,而是对市场状态的响应

3. AI的价值,Claude Code在这个案例中展现了强大能力:不仅能实现交易逻辑,还能考虑工程细节、处理异常情况、优化代码结构。这大大降低了量化策略开发的门槛。

但AI只是工具,策略思想还是要靠人。你需要清楚地知道自己想要什么策略、适合什么市场、能承受多大风险,然后让AI帮你实现

 认真研究策略背后的逻辑,理解市场的运行规律,才是投资的长久之道。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章