干货 | 程序化交易模型的测试与评估

用户成长系列
标签: #<Tag:0x00007f73f4d999b8>

(小马哥) #1

对程序化模型测试来说,所测试的期货品种越多,越能检验出模型对不同品种的适用性。

1、测试参数的设置

测试参数设置的不同所得到的测试结果差异很大,客观设置测试参数关系到模型交易效果的真伪和对模型的最终取舍。程序化交易模型的测试结果对未来市场有多大的适用性是由以下三大要素决定的:

一是测试的品种数量。所测试的期货品种越多,越能检验出模型对不同品种的适用性。

二是测试的时间跨度。测试所采用的历史数据越多、时间跨度越长,测试涵盖的各种市场状况就越全面,模型的可靠性就越大。

三是交易成本费率的设置。除了手续费费率设置的高低会影响模型盈亏效果以外,另一个最重要的设置参数就是滑点问题。

所谓滑点,是指下单价与实际成交价之间的差价。在期货市场,滑点的产生大部分是因为行情波动剧烈,导致网络数据传输延迟。例如,股指期货某合约盘中即时报价为:买价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跳,以保证是在扣除了足够交易成本的条件下得到的测试结果。如果即便是在手续费费率和滑点设置都较高的情况下模型仍能盈利,则说明该模型的盈利效果比较好。评价程序化交易交易模型性能优劣的指标体系包含很多测试项目,但主要评价指标有年化收益率、最大资产回撤、收益风险比、夏普比率、胜率与盈亏比等。

2、年化收益率与最大资产回撤

交易者最关心的是所建模型到底能不能赚钱,能赚多少?而衡量交易模型赚赔的多少和快慢通常是用年化收益率表示。年化收益率仅是把不同时间周期段的收益率(如日收益率、周收益率、月收益率)换算成年收益率来计算的,是一种理论收益率,并不是真正的已取得的收益率。程序化交易中的年化收益率其计算公式为:年化收益率=有效收益率/(总交易的天数/365);有效收益率=净利润/最大使用资金。例如某交易模型在五个交易日内三天赚两天赔,一共取得的有效收益率是0.1%,则该模型的年化收益率是7.3%。该指标主要是为建模者提供比较直观的盈亏数据,供投资者在将该模型收益与其他投资收益做比较时参考。

任何一个程序化交易交易模型都不可能保证每次交易都是盈利的。出现亏损是正常的,但如果亏损幅度过大则会引发模型使用者的担心。尤其是如果模型辛辛苦苦赚了许多天,一天就亏的回到使用前,那表明模型存在重大风险隐患。于是使用 “最大资产回撤” 指标,来衡量模型在一段较长时段周期内可能面临的最大亏损。

最大资产回撤是指模型在选定的测试时间周期内,在任一历史时点的资产最高值,与资产再创新高之前回调到的资产值最低点时的差值。最大回撤用来描述模型运行可能出现的最糟糕的情况。它是衡量程序化交易模型性能的一个重要风险指标。

有两种方式表示最大资产回撤。 一种是采用最大资产回撤的绝对值来表示,即:最大资产回撤值=前期最高点-创新高前的最低点;另一种是采用最大资产回撤率来表示,即:最大资产回撤率=(前期最高点-创新高前的最低点)/前期最高点。

注意,上述两个回撤指标的区别在于:前者是按回撤金额的最大绝对值来计算,而后者是按回撤比例的最大值来计算的。比如说,一个原始金额为100万元的账户,在刚开始交易的5次时间内就发生了一个30万元的回撤。而此账户在交易一段时间后,总金额增长到了200万元,此时又发生了一个40万元的回撤。如果以金额回撤来计算,是后者40万元的回撤大。但是以比例来计算,则是前者30万元的回撤大。

通常,衡量程序化交易模型回撤风险大小采用的都是按回撤金额的最大绝对值指标,能够知道究竟最多会亏多少钱,对模型使用的风险性有实实在在的认知;如果采用回撤率指标往往会使得模型使用风险看上去没那么严重。最大资产回撤并不知道会什么时候发生。如果程序化交易模型是先赚到钱然后资金才有回撤, 那大部分人还可以接受,但如果一开始模型就有30%的资金回撤,使用者能接受吗?

3、收益风险比

评价程序化交易模型的获利能力,并不是单纯看收益率,而应该看盈利与最大资金回撤两者之比,即收益风险比的大小。收益风险比的含义是指为了获取预期收益,投入的本金会冒多大的亏损风险,即所获取的潜在盈利与所承受的风险额度之间的比值。衡量程序化交易模型的收益风险比公式为:收益风险比=年度收益/最大资产回撤。比值越高说明模型的盈利能力越强,越值得采用。假设预期投资收益为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%。一旦发生,资金赔光,交易就没有办法继续下去了。因此,只是追求模型的收益率而忽视模型的回撤风险是极其冒险的激进策略。所以说,尽管模型的收益风险比相同,但交易结果还要取决不同的资金管理策略。

4、夏普比率

评估程序化交易模型的优劣应该从收益期望和风险两方面综合考虑。风险调整后的收益率就是一个可以同时对收益与风险加以考虑的综合指标,以期能够排除风险因素对绩效评估的不利影响。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%,客户大概就要跑光了。因此模型设计者常常想尽办法改善模型策略,提高夏普比率。

采用夏普比率评价模型的不足之处在于仅仅考虑了收益的平均波动水平,而没有考虑资金最大回撤情况。市场中真正的风险来自于极端的损失。下面通过一个简单例子加以说明。
假设模型A和模型B的每月收益情况如下:

设年化无风险利率为6%,计算得到夏普比率和其他指标如下:

如果仅仅比较夏普比率可以得知模型A要优于模型B,但是模型B的最大的资金单月回撤仅为4%,累计回报率要高于模型A;而模型A的最大单月回撤达到10%;对于投资者而言,这是一个较大的单月回撤水平,投资风险较大。可见,仅仅比较夏普比率无法全面评价模型优劣。

5、胜率与盈亏比

测评程序化交易模型优劣的主要评估指标还有两个:胜率与盈亏比。

胜率 是指在当前的成本设置下,模型盈利交易次数占总交易次数的比例,即:胜率=盈利交易次数/总交易次数。

有部分投资者格外看重胜率,认为越高越好,至少希望胜率在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;至于胜率高当然好,但关键是要和盈亏比指标结合一起来评估,盈亏比高的模型胜率低一些也无所谓,所以胜率并不是关键性指标。再权衡其他测评指标,最终就能够获得初步满意的程序化交易模型。


来源:开拓者金融网


(jiangxiaoyu610) #2

@iQuant ,在我的认知中,测试和评估一个模型是用文中提到的各个指标。但是昨天逛知乎,看见一个人说评估模型他会用到pnl分布,偏度,filter,pnl的条件分布以及信息增益。这些东西我基本都没有用过,请问有大神知道这些在评估模型中都如何使用吗?如果有实例,或推荐相关文献就更好了 ,先谢谢各位,另外再@一下管理员大神,不好意思老麻烦您,您看能做一下解答吗^ - ^