回测框架pybacktest简介(二)
来源:互联网 发布:java反序列化漏洞修复 编辑:程序博客网 时间:2024/06/06 00:23
pybacktest 的疑点
第(一)节“教程”原文,是用 ipython notebook 写成,程序代码是一些片段组成。
为了阅读方便,合并在一起。
import pybacktest import pandas as pdohlc = 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: 17exposure: holding periods: max: 1476 days, 0:00:00 median: 354 days, 0:00:00 min: 7 days, 0:00:00 trades/month: 1.0625performance: PF: 4.017 RF: 6.1555 averages: gain: 23.817 loss: -8.47 trade: 10.5224 payoff: 2.8119 profit: 178.88 winrate: 0.5882risk/return profile: UPI: 1.0656 WCDD (monte-carlo 0.99 quantile): 52.09 maxdd: 74.67 sharpe: 0.4485 sortino: 1.6792
0 0
- 回测框架pybacktest简介(二)
- 回测框架pybacktest简介(二)
- 回测框架pybacktest简介(一)
- 回测框架pybacktest简介(一)
- 框架设计简介(二)
- COTS应用程序开发框架简介(二)
- Summercool-Web框架简介 (二)
- backbone学习笔记二(框架简介)
- 框架(二)、简介
- 二、rabbitMQ大体框架简介
- PHP框架Yii系列教程(二):功能简介
- Python 各种测试框架简介(二):unittest
- Python 各种测试框架简介(二):unittest
- 移动安全框架MobSF安装过程简介 (二)
- Spring框架快速入门之简介(二)
- 【Android 入门之二】Android 框架简介
- libsvm简介(二)
- CSS简介(二)
- (1)linux基本命令
- android:descendantFocusability用法简析
- 如何用几何画板画垂线
- 记PE文件中读写资源
- 协程框架
- 回测框架pybacktest简介(二)
- sed 常用命令
- java中基本数据类型的取值范围
- JVM中的G1垃圾回收器
- Xcode 常用快捷键
- 详解Java中的注解
- 用通俗易懂的话说下hadoop是什么,能做什么
- 关于onConfigurationChanged以及onConfigurationChanged 未被调用的问题
- SVN Unable to connect to a repository at URL