V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
thinkingmind
V2EX  ›  推广

Ricequant 开源算法交易回测框架 RQalpha

  •  
  •   thinkingmind · 2016-07-29 16:58:58 +08:00 · 6376 次点击
    这是一个创建于 3021 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目地址: https://github.com/ricequant/rqalpha rqalpha

    RQAlpha

    简介

    RQAlpha 是一个开源的 Python 算法交易和回测引擎,适合 A 股市场,是事件驱动的设计。自带日线数据, 目前暂时仅支持日线回测。

    RQAlpha 的逻辑也将会在Ricequant的一些回测部分使用,Ricequant - 是一个开放的量化算法交易社区,有免费的服务器资源给大家测试、实盘模拟您的交易算法,并且可以将交易信号通过微信和邮件实时推送给大家, 如果您想要更好的回测报告体验和实盘模拟交易功能可以把本地写好的策略复制黏贴到我们的网站上运行。

    如果您想参与和贡献进来这个项目,可以发邮件给 [email protected] 联系,如果您有功能需求或者 bug 报告的话,都可以开一个 issue : https://github.com/ricequant/rqalpha/issues

    特色

    • 容易使用: RQAlpha 可以让你集中精力在策略的开发上。可以参考./examples 下的范例
    • 需要传入历史数据,计算的结果是 pandas 的 DataFrame, 和 PyData 的生态系统很好的结合在一起
    • 可以使用 Python 的统计、机器学习等科学计算库如 matplotlib, scipy, statsmodels 和 sklearn 等
    • 免费提供了 Ricequant 的日级别数据,可以通过互联网自己更新 data bundle

    安装

    # 为了避免一些安装问题,请先升级您的 pip 和 setuptools
    pip install -U pip setuptools
    
    # 安装 rqalpha
    pip install rqalpha
    
    # 升级 rqalpha
    pip install -U rqalpha
    
    # 国内的用户们可以使用镜像
    pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com -U rqalpha
    

    For Windows 用户

    如果出现缺失cl.exe,请访问https://wiki.python.org/moin/WindowsCompilers下载 VC 并且安装。

    如果在安装bcloz出现编译困难,可以从http://www.lfd.uci.edu/~gohlke/pythonlibs/#bcolz下载bcolz安装,安装bcloz后,再安装rqalpha

    安装依赖

    安装 TA-Lib

    你可以通过 PyPI 安装:

    $ pip install TA-Lib
    

    如果发现无法通过 pip 安装,请访问 https://mrjbq7.github.io/ta-lib/install.html 解决。

    对于 Windows 用户,如果编译困难,可以根据您本地的 Python 版本下载指定版本的 whl 包,然后pip install TA_Lib-0.4.9-cp27-none-win_amd64.whl

    Usage

    Usage: rqalpha [OPTIONS] COMMAND [ARGS]...
    
    Options:
      -v, --verbose
      --help         Show this message and exit.
    
    Commands:
      examples       generate example strategies to target folder
      plot           draw result DataFrame
      run            run strategy from file
      update_bundle  update data bundle, download if not found
    

    下载回测需要的数据 bundle

    运行以下命令,将会从 Ricequant 的服务器下载最新的日级别数据,为回测提供数据支持。

    rqalpha update_bundle
    

    生成样例策略

    运行以下命令,将会在指定目录生成一个 examples 文件夹,其中包含几个有趣的样例策略。

    rqalpha examples -d ./
    

    运行回测

    回测脚本参数如下:

    Usage: rqalpha run [OPTIONS]
    
      run strategy from file
    
    Options:
      -f, --strategy-file PATH     [required]
      -s, --start-date DATE        [required]
      -e, --end-date DATE          [required]
      -o, --output-file PATH
      -i, --init-cash INTEGER
      --plot / --no-plot           plot result
      --progress / --no-progress   show progress bar
      -d, --data-bundle-path PATH
      --help                       Show this message and exit.
    

    运行以下命令,将开始回测

    rqalpha run -f examples/multi_rsi.py -s 2014-01-01 -e 2016-01-01 -o result.pkl --plot
    

    等待回测结束后,将显示您的收益率和 Risk 。

    backtest

    绘制回测结果

    如果运行完回测后,还需要再次绘制回测结果,可以运行以下命令:

    rqalpha plot result.pkl
    

    分析结果

    RQAlpha 可以输出一个 DataFrame ,其中包含了每天的 Portfolio 信息、 Risk 信息、 Trades 和 Positions 。

    其 Index 是交易日, columns 包括alpha, annualized_returns, benchmark_annualized_returns, benchmark_daily_returns, benchmark_total_returns, beta, cash, daily_returns, downside_risk, information_rate, market_value, max_drawdown, pnl, portfolio_value, positions, sharpe, sortino, total_commission, total_returns, total_tax, tracking_error, trades, volatility

    其中positions是当日的持仓信息,trades是当日的交易信息。

    import pandas as pd
    df = pd.read_pickle("result.pkl")
    print(df.iloc[-1])
    
    '''
    alpha                                                                   0.0180666
    annualized_returns                                                      0.0559331
    benchmark_annualized_returns                                            0.0454542
    benchmark_daily_returns                                               8.87784e-05
    benchmark_total_returns                                                  0.525913
    beta                                                                     0.518371
    cash                                                                      4971.44
    daily_returns                                                          0.00250376
    downside_risk                                                            0.246409
    information_rate                                                        0.0380054
    market_value                                                               162796
    max_drawdown                                                            -0.602535
    pnl                                                                           419
    portfolio_value                                                            167767
    positions                       {'000068.XSHE': Position({{'value_percent': 0....
    sharpe                                                                    2.35011
    sortino                                                                   2.62967
    total_commission                                                          2585.89
    total_returns                                                            0.677674
    total_tax                                                                 1172.01
    tracking_error                                                           0.269138
    trades                                                                         []
    volatility                                                               0.275721
    Name: 2016-07-01 00:00:00, dtype: object
    '''
    

    架构图

    Architecture

    FAQ

    在 Windows 运行报 Error on import matplotlib.pyplot

    请访问 Error on import matplotlib.pyplot (on Anaconda3 for Windows 10 Home 64-bit PC) 解决。

    8 条回复    2016-08-22 19:54:28 +08:00
    zjupigeon
        1
    zjupigeon  
       2016-07-29 17:10:32 +08:00
    能挣钱么?哈哈
    hansnow
        2
    hansnow  
       2016-07-29 17:11:06 +08:00
    好高级。。。非常外行的问一句,现在都是程序化交易啦?万一程序出了 bug 岂不是要亏大了。。。
    thinkingmind
        3
    thinkingmind  
    OP
       2016-07-29 17:14:18 +08:00
    @hansnow 现在还不能实盘,你说银行代码出 bug 转错了是不是亏得更多
    forest520
        4
    forest520  
       2016-07-29 17:14:21 +08:00
    赞一个。日线数据有复权么?另外指数和 ETF 的数据有么?
    thinkingmind
        5
    thinkingmind  
    OP
       2016-07-29 17:14:30 +08:00
    @zjupigeon 那要看策略啦
    forest520
        6
    forest520  
       2016-07-29 17:16:57 +08:00
    基于这个开源包开发,能做哪些在你们的网站上贴代码做不到的事情?
    thinkingmind
        7
    thinkingmind  
    OP
       2016-07-29 17:19:41 +08:00
    @forest520 作为一家商业公司 开源只是表达一个态度我们认真做平台对用户的策略没有兴趣,用户完全可以自己搭建回测平台测试。所以开源的部分除了更灵活功能不可能比线上多的
    tiankaicomcom
        8
    tiankaicomcom  
       2016-08-22 19:54:28 +08:00
    在 Spyder 怎么实现 rqalpha ,我是个新手,试了下,在 cmd 可以运行。在 Spyder 怎么实现?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3488 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:43 · PVG 18:43 · LAX 02:43 · JFK 05:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.