海龟策略深入研究-策略回测系列-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

相关文章

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

kkFileView在线预览office的常见问题以及解决方案

《kkFileView在线预览office的常见问题以及解决方案》kkFileView在线预览Office常见问题包括base64编码配置、Office组件安装、乱码处理及水印添加,解决方案涉及版本适... 目录kkFileView在线预览office的常见问题1.base642.提示找不到OFFICE组件

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

WinForm跨线程访问UI及UI卡死的解决方案

《WinForm跨线程访问UI及UI卡死的解决方案》在WinForm开发过程中,跨线程访问UI控件和界面卡死是常见的技术难题,由于Windows窗体应用程序的UI控件默认只能在主线程(UI线程)上操作... 目录前言正文案例1:直接线程操作(无UI访问)案例2:BeginInvoke访问UI(错误用法)案例

Spring Security常见问题及解决方案

《SpringSecurity常见问题及解决方案》SpringSecurity是Spring生态的安全框架,提供认证、授权及攻击防护,支持JWT、OAuth2集成,适用于保护Spring应用,需配置... 目录Spring Security 简介Spring Security 核心概念1. ​Securit

MySQL逻辑删除与唯一索引冲突解决方案

《MySQL逻辑删除与唯一索引冲突解决方案》本文探讨MySQL逻辑删除与唯一索引冲突问题,提出四种解决方案:复合索引+时间戳、修改唯一字段、历史表、业务层校验,推荐方案1和方案3,适用于不同场景,感兴... 目录问题背景问题复现解决方案解决方案1.复合唯一索引 + 时间戳删除字段解决方案2:删除后修改唯一字

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决