QMT量化交易网格交易 源码
Posted qmtptrade
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QMT量化交易网格交易 源码相关的知识,希望对你有一定的参考价值。
想必大家在炒股的过程中都会遇到以下三个问题,第一个是股市大部分时间都是震荡的。
我们都知道,A股市场由于自身的特点,用通俗的话讲就是牛市来的比较快,熊市走的相对比较慢,盘整的时间占大多数,统计数字表明震荡的行情大概占A股市场80%的时间,
对于我们普通投资者而言呢,其实在大盘上涨期间,也就是牛市期间获取收益比较容易,
但是在这种震荡的行情,假如没有一个有效的策略,我们只能袖手旁观,很难去获取盈利。
第二个问题是,当我们买入了一个长期看好的股票,但是最后发现这个股票行情迟迟没有启动,然后股价一直没有上涨,这时候,我们大多数投资的资金都被占用,
股价一直涨涨跌跌。我们收益基本上为零。
在没有有效的交易策略应对前提下,
我们又不敢贸然去转战短线交易,因为短线交易风险相对比较高,然后就比较难以取舍。
第三个问题是,当我们看错一只股票,股票持续下跌,最后被套牢。
这个时候怎么办呢。对于大多数普通投资者而言。可能由于自身的局限性,
比如说我们的交易规则不够明确,侥幸和贪婪心理。股票上涨期间没有能够及时去止赢。然后股票下跌期间,却又不敢承认自己投资的失败,不忍割肉止损。这样就会导致股票被套劳,
然后自暴自弃所幸把这种股票从自选股里删除,眼不见心不烦。
对于这三类问题,我们在思考如何应对的同时,可以退而求其次去思考一个本质的问题,
就是股市中,我们的利润是怎么产生的?其实答案很简单,就是高抛低吸,也就是说,
我们买入的价格相对比较低,卖出的价格相对比较高,这样就产生利润。这就是股市获利的本质。那最理想的情况,其实是买在价格最低的位置,然后卖在价格最高的位置。但是,这只能是一个理想状态,没有人能够做到。现实一点的策略是我们可以在价格相对的一个低点买进去,然后在价格相对高点卖出。有没有这个本质问题现实一点的策略呢?
就是我们今天要讲的网格交易策略,它的基本原理,就是我们提前做好一个比较明确、定义比较比较严格的交易计划,在股票下跌的时候,分批买入。在股票上涨的时候,分批卖出,以这种网格交易的方法或者明确的交易规则,去捕捉价格上下波动带来的价差收益。
网格交易主要的应用场景是震荡的行情。
网格交易的作用,正好解决了以上三个问题。第一,它可以对于我们被套的股票,逐步减少亏损,最后甚至扭亏为盈。第二,对于我们长期看好的股票,迟迟没有启动行情的,我们可以用网格交易,去减少持仓成本,最终等这个行情启动后,获取比较大的盈利。
第三,
对于想做短线交易的投资者朋友。在震荡的行情中间,用这种比较严格定义的网格交易策略去做短线交易,可以有效的帮助我们去捕捉价格波动带来的投资机会,从而去获利。
我们结合一个具体的例子来看一下。假设我们在股票价格为10元的时候持有一只股票,或者说10元建仓买进5万股股票,然后,随着行情的波动,我们制定了一个严格的网络交易计划。这个计划是当价格每跌0.1元,买进5000股,每涨0.1元,卖出5000股,我们来看一下,随着后续行情的变化会产生怎么样的交易过程,首先,当股票价格第一次跌到9.9元的时候,我们第一次买进5000股,这个时候总的持仓达到了55000股,然后,股票价格进一步下跌,来到9.8元,也就是B2。
这个时候,按照计划,再次买入5000股,持仓来到了6万股。之后随着股票价格反弹,大家可以看一下它的价格先后来到9.9元、10元。最后,跑到10.3元,这个时候按照交易计划,就得进行连续的卖出。每次卖出5000股,所以他的持仓最终来到了35000股。
之后股票的价格再次发生了下跌,跌到了10元,这样一段时间之后,价格有涨有跌,最后重新回到了10元。我们又按照原有交易计划进行了连续三次买入。
回顾整个交易过程,其实我们持仓没有发生变化。我们初始持仓5万股,最终的持仓还是5万股,在这样一个波动的一个行情中,我们使用网格交易,产生了五次买入交易。还有五次卖出交易,也就是五对买卖。抛开手续费,粗略的去估算这五对买卖交易,最终产生的盈利,是0.1乘以5000乘以5,等于2500元。我们也可以说网格交易的方法使我们盈利了2500元,或者使我们的持仓,比如50000股的持仓成本降低了2500元。
了解了网格交易的基本原理后。接下来我们一起来看一下,具体策略开发层面,
网格交易还需要考虑哪些因素?刚才的例子其实使用的是我们最常见的网格交易方法。
叫等分网格交易法。所谓的等分网格交易法,就是以基准价为中心。往上往下等距离撒网,每上涨固定金额,卖出固定数量股票。每下跌同等金额,买入同等数量的股票。这样的一种网格交易,
就称为等分网格。等分网格,除掉交易费率,每一对买卖交易,获得网格值乘以买卖股数的盈利。
经过前面的例子介绍,大家可以发现,其实在进行具体的策略开发之前,需要确定五个参数,第一个,就是要确定交易标的,也就是要交易的股票。
什么样的股票适合去做网络交易,或者说我现在持有的底仓。什么时间适合进行网格交易,这是需要考虑的第一个因素。
第二、上一个例子中也讲到我们以10元为基准价进行网格交易,那这样一个基准价应该怎么选择,怎么设置,或者说我没有底仓的时候,我该怎么样去进行建仓。
第三、在我们刚才的网络交易的例子中,大家可以发现,我把价格上涨1元或者下跌0.1元,然后进行买卖。这个0.1元,就叫做网格的格值,或者叫步长,那这样一个步长该如何设置呢?
第四、是我们每一次交易的数量,刚才的例子是5000股;第五,可能细心的朋友会发现。我们网格交易的策略还是有一定潜在的风险,就是当股票出现极端行情的时候,比如连续上涨或连续下跌,我们该怎么操作,连续下跌的时候,每跌一个格值我们就买,最后把所有的资金都买进去了。这样显然是对交易来讲是不利的。当股票行情上升的时候,连续卖出,有可能把底仓给卖飞了,这样我们就不能继续获取股票价格上涨带来的盈利机会,所以网格交易策略要应对这种情况,有对应的一个参数,叫做持仓上下限的设置。
简单来说,就是当股票价格下跌,我们连续买了几次达到我的持仓上限的时候,就不再买入。当股票价格连续上涨,我们连续卖出几次之后达到持仓下限。就不再持续卖出。
具体来说。第一,对于股票的选择,就是使用什么样的股票进行网格交易策略。主要考虑的因素有四点。一,最好是近期市场,或者说个股,属于震荡行情。
我们可以从市场,或者股票过去一个月,或者过去两周的表现。来粗略的参考,最好这个时候处于震荡行情,因为网络交易,最适合的就是震荡行情。第二,我们选择的的股票,它的波动率尽量大一点,然后处于震荡市场,是我们进行网格交易最好的条件。
其次,我们进行网格交易的时候,当我们没有底仓,我们尝试先去建仓,然后再进行网格交易,这个时候对股票的选择要额外注意。我们最好选择绩效好、长期看好的股票,这样股票的投资风险从一定程度上能得到控制。
市场里有一个投资品种,叫做指数基金,比如50ETF,这样的指数基金,它对应于一篮子股票。指数基金其实有助于分散个股的风险。另外,ETF交易的费率相对比较低,拿ETF去做网格交易是比较适合的品种。
第二个参数。是基准价的选择。做网络交易可能有两类人。第一类,是已经持有股票底仓,然后持有的股票行情在最近一段时间波动比较明显,属于震荡的市场,我们用持仓的股票去做网络交易,它的基准价。通常我们的选择都是最新价。当我们没有持仓的时候,我们尝试去买入建仓一个股票,去进行网格交易,这个时候我们可以去参照这个股票过去一段时间的表现,比如过去30天最高价、最低价的平均值作为我们买入股票建仓价格的参考。尽量避免高位价格,价格在高位的时候去建仓,这是我们网格交易里面比较不利的一个因素,也需要大家的注意。
第三个方面就是网格交易的步长,还有每笔交易数量。通常会有五种选择。第一种,我们可以根据一些使用惯例,去进行设置,网格交易,有1/10,或者2/20的原则。什么意思呢?就是指我们在设置步长的时候,可以把基准价的1%或者2%设为步长。然后把持仓或者底仓的10%或者20%作为每一笔的交易数量。
举个例子,基准价为10元,然后持仓有50000股。进行网格交易按照1/10或者2/20的原则,就可以设置步长为0.1元或者0.2元。然后每笔交易的数量为5000股或者10000股。
第二种,我们可以根据历史的行情,比如说过去30天。股票最高价还有最低价去确定网络交易的区间,正常情况下,我们根据历史价格作为参考,股票大概率未来一段时间还在这一区间内震荡。
第三种,根据过去十天的平均波幅,或者真实波幅ATR,以及网格的数量,去确定步长,比如网格数量为10,则步长为ART / 10。
除了考虑网格交易的步长以及每次交易的数量,我们还需保证每次交易的收益要大于成本,这样做网格交易才会有意义。另外我们还可以根据网格的数量,以及每次交易的数量来计算持仓的上下限。
接下来,我们给大家分享一个具体的网格交易策略的整体思路。首先,第一步,选择交易品种,就像之前介绍的那样,选择一个ETF,这里我们选择沪深300ETF,代码是510300。
第二步,建仓,刚才我们也讲过,对于网格交易,如果用新建仓的股票去进行网格交易的话,希望能有一个好的建仓位置,这样对于做网格交易是有利的。因此这里使用了一个简单的均线多头排列策略去开仓。当行情满足均线多头排列的时候,买入。初始买入60%的资金,因为一会要进行网格交易,因此我们预留了40%,保证后续有足够的资金去进行网格交易。然后开仓的价格作为网格交易的基准价。
第三步,步长的选择,我们以基准价的1%为步长,熟悉指数基金的朋友可能会了解,沪深300ETF的波动范围相对来讲会小一点,然后,所以我们选择1%为步长。当然,步长的数值在后续策略可能会调整,或者针对不同的交易品种,这个参数也都可以去改变。
第四步,交易数量的选择,我们拿建仓数量的10%作为每笔网格交易的数量。我们设定网格数目为10,也就是围绕基准价上下各五个网格,超过网格线范围以外,也就是上下五个网格线之外,就不做网格交易。也是作为持仓上下限的一个限制条件。
接下来我们具体来看一下最终的网格交易策略。也是我们接下来写量化交易策略的思想。首先根据基准价,在刚才讲的策略里就是开仓的价格,
还有1%的步长去计算上下五个网格线的价格。
拿刚才讲的例子,基准价是10,然后步长是1%,则往上的网格线价格为10.1,10.2,10.3,10.4,10.5。然后往下按同样的方法计算。
第二步,我们计算每个价格区间,网格策略应该有的持仓数量。我们举例说明。大家可以看到当价格处于10-9.9元的时候,初始的持仓是50000股,当股票下跌的时候,比如下跌到9.95的时候,因为没有跌破网格线,因此不会买卖,持仓数量是不变的,还是5万股。
然后,但是当价格跌到9.9到9.8这个区间的时候,目标仓位应该是5万股加上买入的5000股,目标仓位应该是55000股。这里还有跟大家额外说明的是,相同的价格区间,价格上升和下降,目标仓位是不同的。什么意思呢?大家可以看一下,当价格在10到10.1元,上涨的时候,还没有突破10.1元,那目标持仓其实还是5万股。但假设价格从B4价格降到B3,还没有突破B3的时候,大家从图中可以按到,目标仓位是45000股,
就是价格下降需要买入的时候,目标持仓比价格上涨应该进行卖出的时候,少了一次交易的数量,这里是5000股。这里大家需要注意。
当我们计算好每一个价格区间里面,上涨情况和下跌情况对应的目标持仓后。接下来,我们就获取当前持仓,然后去计算相对于目标持仓,应该进行的调仓数量。
然后第四步,去判断这个调仓数量是否大于0,大于0其实就是触发了网格交易条件,然后对应的进行相应的买卖操作,买入或者卖出调仓。总体而言,策略的思路就是这样,随着行情数据的更新,获取股价在哪个区间,判断价格上涨还是下跌,获取底仓,计算需要调仓的数量,然后进行实际的买卖操作,这是一个循环的过程。
QMT策略编写如何优雅地调教QMT量化平台编写量化策略(使用notepad++pycharmvscode等外部IDE编写量化交易代码)
如何优雅地调教QMT量化平台编写量化策略(使用notepad++、pycharm、vscode等外部IDE编写量化交易代码)
前言
很多人开通了迅投QMT量化平台,可是进入编辑器界面,写python代码,那种感觉如同回到了原始时代,连调试代码最常用到行、块注释这么简单的操作都能把人整疯。想让迅投QMT即刻修改编辑器,一时半会儿也不现实。那么有没有一种方法?可以使用外部的编辑器编写,在迅投QMT里运行,不也鱼与熊掌可兼得了吗?
经过笔者孜孜探索,还真找到了一个方法,其实也很简单。就是坑有几个,不过我都填上了。
提示:以下是本篇文章正文内容,其中代码为QMT默认自动生成,这里拿来仅作演示,不可用于实盘。
一、先搞清楚QMT的安装目录
假设我的QMT安装在 D:\\gszqqmt\\,打开这个目录,下面3个目录对我们python代码书写比较重要。
- bin.x64 :这个我们很熟悉,她是我们安装python环境的地方,其下的
D:\\gszqqmt\\bin.x64\\Lib目录安装了自带的各种包,如果我们需要安装第三方包,则安装在D:\\gszqqmt\\bin.x64\\Lib\\site-packages下; - mpython :这里是我们的QMTmini 量化策略的存放位置(这个不是今天主角,可以先不管);
- 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里直接编辑,直接运行,直接交易的方法。
以上是关于QMT量化交易网格交易 源码的主要内容,如果未能解决你的问题,请参考以下文章
自己做量化交易软件(44)小白量化实战17--利用小白量化金融模块在迅投QMT极速策略交易系统上仿大智慧指标回测及实战交易设计
自己做量化交易软件(44)小白量化实战17--利用小白量化金融模块在迅投QMT极速策略交易系统上仿大智慧指标回测及实战交易设计
自己做量化交易软件(44)小白量化实战17--利用小白量化金融模块在迅投QMT极速策略交易系统上仿大智慧指标回测及实战交易设计