程序化交易:从策略设计到实盘交易
报告要点
? 趋势还是策略?
根据我们的测算,在国内市场单纯的趋势策略和单纯的反转策略都不是好的策略,都面临适用性不高,可能出现长时间亏损的情形,因此建议是开发兼顾的策略。
? 回测买卖点与实盘买卖点差异的来源
由于各家数据商都是从中金所拿到0.5秒推送一次的tick data ,然后按各自的规则组合成不同周期下的行情报价。组合规则的差异会造成同一品种在不同的行情终端上报价不完全相同。
通信过程中数据包的丢失会造成同一品种在相同数据平台的不同终端上接收到的行情出现偏差。
策略回测在既定的周期里每个周期计算一次相应参数,实盘运行则是每次有新的行情推送过来就重新计算一次,即每分钟计算120次,这就有可能造成信号出现又消失,或是信号反复出现的情况,需在策略中设置相应的应对措施。 ? 止损点的设置
基于收盘价设计的静态策略较少考虑到上下影线中的某一个价格触及止损价、收盘价却收在止损范围之内的情况。实盘中一触及止损线便立即止损的做法会造成策略实际收益与模拟收益差距过大。建议根据收盘价和即时行情分别设立不同的止损点,在一般走势下的急拉急跌中暂缓止损,在极端行情下的暴涨暴跌中立即止损。 ? 日间跳空对日内交易策略的影响
日间跳空引发的开仓至少在现货开盘前亏损的概率极小,采用日间连续数据计算交易信号对策略收益影响不大。 ? 主力合约的同步切换
主力合约为当日成交量最大的合约,但日内交易需要在开盘之时便选定交易标的,而不能等到收盘成交确定后才后知后觉地发现“移仓”已经完成。一般来说,当下月合约持仓量与当月合约持仓量数量级相等、最高位数字相同的时候,在下一个交易日主力合约便会由当月合约切换至下月合约。
图:程序化交易流程图
数据来源:长江证券研究部
相关研究
《股指期货带来的获利机会系列之一:股指期货套利空间研究》 《关于高频交易的几点认识》
《算法交易策略的研究——利用趋势跟踪技术》
分析师: 俞文冰 021-******** yuwb@https://www.doczj.com/doc/2c3518547.html,
执业证书编号:S0490510120020
联系人: 俞文冰 021-******** yuwb@https://www.doczj.com/doc/2c3518547.html,
执业证书编号:S0490510120020
股指期货研究
金融工程
股指期货带来的获利机会系列之二
2011-05-06
正文目录
一、程序化交易——从Matlab到交易系统 (3)
二、趋势还是震荡? (4)
三、实盘买卖点与静态策略设计买卖点差异的来源 (7)
1、数据提取规则不同造成的原始数据差异 (8)
2、数据传输出错造成的终端数据差异 (8)
3、行情实时推送导致信号反复 (9)
四、止损点的设置 (9)
五、日间跳空对日内交易的影响 (11)
六、主力合约的同步切换 (12)
图表目录
图1:程序化交易流程图 (3)
图2:主力合约价格波动范围和趋势指数 (4)
图3: 2011年4月13日,震荡策略下持有头寸为盈利状态,平稳转趋势 (5)
图4: 2011年3月25日,震荡策略下持有头寸为亏损状态,止损转趋势 (5)
图5:2011年4月6日,趋势策略下持有头寸为盈利状态,平稳转震荡 (6)
图6: 2011年4月12日,趋势策略下持有头寸为亏损状态,止损转震荡 (6)
图7:IF1103合约,2011年3月15日多空信号 (7)
图8:IF1104合约,2011年3月18日多空信号 (7)
图9:不同数据源一分钟收盘价价差(IF1104,2011-3-21) (8)
图 10:交易平台实时下载和盘后下载的数据价差(IF1104,2011-3-21) (9)
图 11:IF1104合约,2011年4月8日10:19交易价格 (10)
图 12:IF1012合约,2010年11月23日14:27交易价格 (10)
图 13:期指跳空幅度和期货收盘时期指的涨跌幅 (11)
图 14:日内高低点出现的时间 (12)
表1:不同数据源下的一分钟价格比较 (8)
表2:不同幅度的开盘跳空在特定时刻回补的概率 (11)
表3:不同幅度的开盘跳空和期指在特定时刻的涨跌概率 (12)
金融工程
一、程序化交易——从Matlab到交易系统
在我们的报告《股指期货套利空间研究》中提到,股指期货的期现套利收益率比较有限,
而且基差的预测需要技巧;而跨期套利缺乏机制上的收敛保障,同样面临基差的判断。
在这样的背景下,有一些投资者直接把眼光投向了股指期货的交易,毕竟股指期货的
T+0交易,杠杆优势,流动性高以及多空双向使它成为证券市场最适合交易的标的。而交易
中,又有人工判断和程序化交易两种。
在摸索程序化交易的过程中,我们发现很多问题并不是想象中那么简单,程序化交易也
不是用Matlab对高频数据做一下实证研究就能做好的,本文将探讨高频程序化交易的一些
感触。
图1:程序化交易流程图
数据来源:长江证券研究部
从图1中我们看到,整个程序化交易的流程有很多不断尝试和修正的步骤,而其中的
第一步是选择交易平台。
在交易平台的选择中,我们首先要根据策略的类型进行一个初选,单边投机交易只需支
持系统交易的平台即可,而套利交易则需考虑该平台是否支持跨市场交易(期现套利),以
及是否支持跨品种监控(跨期套利)。
在初步筛选出可采用的交易平台后,下一步便是根据交易者的交易策略选择适合的平
台。如果已有现成的静态交易策略可以使用,则需比较待选的交易平台和设计策略时所用的高频数据源数据的一致性,选择差异最小的即可。如果交易策略八字还没有一撇,我们建议选择一个稳定可靠易上手的交易平台作为切入点,在刚开始进行程序化交易的时候把精力集中在策略设计而非IT实现上。
我们平时使用的交易系统为交易开拓者和龙软DTS。仅就这两个交易软件来说,前者较为简单易懂,适合初次接触程序化交易的人使用,但就目前为止正式推出的V3版本来说,对在其平台上可交易品种,它不支持的跨品种的计算;对不可在其平台上交易的品种,它不支持外部API接口,无法取得现货行情,不能进行套利交易,而且软件的稳定性较差。后者功能强大,可以对现有的所有交易品种进行监控,但上手比较困难,在交易开拓者中集成的一些功能,如下单不成功可自动撤单并重新下单,需要使用者用API自行编制。
二、趋势还是震荡?
现有的交易策略多是泾渭分明地分为趋势策略和震荡策略。从本质上说,前者属于高买低卖的追涨杀跌型操作,后者属于高卖低买的价值回归型操作。一般来说,在某一个时点上,两类策略给出的操作信号通常方向相反,所以单一策略很难在趋势和震荡两种行情下都持续获利。
一种常见的趋势策略为双均线策略,当短期均线向上突破长期均线时开多仓,反之则开空仓。参数较大的双均线策略适用于趋势行情,包括单边走势和V型反转。
一种常见的震荡策略为布林线策略,当K线运动到布林线下轨时开多仓,运动至布林线上轨时开空仓。若股价收益为正态分布,可以认为在布林线宽度为2倍标准差时股价运动会以95%的概率在布林线的上下轨内运动。布林线策略多适用于走平的震荡。一个纯粹的趋势策略会在震荡行情中亏损,一个纯粹的震荡策略会在单边趋势中亏损,而交易者无法在开盘前就事先得知当天的走势性质,在收益上则体现为交易策略的不稳定。我们以主力合约(当日成交量最大的合约)为标的统计了2010年4月19日至2011年3月31日每日的价格波动范围,并定义:
趋势指数=当日收盘价与开盘价之差的绝对值/当日最高价与最低价之差
我们希望用这个指数对于日内走势进行一个笼统分类。
图2:主力合约价格波动范围和趋势指数
数据来源:天软科技,长江证券研究部
金融工程
在我们考察的231个交易日中,有150个交易日最高价与最低价之差超过了50个点,
这表明期指市场波动幅度较大,日内交易有相当大的获利空间。但其中只有31个交易日的
“趋势指数”高于0.8,即期指呈单边走势的交易日占总交易日的13.4%,这在一定程度上
表明纯粹的趋势策略胜率不佳,而纯粹的震荡策略的胜率相对较大。
但“胜率相对较大”的纯震荡策略在在单边行情下的损失情况如何呢?我们以这31个
“趋势指数”高于0.8的交易日的走势对其做一个粗略估计。假设交易者在当日最高价上开
了空头,在当日最低价上开了多头,然后在价格运动到以开盘价为中轴的开仓价位的镜像价
位时反手。如果当日开盘价为3200,单边下行的趋势中全日最高点为3215,则交易者将在
3215点开空头,并在价格运动到3185时平空翻多。以这31个交易日为统计期,在不考虑
止损的情况下,震荡策略在单边行情中亏损会达到2803个指数点。
我们的折中选择是把趋势策略和震荡策略混搭,根据走势的发展由交易系统自动选择趋
势策略或是震荡策略。
由震荡策略切入趋势策略的准则有二:一是在震荡策略下,若持有头寸为浮盈且持续创
新高达到一定时间,则转入趋势策略;二是在震荡策略下,若持有头寸浮亏达到一定程度,
则止损反向并转入趋势策略。绿色箭头所指为策略转换处。
图3: 2011年4月13日,震荡策略下持有头寸为盈利状态,平稳转趋势
数据来源:交易开拓者,长江证券研究部
图4: 2011年3月25日,震荡策略下持有头寸为亏损状态,止损转趋势
数据来源:交易开拓者,长江证券研究部
策略;二是在趋势策略下,当浮亏达到一定程度时,止损转入震荡策略。绿色箭头所指为策略转换处。
图5:2011年4月6日,趋势策略下持有头寸为盈利状态,平稳转震荡
数据来源:交易开拓者,长江证券研究部
图6: 2011年4月12日,趋势策略下持有头寸为亏损状态,止损转震荡
数据来源:交易开拓者,长江证券研究部
当然,在策略的切换中,止损点如何设置就非常需要技巧。既要能兜住在一般震荡行情下在走势的中段开仓后,走势往原方向继续运动带来的浮亏,又要能在震荡行情发展为趋势行情时及早止损反向。如果在一段趋势的前段用震荡策略平仓并反向,若止损点设置不合适,就很可能在在趋势即将结束的时候才止损反向从而割到了地板上,如图五中箭头所指处。
而对于某一个具体的交易日,这套交易策略是适用还是不适用,就只能看运气。一个近期较为理想的操作出现在日本核爆引发市场恐慌下跌的2011年3月15日,交易标的IF1103:
金融工程图7:IF1103合约,2011年3月15日多空信号
数据来源:交易开拓者,长江证券研究部
绿色向下箭头为开空仓;绿色向上箭头为平空仓;红色向上箭头为开多仓;红色向下箭
头为平多仓。当日总盈利为41660,其中多头操作贡献盈利14410,空头操作贡献盈利
27250,总交易次数10次,胜率为70%。
当然我们依然不能奢望万能的系统,尽管我们可以找到适合大多数交易日的参数,但仍
不可避免地会出现默认参数对市场走势完全不适应的交易日,如2011年3月18日,交易
标的IF1104:
图8:IF1104合约,2011年3月18日多空信号
数据来源:交易开拓者,长江证券研究部
交易策略的设计只是第一步,当然也是最重要的一步,这些模拟都可以通过天软(或者
其它高频数据渠道)+编程(通常Matlab)来完成,每个有志于此的青年也可以编写出自己颇为
得意的一套交易策略。但是这只是程序化交易的开始,当我们离开了静态高频数据+数学软
件,进入交易系统,Welcome to the real wooooorld!
三、实盘买卖点与静态策略设计买卖点差异的来源
进入交易系统后,我们发现的第一个问题是,用数学软件测算的买卖点和交易系统上改
写的交易程序产生的买卖点是不同的,这主要由以下原因造成:
1、数据提取规则不同造成的原始数据差异
我们在实盘中发现,不同的交易平台在同一时刻推送的行情不一致是导致盘中买卖点不
同的最主要原因。虽然各交易软件商和数据商都是的数据源都是中金所,但各家拿到的都是
0.5秒发送一次的tick data,然后自行提取为更长周期下的数据。不同的提取规则可能是导
致各家数据不一致的最主要原因。我们以Wind为基准比较了龙软DTS和交易开拓者的数
据一致性,下图中是2011年3月21日IF1104合约两个交易平台上给出的一分钟收盘价与
Wind的价差的频数统计图:
图9:不同数据源一分钟收盘价价差(IF1104,2011-3-21)
数据来源:Wind资讯,交易开拓者,龙软DTS,长江证券研究部
从图五看来,交易开拓者与Wind的提取规则较为接近,而龙软DTS与Wind的提取规
则则差异较大。基于此种原因,我们认为最优的选择是在策略设计之初便应选定交易平台,
最不济也应在策略设计完毕选择交易平台之时,先对比不同平台上数据的差异程度再做选
择。此外,在交易平台选定之后,若非必要,不要轻易更换,不同的数据提取规则可能会导
致同一策略在不同平台上的收益相差较远。
2、数据传输出错造成的终端数据差异
导致实盘交易和回测交易买卖点不同的另一个原因是同一平台在同一时间给出的价格
也不完全一致。此种差异可能源于数据传输过程中的通信问题而造成客户端接收到的行情与
真实行情出现偏差。在我们平时所用的交易开拓者和龙软DTS中,IF1104合约在2011年
3月21日9:21分给出的价格与两大数据提供商Wind和天软给出的价格对比如下:
表1:不同数据源下的一分钟价格比较
开盘价最高价最低价收盘价交易开拓者3240.6 3288.03240.6 3258.8
龙软DTS 3234.6 3273.0 3234.6 3260.0 Wind 3241.2 3274.0 3241.2 3258.8
天软3244.0 3288.0 3244.0 3259.0 数据来源:Wind资讯,天软科技,长江证券研究部
金融工程
虽然中金所网站上并不会公布一分钟最高价,所幸的是这一分钟的高点也是全日的最高
点,而全日的最高价是3288.0。Wind全日最高价也是3288.0,这个差异只是由数据提取规
则不同造成,但龙软DTS的全日最高价却为3273.0。
但同一交易平台上频繁出现较大的价差就颇让人费解。下图是交易开拓者上IF1104合
约在2011年3月21日一分钟收盘价在两台电脑上下载到的数据的差异,其中一台电脑是
实时下载最新行情数据,另一台是在收盘后将数据一次下载完毕。只有43.7%的数据完全一
致,29.3%的数据差异为0.2个点。
图 10:交易平台实时下载和盘后下载的数据价差(IF1104,2011-3-21)
数据来源:交易开拓者,长江证券研究部
此外在选择交易平台的时候还需要注意软件的稳定性,在测试交易开拓者的过程中,我
们经历过不少于3次的程序卡壳或行情断开,这对高换手的日内交易策略的影响有多大取决
于你的运气有多坏。
3、行情实时推送导致信号反复
刷新频率不同可能造成回测收益和实际收益不一致。在策略研究中我们用的数据为一分
钟收盘价,实盘交易中期指合约的行情每0.5秒刷新一次。现有的交易平台多为数据每刷新
一次便重新计算相应的策略参数,而这就有可能导致在同一根K线上反复开平仓。以最简单
的单均线交易策略为例,如果一分钟周期下的K线上影线较长却收了个长阴线,若原有头寸
方向为空头,在策略研究中以收盘价计算的买卖信号可能是持仓不动。但在这一分钟内推送
过来的120个数据中,可能已经有某个位于开盘价和最高价之间的价格触发了空翻多的条
件,之后价格走低,开盘价与最低价之间的某个价格触发了多翻空的条件。这一多一空两笔
操作之后,持有头寸方向不变,却徒损失了两次开仓点之间的点位。
若在策略设计时是以一分钟收盘价为基础,在实盘操作中,宜等待这一分钟内的120
个tick data推送完毕、一分钟收盘价确定下来,再用其作为计算的基础,并延迟到下一分
钟K线下单。在行情平稳的情况下,下一分钟的开盘价与上一分钟的收盘价差距甚微,此种
操作方法可在保证实盘操作的买卖点与策略设计中的买卖点差距最小。
四、止损点的设置
在不同频率的行情上,也会涉及到止损的问题。
如果交易策略是基于一分钟收盘价设计的,交易者在设计之时可能会忽略的一个地方是盘中的最高最低价对策略的影响。比如在2011年4月8日10:19这一分钟上以开收盘价计是跌去了11个点,但以最低价计则是一度跌去20个点。如果交易者在10:10之前做多,且至此时未平仓,则浮盈已回吐了24个点,以最低价计则是一度回吐了33个点。如果交易者的止损价位是设为浮盈回吐30个点后即时止损,则在这根K线的下影线上会触发止损单,但基于一分钟收盘价计算的浮盈回吐则不会触发止损单。所以我们建议在计算实时亏损时与静态的策略设计保持一致,如果在样本内没有考虑上下影线对策略的影响,那么在实盘中也就只考虑基于收盘价计算出来的盈亏,毕竟期货盘中突然拉起来或砸下去较多见,却鲜有能持续的。
图 11:IF1104合约,2011年4月8日10:19交易价格
数据来源:交易开拓者,长江证券研究部
不过,凡事皆有例外,IF1012合约在11月23日14:27~14:28这两分钟收了个期指开市以来最气势恢宏的两根大阳线,多头在这两分钟内分别拉升了58个点和23个点。对这种有预谋的屠杀,我们建议交易者设置双层止损机制,一是基于收盘价计算的止损点,二是基于实时行情计算的止损点,后者应高于前者,数值大于一般走势下的长上下影线,在满足两个条件之一时及时止损,以达到即不被一般的突发走势打出止损单,但又能在这种极端走势下及时撤退的效果。
图 12:IF1012合约,2010年11月23日14:27交易价格
数据来源:交易开拓者,长江证券研究部
金融工程
五、日间跳空对日内交易的影响
在一分钟频率上的开盘跳空较为常见,但大幅跳空对交易策略影响颇大。仍以双均线策
略为例,若开盘便上跳空20个点,在以日间数据计算买卖点的交易策略下,毫无疑问会触
发开多仓的信号。在使用连续数据作为计算基础的交易策略里,跳空引发的开仓操作是否有
意义?如果答案是否定的,则在做日内交易时宜只以当日数据作为计算基础。我们对2010
年4月19日至2011年3月31日这段时间内主力合约的交易数据做一个简单统计,考察跳
空发生后,期货合约在现货开盘和期货收盘时回补缺口的概率。其中开盘跳空幅度为当日开
盘价与昨日收盘价之差。
表2:不同幅度的开盘跳空在特定时刻回补的概率
在9:30时回补在15:15时回补
跳空高开10点 4.54% 65.00%
跳空低开10点10.00% 62.12%
跳空高开20点0.00% 46.42%
跳空低开20点0.00% 50.00%
数据来源:天软科技,长江证券研究部
跳空幅度高于10个点的交易日有106个,占总交易日的45.89%。跳空幅度高于20个
点的交易日有44个,占总交易日的19.05%。从上表统计结果看,采用日间数据对策略的
影响不大,至少在现货开盘之前由跳空触发的开仓亏损概率极小,问题只在于是否能够生成
合适的卖点。
一般认为,在日线或日线以上级别的大幅跳空意味着该方向上的合力做多/做空的意愿
强烈。我们接下来考察在一分钟级别上的跳空是否对日内走势有着同样的指示作用。
图 13:期指跳空幅度和期货收盘时期指的涨跌幅
数据来源:天软科技,长江证券研究部
表3:不同幅度的开盘跳空和期指在特定时刻的涨跌概率
15:15收涨15:15收跌跳空高开10点50.00% 50.00%
跳空低开10点45.00% 55.00%
跳空高开20点46.42% 53.57%
跳空低开20点43.75% 56.25%
数据来源:天软科技,长江证券研究部
考虑到样本内的231个交易日中共有124个交易日以收跌告终,占比为53.68%,只有跳空后收跌的概率高于53.68%,跳空后收涨的概率高于46.32%的组合才能说明开盘跳空对日内走势有指示作用。从表3看,跳空低开10个点以上后收跌的概率虽为表中所列的各种组合中的最高,但也仅仅是略高于基准。由此可见,开盘跳空的方向与当日走势无关,但开盘跳空不影响交易信号,可以用连续数据进行交易信号的计算。
图 14:日内高低点出现的时间
数据来源:天软科技,长江证券研究部
此外,从日内高低点出现的时间看来,在现货开盘之前出现当日最高/最低价的可能性最大,在这个时段内逢高做空逢低做多的胜率大于其它时段。但通常经验上的中午左右变盘的情况在这个统计里却未有明确体现。
六、主力合约的同步切换
由于期指日内交易换手频繁,宜选择流动性最好的主力合约作为交易标的,并在临近交割日时与市场同步完成主力合约的切换。就今年以来的情况看,当下月合约成交量放量,持仓量与当月合约接近(数值上表现为两者数量级相等、最高位数字相同),在下一个交易日主力合约便会由当月合约切换为下月合约。
金融工程
以IF1103和IF1104的切换为例,3月15日收盘后,IF1103持仓量为15584手,总成
交量为217685手;IF1104持仓量为13451手,成交量为52327手。主力合约为IF1103,
但IF1104的持仓量已与IF1103接近,我们判断在下一个交易日便会切换主力合约。3月
16日收盘后,IF1103的成交量为80032手,IF1104的成交量为101538手,主力合约如期
切换。
分析师介绍
俞文冰,CFA,同济大学数学系统计学专业本科,上海财经大学统计学研究生,曾在中海基金投资研究部工作,目前长江证券研究部担任金融工程首席分析师。
对本报告的评价请反馈至长江证券机构客户部
姓名分工电话E-mail
伍朝晖副主管(8621)68752398 135********wuzh@https://www.doczj.com/doc/2c3518547.html,
甘露华东区总经理(8621)68751916 137********ganlu@https://www.doczj.com/doc/2c3518547.html,
鞠雷华南区副总经理(8621)68751863 138********julei@https://www.doczj.com/doc/2c3518547.html,
程杨华北区总经理助理(8621)68753198 135********chengyang1@https://www.doczj.com/doc/2c3518547.html,
李劲雪上海私募总经理(8621)68751926 138********lijx@https://www.doczj.com/doc/2c3518547.html,
张晖深圳私募总经理(0755)82766999 135********zhanghui1@https://www.doczj.com/doc/2c3518547.html,
投资评级说明
行业评级报告发布日后的12个月内行业股票指数的涨跌幅度相对同期沪深300指数的涨跌幅为基准,投资建议的评级标准为:
看好:相对表现优于市场
中性:相对表现与市场持平
看淡:相对表现弱于市场
公司评级报告发布日后的12个月内公司的涨跌幅度相对同期沪深300指数的涨跌幅为基准,投资建议的评级标准为:
推荐:相对大盘涨幅大于10%
谨慎推荐:相对大盘涨幅在5%~10%之间
中性:相对大盘涨幅在-5%~5%之间
减持:相对大盘涨幅小于-5%
无投资评级:由于我们无法获取必要的资料,或者公司面临无法预见结果的重大不确定
性事件,或者其他原因,致使我们无法给出明确的投资评级。
重要声明
长江证券股份有限公司具有证券投资咨询业务资格,经营证券业务许可证编号:Z24935000。
本报告的作者是基于独立、客观、公正和审慎的原则制作本研究报告。本报告的信息均来源于公开资料,本公司对这些信息的准确性和完整性不作任何保证,也不保证所包含信息和建议不发生任何变更。本公司已力求报告内容的客观、公正,但文中的观点、结论和建议仅供参考,不包含作者对证券价格涨跌或市场走势的确定性判断。报告中的信息或意见并不构成所述证券的买卖出价或征价,投资者据此做出的任何投资决策与本公司和作者无关。
本公司及作者在自身所知情范围内,与本报告中所评价或推荐的证券不存在法律法规要求披露或采取限制、静默措施的利益冲突。
本报告版权仅仅为本公司所有,未经书面许可,任何机构和个人不得以任何形式翻版、复制和发布。如引用须注明出处为长江证券研究部,且不得对本报告进行有悖原意的引用、删节和修改。刊载或者转发本证券研究报告或者摘要的,应当注明本报告的发布人和发布日期,提示使用证券研究报告的风险。未经授权刊载或者转发本报告的,本公司将保留向其追究法律责任的权利。