正文
本篇源于在知乎的一个讨论话题再整理,原始讨论地址:
量化投资中有没有完美的参数寻优方式? - 金融
原始的几个发问:
一些一直在思考的东西,大家一起聊聊?
1.有没有最完美的参数寻优方式?有没有最完美的参数选择方式?
2.有没有最完备的参数寻优方式?有没有最完备的参数选择方式?
3.参数寻优时对于不同的时间周期,多长的回测数据具有说服力?
4.对于整体样本,是否有必要区分样本内和样本外,若有必要,那么样本内和样本外的长度分别是多少合适?
5.如何避免过度优化?
6.给出不同参数下的资金曲线,选取什么目标函数来进行参数选择?为什么选择该种目标函数,是否有更加有效的目标函数?
7.给定目标函数的情况下,如何选取最稳定的参数(参数区间),选定参数的过程能否量化?
8.外推时,参数表现不好怎么办?再重新改进参数、调整策略?
9.有没有不依靠参数的策略?或参数自适应的策略?可否实战?靠谱否?
10.参数寻优的本质到底是什么? 直观解释是什么?
有的问题没有定论,我也一直思考,见仁见智,大家可以一起来交流。
==============================
有关参数优化的思考和总结 by 李洋faruto
这个问题肯定是见仁见智的,我这里给出两个分享和讨论,一个是自己的一点思考,另一个是MATLAB技术论坛会员fosu_cdm(论坛ID)陈道民Chandeman以前发过的一个文章。两个分享供大家参考,见仁见智,没有定论,欢迎斧正、讨论、交流。大家互相学习。
1.
参数优化、过拟合问题刍议(
by
李洋
faruto
)
在量化投资中,定量投资模型的设计好坏无疑是成功的关键,单纯从数学角度来看,一个交易系统(交易模型)仅仅是一个从行情序列到资金曲线的映射:
f(ts, para) = E
其中f是一个交易系统,ts是某一个投资标的(股票、期货、期权、外汇等等)的行情时间序列,para是交易系统的参数组,E是资金曲线。
任何一个模型几乎都会有参数(包括所谓的自适应模型)。
有参数的话,那么就会碰到参数寻优、过拟合等问题。
参数优化基于历史数据进行的策略优化。而历史并不能完全重演。历史中表现优秀的参数,在未来交易中未必会表现很好。
先来看下几种常见的参数优化的方法:
(
1
)
In
Sample-Out Sample
法
分割回测分析区间,将In Sample 区间的优化参数应用于Out Sample区间,分析收益、风险是否稳定的回测分析法。具体形式见下图:
这种来源于数据挖掘中的方法,看起来很美,但在量化投资中应用会碰到一堆的实际问题:In Sample和Out Sample样本大小的确定,合理有效地确定,针对不同的模型,日内、隔夜模型;长、中、段线模型。
(
2
)
Forward
Test
前进分析法
Walk
Forward Analysis (WFA)
具体形式见下图:
WFA与DataMining中的CV过程本质是一样,但DM中CV方法很有效,可以在一定程度上避免over fitting问题,但是DM中的数据形式算是比较固定化的,CV折数的确定也可以进行可列的尝试。
但在量化中,情形却大不通,策略类型的多样化(主要是长、中、短周期的不通导致不通模型的平仓持仓周期不通),那么问题就来了,在使用WFA的过程中,无法有效的给出针对不同类型的模型的一个合理的滑动窗口的确定方案,所以WFA仅仅是看上去很美。
到具体测试环节,以前针对一些常见的模型(ORB,均线等等),我系统性的详细做过一些WFA的测试,结果也不尽人意,由于金融市场中的行情都是人交易出来的,所以量化交易系统要比DM中的模型复杂很多,参数的分布区域也是随时间变化的一个函数,WFA并不能非常有效的避免过拟合 和
选出合理参数区间。
anyway,WFA作为参数鲁棒性的辅助测试方法工具还是可以使用。
在最后交易层面,在最终确定实际交易参数(组)时,可能可能好多团队或Quant会选择那些所谓的“参数平原”,来避免“参数孤岛”。比如下面的参数分布的某些区域。
但实际上这种方式也是有指的商榷和思考的地方,我做过相关测试,如果把时间参数看出自变量,把参数的稳定区域看出因变量,你会发现:不同模型的参数稳定区域会随着时间的变化发生迁移,即那些我们曾笃信的参数稳定区域会随着市场节奏和市场参与主体的变化而变化,那些在过往测试中稳定的区域,未来也非常有可能变得极其不稳定。
或者换句话说,如果你的目标函数不是个稳态函数,你找到的参数分布区域也不一定是稳态的,那么什么样的目标函数是稳态函数呢?理论层面可以根据泛函分析进行相关的分析和验证,但在实战层面这个没有定论,哪怕是看起来很好的sharpe ratio指标。
那么到最后在实战层面,参数的选择有可行且有效的解决方案吗?这个我也仍然在思考,我当下能给大家分享的解决方案是:
参数分散化、在盘子足够大的情况下尽量将参数打散,不要单纯笃信那些所谓的历史参数稳定区域。
2.
关于参数优化的一些肤浅认识(
by
陈道民
Chandeman
)
难得周末,DOTA打得多也厌烦,还是写点什么吧,免得大学浪费掉了。
最近李洋兄(@faruto)又发起了一次关于参数优化的相关问题的探讨,我也来凑合凑合吧。
一,关于参数问题
参数问题可以描述为:f(M,S,P)=Output ,即对于M(或者是品种及品种组合),使用S交易策略(或组合),采用P参数(或组合),得到output输出(包括收益、胜率、盈利因子等等)。由于M是历史数据,S是你所使用的交易策略,那么在给定的M和S下,output就依赖于P的输入。
在此基础上,那么过度拟合就表现为,
f(Mi,S,P)=f(Mj,S,P)+e ,即在给定的策略S和最优化参数P下,不同的M(对于同一个市场或同一个品种,Mi 和Mj 我们也可以理解为训练集合测试集。 )有不同的output,并且其误差 e 趋于正无穷或超过我们可接受的范围。
二,关于模式问题
讨论参数优化问题,其实可以在一定程度上理解为希望在给定的S和P下,在不同的M下测试得到的output具有一致性,即把M给常数化。我们的解决方法是把M给抽象掉,引进模式识别,从而跳出M的视野,找到不同M的共性,然后从pattern的角度来考量参数优化的问题,即f(S,P;pattern(i))=output 。这样一个好的策略S或者参数P在不同的pattern中所得到的output应该是相对稳定的(或者至少在有利的pattern中表现出色,在不利的pattern其风险(最大资金回撤深度和长度)应该是在我们的控制范围之内的,并且基于历史统计的有利pattern发生的概率要显著大于不利的pattern发生的概率),我们可以用标准差std(output(i)) (实际中,我们往往只需要output中的某些信息而已,例如收益、盈利因子或者最大资金回撤等等)来描述其稳定性程度。因此,参数的寻优就表示为在参数Pj下,Min(std(output(i,j))) 。
我们在实际中往往需要对原始样本进行随机化处理,然后进行大量的模拟和比较。
这时我们还需要关注ei,sum(ei)应该落在我们可接受的范围之内,并且奇异的ei越少越好。
当然在实际操作当中,有很多细节需要处理:
(1)如何定义pattern,这个依赖于各自的交易理念、规则和交易级别等等;