在数学中,对于可导函数,可以完美的定义最优化问题: 对导数泰勒展开,相当于应用二阶导数寻找极值方向,收敛速度更快。 和梯度下降法类似,仅需要一阶导数信息,但是克服了收敛慢的缺点,算是解大型非线性最优化最有效的算法之一。在各种优化算法中,共轭梯度法是非常重要的一种。 由美国的J.Holland于1975年首先提出的启发式算法。遗传算法是一种智能随机搜索算法。遗传算法仿照自然界中生物的进化过程,种群的进化遵从自然选择和适者生存,更适应环境的个体有更大机率存活和繁衍,适应性差的个体则会被淘汰,携带较高适应性基因的父母进行繁殖可能产生适应性更强的后代。遗传算法模拟上述过程,其一般流程如下: 其基本思想是把某类优化问题的求解过程与统计热力学的热平衡问题进行对比,试图通过模拟高温物体退火的过程来找到优化问题的全局最优解或近似全局最优解。金属退火原理是将金属加温至充分高,再让其徐徐冷却,加温时,金属内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。 3.蚁群算法(Ant System, Ant Colony System) 是由意大利学者Dorigo、Maniezzo等人于20世纪90年代提出来的启发式算法。 将蚁群算法应用于解决优化问题的基本思路为:用蚂蚁的行走路径表示待优化问题的可行解,整个蚂蚁群体的所有路径构成待优化问题的解空间。路径较短的蚂蚁释放的信息素量较多,随着时间的推进,较短的路径上累积的信息素浓度逐渐增高,选择该路径的蚂蚁个数也愈来愈多。最终,整个蚂蚁会在正反馈的作用下集中到最佳的路径上,此时对应的便是待优化问题的最优解。 蚂蚁找到最短路径要归功于信息素和环境,假设有两条路可从蚁窝通向食物,开始时两条路上的蚂蚁数量差不多:当蚂蚁到达终点之后会立即返回,距离短的路上的蚂蚁往返一次时间短,重复频率快,在单位时间里往返蚂蚁的数目就多,留下的信息素也多,会吸引更多蚂蚁过来,会留下更多信息素。而距离长的路正相反,因此越来越多的蚂蚁聚集到最短路径上来。比如下图: 两只蚂蚁从A点出发,一只走AD,一只走ACD,每个单位时间走一步,考虑9个单位时间之后,第一只走到了终点D,第二只刚走到C,仅仅是一半的路程。 第一只蚂蚁开始返回,等到第二只蚂蚁走到D时,第一只返回到了起点,这时过了18个单位时间。这时,AD中每一步的留下的信息素是ACD路径中信息素的两倍。36个单位时间后,第二只蚂蚁刚返回起点,ACD每个点上留下2个信息素,但是ABD上留下4个信息素。然后蚁群在AD上增派蚂蚁,ACD上依然一只蚂蚁,再经过36个单位时间后,两条路线上的信息素比例为4:1,这样随着时间的增加,蚁群在AD上增派的蚂蚁越来越多,信息素也越来越多,最终所有蚂蚁都放弃ACD,选择AD。 蚂蚁具有的智能行为得益于其同时具有多样性和正反馈的行为规则。在觅食时,多样性使蚂蚁不会走进死胡同而无限循环,是一种创新能力;正反馈使优良信息保存下来,是一种学习强化能力。两者的巧妙结合使智能行为涌现,如果多样性过剩,系统过于活跃,会导致过多的随机运动,陷入混沌状态;如果多样性不够,正反馈过强,会导致僵化,当环境变化时蚁群不能相应调整。 蚁群算法可以用来解决经典的TSP(Travelling Salesman Problem)问题。 AS算法中,需要定义信息素强度,能见度,随机选择比例等一系列符号体系: 假 当 AS算法的大致步骤如下: 经典蚁群算法可以轻松应对城市小于75的问题,这些年,蚁群算法有大量的变种,越来越完善,可以解决更大型问题。经过对比,在大型TSP问题中(最多包括132个城市),蚁群算法表现要优于遗传算法和模拟熄火。 对于一组随机数据
![]() 2、对上述期望值直接用x领域附近的点进行平均估计,比如
不管使用什么思路构造估计模型,估计的效果可以用平方损失进行衡量,可以构造一个叫做均方误差(Mean Squared Error,MSE)的指标衡量估计值和真实值之间的差距,假设训练数据集为 其中 ![]() ![]() (三)CTA策略的寻优难题 CTA策略的参数寻优问题,看起来很简单,但问题的本质其实和前面介绍的理论背景息息相关,这个问题是数学的,又是统计的,同时更是艺术的。 回到CTA策略的本质,想想我们在构造一个什么样的东西。 1、变量 CTA策略中,最本质的变量其实是价格,和数学问题相比,这个价格变量是随机的,和一般统计问题相比,这个变量是个近似连续的随机过程(每个tick都是一个随机变量)。 当我们引入CTA这个语言体系,其实是已经假设要对趋势进行刻画和跟随,tick层面的数据无法进行有效的趋势跟随,因此把tick数据抽样成给定周期的K线数据,就是非常重要的一步。因此我们的面对的变量,可以看做是个离散时间的随机过程。但是,我们处理这个随机过程的方法并不是追求平稳性变换,最终根据随机过程各个变量在时间层面的稳定性,发掘出整体的概率结构。 2、目标 CTA最核心的假设是,大部分时候随机过程在震荡,少部分时候,出现明显的方向性趋势,我们的目标就是根据方向性趋势的出现进行趋势研判的预测(gen sui),获取收益,如果预测(gen sui)错误,或者方向回调,就止损出场,等待新的信号。 针对这个假设我们构造的交易系统,其实就是一个用来解决上述问题的函数,这个函数的输入虽然是一维随机过程,由于我们要使用随机过程的时间信息,实际上是个高维向量,我们针对高维向量通过交易函数(入场、止损)计算出来对应的交易业绩。 上面
CTA参数寻优最尴尬的地方在于我们对 回到CTA参数寻优,我们面临的问题并不是数学优化中梯度下降快速找到最优解的问题,也不是统计估计中根据随机结构平衡方差和偏差得到最优估计的问题。真正的问题在于我们面对一个数据随机,但是我们对随机结构并不知晓的估计,同时我们的估计损失函数是一个复杂的交易系统(哪怕最简单的均线系统,也不是一个简单的数学函数),如果我们在样本内暴力寻优,可能可以让估计偏差最小,但是这个交易系统的稳定性非常差,因此大逻辑上可以做到的只能是让交易函数尽可能保持简单, 3、手段和方法 1)控制参数个数 一个优秀的交易系统,可变的参数应该是2,最多不要超过3,这一方面控制了交易系统的复杂度防止高度拟合,也防止在更高维度估计参数引起的高维诅咒。因为交易系统本身对K线进行了降维处理,参数的个数类似于变量的个数。 2)避免业绩孤岛 对于 漫长的技术分析发展史中,技术分析师们根据交易实践矫正了很多有实际用途的参数,比如5/10/20这种或者7/14/21这种和周、两周、月等历法对应的实践,又比如1/2/3/5/8/13/21/34/55这种Fibonacci数列,经验参数本身就是避免过度拟合的方法之一,如果经典参数和平滑业绩相对应,那一般是可以接受的。 常见算法是: 上述方法是量邦天语定义的后验方法,运行时日志如下: 其输出的热力图示意如下: (二)局部线性估计 局部线性估计是一种非常重要的现代非参数统计方法,其核心思想是在每个局部用线性结构来拟合目标函数,但是整体上保持灵活性和动态性,从而平衡估计函数的方差和偏差。我们将局部线性估计应用于参数寻优,最核心的思想是暴力寻优后,把参数当做自变量,把业绩当成函数值,然后对业绩曲面进行局部线性估计平滑,从而掌握参数曲面的整体形态,更好应用前面提到的几个参数寻优原则。 局部线性估计的平滑结果受核权重函数的影响并不大,但是受平滑窗宽的影响非常大,包含进平滑的样本点个数决定了业绩曲线的光滑度,会产生平滑不足或者过度平滑的问题。 精确最优的平滑窗宽需要知道模型随机误差的分布信息,实际上这些信息完全不可知。通常的窗宽用一种经验算法来确定,假设随机误差是正态分布,并用到业绩样本标准差信息 (三)移动平滑估计 如果是抽样解决效率和精度问题,局部线性估计提高寻优结果的可读性,移动平滑方法从根本上改变寻优的思路,通过对样本的切割,把寻优数据和评估数据加以区分,沿着样本移动若干次之后,对若干对参数的样本外业绩进行综合评估,这有些借鉴Cross Validation的统计学思想。 假设我们一共有
综合考虑所有窗口中的结果来确定策略表现的有效性和参数的稳定性,输出下表 我们对前面的优化问题进行适当简化,以200天为样本内数据滚动寻优,可以得到下图: 有些时候,人们喜欢把多参数和多策略、多品种、多周期并列为同一级别的四多,获取实际意义上的分散。乍看参数寻优并不属于品种、策略思路和周期一个维度的问题,是要通过寻找分个彼此高下的问题,但是我们建议,不妨在一定的程度上,把参数也当做一个策略维度,进行配置,对于两个距离较大,但是业绩都还不错的参数取值而言,这种分散相当于更加稳健的策略结构,有些机器学习boosting的思路。最重要的是,多参数和多策略、多周期,其实也是一种平衡关系。 |
|