分享

股指期货日内交易:趋势追踪策略及实证研究

 停机保号 2012-07-25
趋势追踪日内交易策略优缺点优点:大波段几乎都能捕获到,并且较早产生买卖点。
  优点:获利交易收益较大,亏损交易损失控制较好,并且通过设置止损点,还可进一步改进。
  缺点:大部分平仓操作由反向操作引发,而不是由纯粹的平仓策略产生,导致交易成本和冲击成本吞噬很多收益。
  一、股指期货的程序化日内交易简介1、日内程序化交易简介日内交易是指由于某些证券品种(如股指期货、商品期货)具备T+0的机制,并且还可以卖空,从而允许投资者在一天之内多次买多、卖空、平仓。日内交易的一个特点是不留仓过夜,以规避下个交易日开盘时高开或者低开不确定性带来的风险。
  程序化交易是指将交易策略设计成计算机程序,通过计算机自动对行情价格序列进行判断来下单,而不再由人肉眼观察行情序列下单。程序化交易通常是用于日内交易的,这是由于日内交易数据频率通常以秒为单位,如果由人来操作的话会比较辛苦,也很难保证准确率。
  程序化交易与人工交易相比具有以下一些优势:
  1程序化交易能避免人的贪婪、恐惧造成的非理性。长期来看,坚持某一个策略能获得更高的收益,但是人的贪婪和恐惧很难避免,从而偏离原先的原则,而程序化交易则完美的执行了既定策略,因为它就是机器。
  2程序化交易能更快的下单。相对于人的反应来说,计算机判断的时间可以认为是0。
  在股指期货这样的价格瞬间变动迅速的市场上下单速度十分重要。
  3程序化交易可以方便的应用各种交易策略,也很容易检测一些策略是否有效,对于筛选优秀的交易策略是十分必要的。
  日内程序化交易基本只看技术分析,虽然也可以引入一些价值层面的参数作为变量,但是绝大部分日内程序化交易还是就使用一些图线形态和技术指标。常用的图形形态有头肩顶底、W底、M头、三角形整理;常用的技术指标有移动平均线(MA)、随机指数(KD线)、相对强弱指数(RSI)、移动平均值背驰指标(MACD)。这些指标在市场被广泛的应用,而这反过来更加强了这些指标的作用。
  2、程序化交易在国外的现状由于国外市场比较成熟,所以很多东西都可以作为我们国内市场的参考。以高频交易为例,统计显示,高频交易在纽交所交易量中占比一直稳定在70%左右,它是作为一种国际市场常用的交易方式存在的。而高频交易通常都会采用程序化的方式来进行,这是因为如果采用人为的盯盘,一方面人力有限,另外一方面,人的反应速度、情绪也会影响交易结果。
  在国外,交易商可以向交易所支付较高的信息费用来获取高频率的tick行情信息,甚至如大投行高盛可以将其服务器直接与交易所主机对接,而在高频交易中拥有提前数毫秒的优势。国外进行高频交易时,微型指令的频率上兆。交易指令的速度是毫秒级。客户从本地发出交易指令到高频交易商,再转发到交易所,延迟不超过30毫秒,为了保证这个速度,终端机一定要和交易所同位。
  从NYSE的统计数据以及CTA的数据显示,一般推出股指期货早期程序化交易策略以套利为主,后续会逐步过渡到股指期货投机交易。
  另外一方面,各国交易所基本都针对股指期货程序化交易有限制性条款,这是由于大量相似的自动化下单判定条件很有可能会因为某一个事件而被同时触发,从而导致市场的非理性上涨或者下跌。5月6日华尔街就上演了一出被怀疑是由程序化交易引发的"空中蹦极",短短几分钟道琼斯指数就从10600点下跌至9869点,下跌幅度近10%。
  3、国内股指期货日内交易机会从4月16日股指期货上市以来,除了第一天走势平缓之外,其余交易日波动都比较大,存在较多的日内投机机会。以5月12日的6秒数据为例:
  图1是一个典型的震荡上涨的交易日,蓝色的点A、E、I是较好买入点位置,但是我们可以看到在日内仍有很多的卖空机会,比如像红色的点C、G、H,其余黑色的点是比较理想的平仓的位置。股指期货像这样存在较大波动的交易日比较多,而像其他的单边上涨或者单边下跌的交易日就更加适合做日内交易了,所以不管是震荡行情还是单边行情,只要有波动,都比较适合做日内交易。
  二、交易策略逻辑1、数据的选择首先是数据的选择问题,这个主要是考虑以何种周期的数据作为分析对象。我们采用的是先提取某一日1秒数据到程序中存储好,每隔6秒提取一个价格组成价格序列。之所以这样做是为了能够方便的修改时间周期,当需要其他周期的价格序列的时候,可以非常快的实现。另外一个考虑就是方便考察产生买卖点之后价格的波动情况,方便考察冲击成本。至于具体的周期的选择,这个有比较大的随意性,但是这个对于交易策略的参数优化影响很大,不同的周期需要不同的优化参数,所以周期应该较早确定,不应轻易改变。
  2、如何模拟实盘在对交易策略的研究中有一个需要重点关注的问题是不能利用未来的数据来研究。这是因为我们在事后拥有交易记录之后很容易不自觉的利用所有的数据来研究交易策略,这样得到的结果跟实盘中只能获得历史数据和当前交易数据的情况差别很大。对于这个问题的处理主要有两种方法:
  第一种是每次来了新的价格就将历史价格和当前价格送入价格预处理子程序和交易策略子程序重新运行一遍,然后判定当前点是不是买卖点或者平仓点。
  第二种是将价格预处理子程序处理过的历史数据数组保存起来,每次来了一个新的价格序列不需要重新处理历史价格序列,而只需要由交易策略子程序对比处理过的历史数据数组和当前点,决定是否进行买卖平的操作,然后再将这个点加入处理过的历史数据数组。
  第一种方法主要是实现简单,逻辑清晰,但是当历史数据太多时运行时间会变长,而第二种方法主要是能节省程序运行时间,不过相对编码容易出错,在实盘中肯定需要用第二种方法,本文实验采用的是第二种方法。
  1)均线化
  因为行情的日内高频价格序列波动比较剧烈,看起来也几乎是杂乱无章的,所以我们为了捕捉趋势需要过滤掉一些干扰的噪声,均线是过滤微小扰动的一种常用的方式,而且也适合用于捕捉趋势。我们将A个连续的数据取均值,形成MA(A),在本文所作测试中A取为10,下文都称经过均值化的数据位MA(10)。由于采用的原始价格序列是6秒高频数据,所以均线化后的数据类似于60秒价格均值。如图4,以4月29日IF1005合约9点30分到9点40分10分钟的价格序列来看,经过均值化后的价格序列明显平滑了很多,不再像之前6秒价格序列那样波动剧烈。
  2)记录极值点
  极值点是局部的高点或者低点,在极值点处股价出现了转折,所以这些点是图形分析的重要点位,它们包含了重要的信息。判断极值点的方法也比较简单:浏览经过均值化的价格序列MA(10),如果股价上涨至此,接下来又下跌,那么这个点就是极高值点;如果股价下跌至此,接下来又出现上涨,那么这个点就是极低值点。这些点利用另外一个数组记录下来,它们是股价变化的关键点,以备进一步制定策略。
  3)过滤极值附近微小波动
  均线用于追踪趋势效果比较好,在形成趋势时能紧跟趋势,虽然略有滞后,但是在于用高频数据分析中,价格波动较多,均线也就摇摆不定,容易频繁发出交易信号,如图5第二个极值点的位置,虽然价格序列出现了转折,但是并不改变大的下跌的趋势。另外在高频数据中,很容易出现很多极值点连续出现的情况,这对于分析也是很大的干扰。所以我们必须对极值附近的点进行滤波。我们滤波的方法是,当股价形成一个极点E后,比如在接下来股价波动范围在E点价位正负0005元以内,我们就认为股价过滤微小波动后的趋势线和E点没有区别,这样我们就得到了过滤了极值点附近微小波动的均线趋势线filtered。
  我们选取4月29日IF1005合约某一时段均线后序列作为示例:
  4)高低点标记
  将极值点附近微小扰动过滤掉之后,有部分极值点会被过滤掉,如图中所示。这样需要重新标记以前的极值点,而且这次可以直接将高低点的具体信息也标记进去。这次的标记高低点需要注意价格序列很可能会出现连续的一条直线,所以标记的时候需要记录之前的趋势才行。所谓高点,在这里指的是当一个上升趋势结束,转为下降时的位置,同理所谓低点,指的是当一个下降趋势结束,转为上升时的位置。
  4、具体策略分析
  1)高低点比较策略通常人们判断趋势处于上升的理由是,当前低点比前一个低点要高,当前高点也比前一个高点要高。判断趋势处于下跌的理由是,当前低点比前一个低点要低,当前高点也比前一个高点要低。如果仅仅以高低点的比较去判断趋势的涨跌,这样的情况一天内会发出上百次而导致交易过于频繁。而且很多高低点之间的价格差距并不大,就是说,有时几乎没有上升,或者上升幅度很小却被判断为上升趋势;或者有时几乎没有下跌或者下跌幅度很小,结果却被判定为下跌趋势。我们需要一个度量上升和下跌速度的方法。所以必须引入时间这个变量。
  引入时间这个因素是基于这样的考虑:股价经过很短时间就有明显上涨和股价经过较长时间才上涨同样幅度,这显然是不一样的,时间短的上涨说明上升趋势比同样幅度上涨需要较长时间的更加明显。所以我们设置一个根据时间变动的附加项drift,来对简单的高低点策略进行完善。
  最后的策略分三种情况:
  建空仓策略:当前高点低于前一个高点,并且低于前一个高点减去附加的漂移项,这个漂移项等于shift*Time。其中shift作为整个策略的参数,可以进行优化和人工设置,而Time则是两个高点之间所经过的时间,在本文中就是经过了多少个6秒。
  建多仓策略:当前低点高于前一个低点一定幅度,这个幅度等于shift*Time,为了测试方便,这里将建多仓的shift参数和建空仓的shift参数设定为相同。如果对于大势走向比较明确,可以考虑将这个shift参数和建空仓的参数设置为不同,但是这样对于优化的工作量,会成倍增加。
  平仓策略:平仓分为多平和空平,但它们的策略都基本一致。以空平为例:如果当前高点处于前一个高点两条斜线之间则平仓,这两条斜线是从前一个高点引出的加减drift项射线。多平也是同样的思路。
  2)高低点突破策略
  行情中还容易出现另外一种典型的情况,以下跌为例,就是直接从一个最高点开始形成一个主跌段,但是并没有出现连续的高点。如果只用高低点比较的策略,就无法捕捉到此次卖空机会。高低点突破策略具体如下:
  建空仓策略:如果滤波后均线往下突破了前一个低点减去漂移项drift_down的延伸线和滤波后均线的交叉点,那么则认为在突破位置出现了一个卖空点。其中drift_down=downshift*Time,Time和高低点比较策略里面的值一样,dwonshift作为参数输入,这个可以设置为和shift一样,也可设置为不同。一般在下跌趋势比较明显的时候可以设为较小的值。
  建多仓策略:如果滤波后均线往上突破了前一个高点加上漂移项drift_up的延伸线和滤波后均线的交叉点,那么则认为在突破位置出现了一个买入点。其中drift_up=upshift*Time,Time和高低点比较策略里面值相同,upshift作为参数输入,可设置为与shift和dwonshift不同的值。一般在上涨趋势较明显时可以设为较小的值。
  平仓策略:多平的条件是三个:一是之前是多仓,二是当前趋势是向下,三是价格突破前一个低点的上面一条斜线。空平的条件也是三个:一是之前是空仓,二是当前趋势是向上,三是价格突破前一个高点的下面一条斜线。另外的一种平仓情况是,当持有多仓又直接遇到需要开空仓的条件,则先平仓再开空仓。持有空仓的情况类似。
  3)大波段保护
  如果股指期货经过了一个比较大的短期上涨或者下跌,那么有必要对其建立盈利保护机制,因为大涨大跌后容易出现大幅度的回调,所以需要对盈利头寸进行保护。这里采用的方法是利用高低点突破策略来保护盈利头寸。比如当前价格已经比上次低点出现后已经有05%的涨幅,并且出现了高点,也就是滤波后均线出现了拐点,那么就把低点上移到离高点一定幅度的位置,这样由于低点的改变,当下次进行判断的时候就会利用高低点突破策略的平仓策略保护好盈利头寸。
  三、实证检验与参数优化结果
  1、检验设定与参数优化检验假设每次买卖就买一手合约,这样可以简化冲击成本的测算,因为随着交易量的上升,冲击成本会显著上升。股指期货合约交易保证金为15%,再加上一部分维持保证金,所以资金成本按照合约金额的25%来设定。
  参数优化的样本区间是4月19日到5月10日的IF1005合约的6秒价格序列,我们以夏普比率为目标函数来优化参数,优化的参数包括如下:
  均线n滤波区间range普通漂移项shift上升漂移项upshift下降漂移项downshift大波段阀值wave大波段保护点wavecut下降漂移项经过优化比上升漂移项小一些,这是因为从4月19日到5月10日之间大市以下行为主,所以通过将下降漂移项设置的小一些来更容易触发卖空点。不过经过测试,其实将shift、upshift和downshift置为相同值,对测试结果也影响不大。
  2、交易成本与冲击成本交易
  成本中金所规定为合约金额的万分之05,期货公司一般收取万分之一,并且是双向收取。在本文之中采用万分之一,并且双向收取,也就是开仓、平仓均收取合约金额的万分之一。
  在交易策略的测试中,通常采用成交价格作为策略的买卖平仓点,但是在实盘交易中,由于并不一定能保证在理想价位成交,所以必须考虑冲击成本。
  冲击成本的估计比较复杂,详细的估算方法请关注随后即将推出的报告。本文中采用比较简单但是严格的冲击成本估算方法。通过对IF1005合约成交明细的分析,主要考虑买一价与成交价的差值,以及卖一价与成交价的差值,对差值取均值,发现一般来说成交价与这两个价的差距为02个指数点,所以将冲击成本设置为02个指数点,即不管建多仓、空仓还是平仓,均将成交价格往不利方向移动02个点位。举例来说,如果我们交易策略提示我们在下一个价格周期建多仓,而下一个周期(本文设置为6秒)成交价格为3000点,则将买入一手IF1005合约的价位设置为30002点,建空仓和平仓时的处理类似。由于没有考虑根据交易量来改变冲击成本,所以这个处理比较简单,但是有一定参考价值,具体的冲击成本测算请关注随后推出的专题报告。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多