zoukankan      html  css  js  c++  java
  • 回测框架pybacktest简介(二)

    pybacktest 的疑点

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

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

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

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


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

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

    [python] view plain copy
     
    1. figsize(10, 5)    
    2. legend(loc='upper left')  

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

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

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

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

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

    [python] view plain copy
     
    1. ohlc = pybacktest.load_from_yahoo('SPY')  

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

    [python] view plain copy
     
    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
  • 相关阅读:
    java之md5加密算法
    springboot之快速创建项目
    java之idea打jar包
    java只http改成https访问
    springboot之读取配置文件
    springboot之项目打包
    Git之fatal: remote origin already exists
    WebStorm ES6 语法支持设置和ES6语法的JS文件编译为ES5语法文件
    转 JavaScript里的数组转化新方法Array.From
    网页特殊符号HTML代码大全
  • 原文地址:https://www.cnblogs.com/zhanglong8681/p/7569178.html
Copyright © 2011-2022 走看看