python:计算股票 CAPM

本文介绍资本资产定价模型(CAPM)的基本概念,并通过Python代码计算平安银行股票的α、β值,对比上证指数,分析股票收益情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CAPM模型介绍
资本资产定价模型(CAPM)在投资方面经常被用来投资策略的是否有效,β 值在投资方面也有一定的参考价值,
今天我们就带领大家简单实现对单只股票的CAPM计算。
在CAPM模型中,个股与大盘指数的收益率都是期望值,其公式如下:
Ri-Rf = α +β(Rm-Rf)+ε*

Ri:代表个股
Rf:无风险资产,通常使用银行存款或国债的年化收益率
Rm:市场指数收益率,即大盘收益率
α: Alpha
在CAPM模型中,首先假设 Ri 服从正态分布随机数,并且所有资产的 Alpha 都应该是零或接近于 0,
如果和零有显著差异,说明个股有异常收益,代表收益率胜过大盘。β = 1 ,说明个股收益与大盘收益的波动性一致,
|β|<1,说明个股的波动程度小于大盘,|β|>1,说明个股的波动大于大盘。

程序实例  capm.py
可见 α、β 有助于我们分析个股相对于大盘的收益情况,下面我们就通过程序简单计算 平安银行的 α、β值,
以验证平安银行与上证指数的收益比较,直接上代码,代码中已经有详细的注释:

# coding: utf-8
import os, sys
from datetime import datetime
import pandas as pd
import tushare as ts

if len(sys.argv) ==3:
    zs = sys.argv[1] # sh or sz 指数
    code = sys.argv[2]
else:
    print('usage: python capm.py sh stockcode ')
    sys.exit(1)

if len(code) !=6:
    print('stock code length: 6')
    sys.exit(2)

# 资本资产进价模型(CAPM)--利用平安银行做实证  
# Ri-Rf = α +β*(Rm-Rf)+ε  
# 载入股指数据 
today = datetime.now().strftime('%Y-%m-%d')
print(today)
sh = ts.get_hist_data(zs, start='2020-01-01',end=today)  # 获取上证指数数据
stock1 = ts.get_hist_data(code,start='2020-01-01',end=today) # 获取平安银行数据

ret_merge=pd.merge(pd.DataFrame(sh.p_change),pd.DataFrame(stock1.p_change),left_index=True,right_index=True,how='inner')  
  
# 计算日无风险利率  
Rf_year =0.0305 # 以2020年中国三年期国债年化收益率为无风险利率  
Rf= (1+Rf_year)**(1/365)-1 ## 年利率转化为日利率  
print('Rf=',Rf)
  
# 计算风险溢价: Ri-Rf  
Eret = ret_merge-Rf  
# Eret.head()  
  
# 画出两个风险溢价的散点图,查看相关性  
import matplotlib.pyplot as plt  
plt.scatter(Eret.values[:,0],Eret.values[:,1])
plt.show()

##利用最小二乘法进行线性回归,拟合CAPM模型  
import statsmodels.api as sm  
md_capm = sm.OLS(Eret.p_change_y[1:],sm.add_constant(Eret.p_change_x[1:]))  
result = md_capm.fit()  
#result.summary()  
print(result.summary())

运行 python capm.py sh 000001

Rf= 8.231604900843514e-05
                            OLS Regression Results
==============================================================================
Dep. Variable:             p_change_y   R-squared:                       0.503
Model:                            OLS   Adj. R-squared:                  0.501
Method:                 Least Squares   F-statistic:                     223.6
Date:                Sun, 06 Dec 2020   Prob (F-statistic):           2.17e-35
Time:                        19:57:17   Log-Likelihood:                -415.00
No. Observations:                 223   AIC:                             834.0
Df Residuals:                     221   BIC:                             840.8
Df Model:                           1
Covariance Type:            nonrobust
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          0.0355      0.105      0.339      0.735      -0.171       0.242
p_change_x     1.1690      0.078     14.952      0.000       1.015       1.323
==============================================================================
Omnibus:                        7.347   Durbin-Watson:                   2.000
Prob(Omnibus):                  0.025   Jarque-Bera (JB):                7.134
Skew:                           0.391   Prob(JB):                       0.0282
Kurtosis:                       3.395   Cond. No.                         1.35
==============================================================================

回归结果如下:
α = 0.0355 ,说明和零差异不是非常大,有一定异常收益
β = 1.1690 ,说明波动力稍大于大盘,但不明显
Ri-Rf = 0.0355 +1.1690*(Rm-Rf)+ε

参考: 量化投资——利用Python计算单只股票CAPM

python capm.py sz 000001

2021-02-12
Rf= 8.231604900843514e-05
                            OLS Regression Results
==============================================================================
Dep. Variable:             p_change_y   R-squared:                       0.205
Model:                            OLS   Adj. R-squared:                  0.202
Method:                 Least Squares   F-statistic:                     69.48
Date:                Fri, 12 Feb 2021   Prob (F-statistic):           4.02e-15
Time:                        12:52:47   Log-Likelihood:                -583.40
No. Observations:                 271   AIC:                             1171.
Df Residuals:                     269   BIC:                             1178.
Df Model:                           1
Covariance Type:            nonrobust
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          0.0884      0.128      0.693      0.489      -0.163       0.340
p_change_x     0.6406      0.077      8.336      0.000       0.489       0.792
==============================================================================
Omnibus:                       26.963   Durbin-Watson:                   1.984
Prob(Omnibus):                  0.000   Jarque-Bera (JB):               44.146
Skew:                           0.598   Prob(JB):                     2.59e-10
Kurtosis:                       4.575   Cond. No.                         1.68
==============================================================================

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值