MATLAB代码:基于杠杆率的股票投资组合资产定价分析

# 导入数据集

load predata.mat

load FamaFrench5Factors.mat

# 杠杆率后置一格

stk_axis = unique(predata.PERMNO);    

for i = 1 : length(stk_axis)

    index_stk = find(predata.PERMNO == stk_axis(i));

    databystk = predata(index_stk, : );

    databystk.Lev = circshift(databystk.LeverageRatio, 1);

    predata(index_stk, 2) = databystk( : , 2);

end

# 滚动分组, 计算平均杠杆率及回报率

time_axis = unique(predata.Date);

lev = [];

ret = [];

for i = 1 : length(time_axis) - 1

    index_t = find(predata.Date == time_axis(i+1));

    data_now = predata(index_t, : );

    temp = table2array(data_now( : , 5));

    a = prctile(temp, 20);

    b = prctile(temp, 40);

    c = prctile(temp, 60);

    d = prctile(temp, 80);

    tier1 = find(data_now.LeverageRatio < a);

    tier2 = find(data_now.LeverageRatio >= a & data_now.LeverageRatio < b);

    tier3 = find(data_now.LeverageRatio >= b & data_now.LeverageRatio < c);

    tier4 = find(data_now.LeverageRatio >= c & data_now.LeverageRatio < d);

    tier5 = find(data_now.LeverageRatio >= d);

    L_tier1 = mean(table2array(data_now(tier1, 5)));

    L_tier2 = mean(table2array(data_now(tier2, 5)));

    L_tier3 = mean(table2array(data_now(tier3, 5)));

    L_tier4 = mean(table2array(data_now(tier4, 5)));

    L_tier5 = mean(table2array(data_now(tier5, 5)));

    R_tier1 = mean(table2array(data_now(tier1, 4)));

    R_tier2 = mean(table2array(data_now(tier2, 4)));

R_tier3 = mean(table2array(data_now(tier3, 4)));    R_tier4 = mean(table2array(data_now(tier4, 4)));    R_tier5 = mean(table2array(data_now(tier5, 4)));

    lev(i, : ) = [L_tier1 L_tier2 L_tier3 L_tier4 L_tier5 ];

    ret(i, : ) = [R_tier1 R_tier2 R_tier3 R_tier4 R_tier5 ];

end

# 计算超额回报率

Y_1 = ret( : , 1);

Y_2 = ret( : , 2);

Y_3 = ret( : , 3);

Y_4 = ret( : , 4);

Y_5 = ret( : , 5);

Y_1 = Y_1 - FamaFrench5Factors.Rf(2 : 360);

Y_2 = Y_2 - FamaFrench5Factors.Rf(2 : 360);

Y_3 = Y_3 - FamaFrench5Factors.Rf(2 : 360);

Y_4 = Y_4 - FamaFrench5Factors.Rf(2 : 360);

Y_5 = Y_5 - FamaFrench5Factors.Rf(2 : 360);

# 计算平均超额回报率及t值

mean_ret_1 = mean(Y_1);

mean_ret_2 = mean(Y_2);

mean_ret_3 = mean(Y_3);

mean_ret_4 = mean(Y_4);

mean_ret_5 = mean(Y_5);

mean_ret = [mean_ret_1 mean_ret_2 mean_ret_3 mean_ret_4 mean_ret_5];

[h1, p1, ci1, stats1] = ttest(Y_1);

[h2, p2, ci2, stats2] = ttest(Y_2);

[h3, p3, ci3, stats3] = ttest(Y_3);

[h4, p4, ci4, stats4] = ttest(Y_4);

[h5, p5, ci5, stats5] = ttest(Y_5);

[h, p, ci, stats] = ttest(Y_5 - Y_1);

# 计算平均杠杆率

L_1 = lev( : , 1);

L_2 = lev( : , 2);

L_3 = lev( : , 3);

L_4 = lev( : , 4);

L_5 = lev( : , 5);

mean_lev = [mean(L_1) mean(L_2) mean(L_3) mean(L_4) mean(L_5)];

# 计算市场(MM)模型的詹森阿尔法值及t值

X_MM = FamaFrench5Factors.MktRF(2 : 360);

stats_MM_1 = regstats(Y_1, X_MM, “linear”, “tstat”);

stats_MM_2 = regstats(Y_2, X_MM, “linear”, “tstat”);

stats_MM_3 = regstats(Y_3, X_MM, “linear”, “tstat”);

stats_MM_4 = regstats(Y_4, X_MM, “linear”, “tstat”);

stats_MM_5 = regstats(Y_5, X_MM, “linear”, “tstat”);

stats_a = regstats(Y_5 -Y_1, X_MM, “linear”, “tstat”);

# 计算FF3模型的詹森阿尔法值及t值

X_FF3 = [FamaFrench5Factors.MktRF(2 : 360) FamaFrench5Factors.SMB(2 : 360) FamaFrench5Factors.HML(2 : 360)];

stats_FF3_1 = regstats(Y_1, X_FF3, “linear”, “tstat”);

stats_FF3_2 = regstats(Y_2, X_FF3, “linear”, “tstat”);

stats_FF3_3 = regstats(Y_3, X_FF3, “linear”, “tstat”);

stats_FF3_4 = regstats(Y_4, X_FF3, “linear”, “tstat”);

stats_FF3_5 = regstats(Y_5, X_FF3, “linear”, “tstat”);

stats_a3 = regstats(Y_5 -Y_1, X_FF3, “linear”, “tstat”);

beta_all_FF3 = [stats_FF3_1.tstat.beta stats_FF3_2.tstat.beta stats_FF3_3.tstat.beta stats_FF3_4.tstat.beta stats_FF3_5.tstat.beta];

beta_FF3 = beta_all_FF3(2 : 4, : );

# 计算FF5模型的詹森阿尔法值及t值

X_FF5 = [FamaFrench5Factors.MktRF(2 : 360) FamaFrench5Factors.SMB(2 : 360) FamaFrench5Factors.HML(2 : 360) FamaFrench5Factors.RMW(2 : 360) FamaFrench5Factors.CMA(2 : 360)];

stats_FF5_1 = regstats(Y_1, X_FF5, “linear”, “tstat”);

stats_FF5_2 = regstats(Y_2, X_FF5, “linear”, “tstat”);

stats_FF5_3 = regstats(Y_3, X_FF5, “linear”, “tstat”);

stats_FF5_4 = regstats(Y_4, X_FF5, “linear”, “tstat”);

stats_FF5_5 = regstats(Y_5, X_FF5, “linear”, “tstat”);

stats_a5 = regstats(Y_5 -Y_1, X_FF5, “linear”, “tstat”);

beta_all_FF5 = [stats_FF5_1.tstat.beta stats_FF5_2.tstat.beta stats_FF5_3.tstat.beta stats_FF5_4.tstat.beta stats_FF5_5.tstat.beta];

beta_FF5 = beta_all_FF5(2 : 6, : );

# 计算横截面λ值

lambda_FF3 = inv(beta_FF3 * beta_FF3') *  beta_FF3 * mean_ret';

  • 24
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Data爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值