【基金量化研究系列】基金绩效归因模型——Brinson多期归因模型之python实现

编程入门 行业动态 更新时间:2024-10-27 01:36:51

【基金量化研究系列】基金绩效归因<a href=https://www.elefans.com/category/jswz/34/1771358.html style=模型——Brinson多期归因模型之python实现"/>

【基金量化研究系列】基金绩效归因模型——Brinson多期归因模型之python实现

文章目录

  • 1. 引言
  • 2. Brinson多期归因模型的Python实现
    • 2.1 基准数据读取模块
    • 2.2 持仓数据读取模块
    • 2.3 持仓收益与基准计算模块
    • 2.4 Brinson多期归因模型核心算法Brinson_Multiple
    • 2.5 主函数模块
  • 3. 实证分析
    • 附录:数据格式补充说明
    • 写在最后

【更新日志】
8/6/2020 对代码中计算择时与择股收益公式的错误进行了修正,并将数据结构框架补充在了附录中


1. 引言

在上文中,我们已经介绍了Brinson归因模型的基本思想和基本方法。在这篇文章中,就让我们动起手来实现这一方法吧!

在Brinson多期归因模型实现的过程中,本文使用模块化方法,将整个实现过程划分为如下五个功能板块:
Module 1: 基准数据读取模块(功能函数:benchmark_load)
Module 2: 持仓数据读取模块(功能函数:positions_load)
Module 3: 持仓收益与基准计算模块(功能函数:w_r_calculation)
Module 4: Brinson多期归因模型核心算法(功能函数:Brinson_Multiple)
Module 5: 主函数模块

注1:由于每个人数据都不一样,因此读者可以仅参考自己认为有用的模块(比如Brinson模型的核心算法)。

注2:由于本人自己的持仓数据比较敏感,在此仅展示代码实现框架。读者可以将自己的数据稍作处理后套用与本模板。


2. Brinson多期归因模型的Python实现

2.1 基准数据读取模块

# 0. 导入pandas库
import pandas as pd# 1. 基准数据读取函数
'''
· 函数功能:读取基准数据
· 输入变量:基准数据存储的地址路径,格式为str
· 输出变量:基准的权重矩阵和收益矩阵,格式为DataFrame的list
· 数据样式介绍:1) 基准的权重存储于某xlsx或xls文件中,共有两个sheets,分别命名为"Weights"和"Return";2) 数据的第一列为交易日日期,列名为“日期”,其列格式为“datatime64”;3) 数据表头为各行业名称。
'''
def benchmark_load(benchmark_path):benchmark_weights = pd.read_excel(benchmark_path, sheet_name='Weights', index_col='日期')benchmark_returns = pd.read_excel(benchmark_path, sheet_name='Return', index_col='日期')return [benchmark_weights, benchmark_returns]

:除本地导入基准数据外,可以通过API接口直接获取基准数据,如wind数据库、tushare数据库等

2.2 持仓数据读取模块

# 2. 读取持仓数据
'''
· 函数功能:读取持仓数据
· 输入变量:持仓数据存储的地址路径,格式为str
· 输出变量:标准持仓数据,格式为DataFrame,columns为数据名称,index为对应股票的持仓日期
· 数据样式介绍:1) 全部的持仓数据,包括:持仓股票代码,股票所属行业,持仓日期、市值、当日卖出金额、当日买入金额等;2) 数据表头为各数据名称;3) 原始数据可以不按照交易日先后顺序排列。
'''
def positions_load(positions_path):pf_data= pd.read_excel(positions_path)pf_data.drop_duplicates()  # 数据去重pf_data = pf_data[['持仓日期', '市值', '行业', '当日卖出金额', '当日买入金额']]  # 选定需要使用的列pf_data['持仓日期'] = pf_data['持仓日期'].astype('datetime64')  # 转化日期格式return pf_data

2.3 持仓收益与基准计算模块

# 3. calculate the weights and the returns of the portfolio
'''
· 函数功能:计算所持仓位的权重和收益矩阵
· 输入变量:1) trading_dates:从基准值提取的交易日信息,格式为list2)  sectors: 从基准中提取行业名称(本码为申万一级),格式为list3) pf_data:使用读取函数读取到的数据
· 输出变量:持仓的权重矩阵和收益矩阵,格式为DataFrame的list
'''
def w_r_calculation(trading_dates, sectors, pf_data):# sectors: 从基准中提取行业名称(申万一级)# trading_dates 从基准值提取交易日信息# Part 1: 初始化一些存储用的中间变量pf_weights = pd.<

更多推荐

【基金量化研究系列】基金绩效归因模型——Brinson多期归因模型之python实现

本文发布于:2024-02-10 19:49:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1676971.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模型   基金   绩效   系列   python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!