在前一篇程序化研究的文章中(点击查看前一篇文章),笔者初步介绍了一个在均线上方和下方加ATR形成两个通道的突破策略的简要开发过程,今天笔者更深入地来阐述三种报单方式和具体的源码分析。
一、三种报单方式的优缺点
在实际交易中,不同的报单方式对交易结果的影响有时是很大的,所以我们来分别讨论以下三种报单方式的优点和缺点。测试的条件按照前一篇程序化研究的文章中设置(点击查看前一篇文章),以下是三种报单方式的优缺点讨论以及以开盘价报单、以收盘价报单的部分源码。
1、以开盘价报单
螺纹钢指数2015年8月24日,以开盘价报单的开空信号
螺纹钢指数整体资金曲线(粗体红线)
全品种整体测试曲线
开平仓部分源码
优点:开盘如果跳空直接突破通道,可以立刻入场交易或立刻出场平仓,不需要等到整根K线走完,如果跳空高开后大幅高走或跳空低开后大幅低走,就能赚到这根大阳线或大阴线的利润。并且不会有信号闪烁的问题,程序在实盘运行的过程中不会产生反复开仓的问题。
注意:如果交易日线级别,开盘价是在开盘前1分钟集合竞价产生的,此时不能报单,要等连续竞价阶段才能报单,此时在代码中要做一定的控制。
缺点:如果开盘跳空向上突破通道之后,价格又回落到通道之下,此时以开盘价报单不能过滤掉这样的情况,开盘就报单交易了,可能会导致无谓的损失和消耗。并且,刚开盘时往往行情波动比较快,滑点冲击会比较大,可能发生报单不能成交的情况。
2、以收盘价报单
焦炭指数2016年9月26日至12月2日,以收盘价报单的开多和平多信号
焦炭指数整体资金曲线(粗体红线)
全品种整体测试曲线
开平仓部分源码
优点:有时价格在盘中向上突破了通道,但在收盘后又回落到通道之下,这时候用收盘价作为判断交易的条件和报单的方式,就在一定程度上起到了过滤的效果,减少不必要的亏损和消耗。同时,以收盘价报单更容易控制交易滑点,当价格刚突破通道的时候,此时往往会有大量做突破的单子涌入,造成价格的快速波动,所以相比以突破价报单,以收盘价报单滑点冲击会比较小,滑点相对比较容易控制。
缺点:在行情走势非常强势或弱势的时候,要等到收盘才交易,此时就错过了当天的大幅利润,甚至有时候收盘时已经涨停或跌停了,此时就再报单被成交的概率很小。同时,可能会存在有未来和信号闪烁的问题,造成来回开平仓的无谓消耗,此时就需要有比较好的编程能力,来对程序做进一步的精细化控制和处理。
3、以突破价报单
橡胶指数2016年9月19日至12月26日,以突破价报单的开多和平多信号
橡胶指数整体资金曲线(粗体红线)
全品种整体测试曲线
优点:在行情突破的第一时间立刻报单交易,而不需要等到收盘,当行情走势流畅时,可以多赚取突破价至收盘价这部分利润。
缺点:根据刚才的讨论,此时交易滑点会比较大,甚至会发生报单不成交的情况。并且,往往需要对报单的价格进行处理,增加了编程的复杂度。
二、程序源码分析
以突破价报单为例,我们来简单分析一下这个策略的源码,这个策略非常简单,整个代码只有30余行。
我们对其中要注意的几个细节来做一些讨论。
1、不要有未来函数,笔者的做法是,加上ref函数把价格往前推一根K线。
2、在计算开仓手数的时候,每个品种以10万资金的3倍杠杆计算,如果不足1手,则按1手计算,所以要用max函数在计算出的数值和1之间取最大值。并且,手数是一个正整数,所以对计算出的数值还要做取整处理。
3、在编写报单价格时,不能直接对通道价格直接报单,比如在开多或平空时,因为有可能开盘价直接跳空突破通道,所以首先要在开盘价和通道价之间取最大值。由于计算出的通道价往往不是最小变动价位的整数倍,所以还要用ceiling函数做往数值增大方向的取整处理,处理过之后的价格才能用于报单。在开空或平多时则相反。
三、总结
这个策略是非常简单的一个通道突破策略,但实际测试的效果良好,是一个值得继续深入研究的策略。对于程序化交易,笔者个人认为,最重要的还是要有思想和逻辑,然后用程序的方式表现出来,程序只是一个实现思想的工具。有很多交易者可能希望寻找到交易圣杯,但笔者个人认为,没有在任何行情中都能赚钱的交易圣杯,每个策略都有适应期和不适期。其实对一些经典的策略做深入的研究,然后根据自己对市场的理解,进行一定的改进,改进之后的策略或许就是个不错的可以用于实盘交易的策略。
笔者水平有限,本文仅供程序化初学者或想学习程序化的交易者参考,部分观念可能带有一定的主观性和局限性,如果有不同意见或其他疑问,或者想要了解程序化的哪一块内容,欢迎大家在文章下方留言,笔者会尽可能地为大家解答。
七禾网www.7hcn.com研究中心研究员 傅旭鹏
风险提示:投资有风险,本报告仅是个人观点,仅供参考,不构成投资建议。
联系客服