龙听期货论坛's Archiver

C
+
+


 微信: QQ:

龙听 发表于 2018-11-28 14:34

文华模型回测之参数优化让模型达到最优[文华财经公式]

[table=98%]
[tr][td]交易过程中有时会发现在一段时间内表现很好的模型,过了一段时间就好像失效了一样,这种情况是由于模型参数不再适应当前行情引起的,我们需要尽快寻找新的最优参数,而在海量的历史数据中仅凭人工去寻找如大海捞针,费时费力,机会渺茫。 "参数优化",可在指定的参数范围内让计算机很快筛选出最适合当前行情的参数。[/td][td] [/td][/tr]
[tr][td=3,1][table=98%]
[tr][td][table=98%]
[tr][td][color=#1e5096][size=18px][b](一)案例:利用参数优化,让止损参数顺势而为[/b][/size][/color][/td][/tr]
[/table][/td][/tr]
[/table][/td][/tr]
[tr][td=1,3,5%] [/td][td=1,1,90%] [/td][td=1,3,5%] [/td][/tr]
[tr][td]下图是一个带有追踪止损策略的沪胶品种5分钟策略模型,结束了小半年的单边下跌行情后,市场开始调整形态,从下图白色资金曲线可清楚的看到,资金曲线在近六个月不再保持稳定上升形态,证明原来的止损价差参数已经不能适应现在的市场,模型已经失效。
[/td][/tr]
[tr][td][attach]5594[/attach]
[/td][/tr]
[tr][td] [/td][td]下图是利用参数优化对模型的参数进行枚举和遗传后的结果,在使用新参数后,白色资金曲线更平滑稳定,新的参数更能适应市场行情。
[/td][td] [/td][/tr]
[tr][td] [/td][td][attach]5595[/attach][/td][td] [/td][/tr]
[tr][td] [/td][td] [/td][td] [/td][/tr]
[tr][td=3,1][table=98%]
[tr][td][table=98%]
[tr][td][color=#1e5096][size=18px][b](二)进行参数优化的操作步骤[/b][/size][/color][/td][/tr]
[/table][/td][/tr]
[/table][/td][/tr]
[tr][td] [/td][td] [/td][td] [/td][/tr]
[tr][td] [/td][td]
1、如下图所示是如何进行枚举:
来源 程序化久久 [url]www.cxh99.com[/url][/td][td] [/td][/tr]
[tr][td] [/td][td][attach]5596[/attach]
[/td][td] [/td][/tr]
[tr][td] [/td][td][b]设置参数关系如何减少参数优化时间:[/b]
[p=30, 2, left]有些模型各个参数间有严格的逻辑管理,以下面的模型为例:[/p][p=30, 2, left]MA5:MA(C,N1);[/p][p=30, 2, left]MA10:MA(C,N2);[/p][p=30, 2, left]CROSSUP(MA5,MA10),BPK;[/p][p=30, 2, left]CROSSDOWN(MA5,MA10),SPK;[/p][p=30, 2, left]AUTOFILTER;[/p][p=30, 2, left]模型中的两个变量必然遵循一大一小规则,这样的模型我们可以首先为他们设置参数关系,如N1<N2,这样在优化时,所有比N2大的N1值都不用参加计算,运算量可以减少1/2.这样每配置一个参数关系,计算次数就减少一半;配置4个,就减少到原来的1/16,以此类推,有效减少了参数优化时间。[/p][p=30, 2, left]如下图所示,软件正在进行枚举参数优化,为您筛选最优参数配置。[/p][/td][td] [/td][/tr]
[tr][td] [/td][td][attach]5597[/attach]
[/td][td] [/td][/tr]
[tr][td] [/td][td]2、参数优化计算完会以排序的方式显示优化出来参数组(如下图所示),按照下图步骤完成参数组的保存后,点击“关闭”按钮即可。
[/td][td] [/td][/tr]
[tr][td] [/td][td][attach]5598[/attach]
[/td][td] [/td][/tr]
[tr][td] [/td][td]3、结束枚举后,点击保存好的“优化参数组1/2/3/4”,准备进行遗传(如下图所示)。例如,刚才我们将枚举优化的结果保存到了“优化参数组1”中,现在,我们就切换到“优化参数组1”,在点击【遗传】按钮,对上次枚举的结果进行遗传。
[/td][td] [/td][/tr]
[tr][td] [/td][td][attach]5599[/attach]
[/td][td] [/td][/tr]
[tr][td] [/td][td]4、如下图所示设置好优化的精调范围,参考标准的比重后,点击“确定”按钮,开始进行精调。[/td][td] [/td][/tr]
[tr][td] [/td][td][attach]5600[/attach]
[/td][td] [/td][/tr]
[tr][td] [/td][td]
5、按照和枚举同样的方法来保存精调后的结果,以便进行回测(如下图所示)。
[/td][td] [/td][/tr]
[tr][td] [/td][td][attach]5601[/attach]
[/td][td] [/td][/tr]
[tr][td] [/td][td]
6、如下图,选择保存好的“优化参数组1/2/3/4”,点击【用新参数重新测算】,新的参数组计算的结果就会显示在“分析报告”中了。
[/td][td] [/td][/tr]
[tr][td] [/td][td][attach]5602[/attach][/td][td] [/td][/tr]
[tr][td] [/td][td] [/td][td] [/td][/tr]
[tr][td=3,1][table=98%]
[tr][td][table=348]
[tr][td][color=#1e5096][size=18px][b](三)相关常见问题解答[/b][/size][/color][/td][/tr]
[/table][/td][/tr]
[/table][/td][/tr]
[tr][td] [/td][td] [/td][td] [/td][/tr]
[tr][td] [/td][td][color=#1e5096][b]1、为什么有“枚举”和“遗传”两种参数优化方式,原理是什么?[/b][/color]
答:枚举是在每个参数最小值与最大值之间抽选几个效果最好的参数值,遗传是在枚举好的参数值基础上进行微调,让参数达到最优。
原理:假设有两个参数N1,1,10,缺省值是1
N2,3,20,缺省值是5
枚举:[color=#ff00]除去最小值和最大值[/color],根据设置的"步长"挑选出所有满足条件的参数,进行全排列。
1)、如果缺省值不在挑选出的参数内,则总次数为:全排列次数+缺省值的计算次数
2)、如果缺省值在挑选出的参数范围内,则总次数为:全排列次数
以上面的参数为例:
如果步长设置为2
则根据步长为2,筛选出的N1的值为:3(1+2)5(3+2)7(5+2)9(7+2);筛选出的N2的值为5 7 9 11 13 15 17 19 ,每个参数的最大最小值不取。
总次数的计算:
C1=N1参数与N2参数的全排列=4*8=32
N1的缺省值为1,不在筛选出的参数范围内,所以需要计算对该参数进行组合计算:8次(与N2筛选出的8个参数进行组合计算)
N2的缺省值为5,已经在筛选出的参数范围内,所以不需要再计算该参数
[color=#ff00]所以枚举的计算总次数为:4*8+8=40[/color]
遗传:
计算次数不定,步长默认为1,按照参考标准所占比重比较各组参数计算结果。
假设枚举后我们存入的参数组为N1=5,N2=10

[b]默认参数组为([/b][b]5,10[/b][b])[/b]
固定参数N2=10,参数N1先向大的方向查找
(6,10)>(5,10),继续向大的方向查找
(7,10)< (6,10),再向大的方向查找,确认是否停止
(8,10)< (6,10),确认停止
大的方向停止,向小的方向查找
(4,10)>(6,10),继续向小的方向查找
(3,10)< (4,10),再向小的方向查找,确认是否停止
(2,10)< (4,10),确认停止
确定参数N1=4,为最优参数,参数N2像大的方向查找
(4,11)<(4,10),再向大的方向查找,确认是否停止
(4,12)>(4,10),找到了更大盈利率的参数,继续向大的方向查找
(4,13)< (4,12),再向大的方向查找,确认是否停止
(4,14)< (4,12),确认停止
大的方向停止,向小的方向查找
(4,9)< (4,12),再向小的方向查找,确认是否停止
(4,8)< (4,12),确认停止

[b]新的参数组确认为([/b][b]4,12[/b][b])[/b]
重复上述步骤,固定参数N2=12,参数N1向大的方向查找
(5,12)>(4,12) ,继续向大的方向查找
(6,12)< (5,12),再向大的方向查找,确认是否停止
(7,12)< (5,12),确认停止
大的方向停止,向小的方向查找
(3,12)< (5,12),再向小的方向查找,确认是否停止
(2,12)< (5,12),确认停止
确定参数N1=5,为最优参数,参数N2像大的方向查找
(5,13)<(5,12),再向大的方向查找,确认是否停止
(5,14)< (5,12),确认停止
大的方向停止,向小的方向查找
(5,11)< (5,12),再向小的方向查找,确认是否停止
(5,10)< (5,12),确认停止

[b]得到新的参数组([/b][b]5,12[/b][b])[/b]
重复上述步骤,固定参数N2=12,参数N1向大的方向查找
(6,12)< (5,12),再向大的方向查找,确认是否停止
(7,12)< (5,12),确认停止
大的方向停止,向小的方向查找
(4,12)< (5,12),再向小的方向查找,确认是否停止
(3,12)< (5,12),确认停止
确定参数N1=5,为最优参数,参数N2像大的方向查找
(5,13)<(5,12),再向大的方向查找,确认是否停止
(5,14)< (5,12),确认停止
大的方向停止,向小的方向查找
(5,11)< (5,12),再向小的方向查找,确认是否停止
(5,10)< (5,12),确认停止

[b]确定最优参数组为([/b][b]5,12[/b][b])[/b]


[color=#1e5096][b]2、参数写在模型源码中和写在参数列表中有什么区别。[/b][/color]答:两者对模型的运行没有区别,但参数列表中的参数可进行参数优化,写在源码中的参数则不能。
[/td][/tr]
[/table]

理信 发表于 2024-10-6 09:31

学习

页: [1]