程序化交易系统的检测与优化体系,本文主要内容关键词为:交易系统论文,体系论文,此文献不代表本站观点,内容供学术参考,文章仅供参考阅读下载。
DOI:10.3773/j.issn.1006-4885.2013.08.001
中图分类号:F830 文献标识码:A 文章编号:1002-9753(2013)08-0001-15
1 引言
随着国内金融市场的不断发展与完善,程序化交易变得越来越受关注,据统计美国市场中有70%的交易是由程序化交易完成的。詹姆斯·西蒙斯(James Simons,文艺复兴科技)、大卫·萧(David Shaw,D.E萧公司)、多伊·法莫尔(Doyne Farmer,预测公司),这些交易界的超级明星都通过程序化交易取得了令人震惊的收益。例如,文艺复兴科技公司由詹姆斯·西蒙斯(James Simons)于1982年设立,从1989年起,复兴科技公司的大奖章基金(Medallion)的年回报率平均高达35%,大奖章基金被誉为是最成功的对冲基金。
程序化交易(Program Trading)也叫自动化交易(Automated Trading)或算法交易(Algorithmic Trading)。行业内部对这个概念并没有一个统一的定义,通常是指将交易策略转换为计算机程序完成自动交易指令的交易系统,对于采取何种交易策略并没有限制,一般而言量化的交易策略方法居多。算法交易有时并不等同于程序化交易,“算法交易”(Algorithmic Trading)更多时候是指利用有效的算法使执行下单的过程中尽可能减小市场冲击成本、择时风险与机会成本等,所以可将算法交易归类为程序化交易的一部分。另一种分类标准是以交易频率来区分,分为高频交易和非高频交易。高频交易就是短时间内进行捕捉交易机会买进行买卖,一般来说国外专业的高频交易机构,持仓时间都是以秒甚至毫秒计算,所以高频交易一定是以程序化交易系统为前提的。
程序化交易起源于上世纪七十年代,由于我国的证券市场起步较晚,程序化交易在我国正处于起步阶段,随着我国资本市场的不断发展尤其期货市场的不断完善,程序化交易占比必将迎来爆炸式的增长。如何使一个交易策略由概念转变为在实战中有效的交易系统是每个交易者要面临的共同问题,因此,需要提出一套严格且完备的程序化交易系统的检测与优化体系。
2 文献综述
在国内,程序化交易尚处于初步发展阶段,学者们对程序化交易方面的研究并不多,而程序化交易较强的实务性又致使研究开展更为困难,导致目前涉及程序化交易系统的检测与优化方面的研究较少。关于程序化交易,国际上著名的系统交易学者Perry J Kaufman(1995)[1]在其权威名著《Smarter Trading》中描述了构造交易系统需要考虑的问题,着重探讨了变化中的市场和技术如何影响了交易结果,介绍了不同的交易工具与系统交易方法。Levecq and Weber(1995)[2]提出了程序化交易在金融市场应用时应先对证券市场质量进行分析。所以在做程序化交易之前重要的一点是要先选择交易对象,并且评价交易市场。Madhavan(2000)[3]提到程序化交易对市场流动性,波动性的要求,这同样也是对市场质量的要求。Boehmer(2005)[4]认为程序化交易系统的执行速度同时取决于交易量的大小。交易成本的控制对程序化交易策略的设计有重大影响,而算法交易的核心就是减少交易成本。Perold(1988)[5]发现在真实市场投资时,会产生摩擦损失,分别为交易费用和交易佣金、冲击成本(impact costs)以及机会成本(opportunity costs)。对程序化交易系统的评价中,对算法策略的评估尤为重要。关于如何设计执行策略,Berkowitz(1988)[6]提出了著名的交易量加权平均价格(Volume Weighed Average Price,VWAP)交易策略,若冲击成本为线性函数且股价随机游走,Bertsimas & Lo(1998)[7]认为平均交易策略才是最优交易策略。进一步,Almgren & Chriss(2001)[8]将市场冲击分为临时性冲击和永久性冲击。Kissell & Malamut(2003,2004,2006)[9-11]分析了在冲击成本和择时风险下的最优交易策略问题,引入交易速率的概念,并将执行成本分为可见与不可见成本。随后,Bialkowski(2008)在Berkowitz的基础上提出了优化型的VWAP动态模型,进一步完善了算法的设计。在国内,方兆本和镇磊(2011)[12]提出了一种基于自回归条件持续期(ACD)来选择交易时机的模型。杨科和陈浪南(2012)[13]提出了基于幂转换以及不设定扰动项的具体相关结构和分布形式,构建了半参数的短期预测模型来预测中国股市的波动率,通过实证发现在各种损失函数下,半参数短期预测模型是预测中国股市波动率精度最高的模型。宋增基和杨俊等(2004)[14]根据EdwardM.Miller对Sharpe的资产资本定价模型(CAPM)所作的修正,对我国股市1995-2000年的股票的总风险水平、系统性风险水平和预期收益率进行了测算,发现中国证券市场系统性风险占总风险比例较大的特征并没有从根本上发生改变,但是投资者对股票市场的预期收益率在降低,即我国的投资者不断地趋于理性。张戈等(2011)[15]提出了利用Copula函数的程序化交易策略,并用中国期货市场的白糖和棉花期货合约进行了实证。随着中国期货市场不断发展与完善,程序化交易方式必将变得越来越普及。
综上所述,目前已有的学术研究主要集中在程序化交易系统的执行层面、程序化交易策略与风险影响方面的研究。例如通过算法交易的设计来实现最有效的下单策略,避免过大的冲击成本、择时风险、机会成本等问题,或是在策略方面进行提出某个算法以及对程序化交易的风险因素的探讨。而在实战交易时我们需要考虑的是:当我们拥有一个交易策略时,如何对它进行初步测试?如何判断这个策略是否有效?如何在跨期跨市场条件下对它进行深度测试?如何进行参数的优化?而一套有效且完备的检测与优化体系能够较好的解决上述问题,因此本文试图建立起该体系框架。
本文提出了一套较为完整的程序化交易系统的检测与优化体系,从策略的设计、验证性检验(初步检验)、交易策略的最优化过程、推进的样本外测试等过程,使一个交易策略由概念转变为真正可行的交易系统。目前国内大多数程序化交易者并没有建立起一个完备的检测与优化体系,采取的测试方式大多为简单的历史数据回溯测试,而这种方法容易导致对历史数据曲线的过度拟合,而过度拟合绝不等同于策略优化,这是许多程序化交易者容易陷入的误区。为了提供更优化更完善的方法,本文构造的一个较完整的程序化交易系统的检测与优化体系将有助于投资者了解到交易模型的风险与收益水平以及策略的稳定性情况。
3 程序化交易系统的检测与优化体系
程序化交易系统从设计到投入实战可以分为六大关键步骤,依次为:设计交易策略,交易策略程式化,验证性检测(初步检测),交易系统最优化过程,推进的样本外测试,实战交易。体系的具体流程如图1所示。
图1 程序化交易系统的检测与优化体系总流程图
3.1 设计交易策略
每一个程序化交易系统都是从交易策略的提出开始,策略的设计包括以下四个部分:
(1)交易品种的筛选
关于交易策略的设计,首先应考虑对交易品种的筛选。交易品种应满足以下三点:一、是否具有足够的流动性。因为流动性的高低影响交易成本、交易策略以及风险管理效率的高低,可以通过检查价格运动的连续性、买卖差价的大小、成交量的大小来判断。二、是否有足够长的交易历史与充足的信息来源。三、是否有足够多的市场参与者。
(2)建仓与平仓
交易的本质就是建仓与平仓,若建仓与平仓的设置条件使用越多且复杂程度越高,则策略的程式化与测试过程便越为困难,也更容易导致过度拟合的危险,使历史模拟过程与实战交易过程相差甚远。过度拟合问题将在后文着重讨论。
在设计建仓与平仓的规则时,需要着重考虑交易成本的问题。交易成本是决定程序化交易系统表现的重要条件之一,而却常常被交易者所忽略。算法交易(algorithmic trading)即是研究如何降低交易成本。
Kissell & Malamut(2006)[10]所提出的计算交易成本的模型:
国内程序化交易学者波涛(2003)[17]在其著作《系统交易方法》中认为交易波长越大,交易成本越低,单次交易风险越大,且交易成本的研究目的是:一,确定交易系统的最小交易周期。二,在交易成本与交易风险间寻找动态平衡点。关于交易费用与算法交易并不在本文的研究范畴,需要强调的是在策略设计时必须要注意交易成本与风险的存在。
(3)风险管理
任何交易策略都有亏损的可能,风险管理是指如何在一个肯定有风险的环境里把风险减至最低的管理过程。成功的交易策略拥有完整的风险控制机制,可以将风险预测并控制在可接受的范围内。
(4)仓位控制与资金管理
交易策略可以设定每次建立固定头寸,也可以根据特有的机制增减头寸,如何有效控制头寸是策略设计中不可或缺的一部分,如果策略不具备良好的头寸增减能力,则该策略所能达到的效率会很低。很多策略设计者都认为头寸控制机制的重要性要高于交易策略本身,国际知名投资顾问Van.K.Tharp曾提出头寸管理的三大要素为:投资目标,心理因素,管理方法。并提出头寸管理的CRP模型:P=C/R(P:头寸规模。C:可以承担风险的总现金数。R:每单位承担的风险。)
图2 Van.K.Tharp提出头寸管理的三大要素
3.2 交易策略程式化
把交易策略转化为程序化代码需要经过三个步骤。
首先将交易策略转化为公式与规则。必须完整的确认策略的每个规则的细节。没有完整转化规则是许多交易者在构造程序化交易时常见的问题之一。
之后将所有公式、规则转化为一个逻辑性一致的格式,一般称为中间性语言。中间性语言是连接交易策略与程序化代码的桥梁,若逻辑不连贯或者缺乏参数与规则,那么进一步进行的的程式化代码的编写过程将会非常困难。
最后将交易策略转化为交易平台所专用的程序化代码。
3.3 验证性检测
验证性检测是对交易策略的初步检测过程,图3展示了具体的检测流程。
图中呈现了验证性检验包含的几个主要检测内容,只有通过上述检测的交易策略才能进行进一步优化。
(1)检查交易行为与策略理念是否一致
交易策略制定的前提必须符合策略理念,因此首先要查看交易行为与策略的设计理念是否一致。可以利用历史数据进行模拟交易,例如,当测试一个长线交易策略时,若系统每周都会出现数次交易,那么此交易系统的交易行为与策略理念并不一致,若交易行为大幅度偏离策略的设计理念,则应找出偏离原因并分析,调整交易行为使其符合理念。
图3 验证性检测过程的流程图
在使用历史数据时,应选择合理的数据而避免使用对策略非常不利的数据进行测试以免产生测试偏差。例如当测试一个趋势跟踪策略时,尽量避免使用无确定方向的盘整期数据,避免无意义的测试过程。当测试结果说明交易行为与策略理念一致则可通过。
(2)初步测试盈利能力与风险水平
这一步骤主要目的是估计交易策略的初步利润和风险水平。不同程度系统的测试水平也不同,一般准则为短期系统可以对1到2年数据做测试,中期则为2到4年,长期在4至8年,但可以根据具体的市场与行情做出相应的改变。
在测试开始阶段收益呈现小幅获利即可,若测试结果有较强的盈利且风险较低,说明此策略表现优异。若绩效出现异常高的损失,需判断是否是因为在不利的市场条件下测试的结果,若不是则应当对此策略提起警惕。若此结果被视为特例情况,则继续下一步测试。测试内容包含表2中所示项目,最后需在系统测试报告中展现:
(3)多重市场多期限测试
当交易策略通过了前两步的初步测试,则可将交易策略应用到不同类型市场和不同历史时期中进行多重市场多期限测试,此项测试的主要目标是进一步了解交易策略的可靠性,确定交易策略是否值得进一步发展,并确立交易策略及模型的形态,测试结果与测试中出现的问题可以为策略提供优化空间。
多重市场多期限测试首先要确定包含的市场。在多重市场的选择方面,根据具体的策略和理念可以选择不同的市场,例如一个针对期货市场的测试可以由以下几种交易对象组成:铜、橡胶、黄金、大豆、棉花、沪深300股指期货等。
如何确定测试期限长度?通常越长的测试期限会得到越稳定的测试结果。在美国等成熟金融市场,常用10年的历史数据为测试期限,而5年为最低底线[18]。由于我国金融市场起步较晚,应尽可能利用所有的历史数据并以3年为最低底线,并且历史数据应当包含不同的市场类型:牛市、熊市和盘整。在测试过程中应将一整段历史数据分成长度相等的时间区间进行测试,以避免因某一年的巨额盈利或亏损而影响测试结果。例如可将5年的历史数据分成5份,以每年为单位,每次测试都会形成一份测试报告。
通过这一测试可以得出策略在哪些市场有效,在哪些市场无效。对历史时期哪些条件下有利,对哪些条件下不利,策略值不值得进一步研究。
3.4 程序化交易系统的最优化过程
在确定交易策略值得进一步发展后还需要对其进行最优化过程。最优化意味着交易策略将选取最优参数集,其目标是获得最高实际交易成效峰值而不简单是获取最大利润。首先需明确评估最优化的标准是什么,然后才能进行最优化过程。
评估最优化的标准主要有以下几点:
(1)策略在不利的市场行情下的生存能力。这种生存能力是指在实际交易中具有较长的生存周期。
(2)在用不同参数集,不同市场类型,不同历史时期进行的测试结果与实际交易的结果成粗略比率。若交易策略不稳健,两种结果则会产生较大偏差。
(3)测试所有参数集,良好的策略应具备高平均利润、最大利润与最小利润的差值较小以及利润标准差较小这三项条件。
(4)模拟中盈利次数即使不占大多数,也应具备显著性。表3为一个最优化报表示例,其中亏损次数虽大于盈利次数,但盈利率还是较为显著,并且盈利能力可观。
(5)最优化数据形态应具有相对平滑的空间,最佳参数周围应该逐渐下滑,表明最佳参数周围仍有可盈利参数点(如图4中盈利且周围平滑下降的参数集)。若在尖峰周围呈现迅速下滑的形态,这种形态下任何一个参数的变动都会引起巨大的亏损。图4为一个双均线策略的最优化参数曲面图的示例,可以看出其相对平滑的形态。
按照上述5项最优化评估标准就可对交易策略进行最优化实现过程。在进行策略最优化时,要避免陷入历史数据过度拟合的误区,即避免过度增加参数的设置。如果设置足够多的参数并且利用高阶方程,得出的曲线可以完美匹配任何的时间序列,但是这样的曲线没有任何的预测价值。因此最优化过程需遵循以下两个过程:
(1)确定交易策略参数测试范围并准备合适的市场历史数据
尽量选择少量参数进行最优化,参数设置过多容易造成过度拟合。因此首先要确定“重要参数”,即对交易绩效具有重大影响的参数。对该参数进行敏感性分析时,仅变化这个参数而保持其他参数不变,如果绩效随着参数变化而产生较大变动,即视为“重要参数”。而若某个参数对绩效影响很小,则用一个常数值代替即可。对于每一个参数需准备合适的历史数据样本,样本的选择有两个原则:首先,一个足够大的样本才足以产生一个有效的交易统计样本。交易次数越多越好,传统上至少要30次交易才具统计意义,实际测试要远远大于这个数值;其次,一个历史数据样本应包括几种主要市场类型:牛市、熊市、盘整、循环,尽可能的包含多样化的价格数据历史样本。
图4 一个双均线策略的最优化参数曲面图
(2)选定最优化目标的决策函数,以此确定最优参数集合
在确定参数测试范围后还需根据“决策函数”来确定最稳健的参数值,最稳健的参数值并不总是利润最高的那个,而是指最有可能在实际交易中产生持续利润的参数。
“决策函数”的类型是多样化的,通常可以选取一组“决策函数”来挑选最优的参数集,例如:年化报酬率、最大盈利、最大连续盈利次数、最大投资本金损失幅度、盈利次数比率、平均盈利额等,同时也可以设定最低交易次数等指标。
确定最稳健参数值不能只以净利润大小为评估标准,净利润容易被一个大幅度盈利或者一个大幅度亏损所影响,它完全忽略了交易与报酬的分布,而且单纯考虑净利润大小缺少对风险水平的估计。因此为了使交易策略在实际交易时更加安全,在设置“决策函数”时对测试结果的评价标准应该严格化,本文采用Robert Pardo(2008)[18]所提出的“最差利润回报”(Pessimistic Return)的概念。
其中PR(pessimistic return)为最差利润回报,AW(average win)为平均盈利额,AL(average loss)为平均亏损额,W为盈利次数,L为亏损次数
因为一个交易系统的实际交易盈利水平绝大多数都是不如测试水平的,所以在测试程序化交易系统时有必要引入“最差利润回报”,以这种保守的方式作为“决策函数”会大大提高交易策略的稳健性。
3.5 推进的样本外测试。
这一步骤将是测试最关键的一步,也是最具决定性的一步,对最优化后的策略做出是否符合实际市场的最后判定并找出最优策略与参数集。
首先,什么是样本外测试?假设拥有3年的历史数据(2010-2011年,2011-2012年,2012-2013年),则用前两年的数据来进行策略最优化,这些用来优化策略的历史数据称之为样本内数据。而用剩下1年的历史数据来进行类似于“实战交易”一样的测试,这些数据称之为样本外数据。若忽略了这一步骤,在完成策略最优化过程后就直接将策略投入实际市场是非常危险的,因为最优化过程中的不当操作极可能出现“曲线拟合”的错误,而利用样本外数据进行样本外测试则可以将这种错误在实战交易前排查出来,并能检验优化后的策略是否适用于“实际”市场。
推进的样本外测试就是将推进的思想加入到样本外测试中。Robert Pardo(2008)首先提出了WFA推进分析的思想(walk-forward analysis)[18]。在样本外测试中,可以运用这个思想,使用这种推进分析的方法,使样本外测试更加科学和严谨。推进的样本外测试不仅可以评估出交易策略是否能在实际交易中有良好表现,并拒绝最优化过程中出现的典型错误即过度拟合,同时在不断推进变化的历史数据区间下能够测试出交易策略的稳健性。最后,在推进中更有效的适应持续改变的市场环境,找到最优策略与参数集合。
推进的样本外测试过程本文用示例说明。假如现在拥有1998年至2008年这10年的历史数据做样本测试,可以将数据分割后进行逐步推进的测试,过程如图5所示:
(1)首先确定一个历史数据区间,定义为“滚动测试区间”。图中“滚动测试区间”大小定为3年。
(2)在滚动测试区间上进行测试,即样本内数据,如图1998-2001年,按照策略最优化原则进行参数最优化。
(3)在接下来的数据区间上测试该模型,即样本外数据,如图2001-2002年,统计样本外数据测试的绩效并与样本内测试绩效做对比。
(4)之后不断推进测试,重复2、3步骤直到结束(比如第二次的样本内数据为1999-2002年,样本外数据为2002-2003年)。在整个推进测试过程中,最稳定的一组参数被确定为最优参数。
图5 推进的样本外测试过程示意图
4 结论与展望
由于我国证券市场起步较晚,程序化交易在我国正处于起步阶段,随着我国资本市场的不断发展尤其期货市场的不断完善,程序化交易占比必将迎来爆炸式的增长。
本文建立的程序化交易系统的检测与优化体系可以让交易者了解到交易策略或模型的风险与收益水平以及稳定性,并得出一个健全交易策略应具备的主要特点为:获利相对均匀分布、具有相对稳定的盈亏次数比率、具有连续且平滑的最优化参数集、适应不同类型的市场且风险可控。若策略可以安全通过该体系的三个核心步骤:验证性检验(即初步检验)、系统最优化过程、推进的样本外分析过程,这样的策略将具有较强的获利性、安全性与稳定性,即可投入实际市场。在进入真实市场后,要继续对程序化交易系统保持警惕,必须定期查看绩效报表,浏览交易数据,找出异常值发生的原因,及时优化和改进交易系统。若无法通过这个体系的检测,此体系也可以帮助交易者清楚的分析出问题的所在。
本文已提出了一个较为完整的程序化交易系统的检测与优化体系,在下一步的研究中,在评估交易系统的风险方面,可以加入蒙特卡洛模拟方法来更好的评估出程序化交易系统的风险。在搜寻最优化参数时,可以利用遗传算法、人工智能与模式识别、神经网络、模糊逻辑等新方法以找出最佳优化空间,得出更好的策略参数集。