• 【从零开始玩量化13】quantstats:分析你的量化策略


    背景

    之前总结了一些获取量化数据的途径,数据是一个量化策略的“原材料”,接下来要考虑的问题就是如何使用这些数据。

    本文,介绍一个量化指标分析工具quantstats,利用它可以很方便的分析你的策略。

    Github地址:https://github.com/ranaroussi/quantstats

    他的作者是Ran Aroussi,同时也是yfinance的作者,在开源量化领域,也是名声响当当。目前就职于tradologics,一家国外的程序化交易云平台。不过,如果你是一个A股交易者,这些可能也用不太上,可以用的就只有quantstats

    安装

    常规的pip安装,注意包名是小驼峰,跟GitHub项目名大小写不同。

    pip install QuantStats
    
    • 1

    概念

    基本逻辑

    先解释下,我们接下来要做的事情的基本逻辑。假设,我们已经制定了一个投资策略,并且已经利用回测工具,计算出了策略的每日的历史回测收益。接下来我们要做的肯定是,想办法评价一下他,这个策略是好是坏,风险如何,收益如何。这个工具就是要做这个。

    基准

    这是我们评价α相关指标的重要概念,我们需要设定一个基准策略,对比自己的量化策略。在A股,通常把基准设定为沪深300指数的收益率。

    指标

    指标,是评价一个策略好坏的具体的统计值。比如前面介绍过的,信息比率、夏普比率,再比如最大回撤,α、β收益等。

    这些指标的计算规则是客观的,有严格标准的公式,但关于指标的评价,是因人而异的,可能跟你的风险偏好有关。所以,最后并不会有一个绝对的好坏值供我们参考,而重要的是自己去理解各个指标后边的逻辑,自我决定如何评价。

    实战

    官方给的例子,是基于yfinance的,使用的是美股的数据,我们这里尝试使用A股数据进行下分析。

    我制定一个最简单的策略:一直持有工商银行这只股票。那我们的策略收益就是这只股票的每日收益,没问题吧。

    基准:选取沪深300指数的收益率。

    接下来直接上代码,具体解释写在代码注释上

    import pandas as pd
    import akshare as ak
    import quantstats as qs
    
    # 获取沪深300历史交易数据
    df_300 = ak.stock_zh_index_daily_em(symbol="sh000300")
    
    # 获取工商银行历史交易数据
    df = ak.stock_zh_a_hist(symbol="601398", adjust="hfq")
    # 将列名日期改为date,使其与df_300具备同名日期列
    df['date'] = df['日期']
    
    # 合并两个数据表
    df_merge = df.merge(df_300, how='inner', on='date')
    # 将合并数据表的日期列改为时间格式
    df_merge['date'] = pd.to_datetime(df_merge['date'] , format='%Y-%m-%d')
    
    # 目标策略收益率Series,pct_change的作用是根据价格计算收益率
    target = df_merge['收盘'].pct_change()
    # 将索引设置为日期列
    target.index = df_merge['date']
    # 基准策略收益率Series,计算方法相同
    base = df_merge['close'].pct_change()
    base.index = df_merge['date']
    # 输出网页格式的分析结果
    qs.reports.html(target, base,  output='Output.html')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    注意几个点

    • 我们用工具获取到的交易数据原始,基本都是只有开盘价,收盘价,很少包含收益率数据,那这个如何计算呢,其实很简单,pandas里有现成的方法:pct_change
    • quantstats需要的策略数据格式为Series,值是收益率,索引是日期,必须为datetime格式,不能是字符串。
    • 对于股票或者基金的历史交易的交易数据,最好使用复权数据,最好是后复权,这样价格不会出现负数,且收益率不会出现极端错误值。

    结果展示

    html格式的结果内容很多,就不全贴了,基本上能想到的指标都有,可以具体分析。比如,我这个策略,一直持有工商银行的收益,是没跑赢沪深300的,那就不如持有沪深300了。不过也可看到,工商银行的最大回撤是要比沪深300更小的,说明波动更小一点。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    如果只关注某个指标,也可以只计算这个指标,比如信息比率

    # target和base就是上边计算出来的
    qs.stats.information_ratio(target, base)
    
    • 1
    • 2

    结果为

    -0.0053144770904208815
    
    • 1

    小于0,说明这个策略相对于基准是没有优势的,更多的超额风险,带不来更多的超额收益。

    总结

    我认为,quantstats完全可以作为策略回测结果的分析工具,值得深入学习和长期使用。

  • 相关阅读:
    dataframe逐行绘制到一张图片中
    【数学建模竞赛】超详细Matlab二维三维图形绘制
    linux驱动开发:中断和时间管理
    Unity中的Timeline
    cocos 构建发布没有对话框
    C#/VB.NET 获取Excel中图片所在的行、列坐标位置
    LeetCode算法题:2. 两数相加
    【linux】Linux 查看内存使用情况的几种方法汇总
    【网络】主机连接 TCP 三次握手
    计算机视觉中的可解释性分析
  • 原文地址:https://blog.csdn.net/u010214511/article/details/128106361