【大麦小米学量化】如何优雅地调教QMT量化平台编写量化策略(使用notepad++、pycharm、vscode等外部IDE编写量化交易代码)


前言

很多人开通了迅投QMT量化平台,可是进入编辑器界面,写python代码,那种感觉如同回到了原始时代,连调试代码最常用到行、块注释这么简单的操作都能把人整疯。想让迅投QMT即刻修改编辑器,一时半会儿也不现实。那么有没有一种方法?可以使用外部的编辑器编写,在迅投QMT里运行,不也鱼与熊掌可兼得了吗?

经过笔者孜孜探索,还真找到了一个方法,其实也很简单。就是坑有几个,不过我都填上了。


提示:以下是本篇文章正文内容,其中代码为QMT默认自动生成,这里拿来仅作演示,不可用于实盘。

一、先搞清楚QMT的安装目录

假设我的QMT安装在 D:\gszqqmt\,打开这个目录,下面3个目录对我们python代码书写比较重要。

  1. bin.x64 :这个我们很熟悉,她是我们安装python环境的地方,其下的
    D:\gszqqmt\bin.x64\Lib目录安装了自带的各种包,如果我们需要安装第三方包,则安装在D:\gszqqmt\bin.x64\Lib\site-packages下;
  2. mpython :这里是我们的QMTmini 量化策略的存放位置(这个不是今天主角,可以先不管);
  3. python :这里是我们的QMT量化策略的存放位置(它才是今天的主角,D:\gszqqmt\python目录路径不能错哦)
    在这里插入图片描述

二、QMT调教步骤

搞清楚了策略的存放位置,下来就可以使用外部IDE编辑器来编辑代码了,编辑调测量化策略分三步:

1.QMT里新建量化策略(只新建,不修改)

这里我们只是新建而已,不用改任何信息,如下图:
在这里插入图片描述
1.1 输入名称
1.2 勾选“启动本地python”,这里勾选后,放可以在本地IDE编辑器里打开源码,否则编译后的代码你懂的。不过忘了勾选也没关系,下次编译前再勾选一下即可。
1.3 点“编译”后这个策略就会按我们命名的名称进行保存。

2.IDE编辑器修改代码(只修改,不运行)

2.1 只是来修改代码,不运行策略。下面以notepad++为例,将目录添加到工作区。
在这里插入图片描述
在这里插入图片描述
2.2 添加完毕后,我们双击刚才创建“金字塔策略.py”就可以打开了。右侧就是刚才的默认生成的python代码了。
在这里我们随意修改,这里演示,我就修改了一行,添加了一行,然后保存后我们到QMT里去运行。

在这里插入图片描述

3.QMT里运行量化策略(只运行,不修改)

在QMT里直接点“回测”,报错信息如下:

【2022-08-31 20:37:12.750】 0D:\gszqqmt\python\金字塔策略.py_SH00030025IndentationError:unindent does not match any outer indentation level (, line 28)

返回notepad++,显示所有字符(点菜单栏里用红色框标记的图标),即可看到我们的缩进有问题,QMT里默认是一个tab,而我的编辑器里默认是4个空格。这两种缩进没有任何区别,但一个Python文件里必须统一。

tab还是空格,不显示全部字符一般看不出来,QMT里可以看到。很多初学者这里容易犯错,所以这里举例示意下。

在这里插入图片描述
这里我们统一修改为tab后保存,再回到QMT里回测,一起正常。

如过我们在QMT里直接修改,回到notepad++ 会提示如下,选“是”就可更新到最新的代码。
在这里插入图片描述
至此,使用外部编辑器简单的调试QMT代码的方法已经展示完毕。剩下的就是不断的循环调试了。

有人说,你骗我,我在QMT里我就编译了一下,在notepad++里也重新加载了,可代码不见了!!!变成了如下图:

在这里插入图片描述
快还我代码!!!

别慌,还记得之前勾选“启用本地python”么?每次使用QMT编辑器,务必打上这个对勾再编译,否则代码编译后就上面这个样子。

好了,可爱的量化代码回来了吗?


总结

QMT是个量化交易的好工具,不过其代码开发功能确实很拉胯。当然它的主要功能不在于此,所以我们也就不必计较了。用了以上的方法相信你也就不在意她的开发环境了。借鉴以上方法,使用pycharm、vs code 等各种编辑器也都是可以的。

拓展:使用pycharm编辑策略

方法就是:将D:\gszqqmt\python在pycharm里新建项目,如下:
在这里插入图片描述
创建完毕后,即可看到刚才的代码了。
在这里插入图片描述

项目有个好处,可以解决文件引用路径的问题。很多人代码运行别人的代码不成功,就是因为别人给的代码使用了相对路径,而你单独代开运行代码会使用绝对路径,当然也就找不到文件,代码也就会不停报错。

后记

mpython的秘密

今天先写到这里,当然如果有人注意到开头提到的mpython目录,想知道这个的用法,评论里留言。如果评论超过20的话,我会考虑另写一篇彻底不用切换编辑器,而是在IDE里直接编辑,直接运行,直接交易的方法。

后后记

2022年9月,此篇文章抛出mpython的秘密,当时讯投对MiniQMT犹抱琵琶半遮面,很多人并不知晓。更没有知识库供大家参考学习,xtquant目录下仅有的pdf文件就是所有介绍文档。后来讯投发展起来,在官网对其也进行了全面的介绍,并不断更新。感兴趣的可以移步:
使用xtquant调用迅投MiniQMT客户端定时操作逆回购,再也不担心忘了赚零花钱了(含完整源代码)

  • 33
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 33
    评论
QMT 是一个基于Python量化交易框架,可以用它来编写自己的交易策略。下面是一个基于MACD的策略示例: ``` from qmt import Strategy, DataHandler import talib class MACDStrategy(Strategy): def __init__(self): self.buy_price = None self.sell_price = None self.macd = None self.signal = None def on_data(self, data: DataHandler): if len(data.close) < 26: return self.macd, self.signal, _ = talib.MACD(data.close) current_price = data.close[-1] if self.macd[-1] > self.signal[-1] and self.macd[-2] < self.signal[-2]: self.buy(current_price) elif self.macd[-1] < self.signal[-1] and self.macd[-2] > self.signal[-2]: self.sell(current_price) def buy(self, price): self.buy_price = price self.buy_order(price) def sell(self, price): self.sell_price = price self.sell_order(price) def on_order_filled(self, filled_order): if filled_order.order_type == 'buy': self.buy_price = filled_order.price elif filled_order.order_type == 'sell': self.sell_price = filled_order.price def on_trade_closed(self, trade): profit = (trade.sell_price - trade.buy_price) / trade.buy_price * 100 print(f"Trade closed: buy @ {trade.buy_price}, sell @ {trade.sell_price}, profit: {profit:.2f}%") ``` 该策略使用 talib 库来计算 MACD 指标,并通过比较 MACD 和信号线的交叉点来判断买入和卖出时机。当 MACD 线上穿信号线时,发出买入指令;当 MACD 线下穿信号线时,发出卖出指令。在 `on_order_filled` 和 `on_trade_closed` 方法中,我们可以记录买入和卖出的价格,并在交易结束时计算盈利。 需要注意的是,这只是一个简单的示例,并没有考虑市场的实际情况。在实际应用中,我们需要结合更多的指标和数据,以及制定更合理的买卖规则。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT里的交易员

分享是一种快乐,打赏是一种肯定

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值