首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >通达信TQ实现ETF动量轮动

通达信TQ实现ETF动量轮动

作者头像
子晓聊技术
发布2026-05-07 18:25:32
发布2026-05-07 18:25:32
750
举报
文章被收录于专栏:子晓AI量化子晓AI量化

之前写了通达信TQ获取股票、可转债、期货数据,有同学留言区问能获取etf基金数据。 这里写一篇关于etf动量轮动的文章介绍。

一、为什么是ETF轮动?

先说策略底层的逻辑。

A股有一个非常显著的特征:不同大类资产之间的轮动极为明显。

2023年AI概念爆发,通信ETF一骑绝尘;2024年避险情绪升温,黄金ETF持续走强;美股科技长牛,纳指ETF屡创新高;市场不好时,国债ETF是唯一的避风港。

这些资产之间的相关性很低。黄金涨的时候,创业板不一定涨;纳指跌的时候,A股价值股可能纹丝不动。

ETF轮动的核心思路就是:不预测哪个会涨,只跟踪谁正在涨。 每天算一算哪个ETF势头最猛,全仓持有它,第二天再算一遍,该换就换。

不用选股,不用研究财报,不用盯盘——让动量替你做决定。

二、ETF池怎么选?低相关性是关键

ETF池不是随便选的。很多人一上来就选科创50、芯片、半导体、5G通信——这些ETF的成分股大量重叠,走势几乎同步,轮动等于白换仓,还搭上手续费。

选池原则:跨资产、跨市场、低相关性。

我最终选了6只ETF,覆盖四个资产类别:

代码

名称

定位

518880.SH

黄金ETF

大宗商品,抗通胀

513100.SH

纳指100ETF

海外科技股

159915.SZ

创业板ETF

A股成长股

510180.SH

上证180ETF

A股价值股

510300.SH

沪深300ETF

大盘蓝筹

511010.SH

国债ETF

避险资产

怎么验证低相关性?用皮尔逊相关系数算一下就知道了:

代码语言:javascript
复制
df_returns = pd.DataFrame({code: df['close'].pct_change() for code, df in data_dict.items()})
corr_matrix = df_returns.corr()

黄金和国债的相关性约0.1,纳指和创业板约0.3,大部分组合的相关性都在0.5以下。这个池子做轮动才有意义——涨跌不同步,换仓才能捕捉到差异收益。

代码里我也封装了相关性分析功能,运行 python etf_momentum_tq_strategy.py corr 即可查看矩阵。

三、三因子动量模型:不是简单的"谁涨得多"

很多人理解动量就是看涨幅,谁涨得多买谁。这太粗糙了。

我的模型从三个维度评分:趋势强度、短期动量、量能指标。 三个因子各司其职,互相印证。

3.1 趋势强度(权重40%):衡量"涨得稳不稳"

取最近25个交易日的收盘价,取对数后做线性回归。得到两个值:

  • 斜率:代表上涨速度,将其年化得到年化收益率
  • R²(决定系数):衡量走势的线性程度,越接近1说明越像一条直线

趋势得分 = 年化斜率 × R²

举个例子:ETF-A和ETF-B最近都涨了20%,但A是稳步上涨,R²=0.9;B是暴涨暴跌,R²=0.3。A的趋势得分远高于B。

为什么?因为稳步上涨的趋势更可能延续,而暴涨暴跌往往是资金博弈的结果,持续性差。

代码语言:javascript
复制
log_prices = np.log(closes[-window:])
x = np.arange(len(log_prices))
slope, intercept = np.polyfit(x, log_prices, 1)
annualized_return = math.pow(math.exp(slope), 250) - 1

# R²
y_pred = slope * x + intercept
ss_tot = np.sum((log_prices - np.mean(log_prices))**2)
ss_res = np.sum((log_prices - y_pred)**2)
r_squared = 1 - ss_tot / ss_tot if ss_tot > 0 else 0

trend_score = annualized_return * r_squared

3.2 短期动量(权重35%):捕捉"近期爆发力"

趋势强度看的是25天的整体走势,但市场热点切换很快,还需要捕捉近期的加速信号。

动量得分 = 0.6 × 5日ROC + 0.4 × 10日ROC

5日权重更大,因为它更能反映最近资金的流向变化。一只ETF如果5日涨幅突然放大,很可能是新一轮行情启动。

代码语言:javascript
复制
roc5 = (closes[-1] / closes[-6] - 1) * 100
roc10 = (closes[-1] / closes[-11] - 1) * 100
momentum = 0.6 * roc5 + 0.4 * roc10

3.3 量能指标(权重25%):确认"有没有资金支撑"

量在价先。无量上涨是空中楼阁,随时可能反转。

量能指标 = ln(5日均量 / 20日均量)

如果近期成交量远高于长期均量,指标为正且数值大,说明有真金白银在涌入,趋势的含金量更高。如果缩量上涨,即使价格在涨,量能指标会拉低综合得分,给你一个"注意风险"的信号。

代码语言:javascript
复制
vol_ma5 = np.mean(volumes[-5:])
vol_ma20 = np.mean(volumes[-20:])
volume_indicator = np.log(vol_ma5 / vol_ma20)

3.4 综合评分

综合得分 = 40%×趋势 + 35%×动量 + 25%×量能

每日对所有ETF评分,全仓持有得分最高的那只。

四、均线空仓:熊市保命的底线

光有相对排名还不够。如果全市场都在跌,"最不差"的那个也不该持有。

所以加了一道60日均线过滤:当前价格低于60日均线的ETF,直接排除。如果所有ETF都低于均线——空仓等待。

这条规则的威力在熊市中体现得淋漓尽致。2022年全市场下跌、2024年初微盘股崩盘,均线过滤能让你在第一时间退出,避免扛着亏损硬撑。

代码语言:javascript
复制
ma_value = np.mean(closes[-60:])
current_price = closes[-1]
if current_price < ma_value:
    # 低于均线,排除该ETF
    score = -999

有人会说:"空仓会不会错过反弹?"

会。但量化交易的核心不是抓住每一次机会,而是只在胜率站在你这边的时候下注。 均线之上,趋势是你的朋友;均线之下,现金是最好的持仓。

五、注意事项

1. 注意TQ版本兼容性。 TQ策略功能仅支持专业研究版量化模拟版V7.73,普通金融终端V7.73已移除该功能。下单前先确认你的版本是否支持。

2. 别小看手续费。 ETF轮动是每日调仓,如果ETF之间的动量差距不大,频繁换仓的手续费会吃掉轮动收益。代码中设了0.03%的手续费率,回测时一定要算进去。

3. 均线周期可以优化。 60日均线偏保守,如果你希望更灵活,可以缩短到20日;如果希望更稳,可以拉长到120日。但不要过度拟合——用2024年数据调出来的最优参数,2025年未必管用。

4. 滑点对ETF影响不大,但不能忽略。 ETF流动性普遍好,但在尾盘急跌或开盘跳空时,市价单可能成交在较差的价格。代码中默认0.1%滑点,保守但合理。

5. 空仓不可怕,扛亏才可怕。 均线过滤会让策略在某些时段空仓,看着别人赚钱心里痒。但量化的意义就是执行纪律——信号不满足就不动,这是系统最大的优势。

六、完整代码获取方式

完整可运行代码 etf_momentum_tq_strategy.py 已整理好,四种运行模式:

代码语言:javascript
复制
python etf_momentum_tq_strategy.py signal    # 查看当前信号
python etf_momentum_tq_strategy.py backtest  # 回测
python etf_momentum_tq_strategy.py corr      # 相关性分析
python etf_momentum_tq_strategy.py live      # 实盘运行,仅供参考

使用前修改配置中的通达信路径和账号信息,先用 signal 模式验证。

代码获取3种途径:

1、点赞、在看、转发三连,这种方式的灵感看群里同学转发XX公众号,看看是不是好的传播方式

2、 不想让人看到,随意赞赏也可以

3、 直接知识星球获取完整代码

这里说明下,后续本号文章调整为每天20:00发布,感觉晚上发布流量好些。 明天就要开盘了, 挣点零花钱明天加仓干。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 子晓聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、ETF池怎么选?低相关性是关键
  • 三、三因子动量模型:不是简单的"谁涨得多"
    • 3.1 趋势强度(权重40%):衡量"涨得稳不稳"
    • 3.2 短期动量(权重35%):捕捉"近期爆发力"
    • 3.3 量能指标(权重25%):确认"有没有资金支撑"
    • 3.4 综合评分
  • 四、均线空仓:熊市保命的底线
  • 五、注意事项
  • 六、完整代码获取方式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档