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


原文地址:https://blog.csdn.net/Trader_Python/article/details/86494949
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/716255

相关文章

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

宝塔安装的MySQL无法连接的情况及解决方案

《宝塔安装的MySQL无法连接的情况及解决方案》宝塔面板是一款流行的服务器管理工具,其中集成的MySQL数据库有时会出现连接问题,本文详细介绍两种最常见的MySQL连接错误:“1130-Hostisn... 目录一、错误 1130:Host ‘xxx.xxx.xxx.xxx’ is not allowed

redis在spring boot中异常退出的问题解决方案

《redis在springboot中异常退出的问题解决方案》:本文主要介绍redis在springboot中异常退出的问题解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴... 目录问题:解决 问题根源️ 解决方案1. 异步处理 + 提前ACK(关键步骤)2. 调整Redis消费者组

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案

《使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案》在SpringBoot应用中,我们经常使用​​@Cacheable​​注解来缓存数据,以提高应用的性能... 目录@Cacheable注解Redis时,Redis宕机或其他原因连不上,继续调用原方法的解决方案1

Python报错ModuleNotFoundError的10种解决方案

《Python报错ModuleNotFoundError的10种解决方案》在Python开发中,ModuleNotFoundError是最常见的运行时错误之一,通常由模块路径配置错误、依赖缺失或命名冲... 目录一、常见错误场景与原因分析二、10种解决方案与代码示例1. 检查并安装缺失模块2. 动态添加模块