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

news/2024/11/30 9:55:21/

背景

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

本文,介绍一个量化指标分析工具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完全可以作为策略回测结果的分析工具,值得深入学习和长期使用。


http://www.ppmy.cn/news/1506.html

相关文章

Objective-C中weak实现原理

Objective-C的对象采用引用计数来管理内存,如果对象被强持有,这个对象的引用计数会增加,如果对象被弱持有,这个对象的引用计数不会增加。弱持有也就是weak如何实现的呢?首先看下weak相关底层实现用到的数据结构&#x…

使用xlsxwriter简单的将截图插入excel表格中

1.xlsxwriter插入图片 原因: 有个小项目需要测出数据,然后把仪表上截图给插入excel中。 在网上查了一下,发现用xlsxwriter插入图片挺方便的。 import xlsxwriterduang xlsxwriter.Workbook("data.xlsx") sheet duang .add_work…

用Hopper修改代理软件端口

背景 用代理软件可以访问google,但是端口经常不固定,从缺省1080变成了随机。 前几天其实已经用Hopper 3.0看了一次,但是好像不支持go,所以没反编译成功,这次换了4.0,支持了go。 Hopper与逆向 逆向的目的…

数据结构和算法之如何建立图

小白BG.1 邻接矩阵表示的图结点的结构 typedef struct GNode *PtrToGNode;//PtrToGNode是指向GNode的一个指针 struct GNode{ int Nv;//顶点数 int Ne;//边数 WeightType G[MaxVertexNum][MaxVertexNum]; DataType Data[MaxVertexNum];//存顶点的数据 }; typedef PtrToGNode MG…

“剧情+综艺” 助推国潮文化破圈

一舞千年,重现大唐辉煌;一曲流光,雕琢岁月模样;一纸云烟,漫卷诗书山河;跨历史长河,览盛世华章。自从河南卫视开启“剧情综艺”的晚会形式,晚会便多了一种呈现方式。 从2021年《唐宫夜…

基于JSP网上书城的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

一篇文章了解MySQL的group by

准备工作! 1.本文章MySQL使用的是5.7,引擎使用的是innodb 2. 使用的表结构(t1),字段a上有一个索引, 1. group by常用方法: group by的常规用法是配合聚合函数,利用分组信息进行统…

制作一个谷歌浏览器插件,实现网页数据爬虫

一、什么是浏览器插件 浏览器插件,基于浏览器的原有功能,另外增加新功能的工具,是可定制浏览体验的小型软件程序,让用户可以根据个人需要或偏好来定制浏览器。 如拦截网页中的广告、划词翻译、倍速视频等等。 Chrome、edge等浏…