alphalens分析是一个进行单因子分析的开源项目。alphalens需要的数据有自己要求的格式,因此整个过程就分为两个部分:(a)处理数据,形成所需的格式(b)计算并理解数据的结果。
下午跑了一遍前文书中提到的alphalens单因子有效性分析,程序是跑完了,可结果还有待看懂,大概的过程如下:
(1)获取数据,进行初步处理

import tushare as ts
ts.set_token('*********************************')
pro=ts.pro_api()
data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
data


在这里,我拿到了4179条上市公司的基本数据,包括行业,股票名称和代码等等,为了简化操作,我们只取前100支股票进行操作

data_code=data[:100]
data_code
#对数据中的行业进行编码并生成字典
t=data_code.industry.unique()
tlen=range(0,len(t))
in_id=dict(zip(tlen,t))
in_id_r=dict(zip(t,tlen))
data_code['in_id']=data_code['industry'].map(in_id_r)
code_sec=dict(zip(data_code.ts_code,data_code.in_id))

取出这100支股票的行情数据。为了对齐交易日期,使用沪深300指数的交易日期作为所有股票的索引基准。

df=pro.trade_cal(exchange='SSE',start_date='2013-01-01',end_date='2017-12-31')
df=df.set_index('cal_date')
df['399300']=df.is_open
df=df[['399300']]
for i in data_code.ts_code:dfn=pro.daily(ts_code=i,start_date='2013-01-01',end_date='2017-12-31')dfn=dfn.set_index('trade_date')df[i]=dfn.open
import pandas as pd
df.index=pd.to_datetime(df.index)
del df['399300']
df


根据书上的操作,选用未来5日的收益率作为因子进行分析。

lookahead_bias_days=5
pre_factor=df.pct_change(lookahead_bias_days)
pre_factor=pre_factor.shift(-lookahead_bias_days)
pre_factor=pre_factor.stack()
pre_factor.index=pre_factor.index.set_names(['date','asset'])
pri=df

最后使用alphalens的整合函数来整理数据:

import alphalens
data1=alphalens.utils.get_clean_factor_and_forward_returns(pre_factor,pri,quantiles=5,bins=None,groupby=code_sec,groupby_labels=in_id)
data1


到此数据的整理才算结束,可以进行分析操作了。
(2)收益率分析
首先查看不同分位数的因子和收益率的相关性:

mean_return_by_q,std_err_by_q=alphalens.performance.mean_return_by_quantile(data1,by_group=False)
mean_return_by_q.head()


画个图更容易观察:

alphalens.plotting.plot_quantile_returns_bar(mean_return_by_q)


据书上的说明是“随着因子的增大,未来的收益率也会增加,说明因子和收益率有很强的相关性,是一个不错的因子“,反正我没太懂。
再绘制一下每个调仓期最高因子和最低因子收益率的差值图:

mean_return_by_q_daily,std_err=alphalens.performance.mean_return_by_quantile(data1,by_date=True)
quant_return_spread,std_err_spread=alphalens.performance.compute_mean_returns_spread(mean_return_by_q_daily,upper_quant=5,lower_quant=1,std_err=std_err)
alphalens.plotting.plot_mean_quantile_returns_spread_time_series(quant_return_spread,std_err_spread)




分3种时间长度来计算,绿色部分是最高因子收益率和最低因子收益率的差值,橙色是绿色线的移动平均线。如果一个因子有效,那么这个差值应该是稳定的大于0的,看上去貌似这个因子还不错。
再来求取不同分位数因子的累积净值:

alphalens.plotting.plot_cumulative_returns_by_quantile(mean_return_by_q_daily,period=5)


实际上,上述的结果和图都可以通过下面的一个函数全部给显示出来,都是重复性内容,图我就不贴了。

alphalens.tears.create_returns_tear_sheet(data1)alphalens.tears.create_returns_tear_sheet(data1)

(3)信息系数分析
信息系数可以从另一个角度来衡量因子有效性,信息系数的值在0-1之间,0表示无预测作用,1表示有完全预测作用,所以一般越接近1越好。
计算信息比率:

ic=alphalens.performance.factor_information_coefficient(data1)
ic.head()


并绘制信息系数的图:

alphalens.plotting.plot_ic_ts(ic)


还可以通过直方图和QQ图观察信息系数的分布:

#直方图
alphalens.plotting.plot_ic_hist(ic)
#QQ图
alphalens.plotting.plot_ic_qq(ic)



从图上可以看出,信息系数的分布类似于正态分布,平均值较好。
最后绘制出每个月的信息系数表现图:

mean_monthly_ic=alphalens.performance.mean_information_coefficient(data1,by_time='M')
alphalens.plotting.plot_monthly_ic_heatmap(mean_monthly_ic)


最后这张热力图不知道在说什么,书上也没解释,小白好苦啊。
上面的这些信息系数的报表也可以通过下面这个函数一次显示:

alphalens.tears.create_information_tear_sheet(data1)

后面就没有了,没有完全看懂,作者还欠我很多个解释哈。

金融学习之三——晕头转向的alphalens相关推荐

  1. Linux学习之三-Linux系统的一些重要配置文件

    Linux学习之三-Linux系统的一些重要配置文件 1.网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0 说明: DEVICE=eth0        ...

  2. matlab矩阵运算_MATLAB基础学习之三种基本运算

    MATLAB学习之三种运算 MATLAB软件 一.基本算数运算 在MATLAB中有两种矩阵运算:右除/和左除.如果A矩阵是非奇异方阵,则B/A等效于B*inv(A),AB等效于inv(A)*B.注:i ...

  3. linux内核学习之三:linux中的32位与64位

    linux内核学习之三:linux中的"32位"与"64位" 在通用PC领域,不论是windows还是linux界,我们都会经常听到"32位" ...

  4. 您已关注公众号满1年,诚邀您免费加入金融学习交流群!

    作为一名福利小编,今天我又要营业了 你们懂~ 在后台最多的一类消息就是 "小编在吗?有那种资源吗?" "......" "那种实用又免费的CFA学习资 ...

  5. 智能会议系统(32)---WebRTC学习之三:录音和播放

    WebRTC学习之三:录音和播放 VoiceEngine中与录音和播放相关的头文件有五个,如下表所示: 头文件 包含的类 说明 voe_base.h VoiceEngineObserver Voice ...

  6. 金融学习之十二——凸性

    今天讨论另外一个概念,叫做凸性.什么是凸性呢?凸性也称为凸度或曲率,是衡量债券价格对债券到期收益率变化的非线性关系的指标,是债券价格对收益率的二阶导数.\为什么需要讨论凸性呢,我们可以看下面的例子(这 ...

  7. 华为鸿蒙系统HarmonyOS学习之三:鸿蒙HarmonyOS 系统安全性

    华为鸿蒙系统HarmonyOS学习之三:HarmonyOS 系统安全性 HarmonyOS(鸿蒙操作系统)采用全新的微内核设计,具有增强的安全性和低延迟.该微内核旨在简化内核功能,在内核外的用户模式下 ...

  8. 金融学习纲要与相关知识

    金融指货币的发行.流通和回笼,贷款的发放和收回,存款的存入和提取,汇兑的往来等经济活动.金融(FIN)就是对现有资源进行重新整合之后,实现价值和利润的等效流通.(专业的说法是:实行从储蓄到投资的过程, ...

  9. 互联网金融学习总结(2)——互联网金融风控的应用场景及风控手段

    金融作为现代经济的核心,其风险的积累与爆发所形成的金融危机,已经成为引发经济危机的直接原因.2008年爆发的金融危机及随后发生的欧债危机,使得金融风险迅速成为人们关注的焦点. 随着互联网和通信技术的高 ...

最新文章

  1. 【教程】手把手企业FTP搭建实例
  2. abaqus 多层网格绑定_ABAQUS螺栓接触分析
  3. CodeForces - 528D Fuzzy Search(多项式匹配字符串)
  4. SAP Spartacus里product数据请求的HTTP url是在哪里维护的
  5. Bash的循环结构(for和while)
  6. HTML5的非主体结构元素(header、footer、hgroup、assress)
  7. [转载] Java——数组习题
  8. 程序员必须思考的三个问题
  9. 遥感的几何校正 正射校正 辐射校正
  10. 飞克速读_5个开源速读应用程序
  11. 你必须知道的“小鼠葡萄糖代谢”相关试验重点要点
  12. CSS 深入理解absolute
  13. android 真正的全屏沉浸式实现
  14. db2 cmd命令操作
  15. 一文读懂V8垃圾回收机制——新生代Scavenge、老生代Mark-Sweep和Mark-Compact
  16. 基于HBuilderX创建移动app项目并利用mui实现简单页面跳转
  17. 如何查看别人的微信公众号的粉丝数
  18. 5 个免费的受欢迎的 SQLite 管理工具
  19. 前端基础知识概述 -- 移动端开发的屏幕、图像、字体与布局的兼容适配
  20. 用html设计一个时间距离查询,使用HTML5 Geolocation实现一个距离追踪器

热门文章

  1. 知人者智,自知者明。胜人者有力,自胜者强。知足者富。强行者有志 不失其所者久。
  2. vue js对象拷贝的方法简单易用
  3. redmine备份_redmine数据备份,迁移与恢复
  4. mysql无法安装 server 2008 r2_【运维】windows server 2008 R2 Standard中如何安装 mysql8.0
  5. 友盟小米收不到推送消息_一个轻量级、可插拔的Android消息推送框架。一键集成推送(极光推送、友盟推送、华为、小米推送等)...
  6. 珠宝VIP客户该怎么管理?
  7. idea怎么给包重命名_IntelliJ IDEA 修改包名
  8. 2022年跨境医药License In/Out交易信息(查询)
  9. 院士领衔,BAT齐聚,世界区块链大会·武汉早鸟票被“秒光”
  10. 按键精灵自动点击微信公众号