什么是夏普比率中的程序化交易模型?
程序化交易能否成功,很大程度上取决于交易模型。因此,把交易模型称之为程序化交易的灵魂,一点都不为过。程序化交易系统的设计是一项复杂的系统工程,不是简单的几个指标的应用,理论上来说程序化交易系统就是一种盈利模式。目前市面上各种程序化交易模型如牛毛,检验模型优劣就需要对其进行测试评估。
测试参数设置的不同所得到的测试结果差异很大,客观设置测试参数关系到模型交易效果的真伪和对模型的最终取舍。模型的测试结果对未来市场有多大的适用性是由以下三大要素决定的:
一是测试的品种数量。所测试的期货品种越多,越能检验出模型对不同品种的适用性。
二是测试的时间跨度。测试所采用的历史数据越多、时间跨度越长,测试涵盖的各种市场状况就越全面,模型的可靠性就越大。
三是交易成本费率的设置。除了手续费费率设置的高低会影响模型盈亏效果以外,另一个最重要的设置参数就是滑点问题。
所谓滑点,是指下单价与实际成交价之间的差价。在期货市场,滑点的产生大部分是因为行情波动剧烈,导致网络数据传输延迟。例如,股指期货某合约盘中即时报价为:买价3200.2,15手;卖价3200.4,20手;某投资者想在3200.4价位买入20手,但等他敲入指令后的那一瞬间,有人抢先买了,结果该投资者在3200.4就没有买到,而且由于行情快速上涨,卖价挂单瞬间变成了3201.0,30手。为了能保证成交,该投资者只得撤单后,比即时卖价还要上跳两个单位进行报价,即以3201.4,20手的买单敲入指令,结果有15手成交价为3201.2,另外5手成交价为3201.4。出现的滑点分别是1跳和2跳。显然滑点增加,会导致交易成本增加,相应的交易收益受损。
与手续费率相比,交易过程中的滑点成本不是固定的,在行情波动不剧烈时交易,可能没有滑点问题,而在行情剧烈波动时,交易常常会遇到滑点问题。
交易成本对模型效果的影响,还与模型使用的数据周期以及交易频率有关。通常而言,加载周期越短、交易频率越高的模型,交易成本对其使用效果的影响越大。在模型测试中,往往需要设置一定的手续费率以及滑点成本去还原历史运行中可能出现的交易成本。尤其是套利及高频模型对成本极端敏感,模型开发者往往需要根据实际运行的滑点统计数据设定合理的成本。为保证模型测试结果的可信度,设置模型的测试参数时,应该将滑点设置的高一点,通常为1跳或2跳,以保证是在扣除了足够交易成本的条件下得到的测试结果。如果即便是在手续费费率和滑点设置都较高的情况下模型仍能盈利,则说明该模型的盈利效果比较好。评价交易模型性能优劣的指标体系包含很多测试项目,但主要评价指标有年化收益率、最大资产回撤、收益风险比、夏普比率、胜率与盈亏比等。
交易者最关心的是所建模型到底能不能赚钱,能赚多少?而衡量交易模型赚赔的多少和快慢通常是用年化收益率表示。年化收益率仅是把不同时间周期段的收益率(如日收益率、周收益率、月收益率)换算成年收益率来计算的,是一种理论收益率,并不是真正的已取得的收益率。程序化交易中的年化收益率其计算公式为:年化收益率=有效收益率/(总交易的天数/365);有效收益率=净利润/最大使用资金。例如某交易模型在五个交易日内三天赚两天赔,一共取得的有效收益率是0.1%,则该模型的年化收益率是7.3%。该指标主要是为建模者提供比较直观的盈亏数据,供投资者在将该模型收益与其他投资收益做比较时参考。
任何一个交易模型都不可能保证每次交易都是盈利的。出现亏损是正常的,但如果亏损幅度过大则会引发模型使用者的担心。尤其是如果模型辛辛苦苦赚了许多天,一天就亏的回到使用前,那表明模型存在重大风险隐患。于是使用“最大资产回撤”指标,来衡量模型在一段较长时段周期内可能面临的最大亏损。
最大资产回撤是指模型在选定的测试时间周期内,在任一历史时点的资产最高值,与资产再创新高之前回调到的资产值最低点时的差值。最大回撤用来描述模型运行可能出现的最糟糕的情况。它是衡量程序化交易模型性能的一个重要风险指标。
有两种方式表示最大资产回撤。一种是采用最大资产回撤的绝对值来表示,即:最大资产回撤值=前期最高点-创新高前的最低点;另一种是采用最大资产回撤率来表示,即:最大资产回撤率=(前期最高点-创新高前的最低点)/前期最高点。
注意:上述两个回撤指标的区别在于:前者是按回撤金额的最大绝对值来计算,而后者是按回撤比例的最大值来计算的。比如说,一个原始金额为100万元的账户,在刚开始交易的5次时间内就发生了一个30万元的回撤。而此账户在交易一段时间后,总金额增长到了200万元,此时又发生了一个40万元的回撤。如果以金额回撤来计算,是后者40万元的回撤大。但是以比例来计算,则是前者30万元的回撤大。
通常,衡量模型回撤风险大小采用的都是按回撤金额的最大绝对值指标,能够知道究竟最多会亏多少钱,对模型使用的风险性有实实在在的认知;如果采用回撤率指标往往会使得模型使用风险看上去没那么严重。
最大资产回撤并不知道会什么时候发生。如果模型是先赚到钱然后资金才有回撤, 那大部分人还可以接受,但如果一开始模型就有30%的资金回撤,使用者能接受吗?
评价交易模型的获利能力,并不是单纯看收益率,而应该看盈利与最大资金回撤两者之比,即收益风险比的大小。收益风险比的含义是指为了获取预期收益,投入的本金会冒多大的亏损风险,即所获取的潜在盈利与所承受的风险额度之间的比值。衡量程序化交易模型的收益风险比公式为:收益风险比=年度收益/最大资产回撤。比值越高说明模型的盈利能力越强,越值得采用。假设预期投资收益为3万元,但投入的本金最大亏损额度可能会达到1万元,则收益风险比为3:1。
收益风险比是测试程序化交易模型优劣的最重要指标。因为每笔投资最终都落实在两个问题上:一是敢不敢投资(最多亏多少)?二是值不值得投资(至少能赚多少)?收益风险比的意义,正是对以上两个问题的客观回答,也直接决定投资的结果。例如某程序化模型设计者在交易策略上面临两种选择:
策略一:每次投资30万元。平均每年交易100次,盈亏次数各50%,其中盈利交易每笔盈利1万元,亏损交易每笔亏损0.3万元,其间最大回撤为10万元。
策略二:每次投资30万元。平均每年交易100次,盈利次数40次,亏损次数60次,其中盈利交易每笔盈利1万元,亏损交易每笔亏损0.25万元,其间最大回撤为5万元。
采哪个策略建模更好呢?来看看两种策略模型的收益风险比。
策略一的年均收益为:50×1-50×0.3=35万元,收益风险比为35/10=3.5;
策略二的年均收益为:40×1-60×0.25=25万元,收益风险比为25/5=5。
在其他条件都不变的情况下,策略一冒着1单位的最大损失,可以收获3.5单位的收益,而策略二冒着1单位的风险,可以收获5单位的收益。显然,策略二比策略一优越。这个例子也同时展示了胜率高的模型不一定是最好的。
但并不是说同样的收益风险比,模型的使用风险是相同的。比如A模型当年的收益率为40%,最大资金回撤5%,那么收益风险比就是8;B模型当年的收益为200%,最大资金回撤25%,那么收益风险比也是8。两种交易模型的盈利能力可以认为是一样优秀的,但哪个模型的风险性更大那?显然是B模型。在相同收益风险比条件下,如果要追求更高的收益,比如800%的收益率,那么可能发生的最大资金回撤也有可能100%。一旦发生,资金赔光,交易就没有办法继续下去了。因此,只是追求模型的收益率而忽视模型的回撤风险是极其冒险的激进策略。所以说,尽管模型的收益风险比相同,但交易结果还要取决不同的资金管理策略。
评估交易模型的优劣应该从收益期望和风险两方面综合考虑。风险调整后的收益率就是一个可以同时对收益与风险加以考虑的综合指标,以期能够排除风险因素对绩效评估的不利影响。1966年,学者夏普在此基础上提出了著名的夏普比率:S=(R-r)/σ;公式中R=投资的回报期望值(平均回报率);r=无风险投资的回报率(可理解为同期银行存款利率);σ=回报率的标准方差(衡量波动性的最常用统计指标)。
夏普公式的核心思想是:理性的投资者将选择那些在给定的风险水平下使期望回报最大化的投资组合,或是那些在给定期望回报率的水平上使风险最小化的投资组合。解释起来非常简单,即投资时也要比较风险,尽可能用科学的方法以冒小风险来换大回报。投资者在建立有风险的投资组合时,至少应该要求投资回报达到无风险投资回报的水平或者更高。
如果夏普比率为正值,说明在衡量期内投资的平均净值增长率超过了无风险利率,在以同期银行存款利率作为无风险利率的情况下,说明投资收益比银行存款利息要高。夏普比率越大,说明投资机会所获得的超额风险回报越高。总之,夏普比率越高越好。
交易模型的夏普比率多高才算是比较满意的模型呢?假设某交易模型5年的年平均回报率约为10%,波动性约为16%,无风险利率约为3.5%,计算出的夏普比率=(10%-3.5%)/16%=0.41。意思就是:该模型的年均回报率要比无风险利率高6.5%,但平均5年中也许有1年的回报率低于-6%(10%-16%)。对期货公司的资管业务经理来说,这样的夏普比率就偏低了:假设资管业务的投资回报目标是年回报率20%,就必需用2.5倍杠杆,也就是需要再借贷1.5倍自有资金。(回报期望=2.5×10% -1.5×3.5%≈20%),也就意味着平均5年中有1年的回报率将低于2.5×(10% - 16%)-1.5×3.5% =-20%。模型赔了超过20%,客户大概就要跑光了。因此模型设计者常常想尽办法改善模型策略,提高夏普比率。
采用夏普比率评价模型的不足之处在于仅仅考虑了收益的平均波动水平,而没有考虑资金最大回撤情况。市场中真正的风险来自于极端的损失。
测评程序化交易模型优劣的主要评估指标还有两个:胜率与盈亏比。
胜率是指在当前的成本设置下,模型盈利交易次数占总交易次数的比例,即:胜率=盈利交易次数/总交易次数。
有部分投资者格外看重胜率,认为越高越好,至少希望胜率在50%以上,即获胜的概率超过一半,才算是好的模型,其实这是一个误解。事实上有的优秀交易模型胜率并不高,这就与另一个评价指标盈亏比有关。
盈亏比=一段时间内所有盈利交易的总盈利额/同时段所有亏损交易总的亏损额。显然,盈亏比越高,交易模型获得的单笔收益越能够覆盖其他的亏损交易,对胜率的要求就没有那么高。反之,如果盈亏比很低,单笔亏损需要更多的盈利次数来覆盖,则要求更高的胜率。盈亏比的另一种理解方式为承担一元钱的风险能够赚取的盈利,基于这种理解方式,在不考虑交易成本的情况下,可以定义每一元钱的风险所能获得的期望收益为:Q=P-(1-P)/R。其中P为胜率,R为盈亏比。
假设盈亏比R为1,在上式中需要P>50%才能使得期望收益为正,也就是说对于一个盈亏比小于1的交易模型,胜率必须高于50%才有可能赚取正的期望收益,反之如果盈亏比较高,例如R≥3,则胜率只需高于25%就可以保证期望收益Q为正。
因此胜率只有和盈亏比结合来评估模型才有意义。设想一个模型,做十笔交易,盈利九笔,平均每笔盈利1万元,而亏损的那一笔一下亏了10万元,这个模型的胜率虽然达到了90%,却还是亏损的模型,因为它的盈亏比太低;另外一个模型做十笔交易,盈利四笔,共盈利12万元;亏损六笔,共亏损6万元,这个模型的胜率虽然只有40%,但总盈亏比为2。因此这个模型的盈利能力还是不错的。
值得注意的是,某些模型历史测试中的胜率可能包含有一些“伪盈利”交易,也就是一些交易的盈利非常小,几乎为0,在很低的手续费与滑点设置下,它们是盈利交易,而在稍微严格一点的成本设置下就变成了亏损交易,很明显追求这样的胜率没有什么意义。因此,单独考察模型的胜率这个评估指标意义不大。
除以上所论述的重要测评指标外,还有一些测评交易模型性能的指标,诸如净利润、最大连续盈利次数和最大连续亏损次数、平均盈利周期和平均亏损周期,等等。
综合上述测评体系,判断一个合格交易模型的评估原则大致为:年化收益率至少应大于0,越高越好; 最大资产回撤值当然是越小越好,但回撤的最大极限定为多少取决于投资者对亏损幅度的心理承受能力,因人而异;收益风险比也是越大越好,但提高的难度较大;夏普比率也是越大越好,但至少应该大于0;至于胜率高当然好,但关键是要和盈亏比指标结合一起来评估,盈亏比高的模型胜率低一些也无所谓,所以胜率并不是关键性指标。再权衡其他测评指标,最终就能够获得初步满意的程序化交易模型。
测试参数设置的不同所得到的测试结果差异很大,客观设置测试参数关系到模型交易效果的真伪和对模型的最终取舍。程序化交易模型的测试结果对未来市场有多大的适用性是由以下三大要素决定的:
一是测试的品种数量:所测试的期货品种越多,越能检验出模型对不同品种的适用性;
二是测试的时间跨度:测试所采用的历史数据越多、时间跨度越长,测试涵盖的各种市场状况就越全面,模型的可靠性就越大;
三是交易成本费率的设置:除了手续费费率设置的高低会影响模型盈亏效果以外,另一个最重要的设置参数就是滑点问题。
所谓滑点,是指下单价与实际成交价之间的差价。在期货市场,滑点的产生大部分是因为行情波动剧烈,导致网络数据传输延迟。
例如,股指期货某合约盘中即时报价为:买价3200.2,15手;卖价3200.4,20手;某投资者想在3200.4价位买入20手,但等他敲入指令后的那一瞬间,有人抢先买了,结果该投资者在3200.4就没有买到,而且由于行情快速上涨,卖价挂单瞬间变成了3201.0,30手。
为了能保证成交,该投资者只得撤单后,比即时卖价还要上跳两个单位进行报价,即以3201.4,20手的买单敲入指令,结果有15手成交价为3201.2,另外5手成交价为3201.4。出现的滑点分别是1跳和2跳。显然滑点增加,会导致交易成本增加,相应的交易收益受损。
与手续费率相比,交易过程中的滑点成本不是固定的,在行情波动不剧烈时交易,可能没有滑点问题,而在行情剧烈波动时,交易常常会遇到滑点问题。
交易成本对模型效果的影响,还与模型使用的数据周期以及交易频率有关。通常而言,加载周期越短、交易频率越高的模型,交易成本对其使用效果的影响越大。
在程序化交易模型测试中,往往需要设置一定的手续费率以及滑点成本去还原历史运行中可能出现的交易成本。尤其是套利交易及高频模型对成本极端敏感,模型开发者往往需要根据实际运行的滑点统计数据设定合理的成本。
为保证程序化交易模型测试结果的可信度,设置模型的测试参数时,应该将滑点设置的高一点,通常为1跳或2跳,以保证是在扣除了足够交易成本的条件下得到的测试结果。如果即便是在手续费费率和滑点设置都较高的情况下模型仍能盈利,则说明该模型的盈利效果比较好。
评价程序化交易交易模型性能优劣的指标体系包含很多测试项目,但主要评价指标有年化收益率、最大资产回撤、收益风险比、夏普比率、胜率与盈亏比等。
一、设定比较基准
我们在判断一个交易算法是否合适的时候,首先要选择出一个合适的比较基准。时间加权平均价格、开盘价格、收盘价格以及成交量加权平均价格都可以被看做是算法交易的比较基准。这时,可能会有朋友想问,那么这么多比较基准我们应该如何去选择呢?比较基准的选择我们可以根据量化投资者自身的投资风格和投资目标来确定。
二、最优参数和回测的选择
在我们确定好比较基准后,下一步我们就可以根据不同的参数来测试效果,最终挑选出合适的参数。
1)首先我们可以用不同参数在整个历史时期的不同阶段进行测试。通过不同的参数,可以判断出算法交易系统的稳定性以及对参数变化的敏感程度。如果系统对于参数变化表现的过于敏感则不适合在市场中使用。
2)我们也可以选定一个市场情况较为平稳的历史时期,然后采用不同的参数以相同的方法来进行测试。这种测试会检测对于不同参数系统的稳定性和敏感性。夏普比率可以被用作选择最优参数。
3)特殊情况下的市场环境选择最优参数,可以进行样本外的测试,来确定算法交易的效果是否能够达到我们的预期。
三、利用仿真系统来进行测试
对于量化投资系统测试来说,如果能够放在实盘中进行测试操作无疑是最有效的测试方法。但是对出初级测试来说,这意味着巨大的前期资金投入。所以,我们一般采用仿真系统来进行测试。仿真系统的主要原理是模拟投资者在一个虚拟的市场中进行交易。
通过不断修正和完善,建立客观有效的程序化交易系统,实现真正的商业价值
A信号闪烁
所谓信号闪烁,是指模型在图表上显示的买卖信号时而出现时而消失。出现这种情况,说明模型的策略在判断买卖交易的条件中使用了未来函数。
所谓未来函数,是指可能引用未来数据的函数,即引用或利用当时还没有发生的数据,对之前发出的判断进行修正的函数。具体地说,就是本周期结束后显示的指标值(包括线段和买卖提示信号),可能在发生新的数据后改变位置或者干脆消失。对于未来函数可以理解为某一变量依赖另一变量而先期变化。如变量A和变量B,B变化使得A也变化,那么A是B的函数,但如果B是稍后的变量,而A是稍早的变量,A跟着B变化,则A是B的未来函数。其中有三类函数属于未来函数:一是以之字转向为代表的ZIG类函数;二是准未来函数类;三是使用跨周期数据函数类,这是一种最为隐蔽的方法,它的危害性很大。
含有未来数据指标的基本特征是买卖信号不确定,常常是某日或某时点发出了买入或卖出信号,第二天或下一个时点如果继续下跌或上涨,则该信号消失,并在以后的时点位置又显示出来。
比如,一个策略定义为日K线收盘价大于均线时买入,反之卖出。由于日K线的收盘价在当天交易结束前表现为最新价,它随着行情的变动而变化,盘中的日收盘价以及由此计算出来的均线价格也会变动,当最新价离均线价格非常近时,就会出现盘中的日收盘价忽而高于均线价格,忽而低于均线价格,从而交易模型就会在图表上一会儿发出买进信号,一会儿买进信号消失出现卖出信号,反复交替,即出现信号闪烁现象。
信号闪烁反复的问题会对模型设计人员造成极大的困惑,模型策略中一旦使用了未来函数而出现信号闪烁,则实盘中模型会不断地开平仓。但在用历史数据测试时,只会有一次信号出现,导致实盘交易结果和测试结果会有很大差异。很多模型在测试时表现很好,真正拿到实盘上运行就让人大跌眼镜,这就是买卖信号出现反复所引起的。
要解决信号闪烁的问题可以采用两种办法:
一是用不可逆的条件来作为信号判断条件。比如,模型策略规定,一根K线的最高价高于某个固定价位时,模型发出买入信号。由于一根K线的最高价只能是不断增大的,所以某一刻开始满足条件,就会一直满足这个条件,出现的信号就不会消失,也就不会出现信号闪烁现象。
二是使正在变动的未来函数变成已经不再变动的完成函数。由于未来函数有时间周期,有些指标在一个短的周期内可能是未来函数,但在稍长的周期内就不是未来函数。例如,收盘价在一天收市前都是不确定的,所以对于一个日周期的指标在分时周期内具有未来函数特征,但是一旦收盘该指标就是定值,不会随明日及以后的行情而变动,所以该指标在大于一日的周期中就不是未来函数。
B偷价行为
所谓偷价行为是指在开平仓的时候使用了当时已不存在的进出场条件。比如,模型策略规定,如果最高价大于某个固定价位即以开盘价买入,如此虽然信号不会闪烁,但是最高价大于某个价位时,价格已经高于开盘价一定距离了,这时用开盘价买入是做不到的。但是在用历史数据进行模型测试时,图表上是有买入信号存在的。
有一些偷价行为很隐蔽,还是以最高价大于某个固定价格买入策略为例,如果用此策略作为模型进场买入信号,看起来没有什么问题,但如果行情出现一开盘就跳空高于固定价格的情形,模型就不可能再以这个固定价格买到了。此时,模型的交易策略应改为,用开盘价与固定价格之中的最大值作为买入价格,如此就能避免偷价行为的发生。
信号闪烁与偷价行为对短线交易模型的影响是致命性的,投资者一定要对模型信号的真伪加以甄别。使用未来数据不用花费任何精力就可以轻松获得表面上非常高的成功率,但发出的买卖信号在实际操作中毫无价值,是一种交易欺骗行为,在实战中给投资者带来的惨痛损失和后果往往不堪设想。
C检验风控表现能力,优化模型交易策略
衡量程序化交易模型最重要风险指标包括最大回撤、夏普比率等。由于历史事件与未来将要发生的行情事件,在原因上和波动程度上存在差异,所以,用实盘进行检验模型在各种复杂环境下的风控表现能力,以判断模型在一些风险指标上的波动范围是否与历史测试数据有较大偏差,如果出现偏差,则寻找原因并加以修正。
与此同时,要通过实盘运行发现模型交易策略中的缺陷和不足,并进行优化。比如,对不同的期货标的行情进行仿真运行,可以发现模型使用的交易策略在不同标的行情中的适用性。也许模型对农产品(如大豆)适用于日线交易,但在股指期货中却适用于分钟行情。再比如,模型中所用到的一些周期性指标(KD、RSI、MACD等),采用不同的时间参数得到的买卖信号效果是不同的。所以,寻找并调整交易策略中的最佳公式参数,也是对交易模型策略优化的一项重要工作。
经过一段时间的仿真运行(短则一个月,长则半年或数年),从不断发现问题到返回模型的策略设计步骤进行修改(有时候问题如果比较严重,还可能需要推翻模型,重新设计),再测试,再运行,循环往复,直至模型功能逐步稳定后,才能真正开始投入实盘交易。但即使是投入实盘交易,模型也还是会被不断地修正和完善,以建立更客观、更有效的程序化交易系统,实现真正的商业价值。
D“海龟交易法则”编制的程序化交易模型
下面以“海龟交易法则”编制成的程序化交易模型为例,展现整个程序化交易模型设计、测试、运行的全过程。
在金融界,流传着一个著名的故事。1983年,美国期货界的两个挚友——理查德·丹尼斯与威廉·埃克哈特之间就一个问题产生了分歧:伟大的期货交易者究竟是天生的,还是可以后天培养的?他们就这个问题进行了一场辩论,并为寻找答案进行了一场试验,这就是著名的“海龟交易试验”。丹尼斯和埃克哈特在1000个报名者中甄选了13个“海龟”,并用两周时间给他们传授了交易理念和法则。在随后的四年中,海龟们凭借这些交易法则取得了年均80%的收益。二十多年后,“海龟交易法则”已经公布于众。如何将“海龟交易法则”建成一个程序化交易模型加以实际运用,以检验“海龟交易法则”是不是像传说中的那么神奇呢?