VNPY引數優化功能v1版本中的一個更新引數批量生成方法

張國平發表於2019-07-30

VNPY的引數優化功能,是策略優化的重要功能。主要就是按照範圍生成批量的引數組合,然後成批跑完,選出最優的方法的。


在ctaBaclesting.py中的addParameter方法提供了批量匯入引數的方法。就是這樣一個引數一個引數填入。addParameter會按照1為初始,5為結束,2為步進,生成[1,3,5]引數佇列

setting.addParameter('barMins', 1,5,2)

但是有時候引數比較多,如果引數是已經維護list這樣情況,就不好支援。我寫了個v2版本。傳入的是key,和一個引數定義,可以是tuple元祖,佇列list,或者單個值。 

#----------------------------------------------------------------------
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)


這樣修改後,就可以不用一個一個加入,如下批量加入。

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)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2652233/,如需轉載,請註明出處,否則將追究法律責任。

相關文章