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

期货期权

算法交易

 
 
 

日志

 
 

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

2017-06-21 19:21:40|  分类: 量化交易 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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

一、首先看初步测试结果

  

具体的源码笔者会在下周的文章中展示

  

我们的测试要尽量地接近实盘交易,因此,我们把手续费设置为交易所手续费的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个品种中,只有玻璃、白银、黄金是负收益的,其余品种均是正收益的,每个品种的测试都比较良好,普适性基本过关。

六、参数检验和优化

  

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

七、总结

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

笔者水平有限,本文仅供程序化初学者或想学习程序化的交易者参考。部分观念可能带有一定的主观性和局限性,如果有不同意见或其他疑问,或者想要了解程序化的哪一块内容,欢迎大家在文章下方留言,笔者会尽可能地为大家解答。程序的具体源码分析和三种报单方式的具体讨论,笔者将在下周的文章中更深入地阐述。

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

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

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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