量化框架zipline--分钟回测改写
转自:http://www.cnblogs.com/dxf813/p/7845398.html
基于zipline的分钟回测改写,其中数据源为自定义,使用bcolz的ctable,该数据格式与pandas的DataFrame很好兼容,并且bcolz文件压缩率很好。
以下主要记录此次改写回测整个过程中涉及类和方法,没有附带代码。
一,自定义分钟回测数据源BcolzBacktestMinData类
def zk_get_min_data 取获得多只股票某个时间点前的N个指定字段的值
def zk_get_value 获得股票的指定时间的某个字段的值
def zk_get_traded_dt 获得离传入时间最近的交易时间点
def zk_get_row_data 获得某只股票某个时间的k线数据
def zk_get_all_data 回测初始时将所用数据全部缓存提供给以上函查询
以下为原有zipline代码改写部分:
一、TradingAlgorithm(回测主类)
类中的函数改写:
导入方法:from zipline.algorithm import TradingAlgorithm
1、def order 下单函数
2、def _create_clock 返回此次回测所有的时间点
3、def _create_generator 产生每个时间点回测结果
4、data_portal 属性实例化后重新赋值
5、def _create_benchmark_source 获得基准收益
6、def __convert_order_params_for_blotter 判断下单参数是否合理
7、def _calculate_order_value_amount 计算下单的数量
8、def _can_order_asset 判断该股票是否可交易
以下为上述5个加粗的函数或属性的重写内容(剩余3个变动较少):
一、order 此函数主要改写内容
last_price 针对非限价单下单,使用当前价格成交通过zk_get_value获得
更改下单数量:中国股市买入有基本单位1手=100股
二、_create_clock 函数返回一个MinuteSimulationClock对象
导入路径:from zipline.gens.sim_engine import MinuteSimulationClock
改写MinuteSimulationClock内容:
def __init__ 去除分钟时间点的计算
def __iter__ 返回已去除掉股市中午休息时间的各分钟时间点
三、_create_generator函数返回一个AlgorithmSimulator对象(self.trading_client)的transform()
导入路径:from zipline.gens.tradesimulation import AlgorithmSimulator
改写AlgorithmSimulator内容:
def _create_bar_data:返回BarData对象 既回测代码中的data对象
继续重写BarData类
导入路径:from zipline.protocol import BarData
内容:
def __init__ 不变
def current 截取zk_get_all_data的返回结果
def history 调用data_portal的get_history_window函数
def _get_current_minute 获得回测时当前的时间点
def __getitem__ 调用zk_get_row_data执行返回的结果
def __get__ 不变
def current_dt 不变
四、data_portal属性为一个DataPortal对象
导入路径:from zipline.data.data_portal import DataPortal
改写DataPortal内容:
def get_history_window data.history 调用的函数
def get_backtest_date 自定义函数:将回测的结束日期传入,为了取出该回测所需要的所有数据并缓存
equity_minute_reader 实例化时传入的BcolzMinuteBarReader对象
导入路径:from zipline.data.minute_bars import BcolzMinuteBarReader
继续重写BcolzMinuteBarReader类(该类主要功能为读取分钟k线数据)内容:
def get_value 调用zk_get_value
def_get_metadata 此函数原方法为通过指定的bcloz文件路径来读取数据,我已用自定义的数据源取代,所以此处不再做处理
def get_last_traded_dt 调用zk_get_traded_dt
五、_create_benchmark_source函数返回一个BenchmarkSource对象
导入路径:from zipline.sources.benchmark_source import BenchmarkSource
改写BenchmarkSource内容:
def __init__ 改写分钟收益的数据序列
由于我只拿到每天的收益率,而此处zipline默认会让每天收益的数据填充到每分钟上转为分钟的收益序列,这意味着每分钟都会有该天的盈利或亏损(根据后续zipline计算收益的算法)
这就导致了复利。根据界面显示需要我们也只需要计算出每天的收益即可,没有计算每分钟的收益,因此我将每天的收益率只填充到开始的第一个时间点,后续的全部填充0
量化框架zipline--分钟回测改写的更多相关文章
- 量化投资策略:常见的几种Python回测框架(库)
量化投资策略:常见的几种Python回测框架(库) 原文地址:http://blog.csdn.net/lawme/article/details/51454237 本文章为转载文章.这段时间在研究量 ...
- OnePy--构建属于自己的量化回测框架
本文主要记录我构建量化回测系统的学习历程. 被遗弃的项目:Chandlercjy/OnePy_Old 新更新中的项目:Chandlercjy/OnePy 目录 1. 那究竟应该学习哪种编程语言比较好呢 ...
- 手把手教你用Python搭建自己的量化回测框架【均值回归策略】
手把手教你用Python搭建自己的量化回测框架[均值回归策略] 引言 大部分量化策略都可以归类为均值回归与动量策略.事实上,只有当股票价格是均值回归或趋势的,交易策略才能盈利.否则,价格是随机游走的, ...
- 量化投资学习笔记01——初识Pyalgotrade量化交易回测框架
年初学习量化投资,一开始想自己从头写,还是受了C/C++的影响.结果困在了计算回测数据那里,结果老也不对,就暂时放下了.最近试了一下python的各个量化投资框架,发现一个能用的——pyalgotra ...
- FMZ发明者量化平台回测机制说明
原文连接:https://www.fmz.com/digest-topic/4009 大部分策略在实盘之前都需要回测进行验证,FMZ支持部分品种数字货币现货.期货和永续合约,以及商品期货所有品种.但发 ...
- 量化投资:第8节 A股市场的回测
作者: 阿布 阿布量化版权所有 未经允许 禁止转载 abu量化系统github地址(欢迎+star) 本节ipython notebook 之前的小节回测示例都是使用美股,本节示例A股市场的回测. 买 ...
- 量化交易回测系统---RQalpha、qstrade学习笔记
一.RQalpha github 地址 https://github.com/ricequant/rqalpha 1.运行test.py文件,显示 No module named 'logbook. ...
- 回测框架pybacktest简介(一)
pybacktest 教程 本教程让你快速了解 pybacktest's 的功能.为此,我们回测精典交易策略移动平均线MA交叉. MA快线上穿慢线时,买进做多 MA快线下穿慢线时,卖出做空 进场规则, ...
- 回测框架pybacktest简介(二)
pybacktest 的疑点 第(一)节“教程”原文,是用 ipython notebook 写成,程序代码是一些片段组成. 为了阅读方便,合并在一起. 本文转载于:http://blog.csdn. ...
随机推荐
- ABAP调试
ABAP 开发系列(02): ABAP Development Workbench 介绍(下)- ABAP 调试器 8. Debugger – ABAP 调试器 开发程序,调试器是必不可少的工具,而A ...
- webpack-dev-server 设置反向代理解决跨域问题
一.设置代理的原因 现在对前端开发的要求越来越高,并且随着自动化以及模块化的 诞生,前后端开发模式越来越流行.后端只负责接口,前端负责数据展示.逻辑处理.但是前后端开发模式,有一个重要的问题,就是跨域 ...
- 如何使用 RESTClient 调试微信支付接口
我们知道微信支付使用http协议进行api调用,body 使用xml格式,使用的一般http在线调试工具,无法进行xml数据的post. RESTClient 做的很好,支持各种http 方法,bod ...
- oracle数据库--序列(sequence)
一个问题: 在某张表中,存在一个id列(整数),我们希望在添加记录的时候,该列从1开始,自动的增长,怎么处理? 解决方式:oracle是利用"序列"(sequence)来完成的. ...
- NSRC技术分享——自制Linux Rootkit检测工具
### 前言 Linux系统中存在用户态与内核态,当用户态的进程需要申请某些系统资源时便会发起系统调用.而内核态如何将系统的相关信息实时反馈给用户态呢,便是通过proc文件系统.如此便营造了一个相对隔 ...
- Beta阶段总结分析报告
1 讨论照片 2 Postmortem结果 二手交易平台项目Postmortem结果 整理:程环宇 设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有 ...
- Java暑期作业
一.假期观影笔记--<熔炉> 影片<熔炉>是根据发生在韩国光州聋哑学校里的真实事件而改编.影片讲述的是在一所聋哑儿童学校里,校长.教务以及老师披着慈善的华丽外衣对学校中的多名未 ...
- HTTP协议中PUT和POST使用区别
有的观点认为,应该用POST来创建一个资源,用PUT来更新一个资源:有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源:还有的观点认为可以用PUT和POST中任何一个来做创 ...
- 洛谷 U10783 名字被和谐了
https://www.luogu.org/problem/show?pid=U10783 题目背景 众所周知,我们称g是a的约数,当且仅当g是正数且a mod g = 0. 众所周知,若g既是a的约 ...
- mycat入门_介绍与安装
利用闲暇时间接触了下mycat. 一.介绍 1.概述: 国内最活跃的.性能最好的开源数据库中间件,可以理解为数据库和应用层之间的一个代理组件. 2.作用: 读写分离.分表分库.主从切换. 3.原理: ...