回测框架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
原创粉丝点击