VNPY 批量优化参数,并输出到excel
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,VNPY中,优化参数也经常要批量去做,一个是一组不同策略批量对一个品种优化,还有一个策略对应不同凭证,下面是源代码,放在example\CtaBacktesting文件夹下面,主要是参考了原来的优化代
千家信息网最后更新 2026年11月01日VNPY 批量优化参数,并输出到excelVNPY中,优化参数也经常要批量去做,一个是一组不同策略批量对一个品种优化,还有一个策略对应不同凭证,下面是源代码,放在example\CtaBacktesting文件夹下面,主要是参考了原来的优化代码。
还有就是输出时候,由于优化的时候,结果可能很多,默认输出30个到excel。
# encoding: UTF-8
import pandas as pd
from vnpy.trader.app.ctaStrategy.ctaBacktesting import BacktestingEngine, MINUTE_DB_NAME, OptimizationSetting
from vnpy.trader.app.ctaStrategy.strategy.strategyBollChannel import BollChannelStrategy
class BatchOptimization(object):
def __init__(self):
""
def calculateBacktesting(self,symbollist,strategylist, sort = 'totalNetPnl'):
#填入品种队列和策略队列,返回结果resultlist, 为了输出方便检索,加入品种名称,策略名称和策略参数
resultlist = []
for symbol in symbollist:
for strategy in strategylist:
result = self.runBacktesting(symbol,strategy,sort)
#加入品种名称,策略名称和策略参数
if isinstance(result,dict):
#如果返回的是dict,直接加入
result["Symbolname"] = str(symbol["vtSymbol"])
result["strategyname"] = str(strategy[0])
result["strategysetting"] = str(strategy[1])
resultlist.append(result)
else:
# 发现优化回来的是一个包含元组的队列,元组有三个组成,第一个排策略参数,第二个回测目标的值,第三策略参数全部运行结果。
# 这里我们要的就是第三个,先插入这个dict,在dict插入symbolname,和strategysetting
for resultraw in result:
resultlist.append(resultraw[2])
resultlist[-1]["Symbolname"] = str(symbol["vtSymbol"])
resultlist[-1]["strategysetting"] = str(resultraw[0])
return resultlist
def runBacktesting(self, symbol, strategy, sort):
#写入测试品种和参数, 返回回测数据集包含回测结果
# 在引擎中创建策略对象
# 创建回测引擎
engine = BacktestingEngine()
# 设置引擎的回测模式为K线
engine.setBacktestingMode(engine.BAR_MODE)
# 设置回测用的数据起始日期
engine.setStartDate(symbol["StartDate"])
engine.setSlippage(symbol["Slippage"]) # 1跳
engine.setRate(symbol["Rate"]) # 佣金大小
engine.setSize(symbol["Size"]) # 合约大小
engine.setPriceTick(symbol["Slippage"]) # 最小价格变动
engine.setCapital(symbol["Capital"])
# 设置使用的历史数据库
engine.setDatabase(MINUTE_DB_NAME, symbol["vtSymbol"])
#调用优化方法,可以集成优化测试
setting = OptimizationSetting() # 新建一个优化任务设置对象
setting.setOptimizeTarget(sort) # 设置优化排序的目标是策略净盈利
print strategy[1]
for settingKey in strategy[1]:
if isinstance(strategy[1][settingKey], tuple):
setting.addParameter(settingKey,strategy[1][settingKey][0],strategy[1][settingKey][1],strategy[1][settingKey][2])
else:
setting.addParameter(settingKey,strategy[1][settingKey])
#
optimizationresult = engine.runParallelOptimization(strategy[0], setting)
engine.output(u'输出统计数据')
# 如果是使用优化模式,这里返回的是策略回测的dict的list,如果普通回测就是单个dict
# 如果大于30 ,就返回三十之内,否则全部
if len(optimizationresult) > 30:
return optimizationresult[:30]
else:
return optimizationresult
def toExcel(self, resultlist, path = "C:\data\datframe.xlsx"):
#按照输入统计数据队列和路径,输出excel,这里不提供新增模式,如果想,可以改
#dft.to_csv(path,index=False,header=True, mode = 'a')
summayKey = resultlist[0].keys()
# summayValue = result.values()
dft = pd.DataFrame(columns=summayKey)
for result_ in resultlist:
new = pd.DataFrame(result_, index=["0"])
dft = dft.append(new,ignore_index=True)
dft.to_excel(path,index=False,header=True)
print "回测统计结果输出到" + path
if __name__ == "__main__":
#创建品种队列,这里可以用json导入,为了方便使用直接写了。
symbollist = [{
"vtSymbol": 'm1809',
"StartDate": "20180101",
"Slippage": 1,
"Size": 10,
"Rate": 2 / 10000,
"Capital": 10000
},
{
"vtSymbol": 'rb1810',
"StartDate": "20180101",
"Slippage": 1,
"Size": 10,
"Rate": 2 / 10000,
"Capital": 10000
}
]
# 这里是同一个策略,不同参数的情况,当然可以有多个策略和多个参数组合
Strategylist2 = []
# 策略list,如果是元组,那么就是三个,按照第一个初始,第二个结束,第三个步进
settinglist =[
{'bollWindow': (10,20,2)}]
# 合并一个元组
if settinglist != []:
for para1 in settinglist:
Strategylist2.append((BollChannelStrategy, para1))
NT = BatchOptimization()
resultlist = NT.calculateBacktesting(symbollist,Strategylist2,sort = 'totalNetPnl')
#定义路径
path = "C:\Project\OptimizationResult.xlsx"
NT.toExcel(resultlist,path)
还有就是输出时候,由于优化的时候,结果可能很多,默认输出30个到excel。
策略
参数
输出
品种
数据
结果
队列
三个
名称
就是
不同
引擎
模式
统计
多个
大小
对象
时候
目标
统计数据
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
瑰夏咖啡
互联网高科技
互联网最新的科技
互联网科技开发公司
天津摩尔互联网科技
汇久创客互联网科技
无线互联网科技
狮子座互联网科技培训
长亮科技 互联网金融
互联网科技汛
金融科技和互联网金融
互联网科技创新企业排名
老年人脱离互联网科技的作文
宁波青枫互联网科技有限公司
团飞科技与伯堂互联网服务平台
互联网科技商业
互联网科技的全部知识
广州互联网高科技取餐柜
信承诺互联网科技有限公司
前海云享互联网科技
互联网科技图片
新华互联网科技学院
互联网高科技股票
成都狮子座互联网科技
阿里巴巴算科技企业还是互联网
湖南一路畅行互联网科技
洛阳昕诺飞互联网科技有限公司
朱啸虎曾投资哪些互联网科技企业
银行科技岗属于互联网吗
互联网领先科技宣传片