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

news2024/9/21 16:42:53

背景

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

本文,介绍一个量化指标分析工具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.coloradmin.cn/o/61707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计校园帮平台管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【5G MAC】随机接入流程中的 Msg3 —— Scheduled UL (PUSCH) Transmission

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

机器学习數據降維之主成分分析(PCA)

文章目录前言数据降维是什么?维度灾难与降维作用主成分分析PCA原理PCA算法小例實戰總結前言 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容…

cubeIDE开发,结合汉字取模工具,在LCD输出各种字体

一、汉字取模工具 嵌入式LCD屏显示无非就是不间断刷新LCD宽度*LCD高度的像素矩阵,并为每个像素指定特定颜色。对于LCD屏幕显示汉字,无非就是将字体形状转换为字体宽度*字体高度的像素矩阵,及指定每个字体像素的颜色,然后在LCD屏幕…

点击试剂Methyltetrazine-PEG4-NHS ester,甲基四嗪-PEG4-琥珀酰亚胺酯,CAS:1802907-9

An English name:Methyltetrazine-PEG4-NHS ester Chinese name:甲基四嗪-四聚乙二醇-琥珀酰亚胺酯 Item no:X-CL-1328 CAS:1802907-92-1 Formula:C24H31N5O9 MW:533.54 Purity:95% Avai…

基于MCMC的交通量逆建模(Matlab代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

《人类简史》笔记四—— 想象构建的秩序

目录 一、盖起金字塔 1、未来的来临 2、 由想象构建的秩序 3、如何维持构建的秩序 二、 记忆过载 三、亚当和夏娃的一天 一、盖起金字塔 1、未来的来临 原始社会: 人口少; 狩猎和采集; 整体活动范围大(有几十甚至上百平方…

【怎么理解回流与重绘?以及触发场景】

一、是什么 在HTML中,每个元素都可以理解成一个盒子,在浏览器解析过程中,会涉及到回流与重绘: 回流:布局引擎会根据各种样式计算每个盒子在页面上的大小与位置 重绘:当计算好盒模型的位置、大小及其他属性…

初学Nodejs(5):npm包管理器与包的发布

初学Nodejs 包 1、概念 什么是包 Nodejs中的第三方模块又叫做包。包的来源 不同于Nodejs中的内置模块与自定义模块,包是由第三方个人或团队开发出来的,免费供人使用。(nodejs中的包都是免费且开源的,不需要付费即可免费下载使用…

2022年33个最佳WordPress健康与医疗主题

欢迎来到我们针对健康和保健相关网站和博客的最佳WordPress医疗主题的列表。这些涵盖了一切。您可以将它们用于医生、牙医、医院、健康诊所、内科医生、物理治疗师、外科医生以及健康领域的其他任何事物。大家有什么共同点?优质、100% 可定制的布局和 0 编码策略。 …

【论文精读8】MVSNet系列论文详解-UCS-Net

UCS-Net,论文名为:Deep Stereo using Adaptive Thin Volume Representation with Uncertainty Awareness,CVPR2020(CCF A) 本文是MVSNet系列的第8篇,建议看过【论文精读1】MVSNet系列论文详解-MVSNet之后再…

机器学习之过拟合和欠拟合

文章目录前言什麽是过拟合和欠拟合?过拟合和欠拟合产生的原因:欠拟合(underfitting):过拟合(overfitting):解决欠拟合(高偏差)的方法1、模型复杂化2、增加更多的特征,使输入数据具有更强的表达能力3、调整参数和超参数4、增加训练…

Java项目:SSM游戏点评网站

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台,前台为普通用户登录,后台为管理员登录; 管理员角色包含以下功能: 管理员登录…

jenkins-pipeline语法总结(最全)

1、jenkins总结之pipeline语法 jenkins总结之pipeline语法1、jenkins总结之pipeline语法1.1必要的Groovy知识1.2pipeline的组成1.2.1pipeline最简结构1.3post部分1.4pipeline支持的指令• environment:• tools:• input:• options&#xff…

大学网课查题接口

大学网课查题接口 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台(点击跳…

项目管理逻辑:老板为什么赔钱的项目也做?为什么害怕你闲着?

目录 1.波士顿矩阵 2.为什么企业还要做没有市场占有率,也没有销售增长率的产品? 2.1项目层级划分 2.2项目集 2.3组合管理 2.4赔钱也做的项目案例 1.波士顿矩阵 项目经理没有资源, 公司不给足够的支持 在任何一个企业老板的脑子里,都会有这样一个矩阵, 纵向表示销售增长…

数据结构与算法,MySQL数据库面试专题及答案

文章目录数据结构面试题及答案数组问题字符串相关问题链表问题二叉树问题编程面试问题之杂项答案数据结构与算法时间复杂度 并不是计算程序具体运行的时间,而是算法执行语句的次数 O(2^n) 表示对 n 数据处理需要进行 2^n 次计算 多项式的时间复杂度 数据 n 在表达式…

Docker安装部署Redis集群

目录 概述 一、创建文件和目录 1.1 创建需要挂载的文件和目录 1.2 同步操作 二、随机从节点模式 2.1 创建master节点的redis容器 2.2 在同一台机器上创建另外2个节点 2.3 其他2台机器同步操作 2.4 配置主从集群 2.4.1 进入任意一个 Redis 实例 2.4.2 配置集群 2.4…

《未来简史:从智人到智神》笔记一——人类的新议题

目录 一、人类的旧议题演变 二、人类的新议题 1、长生不死 2、追求幸福快乐 3、努力把自己升级为神 三、研究历史的意义——不是为了重复过去,而是为了摆脱过去并从中获得解放 四、生命的意义 1、主观体验有两个基本特征 2、生命的意义? 一、人类…

C语言第十三课:初阶指针

目录 前言: 一、指针是什么: 1.那么指针到底是什么呢? 2.内存中的数据存储原理: 3.数据存储与指针使用实例: 4.存储编址原理: 二、指针和指针类型: 1.决定了指针的步长: 2.决定了…