更多
首页 >  头条 >

【年度报告】程序化交易系统开发陷阱及优化_即时

2022-12-30 10:45:48 来源:

摘 要

1.程序化交易系统是指根据事前制定的开仓、平仓、资金及仓位管理、风险控制等一系列交易规则,将交易策略模型化,并由计算机执行自动化交易。但程序化交易并不是简单的自动化交易,它是由交易策略、代码编写、历史数据回测、参数优化、模拟应用检验、实盘交易、跟踪监测、模型优化完善等众多环节构成的动态系统。

2.经常有投资者在实际运行交易系统前,因为策略的历史测试收益曲线图平滑向上,对系统的盈利能力非常自信,但实盘之后,资金曲线却拐头向下,表现一般甚至大幅亏损。导致这种现象出现的原因包括前视偏差、过度拟合及优化。针对前视偏差、过度拟合及优化,本文提出相应的优化解决方案。


(相关资料图)

3.程序化交易不仅仅是简单的交易策略代码化,需要跨越程序化交易实现过程中的重重陷阱,合理有效的构建交易策略,消除代码中的前视偏差,避免过度拟合、过度优化,正确实现策略参数组合的优化,最终才能开发出可应用于实盘的自动化交易系统。

一、程序化交易系统及优化

(一)程序化交易系统定义

程序化交易系统是指根据事前制定的开仓、平仓、资金及仓位管理、风险控制等一系列交易规则,将交易策略模型化,并由计算机执行自动化交易。但程序化交易并不是简单的自动化交易,它是由交易策略、代码编写、历史数据回测、参数优化、模拟应用检验、实盘交易、跟踪监测、模型优化完善等众多环节构成的动态系统,如图1所示。程序化交易在投资实战中不仅可以提高下单速度,还可以帮助投资者规避情绪波动的负面影响,消除交易时人性的恐惧、贪婪,实现理性投资。研发一个优秀的程序化交易系统,获取稳健的投资收益,是众多投资者追求的目标。在构建程序化交易系统时,不可避免地要进行模型优化,而如何选择合理的模型参数是程序化交易的重要环节之一。

图1:程序化交易的系统动态过程

数据来源:徽商期货研究所

(二)程序化交易系统的优化

程序化交易系统优劣核心在于模型的交易逻辑,即模型交易思想的合理性,而参数是交易策略的基础。按照上图1所示,交易策略在经过历史回测及策略效果评估后,可能会存在很多问题,需要对系统进行优化,优化的基本方法包括策略思想调整和策略参数优化。当交易系统的策略思想构建逻辑比较合理,参数优化可以在一定程度上提升模型的收益表现。我们借助计算机强大的计算功能,可以快速观察到模型在不同参数下历史回测的收益表现,从而选取较优的参数应用于模型中。参数的选取不仅需要结合主观的判断,同时也要结合市场行情进行适当的调整,但是投资者在选取策略参数时往往掉入参数优化的陷阱之中,舍本逐末,越行越远。

二、程序化交易系统开发陷阱

经常有投资者在实际运行交易系统前,因为系统的历史测试收益曲线图平滑向上,对系统的盈利能力非常自信,但实盘之后,资金曲线却拐头向下,表现一般甚至大幅亏损。导致这种现象出现的原因包括前视偏差、过度拟合及优化。很多程序化交易者最初优化参数时,因过分关注模型在历史行情中的收益表现,往往容易犯这两类错误,而这些错误对程序化交易系统的影响往往是致命的。

(一)前视偏差

前视偏差是指在程序化系统开发中使用不当的信息或数据,这些信息或数据在实盘交易中是不可能被知道或获取的,因此导致策略历史回测的结果不准确。前视偏差主要表现在两个方面:一是未来函数,二是偷价及信号闪烁。未来函数是指可能引用未来数据的函数,即引用当时还没有发生的数据对之前发出的判断进行修正的函数,下文中的偷价及信号闪烁均由未来函数导致。例如均线策略中,当最新价上穿均线时以当根k线的开盘价开多即存在未来函数。该模型进行历史数据回测计算时,当收盘价上穿均线时以当根k的开盘价开多,但是实盘中最新价向上突破的那一瞬间却无法以开盘价成交,即存在偷价行为。历史数据回测时以开盘价统计开仓点位,极大的提升了策略收益表现,而实盘往往无法获利或盈利大幅减少。信号闪烁是指程序发出了不稳定的交易信号。一旦出现这种情况,程序会在极短的时间之内,反复多次进行开平仓操作。例如上述双均线策略如果以收盘价开仓在实盘中会出现信号闪烁,当根k线未完成时,最新价即收盘价,当最新价满足上穿均线时开多,但是随着行情的波动,最新价再次回落至均线之下即不满足金叉条件时,那么这个交易信号就会消失,但之前已经发出开多信号并持有多单,同时在这根最新k线未完成之前,可能会反复出现开仓信号然后再消失,导致频繁开仓。未来函数导致的偷价、信号闪烁统称为前视偏差,均用未来价格决定买卖操作,策略开发中要极力避免这种错误,降低模型风险。

(二)过度拟合及优化

过度拟合表示一个程序化交易系统在历史回测时表现优异,但在实盘交易中收益却不及预期。一般交易者对交易系统进行历史回测时,往往会根据回测结果对模型的交易规则进行重新训练形成新的交易规则(如增加模型的判定条件或参数个数等),这样形成的交易系统很容易对市场表现拟合。例如趋势策略中为了最大限度的过滤震荡行情而加入多个判定条件或参数,大幅降低了策略的交易次数,模型收益表现显著改善,但只是抓住了历史中个别趋势行情,一旦未来行情波动性特征发生变化,该趋势交易策略未必能适应新行情并有优异表现。如图2所示,在菜油2301合约15分钟周期上的加载趋势策略,回测时加入震荡过滤条件及参数优化后,完美获取2022年6至7月的空头趋势行情,但是待下跌趋势企稳反弹后,策略不但无法及时抓取对应的波段行情而且频繁止损,策略的收益率曲线亦呈现较大的回撤。该趋势交易策略存在过度拟合。

图2:趋势行情的过度拟合及优化

数据来源:交易开拓者、徽商期货研究所

过度优化是指程序化交易系统在历史数据回测中对已有的参数反复优化后选取最优参数值,如果附近参数系统的性能远差于最优参数,那这组最优参数有可能是过度拟合的结果。图3是模型在不同参数条件下的年化收益风险比热力图,红色代表年化收益风险比高,绿色表示年化收益风险比低,经过模型的参数优化后确实能找到收益表现较好的几组参数,但纵观整个参数分布图,红色区域分布稀疏(只有个别几组参数收益风险比大于2),多数绿色区域代表策略是浮亏的,如果该系统采用仅有的几组优质参数进入实盘交易,未来收益大概率表现较差。

图3:参数的过度优化

数据来源:徽商期货研究所

三、程序化交易系统优化方法

针对上文提出的两类交易系统开发陷阱,下文提出相应的优化解决方案。

(一)消除前视偏差

投资者在实现程序化交易系统的过程中需要严格规避前视偏差的出现,一旦策略系统中包含有未来函数导致偷价或信号闪烁,即使历史数据回测时收益表现优异,但发出的买卖信号在实际操作中毫无价值,是一种交易欺骗行为。

偷价在程序化交易中出现频率较高,有些偷价行为很容易发现,而有些偷价行为却很隐蔽。例如,图4中程序化策略中规定,如果最高价突破某个固定价格以开盘价买入,该条件中,最高价已经远离开盘价,用开盘价买入基本成交不了,但在历史数据回测时,图表上的买入信号是存在的,这就是明显的偷价行为。当上述开仓条件有些投资者做了优化,约定最高价突破某个固定价格时买入,但是一旦价格向上跳空高开,固定的价格即使不是开盘价也无法成交,这是比较隐蔽的偷价行为。规避上述偷价最简单直接的方法就是用开盘价和固定价格的最大值作为开仓价,可以最大限度消除偷价带来的影响,更贴合实盘交易。

图4:偷价行为

数据来源:交易开拓者、徽商期货研究所

信号闪烁可采用不可逆的条件做信号判断,包括滞后的历史数据、最高最低价等。例如在双均线策略中,采用上一根k线的收盘价计算均线值,因上一根k线的收盘价已经确定,计算出来的均线值不会随着时间的变动而变化,而是一个确定值,再用到策略中判定条件是否满足时不会存在未来函数和信号闪烁等问题。而在高低点突破策略中,可采用最高价、最低价向上或向下突破某个固定价格时买入或卖出。由于某一根k线的最高价、最低价只能不断的增大或减小,突破条件一旦满足,出现的信号则不会消失。

(二)规避过度拟合及优化

1.如何规避交易系统的过度拟合及优化

程序化交易系统的策略逻辑主要来源于市场行情和交易数据两方面,即基于投资者对市场行情走势长期观察总结的规律开发的交易策略及交易数据统计分析形成的交易策略。随着计算机技术及大数据分析的快速发展,后者在金融市场得到了广泛应用。投资者将开发出的交易系统做历史数据回测,以观察其在历史上的收益表现,再根据测试结果对交易系统规则进行优化或重组,这样建立的交易系统很容易出现对市场行情的拟合。在程序化交易策略具体设计过程中,避免过度拟合主要从以下三个角度出发:首先,增加历史回测中数据样本容量,避免交易次数过少。如果回测时选取的样本容量过小,则无法有效的描述标的品种的市场波动性特征,而交易次数过少往往是因为过滤条件太多,对亏损的交易进行了强过滤,是典型的过度拟合。其次,交易系统的核心参数不宜过多,尽可能用较少的规则和参数来构建交易系统。最后,全市场多品种测试,一般情况下,策略的普适性越高,过度拟合的可能性就越小。

2、如何实现参数优化

程序化交易系统在完成历史回测后,参数的优化至关重要。首先,参数优化中要获取参数高原而不是参数孤岛。参数高原是指存在较宽的参数区间,交易系统在这个参数范围内收益表现普遍较好,一般会以高原的中心形成近似的正太分布。而参数孤岛是指只有在很小的参数范围内,模型才有较好的表现,而当参数偏离该值时,模型的表现显著变差。如图5、6展示的是同一策略加载在不同品种上的收益风险比三维绩效图,Z轴是收益风险比,X、Y轴分别对应着参数1、参数2的值。图5在不同的参数组合下,收益风险比大于2的参数组合分布较为广泛呈现参数高原,即使参数组合有所偏移,策略模型的获利绩效能够得到保证。图6在不同的参数组合下,收益风险比大于2的参数组合很少呈现参数孤岛,多数情况下策略的收益风险比小于2,当参数发生小的偏移,模型的获利绩效就会发生较大的变动。

图5:参数高原

图6:参数孤岛

数据来源:徽商期货研究所

其次,交易系统做历史数据回测时尽量采用分段测试法,例如样本外递进检验法,使用一段历史数据进行参数优化,选择参数,应用参数到优化样本外的检验样本中,不断推进样本递进优化,具体方法如图7所示。样本外递进检验比起单纯的历史测试,能更真实的反应参数选取对未来绩效的影响。参数优化的重心更加偏向于如何确定参数选取的方法,而不是简单的历史绩效的比较。

图7:样本外递进检验

数据来源:交易开拓者、徽商期货研究所

最后,对交易系统的多参数优化时可采用逐步收敛法。即参数先通过大范围抽样海选,选取出表现比较优异的参数组合,再对已经筛选出的优质参数附近寻找更优的参数。为了节约参数优化的时间,可以对参数组合之间设置关系,例如参数1小于参数2,这样优化时,所有参数1大于参数2的情况不用计算,有效减少了参数优化的时间。

四、总结

程序化交易系统是投资者交易思想的凝练和实际化,每个成熟的投资者都可以根据自己的投资经验和方法,编写自己的交易模型再投入自动化交易,其最终目的是为了克服人性的弱点实现理性投资获取稳定收益。但程序化交易不仅仅是简单的交易策略代码化,需要跨越程序化交易实现过程中的重重陷阱,合理有效的构建交易策略,消除代码中的前视偏差,避免过度拟合、过度优化,正确实现策略参数组合的优化,最终才能开发出可应用于实盘的自动化交易策略。

标签: 交易系统 程序化交易 历史数据

上一篇:

下一篇:

国际
国内

要闻

健康

法制

体育