海龟策略深入研究-策略回测系列-5 痛点解决方案以及测试数据的准备

本文主要是介绍海龟策略深入研究-策略回测系列-5 痛点解决方案以及测试数据的准备,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

理想解决方案


 
上一篇介绍了海龟策略在实现中遇到的困难。

本章主要讲其解决方案,那就是vn.py啦!

vn.py1.9.1新增完整的投资组合级别的海龟策略实现,经过多次测试发现,这一次海龟策略本地化实现的完成度很高。其投资组合回测资金曲线如下。
投资品种选择了12个,分别是:

  • 上期所的铝、铜、螺纹钢、锌
  • 郑商所的普麦、一号棉花
  • 大商所的玉米、铁矿石、焦煤、焦炭、豆粕、聚氯乙烯。

回测时间是2014--2018,百分比最大回撤是-29.46%,年化收益45.11%,夏普比率达1.5。从资金曲线的形态上看,虽然时不时发生回撤,但是整体趋势是向上的。故从回测上看,已经非常符合原版海龟策略的特点了。
(因为考虑到海龟策略是日K线中低频策略,故手续费和滑点在回测中都设置成零,以方便操作。但就算加上手续费和滑点,资金曲线的形态不会发生变化,夏普比率也仅仅是稍微减少,这在以后章节详细说明。)
 
enter image description here

 
 

操作步骤


下面介绍如何通过vn.py实现完整的海龟策略。

1. 工具准备

 

  • RQData:RQData 是RiceQuant(米筐科技)提供的商用版金融数据工具包, 支持 python, matlab, excel 插件等多种访问方式。它集成了简单高效的API接口,用户可快速调用丰富整齐的量化金融数据,最大限度地免除了数据搜索、清洗的烦恼,加速投研及投资的决策周期。RQData 期货数据终端提供7天免费试用。其地址如下:RQData 期货数据终端
     
  • vn.py:vn.py是基于Python语言的量化交易系统,其独特的事件驱动引擎和逐条数据回放的回测设计杜绝未来函数的可能性。同时回测引擎和实盘引擎设计采用了完全兼容的API函数,用户可以使用同一套策略代码来实现回测研究和执行实盘交易。(v1.9.1版本以后提供海龟策略模块,老版本建议升级,升级方法:先卸载vn.py,命令是 pip uninstall vnpy,然后安装新版本)其地址如下:vn.py 1.9.1

 
 

2数据准备

 

1)安装RQData

Window系统RQData安装,输入下面命令即可。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --extra-index-url https://rquser:ricequant99@py.r
icequant.com/simple/ rqdatac==1.0.0a29

 

2)下载数据

在"examples\DataService\RqdataDataService"文件夹内的config.json上填写RQData的账号和密码,保存退出后启动downloadData.py下载全期货品种的日线级别数据。启动操作是按住"Shift"并且鼠标点击右键,选择“在此处打开命令窗口”,然后输入下面命令即可。

python downloadData.py

 
本次投资组合回测时间区间是2014年1月1日以后的数据,故在该回测上会剔除一下比较新的品种,在下面的代码中以注释出来。
其代码如下

"""
立即下载数据到数据库中,用于手动执行更新操作。
"""
from dataService import *
if __name__ == '__main__':#中金所downloadDailyBarBySymbol('IF99')downloadDailyBarBySymbol('IC99')    #中证500 从2015开始downloadDailyBarBySymbol('IH99')    #上证50 从2015开始#上期所downloadDailyBarBySymbol('CU99')downloadDailyBarBySymbol('AL99')downloadDailyBarBySymbol('ZN99')downloadDailyBarBySymbol('PB99')downloadDailyBarBySymbol('NI99')    #镍 从2015开始downloadDailyBarBySymbol('AU99')downloadDailyBarBySymbol('SN99')    #锡 从2015开始downloadDailyBarBySymbol('AG99')downloadDailyBarBySymbol('RB99')downloadDailyBarBySymbol('WR99')downloadDailyBarBySymbol('HC99')   #热轧卷板 从2014 3月开始downloadDailyBarBySymbol('SC99')   #燃油 从2018开始downloadDailyBarBySymbol('BU99')downloadDailyBarBySymbol('RU99')#大商所downloadDailyBarBySymbol('C99')downloadDailyBarBySymbol('CS99')    #玉米淀粉 从2014年12月downloadDailyBarBySymbol('A99')downloadDailyBarBySymbol('B99')downloadDailyBarBySymbol('M99')downloadDailyBarBySymbol('Y99')downloadDailyBarBySymbol('P99')downloadDailyBarBySymbol('FB99')downloadDailyBarBySymbol('BB99')downloadDailyBarBySymbol('JD99')downloadDailyBarBySymbol('L99')downloadDailyBarBySymbol('V99')downloadDailyBarBySymbol('PP99')   #聚丙烯 从2014年2月downloadDailyBarBySymbol('J99')downloadDailyBarBySymbol('JM99')downloadDailyBarBySymbol('I99')#郑商所downloadDailyBarBySymbol('TA99')downloadDailyBarBySymbol('MA99')   #甲醇 从2014年6月downloadDailyBarBySymbol('FG99')downloadDailyBarBySymbol('SF99')downloadDailyBarBySymbol('SM99')downloadDailyBarBySymbol('ZC99')    #动力煤 从2015年downloadDailyBarBySymbol('WH99')downloadDailyBarBySymbol('PM99')downloadDailyBarBySymbol('CF99')downloadDailyBarBySymbol('SR99')downloadDailyBarBySymbol('OI99')downloadDailyBarBySymbol('RI99')downloadDailyBarBySymbol('RS99')downloadDailyBarBySymbol('RM99')downloadDailyBarBySymbol('JR99')downloadDailyBarBySymbol('LR99')   #晚籼稻 从2014年7月downloadDailyBarBySymbol('CY99')   #棉花 从2017年downloadDailyBarBySymbol('AP99')   #苹果  从2017年

 
数据成功下载界面如图所示
enter image description here

 

3)数据说明

 
RqData分3种数据,分别是以88或888结尾的代表主力连续合约数据和以99结尾的指数连续合约,下面以IF合约为例子进行详细说明。

  • IF88:主力连续合约,由IF股指期货不同时期主力合约接续而成,仅仅是合约量价数据的简单拼接,未做平滑处理
  • IF888:主力连续合约,对价格拼接进行了"平滑"处理,即以主力合约切换前一天(T-1日)新、旧两个主力合约收盘价做差,之后将 T-1 日及以前的主力连续合约的所有价格水平整体加上或减去该价差,以"整体抬升"或"整体下降"主力合约的价格水平,成交量、持仓量均不作调整,成交额统一设置为0
  • IF99:指数连续合约,由IF股指期货全部可交易合约以累计持仓量为权重加权平均得到的
     

(主力合约定义:合约首次上市时,以当日收盘同品种持仓量最大者作为从第二个交易日开始的主力合约。当同品种其他合约持仓量在收盘后超过当前主力合约1.1倍时,从第二个交易日开始进行主力合约的切换。日内不会进行主力合约的切换。)

这篇关于海龟策略深入研究-策略回测系列-5 痛点解决方案以及测试数据的准备的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/716255

相关文章

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

Jackson库进行JSON 序列化时遇到了无限递归(Infinite Recursion)的问题及解决方案

《Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursion)的问题及解决方案》使用Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursi... 目录解决方案‌1. 使用 @jsonIgnore 忽略一个方向的引用2. 使用 @JsonManagedR

Seata之分布式事务问题及解决方案

《Seata之分布式事务问题及解决方案》:本文主要介绍Seata之分布式事务问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Seata–分布式事务解决方案简介同类产品对比环境搭建1.微服务2.SQL3.seata-server4.微服务配置事务模式1

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR