注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

拓空

为学日益 为道日损

 
 
 

日志

 
 

均线加通道,照样能赚钱:程序化研究之通道突破策略(转)  

2017-06-26 15:10:46|  分类: 程序化 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在程序化的交易策略中,有很多经典的交易策略,比如海龟交易法、Dual Thrust策略等,对这些策略进行深入的研究,然后根据自己对市场的理解对它们进行适当的修改,或许就能成为一个不错的可实盘交易的策略。今天,笔者再以刚开始学习程序化时研究过的一个简单的通道突破策略,来为大家演示一下一个程序化策略的初步开发过程。


一、首先看初步测试结果

均线加通道,照样能赚钱:程序化研究之通道突破策略(转) - stonee - 拓空
均线加通道,照样能赚钱:程序化研究之通道突破策略(转) - stonee - 拓空

 我们的测试要尽量地接近实盘交易,因此,我们把手续费设置为交易所手续费的1.5倍,并加1个最小变动价位的滑点。由于是日线级别,测试时间要足够长,我们选取的时间是2000年1月1日至2017年6月15日。测试的品种是所有流动性较好的国内商品期货指数合约。每个品种分配初始10万的本金,每次开仓的手数按照10万的30%仓位进行计算。对于以收盘价报单的方式,测试结果如上图。


通过初步的测试曲线可以看到,以收盘价报单的方式整体测试曲线比较良好。除了2011年,其余每年都有盈利。胜率接近35%,趋势策略的胜率通常不会太高,在30%~40%左右。平均盈利/平均亏损为3.3,这个比值是比较好的。在这个策略中,报单的方式还有以开盘价报单、以突破价报单,具体的三种报单方式,笔者会在下面的文章中详细讨论。


二、先有思想,再有策略


国内某位程序化交易高手始终主张大道至简的交易方式,但其中的“简”并不是“偷懒”的简单和简化,而是根据自己对市场本质的深刻理解,然后用最简单质朴的方式表达出来,这样往往会更加接近市场的本质。所以,我们在开发一个策略之前,先要确定思想和逻辑。


前一篇程序化研究的文章中提到(点击查看前一篇文章),期货市场的价格以趋势方式演变,如果我们能想办法抓住趋势,就能赚到这部分趋势行情的钱。那么,用什么方式来抓住趋势呢?比较简单的一种方法就是用均线。前一篇文章介绍的方法是,当前价格在均线之上即平空做多,当前价格在均线之下即平多做空,然后加入了一点过滤的条件,最终的测试结果良好。但是,有时候在震荡行情之中,价格会在均线上下来回跳动,此时就容易造成来回止损的问题。一个自然的想法是,能否对价格进行一定的过滤?我们使用的方法是,把均线看成是中轨,在均线上方和下方都加上一个通道,分别成为上轨和下轨,当前价格突破上轨即做多,当前价格突破下轨即做空,有持仓时,价格回到中轨即平仓。


三、把思想转变成量化规则


大致的规则定下来之后,还需要进一步地明确具体的细节。


1、交易的标的和品种


对于程序化策略,不少交易高手都比较重视普适性,一个策略最好在所有的品种上都要有比较良好的表现,因此,我们选取所有流动性较好的商品期货作为交易品种。那么问题来了,如何定义“流动性较好”?我们的规则是,某个品种的指数合约,日成交量大于等于5万手。


并且,为了保持行情的连续性,我们在指数合约上进行测试和发出信号,在主力合约上进行交易。


2、确定交易周期


对于一些思路简单的策略,在大周期上往往表现会比较好,在小周期上,由于K线走势的无序程度相对较大,并且由于交易次数的上升,滑点的成本和手续费会更大。因此,我们选择日线作为交易周期。


3、确定交易报单的价格


由于该策略是通道突破策略,所以我们暂且先选择当价格突破之后立刻成交,所以以突破时的实时价格作为报单价格。其他报单的价格我们在下面的文章中具体讨论。


4、设置交易参数


这个策略中,唯一的参数是均线的计算周期,我们设为N,由于是日线级别,我们把N暂时设定为30。


四、规则的程序实现


笔者使用的程序化交易软件是金字塔决策交易系统,类似的软件还有文华财经、TB等,编程能力比较好的投资者还可以自己编写平台进行交易。将交易规则逐一编写成程序,其中主要要注意三点:第一点、均线的计算方式我们是这样定义的:首先对最高价、最低价和收盘价求平均值,对这个平均值再来计算均线。特别要注意计算均线的时候不要有未来,也就是在测试的时候因为K线已经走完了,我们能看到完整的结果,但在实际交易中,价格可能是取不到的,或者信号是会闪烁的,所以要做一定的处理。第二点、在计算上下轨的时候,具体的方式是:在均线上方和下方分别加上一倍的ATR,ATR的计算参数和均线计算参数相同,并且为了简便起见,把ATR的计算方法简化为:首先计算出最高价和最低价的差值,然后对这个差值求算术平均值。计算的时候也要注意不要有未来。第三点、在编写报单价格的时候,如果用突破价即时成交,要注意不能直接对通道上下轨进行报单,否则会存在两个问题:一、上下轨的数值通常不是这个品种最小变动价位的整数倍,所以不能直接用于报单,要针对最小变动价位进行一定的处理,使得报单价格为最小变动价位的整数倍;二、可能开盘直接跳空突破通道,这时候不能依据通道报单,而要用开盘价报单。具体的源码笔者会在下周的文章中展示,感兴趣的读者可以先自己尝试着编写。


五、检查普适性


以收盘价报单,在测试的32个品种中,只有玻璃、白银、黄金是负收益的,其余品种均是正收益的,每个品种的测试都比较良好,普适性基本过关。


六、参数检验和优化

均线加通道,照样能赚钱:程序化研究之通道突破策略(转) - stonee - 拓空

 以收盘价报单。该策略中只有均线计算周期N一个参数,设置最小值5,最大值100,步长为1,优化结果如上图所示,横轴为参数值,纵轴为净利润率,可以看到参数大于20之后,整体曲线比较平缓,是一个平原地带,没有出现尖峰现象,该策略对这个参数的敏感度是比较低的,同时考虑到交易次数等,30可以作为参数。


七、总结


这个策略是非常简单的一个通道突破策略,但实际测试的效果良好,是一个值得继续深入研究的策略。对于程序化而言,个人还是主张大道至简,有了明确的思想和逻辑后,用最质朴简单的方式表现出来,这样往往会更接近市场的本质,也许很多时候会有意外的收获,我们不能轻易肯定一个策略,但也不能随意就放弃一个策略。在实盘交易中,我们要保持策略的一致性,做到完全不人工干预,对于一个正期望值的策略,做好资金管理,挺过艰难漫长的回撤期,就能迎来资金曲线的再创新高。






笔者初步介绍了一个在均线上方和下方加ATR形成两个通道的突破策略的简要开发过程,今天笔者更深入地来阐述三种报单方式和具体的源码分析。


一、三种报单方式的优缺点


在实际交易中,不同的报单方式对交易结果的影响有时是很大的,所以我们来分别讨论以下三种报单方式的优点和缺点。测试的条件按照上述文章中设置,以下是三种报单方式的优缺点讨论以及以开盘价报单、以收盘价报单的部分源码。


1、以开盘价报单

均线加通道,照样能赚钱:程序化研究之通道突破策略(转) - stonee - 拓空

 螺纹钢指数2015年8月24日,以开盘价报单的开空信号

均线加通道,照样能赚钱:程序化研究之通道突破策略(转) - stonee - 拓空

 螺纹钢指数整体资金曲线(粗体红线)

均线加通道,照样能赚钱:程序化研究之通道突破策略(转) - stonee - 拓空

 全品种整体测试曲线


均线加通道,照样能赚钱:程序化研究之通道突破策略(转) - stonee - 拓空

 开平仓部分源码


优点:开盘如果跳空直接突破通道,可以立刻入场交易或立刻出场平仓,不需要等到整根K线走完,如果跳空高开后大幅高走或跳空低开后大幅低走,就能赚到这根大阳线或大阴线的利润。并且不会有信号闪烁的问题,程序在实盘运行的过程中不会产生反复开仓的问题。


注意:如果交易日线级别,开盘价是在开盘前1分钟集合竞价产生的,此时不能报单,要等连续竞价阶段才能报单,此时在代码中要做一定的控制。


缺点:如果开盘跳空向上突破通道之后,价格又回落到通道之下,此时以开盘价报单不能过滤掉这样的情况,开盘就报单交易了,可能会导致无谓的损失和消耗。并且,刚开盘时往往行情波动比较快,滑点冲击会比较大,可能发生报单不能成交的情况。


2、以收盘价报单


均线加通道,照样能赚钱:程序化研究之通道突破策略(转) - stonee - 拓空

 焦炭指数2016年9月26日至12月2日,以收盘价报单的开多和平多信号

均线加通道,照样能赚钱:程序化研究之通道突破策略(转) - stonee - 拓空

 焦炭指数整体资金曲线(粗体红线)

均线加通道,照样能赚钱:程序化研究之通道突破策略(转) - stonee - 拓空

 全品种整体测试曲线

均线加通道,照样能赚钱:程序化研究之通道突破策略(转) - stonee - 拓空

 开平仓部分源码


优点:有时价格在盘中向上突破了通道,但在收盘后又回落到通道之下,这时候用收盘价作为判断交易的条件和报单的方式,就在一定程度上起到了过滤的效果,减少不必要的亏损和消耗。同时,以收盘价报单更容易控制交易滑点,当价格刚突破通道的时候,此时往往会有大量做突破的单子涌入,造成价格的快速波动,所以相比以突破价报单,以收盘价报单滑点冲击会比较小,滑点相对比较容易控制。


缺点:在行情走势非常强势或弱势的时候,要等到收盘才交易,此时就错过了当天的大幅利润,甚至有时候收盘时已经涨停或跌停了,此时就再报单被成交的概率很小。同时,可能会存在有未来和信号闪烁的问题,造成来回开平仓的无谓消耗,此时就需要有比较好的编程能力,来对程序做进一步的精细化控制和处理。


3、以突破价报单

均线加通道,照样能赚钱:程序化研究之通道突破策略(转) - stonee - 拓空

 橡胶指数2016年9月19日至12月26日,以突破价报单的开多和平多信号

均线加通道,照样能赚钱:程序化研究之通道突破策略(转) - stonee - 拓空

 橡胶指数整体资金曲线(粗体红线)


均线加通道,照样能赚钱:程序化研究之通道突破策略(转) - stonee - 拓空

 全品种整体测试曲线


优点:在行情突破的第一时间立刻报单交易,而不需要等到收盘,当行情走势流畅时,可以多赚取突破价至收盘价这部分利润。


缺点:根据刚才的讨论,此时交易滑点会比较大,甚至会发生报单不成交的情况。并且,往往需要对报单的价格进行处理,增加了编程的复杂度。


二、程序源码分析


以突破价报单为例,我们来简单分析一下这个策略的源码。这个策略非常简单,整个代码只有30余行。

均线加通道,照样能赚钱:程序化研究之通道突破策略(转) - stonee - 拓空

 我们对其中要注意的几个细节来做一些讨论。


1、不要有未来函数,笔者的做法是,加上ref函数把价格往前推一根K线。


2、在计算开仓手数的时候,每个品种以10万资金的3倍杠杆计算,如果不足1手,则按1手计算,所以要用max函数在计算出的数值和1之间取最大值。并且,手数是一个正整数,所以对计算出的数值还要做取整处理。


3、在编写报单价格时,不能直接对通道价格直接报单,比如在开多或平空时,因为有可能开盘价直接跳空突破通道,所以首先要在开盘价和通道价之间取最大值。由于计算出的通道价往往不是最小变动价位的整数倍,所以还要用ceiling函数做往数值增大方向的取整处理,处理过之后的价格才能用于报单。在开空或平多时则相反。


三、总结


这个策略是非常简单的一个通道突破策略,但实际测试的效果良好,是一个值得继续深入研究的策略。对于程序化交易,笔者个人认为,最重要的还是要有思想和逻辑,然后用程序的方式表现出来,程序只是一个实现思想的工具。有很多交易者可能希望寻找到交易圣杯,但笔者个人认为,没有在任何行情中都能赚钱的交易圣杯,每个策略都有适应期和不适期。其实对一些经典的策略做深入的研究,然后根据自己对市场的理解,进行一定的改进,改进之后的策略或许就是个不错的可以用于实盘交易的策略。


笔者水平有限,本文仅供程序化初学者或想学习程序化的交易者参考,部分观念可能带有一定的主观性和局限性。



七禾网www.7hcn.com研究中心研究员 傅旭鹏



  评论这张
 
阅读(62)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017