Alphalens因子分析(2) - 低换手率因子秒杀98%的基金经理?

上一篇笔记,我们已经为因子分析准备好了数据。这一篇笔记,我们就进行因子分析。分析过程在 Alphalens 中非常简单,核心是读懂它的报告。

Alphalens 框架

Alphalens 的主要模块是 utils, tears, performance 和 plotting。

utils 主要功能是提供数据预处理,我们已经在上一篇笔记中,已经使用过 get_clean_factor_and_forward_returns 这个方法,实际上是由quantize_factor get_clean_factor和compute_forward_return 这样三个方法构成的。


在这个方法运行时,它会输出这样的提示信息:

Dropped 4.1% entries from factor data: 4.1% in forward returns computation and 0.0% in binning phase (set max_loss=0 to see potentially suppressed Exceptions).

max_loss is 35.0%, not exceeded: OK!

它涉及到因子分析框架的几个步骤,在我们的课程中,对其原理有详细讲解。作为一个快速入门,我们就跳过这些细节。我们只要知道,看到最后的 not exceeded: OK!就大功告成。
在这里插入图片描述

这张导图显示了Alphalens的模块组织情况:

75%


performance 模块提供因子分析的基础功能,plotting 模块提供图形绘制功能。而 tears 模块则是将 performance 与 plotting 的操作组合起来,向用户生成报告。

utils 与 tears 模块是用户接口,我们可以只使用这两个模块中的功能,而不去管 performance 与 plotting 模块具体是怎么工作的。

现在,我们来查看 factor_data(请回顾上一篇笔记,以了解这个数据是如何生成的):


列"1D"等代表了对应行所属的时间戳之后的 N 天的收益。factor 则是当时的因子值,factor_quantile 则是该因子在当天中的分层。因此,第一行记录表明,对于 000001 这个标的,在 1 月 3 日,因子为 1.13,属于第二组(由小到大,从 1 开始)。该资产在随后的一天、五天和十天内,累计涨跌幅分别为 4%, 4.9%和 8.8%。


在这里插入图片描述

接下来的分析,我们可以直接使用 create_full_tear_sheet 方法,来生成一个完整而全面的报告。不过,出于讲解的方便,我们将把 create_full_tear_sheet 方法拆开,一步步地分析它的实现。

回报分析

我们首先最关心的,可能是因子回报。回报分析尽管没那么可靠,但它既感性,又性感,毕竟,比起波动率、IC 这些客观但毫无感情而言的统计学概念而言,我们都更喜欢钱!

from alphalens.performance import mean_return_by_quantile

mean_return_by_q_daily, std_err = mean_return_by_quantile(
    factor_data, by_date=True)

mean_return_by_q_daily.head()

我们得到的结果如下:


结果只显示了第 1 组的前几期数据。这个数据过于详尽,作为概览,我们更希望给出它的摘要信息。这可以通过设置 by_date = False 来实现:

这样我们得到的因子分层第一组,它的日回报是0.063%。如果按250天来计算年复利的话,我们会得到年化17.05%的回报,就凭这一个因子,你已经秒了98%以上的公墓(此处无错别字)基金经理了!


!!! info
如果你要复现此处结果的话,请注意分层方法选 quantiles = 10,而不是bins=10

与之配对的绘图函数是 plot_quantile_returns_bar:

import seaborn as sns
from alphalens.plotting import plot_quantile_returns_bar

plot_quantile_returns_bar(mean_return_by_q_daily)
sns.despine()

这里我们使用了seaborn的despine函数来去掉上方和右边的spine线。

从图来看,这个因子不错。它表现出较好的单调性,也就是随着分组号增加,因子表现在变差。注意,我们的因子是换手率因子,在分层中,组号低的,正好就是低换手率! 如果因子能表现出较好的单调性,我们不仅可以靠做多获得收益,还可以通过做空来使收益倍增!


不过,单凭一个日均收益来判断因子不太可靠,我们还得看看回报的统计学特征,看看这些收益,是否是由少数几笔意外收入贡献的。这时候我们就需要violin图:

from alphalens.plotting import plot_quantile_returns_violin

plot_quantile_returns_violin(mean_return_by_q_daily)
sns.despine()

!!! note
此时要注意, 在生成mean_return_by_q_daily时,by_date参数必须为True。否则,我们得到的是一些标量,是不具有统计学特征的。

我们得到的图如下:

我们来分析第1组的数据。可以看出(当然图有点小,你可能啥也看不出来,自己拿数据试吧!),至少比较接近正态分布,没有很长的尖峰,这说明正的收益并不是少数几笔带来的。反观第3组的10日收益,它出现了很长的尖峰,这说明可能出现了离群值。


我们还可以查看最大的一组因子与最小的一组因子之间的利差。

from alphalens.performance import compute_mean_returns_spread
from alphalens.plotting import plot_mean_quantile_returns_spread_time_series

qrs, ses = compute_mean_returns_spread(mean_return_by_q_daily,upper_quant=1, lower_quant=9,std_err=std_err)

plot_mean_quantile_returns_spread_time_series(qrs, ses)

最终我们得到了下图(这里只取了1天):

红色的线是月线。我们可以看到,多数时间,它比较明显地、稳定地居于零轴之上,这说明,基于低换手率的多空策略,能取得较好的收益。

!!! important "重要提示"
在计算多空利差时,compute_mean_returns_spread函数需要我们指定upper_quant和lower_quant。在这里,upper_quant是第一组,而lower_quant从前面的分析来看是第9组,而不是第10组。

最后,我们以累积回报率分析作为本篇笔记的结束。这可能也是初学者最喜欢的曲线:


from alphalens.plotting import plot_cumulative_returns_by_quantile

mean_return_by_q_daily, std_err = mean_return_by_quantile(
    factor_data, by_date=True)
plot_cumulative_returns_by_quantile(mean_return_by_q_daily, period='1D')

我认为这里alphalens出现了一个错误。我们要求它只绘制以1天为单位的各分层的累积回报,但它却附赠了5天和10天的轨迹,但这增加了读图的难度,因此我们并不领情。

从累积回报图来看,如果我们能把该因子与一些正确的择时因子组合在一起,就能获得巨大的收益。即便如此,在1日累积回报中,最好的(也就是分组为1)数据表明,仍然能实现一个正收益。

刚刚我们展示的是分层因子回报。Alphalens还提供了因子作为整体的回报计算和绘图。在我们这个例子中,这样做并没有意义,因为是低换手率产生价值,而不是换手率产生价值

原文发布在大富翁量化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/307644.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

elementui dialog 回车时却刷新整个页面

到处都是坑,这个坑填完另一个坑还在等你。。。坑坑相连,坑坑不同。。。 使用el-dialog弹出一个表单,当我无意间敲到回车键时,整个页面被刷新了,又是一脸的懵逼。。。 经过查找文档发现解决方案为上述截图标记。。。 e…

SaaS先驱Salesforce发展史

Salesforce是云计算和SaaS领域的先驱,大致经过5个不同发展阶段 第一个阶段:SaaS CRM发展初期 Salesforce成立时间是1999年,其SaaS业务的Idea的灵感起源于IaaS巨头亚马逊。初期标榜的竞品Siebel早期投入高、很难上手、功能过于复杂、实用性不强…

C语言之详解数组【附三子棋和扫雷游戏实战】

文章目录 一、一维数组的创建和初始化1、数组的创建2、数组的初始化3、一维数组的使用4、 一维数组在内存中的存储 二、二维数组的创建和初始化1、二维数组的创建2、二维数组的初始化3、二维数组的使用4、二维数组在内存中的存储 三、数组越界边界值考虑不当导致越界访问数组大…

龍运当头--html做一个中国火龙祝大家龙年大吉

🐉效果展示 🐉HTML展示 <body> <!-- partial:index.partial.html --> <svg><defs><g id=

推荐VSCODE插件:为`package.json`添加注释信息

众所周知&#xff0c;JSON文件是不支持注释的&#xff0c;除了JSON5/JSONC之外&#xff0c;我们在开发项目特别是前端项目时&#xff0c;大量会用到JSON文件&#xff0c;特别是在编写package.json中的scripts时&#xff0c;由于缺少注释,当有大量的命令脚本时&#xff0c;就有了…

【REST2SQL】07 GO 操作 Mysql 数据库

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】06 GO 跨包接口重构代码 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xf…

【Spring Boot】SpringBoot maven 项目创建图文教程

创建一个Spring Boot项目并使用Maven进行构建是一项相对简单的任务。以下是使用IntelliJ IDEA创建Spring Boot Maven项目的详细教程&#xff1a; 步骤 1&#xff1a;安装 IntelliJ IDEA 确保你已经安装了最新版本的 IntelliJ IDEA。你可以从官方网站下载并安装。 步骤 2&am…

构建高效学习平台:企业培训系统源码深度解析

企业培训系统是组织中培养和提升员工技能的核心工具。本文将深入探讨企业培训系统的源码&#xff0c;通过关键技术代码解析&#xff0c;揭示其中的设计原理和功能实现&#xff0c;以构建更高效的学习平台。 1. 环境配置与依赖项安装 首先&#xff0c;让我们关注源码的环境配…

小测一下HCL中VSR的转发性能

正文共&#xff1a;555 字 10 图&#xff0c;预估阅读时间&#xff1a;1 分钟 上次我们在HCL中导入了NFV的自定义镜像&#xff08;如何在最新版的HCL 5.10.0中导入NFV镜像&#xff1f;&#xff09;&#xff0c;但是当时没有测试转发性能&#xff0c;最近HCL又更新了V5.10.1版本…

电脑文件mfc100u.dll丢失的解决方法分析,怎么修复mfc100u.dll靠谱

mfc100u.dll丢失了要怎么办&#xff1f;其实很多人都遇到过这样的电脑故障吧&#xff0c;说这个mfc100u.dll文件已经不见了&#xff0c;然后一些程序打不开了&#xff0c;那么这种情况我们要怎么解决呢&#xff1f;今天我们就来给大家详细的说说mfc100u.dll丢失的解决方法。 一…

虚拟机安装intel架构的银河麒麟V10(SP1)

一 背景 银河麒麟是国产操作系统之一&#xff0c;是基于Linux内核的桌面操作系统&#xff0c;有自己的应用中心&#xff0c;具有一定的生态系统。今从官网下载了V10&#xff08;SP1&#xff09;镜像文件&#xff0c;在Windowns的VMware虚拟机上安装试用。 官网&#xff1a;http…

ylov8的训练和预测使用(目标检测)

首先要配置文文件 1-配置数据集的yaml文件&#xff1a; 目录在ultralytics/cfg/datasets/下面&#xff1a; 例如我的&#xff1a; (这里面的yaml文件在/ultralytics/cfg/datasets下面有很多&#xff0c;可以找几个参考一下) path: /path/to/eye_datasets # dataset root di…

使用cURL命令在Linux中测试HTTP服务器的性能

cURL是一个强大的命令行工具&#xff0c;用于从或向服务器传输数据。它支持多种协议&#xff0c;包括HTTP、HTTPS、FTP等。在Linux系统中&#xff0c;cURL可以用于测试和评估HTTP服务器的性能。下面是一些使用cURL命令测试HTTP服务器性能的示例和说明。 1. 基本请求 要向指定…

虚幻引擎:开创视觉与创意的新纪元

先看看据说虚幻5做出来的东西吧&#xff1a; 虚幻引擎5&#xff01;&#xff01;&#xff01;4K画质PS5实机演示&#xff01; 好了&#xff0c;用文字认识一下吧&#xff1a; 虚幻引擎5.3对UE5的核心工具集作了进一步优化&#xff0c;涉及渲染、世界构建、程序化内容生成&…

怀念母校《山东海天软件工程学院》

当初就是个统招专科的分数&#xff0c;因个人喜欢英语和计算机&#xff0c;加之学校宣传学历技能培训&#xff0c;于是参加了夏令营&#xff0c;后来在海天度过了大学时光&#xff0c;有技术社团&#xff0c;有爱好社团&#xff0c;也参加了比赛&#xff0c;顺利实习&#xff0…

15-sharding-jdbc入门-基于inline模式实现水平分库分表__ev

水平分库分表&#xff1a; 将下面的数据库 order_db_1 ├── t_order_1 └── t_order_2 垂直分库分表到 order_db_2 ├── t_order_1 └── t_order_2 新建src/main/resources/application-test2.properties文件&#xff0c;在src/main/resources/application…

SD-WAN网关监控异地组网

SD-WAN网关监控异地组网是指利用SD-WAN网关对远程网络设备进行监控与管理&#xff0c;确保网络连接的稳定性与安全性。这种智能网络设备支持多种连接方式&#xff08;比如MPLS、互联网或无线网络&#xff09;&#xff0c;能够智能地选择最佳网络连接路径&#xff0c;以确保异地…

day 43动态规划(5)

day 43 代码随想录 2024.1.10 发烧中。。。简单过一遍等二刷DP问题&#xff01;&#xff08;最近赶一篇paper&#xff01;&#xff09; 1. 1049最后一块石头的重量 dp[j]表示容量&#xff08;这里说容量更形象&#xff0c;其实就是重量&#xff09;为j的背包&#xff0c;最多…

如何加密U盘数据?U盘数据加密软件怎么选?

U盘作为最常用的移动储存设备&#xff0c;是很多人储存数据的重要工具。而普通的U盘不具备保护数据的功能&#xff0c;很容易导致数据泄露。因此&#xff0c;我们需要使用专业的U盘加密软件来加密保护U盘数据。那么&#xff0c;U盘数据加密软件该怎么选择呢&#xff1f;下面我们…

JAVA毕业设计119—基于Java+Springboot+vue的智能停车场管理系统(源代码+数据库+9000字论文)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue的智能停车场管理系统(源代码数据库9000字论文)119 一、系统介绍 本项目前后端不分离 登录、控制台、停车场管理、车牌识别、车辆管理角色管理、系统菜单、…