回测框架pybacktest简介(二)
pybacktest 的疑点
第(一)节“教程”原文,是用 ipython notebook 写成,程序代码是一些片段组成。
为了阅读方便,合并在一起。
本文转载于:http://blog.csdn.net/lawme/article/details/51773744
- import pybacktest
- import pandas as pd
- ohlc = pybacktest.load_from_yahoo('SPY')
- ohlc.tail()
- short_ma = 50
- long_ma = 200
- ms = pandas.rolling_mean(ohlc.C, short_ma)
- ml = pandas.rolling_mean(ohlc.C, long_ma)
- buy = cover = (ms > ml) & (ms.shift() < ml.shift()) # ma cross up
- sell = short = (ms < ml) & (ms.shift() > ml.shift()) # ma cross down
- print '> Short MA\n%s\n' % ms.tail()
- print '> Long MA\n%s\n' % ml.tail()
- print '> Buy/Cover signals\n%s\n' % buy.tail()
- print '> Short/Sell signals\n%s\n' % sell.tail()
- bt = pybacktest.Backtest(locals(), 'ma_cross')
- print filter(lambda x: not x.startswith('_'), dir(bt))
- print '\n> bt.signals\n%s' % bt.signals.tail()
- print '\n> bt.trades\n%s' % bt.trades.tail()
- print '\n> bt.positions\n%s' % bt.positions.tail()
- print '\n> bt.equity\n%s' % bt.equity.tail()
- print '\n> bt.trade_price\n%s' % bt.trade_price.tail()
- bt.summary()
- figsize(10, 5)
- bt.plot_equity()
- bt.plot_trades()
- pandas.rolling_mean(ohlc.C, short_ma).plot(c='green')
- pandas.rolling_mean(ohlc.C, long_ma).plot(c='blue')
- legend(loc='upper left')
- bt.trdplot['2004':'2007']
- pandas.rolling_mean(ohlc.C['2004':'2007'], short_ma).plot(c='green')
- pandas.rolling_mean(ohlc.C['2004':'2007'], long_ma).plot(c='blue')
从源码和教程来看,pybacktest 用法的确简单。
但教程中有几句,没有看懂。例如以下2句:
- figsize(10, 5)
- legend(loc='upper left')
不知道这两个函数出自何处,且有时能通过“编译”,有时却不行。
原因后来找到了。因为代码是在ipython notebook中,
若有“魔术命令”%pylab inline 这两个函数可以直接调用。
该例程虽未显式使用%pylab inline,但可能notebook对它有默认设置。
更有趣的是,数据源只能直接取自yahoo,如:
- ohlc = pybacktest.load_from_yahoo('SPY')
如果把ohlc存成csv文件,然后再读入内存,并进行格式规整,如:
- ohlc.to_csv('SPY.csv')
- ohlc = pd.read_csv('SPY.csv')
- ohlc.index = ohlc['Date']
- del ohlc['Date']
这时,虽然数据格式完全一致,但程序会出错,运行失败。
问题的原因可能是,yahoo直接传回的DataFrame,包含属性tz,即time zone,
pybacktest的运算逻辑,需要处理tz这个属性。但是,从csv文件读出的DataFrame
没有tz这个属性,因此造成程序异常中断。
还有,程序运行得出的回测结果,是什么含意,没看懂。
Backtest('ma_cross', 2013-28-04 23:14:15 MSK) performance summary
=================================================================
backtest:
days: 6348
from: '1994-09-14 00:00:00'
to: '2012-01-31 00:00:00'
trades: 17
exposure:
holding periods:
max: 1476 days, 0:00:00
median: 354 days, 0:00:00
min: 7 days, 0:00:00
trades/month: 1.0625
performance:
PF: 4.017
RF: 6.1555
averages:
gain: 23.817
loss: -8.47
trade: 10.5224
payoff: 2.8119
profit: 178.88
winrate: 0.5882
risk/return profile:
UPI: 1.0656
WCDD (monte-carlo 0.99 quantile): 52.09
maxdd: 74.67
sharpe: 0.4485
sortino: 1.6792
回测框架pybacktest简介(二)的更多相关文章
- 回测框架pybacktest简介(一)
pybacktest 教程 本教程让你快速了解 pybacktest's 的功能.为此,我们回测精典交易策略移动平均线MA交叉. MA快线上穿慢线时,买进做多 MA快线下穿慢线时,卖出做空 进场规则, ...
- 量化投资策略:常见的几种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 ...
- 量化框架zipline--分钟回测改写
转自:http://www.cnblogs.com/dxf813/p/7845398.html 基于zipline的分钟回测改写,其中数据源为自定义,使用bcolz的ctable,该数据格式与pand ...
- WeQuant比特币交易策略回测记录
程序参数 PARAMS = { "start_time": "2017-02-01 00:00:00", "end_time": " ...
- scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250
scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...
- 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 构建目录环境和依赖)
引言:在用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建一 的基础上 继续进行项目搭建 该部分的主要目的是测通MyBatis 及Spring-dao ...
随机推荐
- POJ1061:青蛙的约会+POJ2115C Looooops+UVA10673Play with Floor and Ceil(扩展欧几里得)
http://poj.org/problem?id=1061 第一遍的写法: #include <iostream> #include <stdio.h> #include & ...
- 【转】Deep Learning(深度学习)学习笔记整理系列之(八)
十.总结与展望 1)Deep learning总结 深度学习是关于自动学习要建模的数据的潜在(隐含)分布的多层(复杂)表达的算法.换句话来说,深度学习算法自动的提取分类需要的低层次或者高层次特征. 高 ...
- Mysql 数据库系列
阅读目录 第一篇: 数据库初识 第二篇: 库操作 第三篇: 存储引擎 第四篇: 表操作 第五篇: 数据操作 第六篇: 索引原理与慢查询优化 第七篇: 数据备份 pymysql模块 第八篇 ...
- Mybatis使用generatedKey在插入数据时返回自增id始终为1,自增id实际返回到原对象当中的问题排查
今天在使用数据库的时候,遇到一个场景,即在插入数据完成后需要返回此数据对应的自增主键id,但是在使用Mybatis中的generatedKey且确认各项配置均正确无误的情况下,每次插入成功后,返回的都 ...
- 从0开始学习 GITHUB 系列之「初识 GITHUB」【转】
本文转载自:http://stormzhang.com/github/2016/05/25/learn-github-from-zero1/ 版权声明:本文为 stormzhang 原创文章,可以随意 ...
- slf4j log4j logback相关用法
Java的简单日志门面( Simple Logging Facade for Java SLF4J)作为一个简单的门面或抽象,用来服务于各种各样的日志框架,比如java.util.logging.lo ...
- cf 429 B Working out
B. Working out time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- 斜率优化DP学习笔记
先摆上学习的文章: orzzz:斜率优化dp学习 Accept:斜率优化DP 感谢dalao们的讲解,还是十分清晰的 斜率优化$DP$的本质是,通过转移的一些性质,避免枚举地得到最优转移 经典题:HD ...
- 更改idea快捷键方式为eclipse风格
打开配置窗口 菜单栏中的File-settings 或者快捷键 ctrl+alt+s 设置keymap 在弹出的setting页面中左侧导航中选择Keymap: 在keymaps下拉列表中选择Ecli ...
- 【P4语言学习】Parser解析器
参考文章:王垠:谈谈Parser 簡單介紹 P4 語言(一)- Parser 什么是Parser 传统的parser,一般出现在编译器和编译原理课程中,援引<谈谈Parser>的定义: 首 ...