VNPY的参数优化功能,是策略优化的重要功能。主要就是按照范围生成批量的参数组合,然后成批跑完,选出最优的方法的。
在ctaBaclesting.py中的addParameter方法提供了批量导入参数的方法。就是这样一个参数一个参数填入。addParameter会按照1为初始,5为结束,2为步进,生成[1,3,5]参数队列
setting.addParameter(‘barMins‘, 1,5,2)
但是有时候参数比较多,如果参数是已经维护list这样情况,就不好支持。我写了个v2版本。传入的是key,和一个参数定义,可以是tuple元祖,队列list,或者单个值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#---------------------------------------------------------------------- def addParameterV2( self , key, value): """增加优化参数""" if isinstance (value, tuple ): if len (value) = = 4 : if value[ 3 ] = = "int" : self .paramDict[key] = np.linspace(value[ 0 ], value[ 1 ], value[ 2 ]).astype( int ).tolist() else : self .paramDict[key] = np.linspace(value[ 0 ], value[ 1 ], value[ 2 ]).tolist() elif len (value) = = 3 : l = [] param = value[ 0 ] while param < = value[ 1 ]: l.append(param) param + = value[ 2 ] self .paramDict[key] = l elif isinstance (value, list ): self .paramDict[key] = value else : self .paramDict[key] = [value] |
使用方法:
1,起始点,终结点,和步进 比如,那么就和之前一样的返回
setting.addParameterV2(‘barMins‘, (1,5,2))
setting.addParameterV2(‘barMins‘, (0,5,0.2))
2, 起始点,终结点,参数个数和是否int 比如
setting.addParameterV2(‘barMins‘, 1,5,3, "int") 会生成有3个整数参数的参数队列 [1, 3, 5]; setting.addParameterV2(‘barMins‘, 1,5,4, "float")会生成浮点数参数组 [1.0, 2.333333333333333, 3.6666666666666665, 5.0] 3,数列,就直接使用数列 setting.addParameterV2(‘barMins‘, [3.5.6])
4,单个数字,就直接使用单个数字
setting.addParameterV2(‘barMins‘,4)
这样修改后,就可以不用一个一个加入,如下批量加入。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
paradict = { ‘lWindow‘ : 40 , ‘llDev‘ : 8.0 , ‘MAWindows‘ :( 5 , 12 , 5 , "int" ), ‘atrWindow‘ : 25 , ‘slMultiplier‘ :( 3.0 , 6.0 , 3 ), ‘pRate‘ :( 0.002 , 0.010 , 5 , "float" ), ‘bMins‘ :[ 3 , 5 , 10 ], ‘CDate‘ : 3 , ‘endsize‘ :( 1 , 4 , 1 ), ‘endplus‘ :( 0 , 3 , 1 ) } for key,value in paradict.items(): setting.addParameterV2(key,value) |
原文:https://www.cnblogs.com/chenguopa/p/15240068.html