本文是使用wind 数据接口和python语言进行brinson 模型分析的一个简单尝试,为了使本文代码运行起来,必须有wind 量化平台的支持,其中的WindPy 是wind自己的python程序包。

一、程序注释

1、数据获取
#基准成分内容注解
总体思路是利用wind各种数据接口生成如下数据文件,其中行业分类使用的是wind 一级行业分类标准
##目标基金前五十大重仓股注解
公募基金年报和半年报都会披露所有股票尺长,我们选择基金的前五十大持仓进行分析,最后生成如下数据文件
2、Brinson 归因分析
然后合并两部分数据,用brinson模型分析,下面都是Brinson模型的内容。具体的数学公式为

二、程序源码

from WindPy import *
import pandas as pd
import numpy as np
from datetime import datetime
import matplotlib.pyplot as plt
from scipy.stats.mstats import winsorizew.start()
#基准成分
e,df_bench=w.wset("indexconstituent", "date=20210630;windcode=000300.SH", usedf=True)
df_bench.index=df_bench['wind_code']
st_list=list(df_bench['wind_code'])#行业收益ri
e,df_return=w.wsd(st_list, "close", "ED-2Q", "2021-06-30", "Period=Q", usedf=True)
df_return.index=['2020-12-31', '2021-03-31', '2021-06-30']
df_return=df_return.T
df_return['收益率']=df_return['2021-06-30']/df_return['2020-12-31']-1
df_ri=pd.concat([df_bench,df_return],axis=1)
industry_js=[]
return_js=[]
for j in list(set(df_ri['industry'])):df_rij=df_ri[df_ri['industry']==j]df_rij['权重*收益率']=df_rij['i_weight']*df_rij['收益率']return_j=(df_rij['权重*收益率'].sum())/(df_rij['i_weight'].sum())industry_js.append(j)return_js.append(return_j)
df_industry=pd.DataFrame({"industry":industry_js,"rbi":return_js})
df_industry.set_index(['industry'], inplace=True)#行业权重wbi
grouped=df_bench['i_weight'].groupby(df_bench['industry'])
df_weight=(grouped.sum()/100).to_frame()
df_weight.rename(columns={'i_weight':'wbi'},inplace=True)
df_weight#基准数据
df_benchdata=pd.concat([df_industry,df_weight],axis=1)
df_benchdata
#目标基金前五十大重仓股
df_fund_sts=pd.DataFrame()
for i in range(1,51):e,df_fund_st=w.wss("003751.OF", "prt_topstockcode,prt_topstockname,prt_topstockvalue", "rptDate=20210630;order="+str(i), usedf=True)df_fund_sts=pd.concat([df_fund_sts,df_fund_st],axis=0)def func(x):if x[0]=='6':val=x+'.SH'else:val=x+'.SZ'return valdf_fund_sts['wind_code']=df_fund_sts['PRT_TOPSTOCKCODE'].apply(lambda x:func(x))
df_fund_sts
stf_list=list(df_fund_sts['wind_code'])
#股票所属行业
wind_codes=[]
industrys=[]
for i in stf_list:wind_codes.append(i)industry=w.wsd(i, "industry2", "2021-06-30", "2021-06-30", "industryType=2;industryStandard=1;Fill=Previous").Data[0][0]industrys.append(industry)df_industry = pd.DataFrame({"wind_code":wind_codes,"行业":industrys})
df_industry.set_index(['wind_code'], inplace=True)
df_fund_sts.set_index(['wind_code'], inplace=True)
df_w=pd.concat([df_fund_sts,df_industry],axis=1)
#个股收益
e,df_return=w.wsd(stf_list, "close", "ED-2Q", "2021-06-30", "Period=Q", usedf=True)
df_return.index=['2020-12-31', '2021-03-31', '2021-06-30']
df_return=df_return.T
df_return['收益率']=df_return['2021-06-30']/df_return['2020-12-31']-1
#行业权重计算
df_ri=pd.concat([df_w,df_return],axis=1)
grouped=df_ri['PRT_TOPSTOCKVALUE'].groupby(df_ri['行业'])
df_weight=grouped.sum().to_frame()
df_weight=df_weight/df_weight.sum()
df_weight.rename(columns={'PRT_TOPSTOCKVALUE':'wfi'},inplace=True)
#行业收益率计算
industry_js=[]
return_js=[]
for j in list(set(df_ri['行业'])):df_rij=df_ri[df_ri['行业']==j]df_rij['权重*收益率']=df_rij['PRT_TOPSTOCKVALUE']*df_rij['收益率']return_j=(df_rij['权重*收益率'].sum())/(df_rij['PRT_TOPSTOCKVALUE'].sum())industry_js.append(j)return_js.append(return_j)
df_industry=pd.DataFrame({"行业":industry_js,"rfi":return_js})
df_industry.set_index(['行业'], inplace=True)
df_funddata=pd.concat([df_industry,df_weight],axis=1)
df_funddata
#数据合并
df_data=pd.concat([df_benchdata,df_funddata],axis=1)
#单期Brinson模型
#数据缺失值替换
t=df_data.fillna(value=0)
#开始计算
t['Q1']=t['rbi']*t['wbi']
t['Q2']=t['rbi']*t['wfi']
t['Q3']=t['rfi']*t['wbi']
t['Q4']=t['rfi']*t['wfi']
result = pd.DataFrame()
result['板块配置'] = t['Q2']-t['Q1']-(t['wfi']-t['wbi'])*sum(t['Q1'])
result['板块内选股'] = t['Q3']-t['Q1']
result['交互收益'] = t['Q4']-t['Q3']-t['Q2']+t['Q1']
result['总超额收益'] = t['Q4']-t['Q1']
result.loc['合计'] = result.apply(lambda x:x.sum(),axis=0)
AR=result.loc['合计','板块配置']
SR=result.loc['合计','板块内选股']+result.loc['合计','交互收益']
total_R=result.loc['合计','总超额收益']
print('AR={:.2%},SR={:.2%},总超额收益={:.2%}'.format(AR,SR,total_R))

想了解更多基金投资知识,欢迎关注我的微信公众号 ourwechat-271828

基金归因Brinson模型相关推荐

  1. 业绩归因Brinson模型

    原创:小粉桥反手王 本文链接:https://blog.csdn.net/hzk427/article/details/104232935 单期Brinson模型   一个时期的基金收益可以分为四个部 ...

  2. 【基金量化研究系列】基金绩效归因模型——Brinson多期归因模型

    文章目录 1. 引言 2. Brinson单期归因模型 2.1 模型框架 2.2 公式推导 3. Brinson多期归因模型 3.1 模型框架 3.2 公式推导 4. Brinson模型的应用场景 4 ...

  3. 量化新手初识Brinson绩效分解模型

    一项投资的最终表现依赖于多个影响因素,而绩效分解(又称为绩效归因)便是如何定量的将实际表现分解到各个影响因素. 具体到一个公司(泛指,可以是证券公司自营部门.国家养老金.个人投资者),投资行为可能是: ...

  4. matlab 基金业绩归因,5分钟搞定基金从业:绝对收益归因和相对收益归因

    基金的业绩归因是评估投资组合收益的原因或来源的技术,回答的是"收益从哪里来"这个问题. 一.思维导图结构梳理 二.三星考点精讲 1.绝对收益归因 绝对收益归因中,考察特定区间内,每 ...

  5. matlab 基金业绩归因,基金专题报告:基于净值和持仓的基金业绩归因方法研究...

    核心观点: 当前主流的基金业绩归因方法主要有两个方向:一是基于净值数据的时间序列回归方法,所需数据较少且操作简单,主要通过基金历史收益率与风险溢价因子收益率进行回归来分析,二是基于持仓数据的归因方法, ...

  6. matlab 基金业绩归因,基金从业知识点2017:业绩归因

    基金从业知识点2017:业绩归因 引导语:业绩指完成的事业和建立的功劳.以下是百分网小编分享给大家的基金从业知识点2017:业绩归因,欢迎阅读!更多精彩内容请持续关注我们应届毕业生考试网! 业绩归因 ...

  7. 基金评价专题4:H_M(双贝塔)模型

    目录 1. 模型介绍 1.1 模型公式 1.2 模型使用 2. 实际案例 2.1 获取数据 2.2 线性回归 2.3 获取时序结果 2.4 完整代码 3. 模型评价 3.1 模型优点 3.2 模型缺点 ...

  8. 用户交易数据分析 - 投资绩效归因分析-Brision模型

    1 模型介绍 通过业绩归因,能够更加清楚组合的收益究竟来源于什么,进而知道这种获取超额收益的能力是否能够持续,也能够明白组合发生剧烈波动的原因,从而改进策略. Brision模型中,将组合的收益分四部 ...

  9. 归因分析指南v1.0

    归因是一个跨领域的方法,在数据分析.深度学习.广告营销.心理学.投资都有相关的理论研究.趁周末时间,完成了归因指南的第一个版本(以后还会不断迭代的),分享给大家. - 什么是归因 attributio ...

最新文章

  1. P2657 [SCOI2009]windy数 数位dp入门
  2. 2.3 残差网络-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  3. RocketMQ集群启动报错:java.lang.RuntimeException: Lock failed,MQ already started
  4. python如何读取一个文件夹下的多个文件(夹)?
  5. 荣耀10x 鸿蒙,荣耀10X PRO渲染图曝光 矩阵三摄+OLED魅眼屏
  6. (课程学习笔记)玩转Linux:常用命令实例指南
  7. Java知多少(50)Java throws子句
  8. 6月国产网络游戏审批信息公布 共计86款游戏过审
  9. python 对两列互补的数据合并
  10. Python数据分析基础之CSV文件(5)
  11. m基于迫零ZF准则的通信均衡器的matlab仿真
  12. PTA 求链式线性表的倒数第K项 给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
  13. 冒志鸿将出席 TF Blockchain 波特兰、温哥华 炉边畅谈 SEC 招标 DID | ArcBlock 预告...
  14. Kali Linux 安装搜狗拼音输入法
  15. 约四成的平板和智能手机用户看电视时“一心多用”
  16. Python报错:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x8c in position 20: illegal multibyte...
  17. android 4.4 锁屏密码,安卓手机忘记锁屏密码怎么办?安卓手机绕过锁屏密码的几种解决方法...
  18. Java笔试真题及参考答案
  19. LATCH的产生过程
  20. 左手忙工作,右手忙版权,真让人脑壳疼

热门文章

  1. android 主页面
  2. 【Node.js】 基础语法
  3. 用友打印凭证时出现"-107"错误而无法打印
  4. 逆向完整还原触摸精灵2.X版本工程代码
  5. Maya:好玩的物体替代
  6. new org.netbeans.lib.awtextra.AbsoluteConstraints org.netbeans.lib.awtextra.AbsoluteLayout()
  7. QQ协议分析的一些思路
  8. 魔力宝贝 mysql,【法兰城回忆】【安卓手游】【俗称魔力宝贝手游版】【全套架设教程】[手工架设]...
  9. Linux 系统必备入门级自学手册!
  10. 如何经营一家水果店,怎么做好水果店的经营