pybacktest 的疑点

第(一)节“教程”原文,是用 ipython notebook 写成,程序代码是一些片段组成。

为了阅读方便,合并在一起。

本文转载于:http://blog.csdn.net/lawme/article/details/51773744

  1. import pybacktest
  2. import pandas as pd
  3. ohlc = pybacktest.load_from_yahoo('SPY')
  4. ohlc.tail()
  5. short_ma = 50
  6. long_ma = 200
  7. ms = pandas.rolling_mean(ohlc.C, short_ma)
  8. ml = pandas.rolling_mean(ohlc.C, long_ma)
  9. buy = cover = (ms > ml) & (ms.shift() < ml.shift())  # ma cross up
  10. sell = short = (ms < ml) & (ms.shift() > ml.shift())  # ma cross down
  11. print '>  Short MA\n%s\n' % ms.tail()
  12. print '>  Long MA\n%s\n' % ml.tail()
  13. print '>  Buy/Cover signals\n%s\n' % buy.tail()
  14. print '>  Short/Sell signals\n%s\n' % sell.tail()
  15. bt = pybacktest.Backtest(locals(), 'ma_cross')
  16. print filter(lambda x: not x.startswith('_'), dir(bt))
  17. print '\n>  bt.signals\n%s' % bt.signals.tail()
  18. print '\n>  bt.trades\n%s' % bt.trades.tail()
  19. print '\n>  bt.positions\n%s' % bt.positions.tail()
  20. print '\n>  bt.equity\n%s' % bt.equity.tail()
  21. print '\n>  bt.trade_price\n%s' % bt.trade_price.tail()
  22. bt.summary()
  23. figsize(10, 5)
  24. bt.plot_equity()
  25. bt.plot_trades()
  26. pandas.rolling_mean(ohlc.C, short_ma).plot(c='green')
  27. pandas.rolling_mean(ohlc.C, long_ma).plot(c='blue')
  28. legend(loc='upper left')
  29. bt.trdplot['2004':'2007']
  30. pandas.rolling_mean(ohlc.C['2004':'2007'], short_ma).plot(c='green')
  31. pandas.rolling_mean(ohlc.C['2004':'2007'], long_ma).plot(c='blue')

从源码和教程来看,pybacktest 用法的确简单。

但教程中有几句,没有看懂。例如以下2句:

  1. figsize(10, 5)
  2. legend(loc='upper left')

不知道这两个函数出自何处,且有时能通过“编译”,有时却不行。

原因后来找到了。因为代码是在ipython notebook中,

若有“魔术命令”%pylab inline 这两个函数可以直接调用。

该例程虽未显式使用%pylab inline,但可能notebook对它有默认设置。

更有趣的是,数据源只能直接取自yahoo,如:

  1. ohlc = pybacktest.load_from_yahoo('SPY')

如果把ohlc存成csv文件,然后再读入内存,并进行格式规整,如:

  1. ohlc.to_csv('SPY.csv')
  2. ohlc = pd.read_csv('SPY.csv')
  3. ohlc.index = ohlc['Date']
  4. 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简介(二)的更多相关文章

  1. 回测框架pybacktest简介(一)

    pybacktest 教程 本教程让你快速了解 pybacktest's 的功能.为此,我们回测精典交易策略移动平均线MA交叉. MA快线上穿慢线时,买进做多 MA快线下穿慢线时,卖出做空 进场规则, ...

  2. 量化投资策略:常见的几种Python回测框架(库)

    量化投资策略:常见的几种Python回测框架(库) 原文地址:http://blog.csdn.net/lawme/article/details/51454237 本文章为转载文章.这段时间在研究量 ...

  3. OnePy--构建属于自己的量化回测框架

    本文主要记录我构建量化回测系统的学习历程. 被遗弃的项目:Chandlercjy/OnePy_Old 新更新中的项目:Chandlercjy/OnePy 目录 1. 那究竟应该学习哪种编程语言比较好呢 ...

  4. 手把手教你用Python搭建自己的量化回测框架【均值回归策略】

    手把手教你用Python搭建自己的量化回测框架[均值回归策略] 引言 大部分量化策略都可以归类为均值回归与动量策略.事实上,只有当股票价格是均值回归或趋势的,交易策略才能盈利.否则,价格是随机游走的, ...

  5. 量化投资学习笔记01——初识Pyalgotrade量化交易回测框架

    年初学习量化投资,一开始想自己从头写,还是受了C/C++的影响.结果困在了计算回测数据那里,结果老也不对,就暂时放下了.最近试了一下python的各个量化投资框架,发现一个能用的——pyalgotra ...

  6. 量化框架zipline--分钟回测改写

    转自:http://www.cnblogs.com/dxf813/p/7845398.html 基于zipline的分钟回测改写,其中数据源为自定义,使用bcolz的ctable,该数据格式与pand ...

  7. WeQuant比特币交易策略回测记录

    程序参数 PARAMS = { "start_time": "2017-02-01 00:00:00", "end_time": " ...

  8. scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250

    scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...

  9. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 构建目录环境和依赖)

    引言:在用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建一   的基础上 继续进行项目搭建 该部分的主要目的是测通MyBatis 及Spring-dao ...

随机推荐

  1. Sparsity稀疏编码(二)

           为了更进一步的清晰理解大脑皮层对信号编码的工作机制(策略),需要把他们转成数学语言,因为数学语言作为一种严谨的语言,可以利用它推导出期望和要寻找的程式.本节就使用概率推理(bayes v ...

  2. 如何用 testNG 生成测试报告

    原文地址https://testerhome.com/topics/3473 总结一下testNG生成报告的三种方式,基本都是我直接转载的,没有补充就不说了,有补充的我会加以说明的(这里直说生成报告, ...

  3. js事件处理-整理

    <!-- 作者:gentiana@163.com 时间:2016-3-10 描述:js事件处理 --> <!DOCTYPE html> <html> <hea ...

  4. (转)SSIS处理导入数据时, 存在的更新, 不存在的插入

    问题描述: 当你把数据从其他数据库, 或者是文本文件之类的其他数据源导入到目的数据库时, 有时希望在导入的处理中, 能够实现"数据存在时更新, 不存在时导入" 在之前, 一般是通过 ...

  5. TED #01#

    Laura Vanderkam: How to gain control of your free time 1.我们总是不缺乏时间去做重要的事情,即便我们再忙; “我没时间” 的同义词是“我不想做” ...

  6. 《Java入门第二季》第五章 阶段练习

    /** * ┏┓ ┏┓ * ┏┛┻━━━┛┻┓ * ┃ ┃ * ┃ ━ ┃ * ┃ > < ┃ * ┃ ┃ * ┃... ⌒ ... ┃ * ┃ ┃ * ┗━┓ ┏━┛ * ┃ ┃ Cod ...

  7. pyDay13

    内容来自廖雪峰的官方网站. 1.把list.dict.str等Iterable变成Iterator可以使用iter()函数 >>> L = iter([1, 2, 3, 4, 5, ...

  8. 20145204 《Java程序设计》第2周学习总结

    20145204 <Java程序设计>第2周学习总结 教材学习内容总结 在第三章主要学习了Java语言中的类型及其变量主要类型为:整数(1字节的byte,2字节的short,4字节的int ...

  9. Python os.system()调用.sh脚本

    参考: python调用shell脚本的两种方法| Jeff的妙想奇境 已解决--求教python如何调用.sh文件- 查看主题• Ubuntu中文论坛 CODE #!/usr/bin/env pyt ...

  10. UVa 11732 strcmp()函数(左孩子右兄弟表示法)

    #include<iostream> #include<algorithm> #include<string> #include<cstring> #i ...