低风险策略自动化:债券类ETF动量轮动策略在mini-QMT环境下的细节

前言
解决mini-qmt自启动的问题后,就要开始自动执行策略了。我记录了一下写程序和执行代码的过程,以及发现的问题,供大家讨论。

策略选择:
为什么是债券类ETF
我选择债券类ETF轮动作为踏上量化交易的第一步。
第一,策略简单,用30年国债ETF、可转债ETF和银华日利做轮动,每22个交易日计算三者的收益率,买入最强者,如果全都为负则卖出所有ETF空仓。这个策略唯一的因子就是价格,引入太多因子会导致复杂度上升,刚开始做量化实盘,要尽量简化模型。
第二,券商对债券ETF不收佣金,很方便日频交易。在没有免五资格的情况下,频繁频繁轮动其他品种纯纯给券商送钱。
第三,这三个ETF都是t 0,调试代码时,如果出问题,可以立即纠错。

代码逻辑:从算法到执行
我的代码逻辑分为四个标准模块。如果你也在写 QMT 脚本,可以参考这个流程,注意,以下都是伪代码:
  1. 策略初始化与环境准备
  2. 触发条件,寻找胜者
    核心逻辑是:收益率为正且涨幅第一。
    如果没有标的满足条件,系统会自动返回NONE,触发清仓防御逻辑。
  3. 轮动交易执行
    这里的工程逻辑是:先卖后买。
    为了确保快速成交,我选择了强吃对手盘的策略。
  4. 闲置资金逆回购

策略说明以及实际执行时遇到的问题
  1. 设置单次轮动最大投入,原因无他,无论回测多漂亮,都不能第一次实盘就全仓干,毕竟不清楚策略和代码哪里会出问题。
  2. 挂单偏移(Offset)与 Tick Size
    为了尽快成交(强吃对手盘),买入和卖出时,挂单价需要在当前价格的基础上让价。算法是当前价格 /-最小价格变动单位(Tick Size)的倍数:
    买入价格是

卖出价格则是


ETF和债券的Tick Size是0.001,股票是0.01,因为这个策略是ETF轮动,所以使用0.001,倍数是2。
对于成交量比较大的可转债ETF和银华日利,实时价格 /-2倍Tick Size差不多就是卖二/买二的档位。
对于流动性稍弱的30年国债ETF,这样也能确保在买一/卖一档位成交。
  1. 在卖出或买入时,多次轮询成交状态,如果在一定时间内(例如3分钟)仍然无法成交,就执行撤单,剩余资金全部参与逆回购。

量化不只是算法
量化策略是算法,而量化交易是工程。 一个能稳定赚钱的系统,30% 取决于你选了什么标的,70% 取决于你如何处理滑点、处理撤单、处理资金利用率。

免责声明
本文仅作为编程技术及量化接口调用的交流分享,不构成任何投资建议。市场有风险,实盘需谨慎。
发表时间 2026-05-09 14:51     最后修改时间 2026-05-09 16:57     来自北京

赞同来自: 钻山豹 NovaArken 荔浦芋头 误入歧途的少年 gaokui16816888 何哲欢888 无敌小韩更多 »

0

无敌小韩

赞同来自:

想问下楼主

策略里面是“三者都小于等于 0 就清仓”

511880.SH 银华日利是货币基金 这个收益应该不会小于0吧 而且清仓买国债逆回购跟买这个货币基金的区别是什么? 那基本上就是在国债跟转债里面做轮动了吧?


还有就是轮动的频率是每天吗? 还是每周
2026-05-13 16:51 来自海南 引用
0

李可以量化

赞同来自:

谢谢 再求教 策略入门有哪些课程或者学习路径推荐吗
2026-05-12 13:04 来自四川 引用
1

南天门下

赞同来自: 海浪9999

@李可以量化
博主 友好提问 请问用qmt 有一些Python代码基础 但是不太熟悉qmt的规则能直接搬运吗
别的平台的python代码肯定是不能直接用的。写代码时要严格遵循qmt的说明文档,可以把接口文档喂给AI让它写,然后自己调试一下就行了。
2026-05-11 16:03 来自北京 引用
0

李可以量化

赞同来自:

博主 友好提问 请问用qmt 有一些Python
代码基础 但是不太熟悉qmt的规则能直接搬运吗
2026-05-11 15:00 来自四川 引用
0

南天门下

赞同来自:

@cityrusher
一旦轮动就全仓轮过去?这么简单粗暴的话,岂不是一旦22日创业板、黄金这些一跌就轮到货基,创业板一涨就轮到创业板?
是的
2026-05-11 10:23 来自北京 引用
2

cityrusher

赞同来自: 文撕墨客 luckzpz

@南天门下
是的,就是这么简单粗暴
一旦轮动就全仓轮过去?这么简单粗暴的话,岂不是一旦22日创业板、黄金这些一跌就轮到货基,创业板一涨就轮到创业板?
2026-05-11 09:43 来自上海 引用
1

南天门下

赞同来自: KevinLe

@cityrusher
楼主这个策略是过去22天哪个品种涨幅最大,就买入哪个并卖出现有的持仓。类似于追涨杀跌策略?
实际上就是追涨杀跌,理论基础是趋势一旦形成短时间不会逆转,像国债受国家货币政策影响极大,而货币政策是不可能频繁变化的。

当然,轮动策略确实不可避免会碰到上蹿下跳的猴市,会被反复打脸,这是最大的问题。可以在策略中加入波动率的因子进行控制。
2026-05-11 09:28 来自北京 引用
0

南天门下

赞同来自:

@cityrusher
这几个品种不同投资风险等级的,也不是同类投资品,怎么轮动?跟楼主一样看最近22日涨幅大的就买入?
是的,就是这么简单粗暴
2026-05-11 09:19 来自北京 引用
0

cityrusher

赞同来自:

@南天门下
都是轮动策略,但轮动品种不同差别可大了。我试过银华日利、创业板ETF、华宝油气、黄金ETF、纳指ETF和可转债ETF的轮动,回测年化收益率高达50%,但波动也很大,最大回撤25%,如果考虑频繁交易的佣金损失和冲击成本,年化收益会剧降。
这几个品种不同投资风险等级的,也不是同类投资品,怎么轮动?跟楼主一样看最近22日涨幅大的就买入?
2026-05-11 09:02 来自上海 引用
0

cityrusher

赞同来自:

楼主这个策略是过去22天哪个品种涨幅最大,就买入哪个并卖出现有的持仓。类似于追涨杀跌策略?
2026-05-11 09:00 来自上海 引用
1

南天门下

赞同来自: KevinLe

@jargma2021
回测年化是多少
晕死发错图了,是下面这两张



2026-05-10 16:16 来自北京 引用
0

南天门下

赞同来自:

@奔魔
我也正打算学这个,还没开始,抛砖引玉一下,如果说错了就当我没说。
一、同样是0.001的差额,对国债ETF来说是百万分之一级别,对可转债ETF是万分之一级别。
二、排名问题,不知道你具体怎么排的,1是可能有精度问题也可能没有;2是冲击成本对排名的影响;3是尽量用涨幅百分比的比值而不是差额进行排名对比。
三、时间问题,排名时间与交易时间
四、资金量问题,资金量大额对比小额有更多机会发生部分成交的情况...
您客气了
一、 确实是这样,但为达到迅速成交的目的,只能付出一点代价。
二、 我是用收益率从高到低排名,收益率算法是((当前价格-22个交易日前收盘价) – 1) * 100%。有极小可能产生精度问题,可以忽略不计。
三、 排名和交易时间差不多同时,我设置的计划任务时间是14:55。
四、 如果资金量大确实会出现部分成交的问题,我现在设置最大交易金额是1.2W,只能买一手30年国债ETF,暂时还没遇到。我现在想到的办法就是没成交的资金继续让价,在买3/卖3档成交,但这样就不可避免产生冲击成本。所以不一定能达到回测的收益率。
2026-05-10 15:47 来自北京 引用
0

南天门下

赞同来自:

@NASA逻辑
跟之前看的一个公众号博主的策略有点像,不过买的是可转债变成了创业板
都是轮动策略,但轮动品种不同差别可大了。我试过银华日利、创业板ETF、华宝油气、黄金ETF、纳指ETF和可转债ETF的轮动,回测年化收益率高达50%,但波动也很大,最大回撤25%,如果考虑频繁交易的佣金损失和冲击成本,年化收益会剧降。
2026-05-10 15:45 来自北京 引用
0

NASA逻辑

赞同来自:

跟之前看的一个公众号博主的策略有点像,不过买的是可转债变成了创业板
2026-05-10 00:12 来自安徽 引用
0

奔魔

赞同来自:

我也正打算学这个,还没开始,抛砖引玉一下,如果说错了就当我没说。
一、同样是0.001的差额,对国债ETF来说是百万分之一级别,对可转债ETF是万分之一级别。
二、排名问题,不知道你具体怎么排的,1是可能有精度问题也可能没有;2是冲击成本对排名的影响;3是尽量用涨幅百分比的比值而不是差额进行排名对比。
三、时间问题,排名时间与交易时间
四、资金量问题,资金量大额对比小额有更多机会发生部分成交的情况,二者执行同样的程序但成交价差别还是有的,那么对你后续的增大资金量的参考性就要打个问号。
2026-05-09 23:49 来自辽宁 引用
2

jargma2021

赞同来自: gaokui16816888 luckzpz

回测年化是多少
2026-05-09 19:46 来自江苏 引用
0

蟋蟀猪

赞同来自:

我是取对手盘第五档价格下单,30秒未成撤单重新下单
2026-05-09 19:07 来自河北 引用

要回复问题请先登录注册

发起人

问题状态

  • 最新活动: 2026-05-13 20:30
  • 浏览: 2486
  • 关注: 30