程序化参数优化问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何解决在程序化交易中参数优化的问题程序化交易的书籍在市面上层出不穷,大多数打算进行程序化交易的朋友都会去阅读一两本或者更多。我敢肯定通过阅读大家会发现,这些书里面每一本都会提到交易模型的参数优化的问题。这是由于现代的计算机处理技术发展的同时也带来了一些困惑,程序化交易可以说是建立在计算机和通讯技术的基础之上的一种交易手段,如果没有这些基础设施,那么程序化交易也就不能存在。正是有了可以高速运行的CPU才使我们可以对参数进行优化。光凭技术手段并不足以解决所有交易的问题,这就是为什么说交易是一门艺术之所在,而我们使用机械的交易方法是为了尽可能的避免人为的判断和情绪对交易的不良影响,在我们没有形成自己的一套交易体系之前通过机械的方法来进行交易无疑可以少走很多弯路,把时间和金钱留给我们用来积累更多的经验,让我们首先确保在市场中生存,再去追求如何使交易变成艺术。因此作为一个力求以科学和规律的方法解决交易的问题的人,我试图通过本文来解决大家在程序化交易中参数优化这个矛盾的问题。
什么是参数优化
在这里首先我们介绍一下什么是参数优化,以便一些刚刚接触程序化交易的朋友阅读本文,已经了解这方面知识的朋友可以掠过本段。
对于一些模型来说会有一些参数,这些参数设置的主要含义可能是为模型提供一个周期,举个例子来说象n日均线上穿N日均线(n为短周期均线参数,N为长周期均线参数,一般短周期的移动平均要比长周期的变化要快,所以我们通过这两个不同周期的均线来制定交易计划),n和N参数的意义就是指定周期,一般来说参数的意义都与时间有关系(周期),但也有其他的用途。参数优化实际上就是利用计算机的处理能
力对参数的各个值进行一次测试,找到盈利最大的那次值,如上面函数的n和N,我们利用系统的参数优化功能就可以把n(1~10),N(10~30)都测试一遍,找到最好的那个值。
参数优化的基本矛盾
参数优化的基本矛盾在于,我们选取出的最优的参数数值只是在我们历史数据上成立的,就是说我们是往回看用这个或这组参数能够获得最大的收益,但行情的发展却是无法完全预料的,我们可以找到历史上表现最好的参数,但是这个参数未必在未来是最好的。因为每种系统设置参数的用意不同,更有甚者可能历史上最好的参数在未来可能就是一组很糟糕的参数。比如一个参数的设置刚好让你抓住了一波大行情,在参数优化取到这样的值时很有可能对未来没有任何帮助。当然有些参数优化是由于减少了平均的亏损率使你的系统的效果更好,这种参数优化可能对未来会有一定意义,但也不是绝对的,因为行情的发展有其不可预知的一方面。
所以参数优化的基本矛盾在于历史统计结果和行情未来发展之间的矛盾。我写本文的主要目的就是为了在这样的问题面前,我们该如何处理,如何辩证的看待参数优化带来的利与弊,更重要的是提供一个方法让大家面对参数优化的时候知道该怎么办。
统计研究
为了研究这个问题,首先我对我自己使用的一个很成熟的模型的各个参数值进行了测试,并把一些关键的数据如收益率,交易次数进行了统计。首先介绍一下我的交易系统,我的交易系统是属于趋势跟随型的一个交易系统,跟所有趋势跟随型的交易系统有着同样的特点。就是趋势形成的时候进入头寸,当权益回吐一定程度的时候认为是是趋势结束了轧平头寸,胜率不高,但在趋势市中能够赚钱来弥补在盘整震荡市中必然要赔的钱。这个系统只有一个参数,其设置的目的是为了给系统中所使用的计算公式和
技术指标提供周期。
这里需要提到的一点是,很多人说模型最好不要设置参数,做好了模型应该把参数固定在模型内部不再改变,我对这个观点持有不同的看法,我认为市场总是在变化的,而我们使用模型就是为了抓住这种变化中的规律,当然这种规律也是会变的,我给我自己的模型留有一个参数就是为了调节这种变化,比如使用均线系统,这几年因为这个品种总是大起大落,那么我们使用短一点的周期就可以了。因为行情变化的总是比均线走的快,不会总触发平仓或者开仓条件,但是过了几年发现这个品种不是那么活跃了,那么我们就应该调整参数把周期调长一些,以适应市场。而不是以一刀切的观点认为没有参数就不再面对参数优化的问题了。这个观点之所以错误,是他看到了参数优化的矛盾,而没有意识到我们做交易的最根本目的是什么。我们做交易最根本的目的是在于获取利润,而不是逃避仅仅一个参数优化的问题。不过这里还需要提醒的是,参数固然要设置,但是不能设置过多,设置最多两个足矣,自己必须搞清楚设置这个参数的意义是什么。参数设置过多一方面代表的是你的交易思想的不成熟,因为成熟的交易思想是抓住市场中本质的东西,而本质的东西并不需要太多的变量来对其进行描述;另一方面,过多的参数等于说给程序更大的灵活性,以适应更多情况的行情,但你在选择参数的时候会面对更大的困惑,因为多参数的模型经优化后的一组参数值很有可能是让你灵活的系统最符合历史行情的情况,这就是所谓的“参数拟合”。
下面我提供一个通过统计我的模型参数从1到120各个值的时候,盈利和交易次数的图表。为了保持数据来源的一致性,这里我们将这些值都在豆粕主力(由文华系统提供的主力连续数据)2003年9月19日到2008年9月19日这段时间进行测试(测试系统为文华mytrader2008)。
我们可以发现图1和图3两条曲线非常的相似,我们可以通过回归分析计算出
你的交易系统的这条关系曲线,但是其实没有多大的必要。这里主要说说为什么会形成这样形状的一条曲线。首先我们使用的系统是趋势跟随型的系统,我们设定的参数的含义是周期的长短,当我们选取的参数较小的时候,系统中使用的周期(如移动平均)较短,所以系统也较为灵敏产生的信号也就多,当参数较大的时候,系统中使用的周期较长,所以系统所产生的信号也少。当系统在周期较短比较敏感的时候,每调增一些周期所降低的交易次数,要大于在周期较长的时候。这就是为什么这条曲线是这样的原因。
之所以我做了参数与交易次数关系统计,一方面是因为这是我们选取系统的一个参照,因为交易次数多所带来的交易费用也就多,有些人的性格希望系统能多提供一些信号,有些人希望系统的信号不要太多;另一方面我发现绝大多数参数为时间周期的趋势跟随系统的交易次数与参数之间的关系都符合这样的一个规律,所以大家以后在对自己系统进行研究的时候就不用统计交易次数了,节省了大家的时间。大家只用知道这种以时间周期为参数的趋势跟随系统的交易次数会随着参数增加而减小,而且在参数比较小的时候减少幅度大,参数比较大的时候减少幅度小,当你在在考虑选取交易次数大的参数还是交易次数小的参数的时候就只用比较这两个参数的大小就知道他们交易次数上的变化了。
接下来通过观察图2我们发现,参数值使模型能够盈利的情况大多集中在一段连续的参数范围内,如我的这个系统的在3~14之间,82~95之间,最优的参数是11(见图2)。我们管这些能够使模型盈利并且连续的参数值所构成的一段区间叫做参数有效域,对于豆粕过去5年的数据来说我们模型的参数有效域是3~14,82~95。一般来说总是会有一段连续的参数构成有效域,这是由于有效的系统是必须能够抓住某个特定市场的本质特性,而这个特性是一个比较稳定的状态,不是经常发生变化的。而如果出现参数设为3能盈利,4就是亏损,5又能盈利,6就得亏损……这样的情况,要么说