返回顶部
首页 > 资讯 > 精选 >VNPY 批量策略回测和统计结果的excel输出是怎样的
  • 303
分享到

VNPY 批量策略回测和统计结果的excel输出是怎样的

2023-06-05 10:06:51 303人浏览 薄情痞子
摘要

小编今天带大家了解VNPY 批量策略回测和统计结果的excel输出是怎样的,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“VNPY 批

小编今天带大家了解VNPY 批量策略回测和统计结果的excel输出是怎样的,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“VNPY 批量策略回测和统计结果的excel输出是怎样的”的知识吧。

做VNPY这段时间,发现主要就是回测,和策略优化;然后就是有批量测试和参数集合效果导出excel分析要求。还有就是一个策略对不同品种效果验证。

然后想想,就自己写了一个BatchBackTest 类,其实很简答,就是输入品种队列,和策略队列,然后就会循环跑出结果,输出到指定路径excel。 还有就是策略是元组,是由一个策略和对应参数组合。

代码如下。使用方法就是在 vnpy/example/CtaBacktesting 路径下面新疆一个py,放入下面代码就可以

  • # encoding: UTF-8

  • from vnpy.trader.app.ctaStrategy.ctaBacktesting import BacktestingEngine, MINUTE_DB_NAME

  • import pandas as pd

  • from vnpy.trader.app.ctaStrategy.strategy.strategyAtrRsi import AtrRsiStrategy

  • from vnpy.trader.app.ctaStrategy.strategy.strategyBollChannel import BollChannelStrategy

  • from vnpy.trader.app.ctaStrategy.strategy.strategyDoubleMa import DoubleMaStrategy

  • from vnpy.trader.app.ctaStrategy.strategy.strategyDualThrust import DualThrustStrategy

  • from vnpy.trader.app.ctaStrategy.strategy.strategyKingKeltner import KkStrategy

  • from vnpy.trader.app.ctaStrategy.strategy.strategyMultiSignal import MultiSignalStrategy

  • from vnpy.trader.app.ctaStrategy.strategy.strategyMultiTimeframe import MultiTimeframeStrategy

  • class BatchBackTest(object):

  •     def __init__(self):

  •         ""

  •     def calculateBacktesting(self,symbollist,strategylist):

  •         #填入品种队列和策略队列,返回结果resultlist, 为了输出方便检索,加入品种名称,策略名称和策略参数

  •         resultlist = []

  •         for symbol in symbollist:

  •             for strategy in strategylist:

  •                 result = self.runBacktesting(symbol,strategy)

  •                 #加入品种名称,策略名称和策略参数

  •                 result["Symbolname"] = str(symbol["vtSymbol"])

  •                 result["strategyname"] = str(strategy[0])

  •                 result["strategysetting"] = str(strategy[1])

  •                 resultlist.append(result)

  •         return resultlist

  •     def runBacktesting(self, symbol, strategy ):

  •         #写入测试品种和参数, 返回回测数据集包含回测结果

  •         # 在引擎中创建策略对象

  •         # 创建回测引擎

  •         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"])

  •         #设置策略,策略元组中第一个是策略,第二个参数

  •         engine.initStrategy(strategy[0], strategy[1])

  •         engine.runBacktesting()

  •         df = engine.calculateDailyResult()

  •         result = []

  •         dfp,result = engine.calculateDailyStatistics(df)

  •         engine.output(u'输出统计数据')

  •         # engine.showDailyResult(dfp, result)

  •         return result

  •     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": 'rb0000',

  •             "StartDate": "20180101",

  •             "Slippage": 1,

  •             "Size": 10,

  •             "Rate": 2 / 10000,

  •             "Capital": 10000

  •         }]

  •     #这里定义策略,策略参数先为空;策略加参数是一个元组

  •     setting = {}

  •     Strategylist = [(AtrRsiStrategy, setting),

  •                     (BollChannelStrategy, setting),

  •                     (DoubleMaStrategy, setting),

  •                     (DualThrustStrategy, setting),

  •                     (KkStrategy, setting),

  •                     (MultiSignalStrategy, setting),

  •                     (MultiTimeframeStrategy, setting)]

  •     # 这里是同一个策略,不同参数的情况,当然可以有多个策略和多个参数组合

  •     Strategylist2 = []

  •     # 策略list

  •     settinglist =[

  •         {'kdlimit': 40, 'barmins': 9, 'cciWindow': 22},

  •         {'kdlimit': 30, 'barmins': 13, 'cciWindow': 20}]

  •     # 合并一个元组

  •     if settinglist != []:

  •         for para1 in settinglist:

  •             Strategylist2.append((BollChannelStrategy, para1))

  •     NT = BatchBackTest()

  •     resultlist = NT.calculateBacktesting(symbollist,Strategylist)

  •     #定义路径

  •     path = "C:\Project\BackTestResult.xlsx"

  •     NT.toExcel(resultlist,path)

感谢大家的阅读,以上就是“VNPY 批量策略回测和统计结果的excel输出是怎样的”的全部内容了,学会的朋友赶紧操作起来吧。相信编程网小编一定会给大家带来更优质的文章。谢谢大家对编程网网站的支持!

--结束END--

本文标题: VNPY 批量策略回测和统计结果的excel输出是怎样的

本文链接: https://lsjlt.com/news/242411.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • VNPY 批量策略回测和统计结果的excel输出是怎样的
    小编今天带大家了解VNPY 批量策略回测和统计结果的excel输出是怎样的,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“VNPY 批...
    99+
    2023-06-05
  • 在VNPY2的进行CTA批量回测,支持Json和Excel格式导入策略
    之前VNPY 1版本中,我的个人代码很多是直接在VNPY库代码直接修改或者增加的。每次VNPY升级就是非常头疼,要做代码对比,在一些可能被更新覆盖的地方再次维护测试。而且因为更新的地方很乱,造成后面生产版本一致停留在VNPY1.92。这次准...
    99+
    2023-06-01
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作