我做了个ETF轮动GUI界面版

为什么要做ETF轮动?

A股市场有个鲜明特征:行业轮动。 单持一个行业,胜率很低;全市场撒网,又跑不赢指数。

ETF轮动的思路很简单——不预测下一个涨什么,而是跟踪已经涨起来的,定期换仓跟上强势品种

听起来容易,但实操中有几个关键问题:

  1. 怎么定义"强势"? 看涨幅?看趋势?看成交量?
  2. ETF池选哪些? 选40只还是选6只?
  3. 多久调一次仓? 天天调还是每月调?
  4. 怎么避免频繁换仓被摩擦成本吃光收益?

接下来,我用一套基于迅投MiniQMT的实际策略,逐个回答这些问题。

一、策略核心:三因子评分

我使用的策略对ETF池中每只ETF计算一个综合评分,评分由三个因子加权合成:

综合评分 = 动量分 × 0.35 + 趋势分 × 0.40 + 量能分 × 0.25

1. 动量因子(权重35%)

动量就是"涨了多少"。

短期动量(过去20日涨跌幅):反映近期行情热度长期动量(过去60日涨跌幅):反映中期趋势力度

最终动量分 = 短期 × 0.6 + 长期 × 0.4

短期权重更高,因为ETF轮动要抓的是近期的动量延续性,不是几个月前的老黄历。

2. 趋势因子(权重40%)

趋势是"涨得稳不稳"。

具体做法:取最近25个交易日的收盘价,做线性回归,算出斜率和相关系数R。

  • 斜率大 → 涨得快
  • R²高 → 涨得稳(不是上下震荡偶然拉高的)

趋势分 = 标准化斜率 × R²

这个R²是精髓。一只ETF可能短期涨幅很大,但如果价格走势乱七八糟、上蹿下跳,R²会很低,趋势分就被打折。反之,一条稳稳的上升通道,R²接近1,趋势分就高。

3. 量能因子(权重25%)

量能是"有没有资金关注"。

量能分 = (近20日均量 / 前20日均量 - 1)× 100

放量说明资金进场,量能分高;缩量说明资金撤离,量能分为负。

三因子为什么这样分配?

因子

权重

作用

趋势

40%

最重要

,确保选的是"稳定上涨"的品种

动量

35%

捕捉涨幅力度,不错过强势品种

量能

25%

辅助确认资金面,过滤无量空涨

趋势权重最高,是因为我们追求的是确定性强的上涨,而非短期暴涨。

二、ETF池:跨资产、低关联

策略内置了40余只ETF,覆盖:

资产类别

代表ETF

大盘宽基

上证50、沪深300、中证500、中证1000

创新成长

创50、科创50

行业主题

半导体、军工、医药、新能源、红利

海外市场

纳斯达克100、标普500

核心原则:跨资产、低关联。不要选高度相关的ETF(比如同时选沪深300和中证100),否则轮动效果打折。

 

三、防追高与防频繁换仓

防追高:月涨超50%直接扣5分

如果近22个交易日涨幅 > 50%:
    综合评分 -= 5.0

ETF不像股票有涨跌停限制(场内ETF最多涨10%~20%),1个月涨50%的ETF大概率已经严重超买。硬扣5分,直接把它挤出候选池。

防频繁换仓:持仓惯性加分

如果该ETF已在持仓中:
    综合评分 += 0.02

这个0.02看似微小,实际效果显著:

假设A(已持仓)评分3.50,B(未持仓)评分3.51。没有惯性加分时,B排名更高会触发换仓——卖了A买B。加了0.02后,A变成3.52,反超B。

结果:A和B评分只差0.01,不折腾了。

只有当新ETF的评分比持仓高出超过0.02时,才会触发换仓。这有效过滤了因评分微小波动导致的"噪音交易"。

 

四、实盘交易流程

策略支持两种模式:回测实盘

回测模式

  1. 设定回测区间(起始日、结束日)
  2. 自动预加载所有ETF的K线数据
  3. 按调仓间隔(默认5个交易日)逐日模拟
  4. 输出:净值曲线(对比沪深300基准)、总收益率、年化收益、最大回撤
  5. 自动保存净值图

实盘模式

连接MiniQMT客户端后,执行五步:

第1步 → 查询当前持仓(只看ETF池内的,不动股票)
第2步 → 对全部ETF打分,已持仓加分,选出目标持仓
第3步 → 卖出不在目标中的ETF(限价单)
第4步 → 等待5秒,确保卖出委托处理
第5步 → 买入目标中未持有的ETF

资金安全机制:max_invest_amount 默认100万。哪怕账户有500万,也只用100万跑这个策略,剩余资金不受影响。

买入金额计算:

per_stock = min(可用现金 / 新买数量, 最大投入 / 持仓数量)

取较小值,确保单支不会超限。

 

五、UI工具:零代码运行

为了方便非程序员使用,我开发了GUI界面版(基于Python tkinter),界面如下:

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2026-06-02 12:14  Leone-  阅读(159)  评论(0)    收藏  举报