五年10倍!用Claude Code打造“攻击性”行业轮动策略

87e4770f583d539caaf1b6cff1bd9ff3.png# Claude Code 开发100个量化策略:行业ETF轮动策略

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

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

Ptrade vs QMT 平台对比

关于Ptrade和QMT的对比,猫哥目前也是有一定的心得:

  • Ptrade:运行在券商服务器上

    • 优点:获取行情很快延迟很低,适合高频、打板类的策略
    • 缺点:服务器资源有限,回测速度比较慢
  • QMT:运行在本地电脑上

    • 优点:回测速度很快
    • 缺点:获取行情的速度可能就比不上Ptrade
    • 适合:低频的、需要大量回测的策略,例如因子投资、ETF轮动这种

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

行业ETF轮动策略详解

什么是轮动策略?

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

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

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

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

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

策略示意图

策略核心逻辑

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

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

什么意思呢? 举个例子:

  • 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年发布的研报《基于阻力支撑相对强度的市场择时》中提出。

计算步骤:

对过去18天的最高价和最低价做线性回归

得到的斜率代表"上涨空间相对下跌空间的大小"

计算这个斜率在过去600天中的Z-score(标准分)

再乘以R²修正,得到最终的RSRS得分
853b29476866da5131f52a34ebb7d5e9.png

# 计算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

SRS得分的含义:

大于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.7 and today_MA > before_MA:
    signal = "BUY"  # RSRS强势 + 均线上升 = 买入
elif rsrs_score < -0.7 and 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动量评分方式,修改为直接对股价本身做线性回归。

StockAPI 2025 全景介绍
stockapi是一个专业的股票数据分析与量化交易接口平台。把行情、指标与特色数据“一条链路”拉到本地
定位
StockAPI 是一套面向量化交易者、财经 App 与内部投研系统的「一站式股票数据接口」;2025 版本在原有实时行情基础上,补全了技术指标、集合竞价、龙虎榜三大刚需模块,并全部提供 REST/JSON 与 WebSocket 双协议。

stockapi官网(www.stockapi.com.cn)

股票数据接口文档

1. 板块、概念成分股列表

接口说明:接口说明:板块、概念个股列表复盘必备工具
更新时间:交易日17:00
接口地址:
https://stockapi.com.cn/v1/base/bkList?bkCode=BK1036&pageNo=1&pageSize=50

2.1 板块代码

接口地址:
https://stockapi.com.cn/v1/base/bk

posted on 2025-10-10 21:16  星星之火之  阅读(6)  评论(0)    收藏  举报