回测框架pybacktest简介(一)
来源:互联网 发布:星星知多少视频 编辑:程序博客网 时间:2024/05/16 10:56
pybacktest 教程
本教程让你快速了解 pybacktest's 的功能。为此,我们回测精典交易策略移动平均线MA交叉。
- MA快线上穿慢线时,买进做多
- MA快线下穿慢线时,卖出做空
- 进场规则,也是退场规则,交易策略相反相成
软件包在此下载 https://github.com/ematvey/pybacktest
- import pybacktest
- import pandas as pd
pybacktest 要求的 k 线数据格式为 pandas.DataFrame
,以时间戳为索引,各列字段名称为 O
, H
, L
, C。实际上,目前只检查字段O的值是否为空。
从yahoo下载数据。
- ohlc = pybacktest.load_from_yahoo('SPY')
- ohlc.tail()
定义交易策略。要创建以 True和False 表示交易信号的 Series
,和以浮点数表示交易价格的 Series。
够简单的吧?
- 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()
> Short MADate2013-04-22 154.54382013-04-23 154.66342013-04-24 154.78562013-04-25 154.91562013-04-26 155.0374> Long MADate2013-04-22 145.507252013-04-23 145.609102013-04-24 145.714552013-04-25 145.829702013-04-26 145.94430> Buy/Cover signalsDate2013-04-22 False2013-04-23 False2013-04-24 False2013-04-25 False2013-04-26 False> Short/Sell signalsDate2013-04-22 False2013-04-23 False2013-04-24 False2013-04-25 False2013-04-26 False
开始回测吧。访问类对象 Backtest
的第一个参数,是从字典式的对象中剥离出的交易信号、价格等。可以是字典、pandas.DataFrame 或者其他任何东西。
为了简化编程,把局部命名空间用函数 locals()传递过去。命名空间的内容,是至今你所创建的全部变量
。
- bt = pybacktest.Backtest(locals(), 'ma_cross')
Backtest
工作懒惰,只有在你访问它的属性时,它才会进行运算。它所运算的属性包括:
- 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()
['dataobj', 'default_price', 'eqplot', 'equity', 'name', 'ohlc', 'plot_equity', 'plot_trades', 'positions', 'prices', 'report', 'run_time', 'signals', 'sigplot', 'summary', 'trade_price', 'trades', 'trdplot']
> bt.signals Buy Cover Sell ShortDate 2013-04-22 False False False False2013-04-23 False False False False2013-04-24 False False False False2013-04-25 False False False False2013-04-26 False False False False> bt.trades pos price volDate 2009-06-23 1 90.16 22010-07-06 -1 103.13 -22010-10-22 1 119.14 22011-08-12 -1 119.19 -22012-01-31 1 132.29 2> bt.positionsDate2009-06-23 12010-07-06 -12010-10-22 12011-08-12 -12012-01-31 1> bt.equityDate2009-06-23 58.662010-07-06 12.972010-10-22 -16.012011-08-12 0.052012-01-31 -13.10> bt.trade_priceDate2013-04-22 156.952013-04-23 157.832013-04-24 158.342013-04-25 158.332013-04-26 NaNName: O
调用 Backtest 的函数summary ,可以得知常用的运算和运行数据
- bt.summary()
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-----------------------------------------------------------------
看看净资产曲线吧。
- figsize(10, 5)
- bt.plot_equity()
回测运行过程中的精确图形,Backtest 可以为你画出。图中的说明 Legend 省略了,以节省空间。
- 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')
<matplotlib.legend.Legend at 0x49eea10>
你能完全看清吗?我不行。因此,有个特别属性 trdplot
,让你用pandas的索引机制,指定你要画出的期间。而用属性 eqplot,可以画出净资产曲线。
- 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')
<matplotlib.axes.AxesSubplot at 0x7f7f38c09e50>
以上是pybacktest的大部分内容。下一个教程,会涉及更多高级功能。
原文地址:http://blog.csdn.net/lawme/article/details/51767787
0 0
- 回测框架pybacktest简介(一)
- 回测框架pybacktest简介(一)
- 回测框架pybacktest简介(二)
- 回测框架pybacktest简介(二)
- CoreData 框架简介(一)
- Shiro框架简介(一)
- Executor框架(一)Executor框架简介
- COTS应用程序开发框架简介(一)
- Summercool-Web框架简介 (一)
- Spring学习笔记(一)框架简介
- Core Animation之框架简介(一)
- Volley(一 )—— 框架简介
- Struts框架(一)——简介
- shiro权限管理框架简介(一)
- Javascript测试框架Jasmine(一):简介
- 框架设计简介(一)
- 框架(一):androidAnnotation简介
- 一.框架简介
- 报错: java.lang.ClassNotFoundException: org.hibernate.engine.transaction.spi.TransactionContext
- Java包装类,拆箱和装箱详解
- 将gradle 缓存的jar包目录,转换成maven使用的jar包目录
- java基础知识
- (一)单例模式详解
- 回测框架pybacktest简介(一)
- Mini2440交叉编译工具在Ubuntu16.04上的安装
- 关于winForm窗体最大化的设置(转)
- WUP 页面跳转过度动画
- Android设计模式之动态代理,实现方法拦截功能
- Mysql-聚簇索排序慢案例分析
- Research Proposal for PhD Studies
- 回测框架pybacktest简介(二)
- 3. Longest Substring Without Repeating Characters