Fama French 三因子模型 五因子模型 回测Berkshire收益

1. 引入库和数据

import numpy as np
import pandas as pd
import statsmodels.api as sm
from stargazer.stargazer import Stargazer
file = "C:/Users/yihan/hedge fund/PS_7_Buffetts_exercise.xlsx"
data = pd.read_excel(file, sheet_name="buffet_data", parse_dates=["date"], index_col="date")
factors = pd.read_excel(file, sheet_name="factors", parse_dates=["date"], index_col="date")
(1+data.loc[:,'Berkshire Hathaway, total return']).cumprod().plot();

Berkshire Hathaway 股票价格/累计收益
股票价格/累计收益

2.define 单因子 三因子 五因子模型

def time_series_regressions(y, x):
    
    x_1 = x.loc[:,"Mkt-RF"]
    model_1 = sm.OLS(y,sm.add_constant(x_1),missing = 'drop').fit()
    
    x_2 = x.loc[:,["Mkt-RF", "SMB", "HML"]]
    model_2 = sm.OLS(y,sm.add_constant(x_2),missing = 'drop').fit()
    
    x_3 = x.loc[:,["Mkt-RF", "SMB", "HML", "BAB", "QMJ"]]
    model_3 = sm.OLS(y,sm.add_constant(x_3),missing = 'drop').fit()
    
    return [model_1,model_2,model_3]

3.计算超额收益

BRK = data.loc[:,"Berkshire Hathaway, total return"] - factors.loc[:,'RF']
BRK = BRK.rename("Berkshire Hathaway, excess return")# 给series加一个名字

4.回归结果

models = time_series_regressions(BRK, factors)

alphas = [round(model.params.loc["const"] * 100 * 12, 2) for model in models]
stargazer = Stargazer(models)
stargazer.add_line("Annualized Alpha (in %)", alphas)
stargazer.covariate_order(["const", "Mkt-RF", "SMB", "HML", "BAB", "QMJ"])
stargazer

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值