背景
之前总结了一些获取量化数据的途径,数据是一个量化策略的“原材料”,接下来要考虑的问题就是如何使用这些数据。
本文,介绍一个量化指标分析工具quantstats
,利用它可以很方便的分析你的策略。
Github地址:https://github.com/ranaroussi/quantstats
他的作者是Ran Aroussi,同时也是yfinance
的作者,在开源量化领域,也是名声响当当。目前就职于tradologics,一家国外的程序化交易云平台。不过,如果你是一个A股交易者,这些可能也用不太上,可以用的就只有quantstats
安装
常规的pip安装,注意包名是小驼峰,跟GitHub项目名大小写不同。
pip install QuantStats
概念
基本逻辑
先解释下,我们接下来要做的事情的基本逻辑。假设,我们已经制定了一个投资策略,并且已经利用回测工具,计算出了策略的每日的历史回测收益。接下来我们要做的肯定是,想办法评价一下他,这个策略是好是坏,风险如何,收益如何。这个工具就是要做这个。
基准
这是我们评价α相关指标的重要概念,我们需要设定一个基准策略,对比自己的量化策略。在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')
注意几个点
- 我们用工具获取到的交易数据原始,基本都是只有开盘价,收盘价,很少包含收益率数据,那这个如何计算呢,其实很简单,
pandas
里有现成的方法:pct_change
。 - quantstats需要的策略数据格式为Series,值是收益率,索引是日期,必须为
datetime
格式,不能是字符串。 - 对于股票或者基金的历史交易的交易数据,最好使用复权数据,最好是后复权,这样价格不会出现负数,且收益率不会出现极端错误值。
结果展示
html格式的结果内容很多,就不全贴了,基本上能想到的指标都有,可以具体分析。比如,我这个策略,一直持有工商银行的收益,是没跑赢沪深300的,那就不如持有沪深300了。不过也可看到,工商银行的最大回撤是要比沪深300更小的,说明波动更小一点。
如果只关注某个指标,也可以只计算这个指标,比如信息比率
# target和base就是上边计算出来的
qs.stats.information_ratio(target, base)
结果为
-0.0053144770904208815
小于0,说明这个策略相对于基准是没有优势的,更多的超额风险,带不来更多的超额收益。
总结
我认为,quantstats
完全可以作为策略回测结果的分析工具,值得深入学习和长期使用。