欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

R语言量化:alpha值和beta值

程序员文章站 2022-06-06 15:21:48
...

  量化投资中经常提到的alpha(收益)和beta(收益)是从资本资产定价模型(CAPM)中衍生出来的概念。CAPM是一个给风险定价的基本模型,它认为只有系统风险(Systematic risk)才能带来收益。这是因为非系统风险(Nonsystematic risk)可以通过投资组合的方式消除掉,如果非系统风险也可以带来收益,就意味着人们可以通过构建投资组合的方式不承担风险而得收益,这种情况下逐利的资本蜂拥而至,从而推高这种资产的价格,使其收益下降直至为零。CAPM可以写为如下的形式:

        R语言量化:alpha值和beta值

表示资产的风险收益只与市场的风险收益挂钩,其中系数beta度量了资产的系统风险的相对大小。式(1)的收益率给出的是期望收益率,换成实际收益率可以写成:

      R语言量化:alpha值和beta值

  或者是

      R语言量化:alpha值和beta值

  beta的大小如何计算?

  上文提到beta度量的是资产的系统风险,所谓系统风险也可以理解成和市场相关的风险,可以写成协方差的形式,根据式(3)中资产收益率与市场收益率的关系有:

      R语言量化:alpha值和beta值

  又因为无风险利率的风险为零,随机项ei Rm 相互独立,式(4)可以推导为:

      R语言量化:alpha值和beta值

  从而得到:

      R语言量化:alpha值和beta值

  熟悉回归的朋友可以看出这里的beta恰好是式(7)一元回归方程中的回归系数:

      R语言量化:alpha值和beta值

  式(7)中的截距项alpha即式(3)中的R语言量化:alpha值和beta值,与我们这里讲的alpha还有所不同。理解这里说的alpha或者alpha收益,还要回到CAPM模型。式(1)给出的CAPM模型是一个理论模型,实际收益率可能与之有一定的差别,事实上实际收益率可以写成式(8)的形式:

       R语言量化:alpha值和beta值

  也就是说资产的实际收益率由两部分组成,一部分是由CAPM模型计算得出的因承担了系统风险而获得的收益,即

R语言量化:alpha值和beta值

称为beta收益,剩余的实际收益率和理论收益率相差的部分称为超额收益,也就是常说的alpha收益:

R语言量化:alpha值和beta值

  R语言中常用的量化分析工具包括quantmod包和PerformanceAnalytics包等,其中PerformanceAnalytics包中内置计算alphabeta的函数。

  CAPM.alpha(Ra, Rb, Rf = 0)

  CAPM.beta(Ra, Rb, Rf = 0)

  Ra  表示要计算alphabeta的资产的收益率

  Rb  表示市场(基准)的收益率

  Rf   表示无风险利率,默认值为0

  收益率的格式可以是xtsvectormatrixdata frametimeSerieszoo等。

  下面我们以上证综合指数为基准,在无风险利率为0的情况下计算600030.SH这只股票的betaalpha(数据的下载可以参考R语言量化:使用windR下载wind数据)。


library(quantmod)
library(PerformanceAnalytics)
library(rvest)
w.start()

## 读取数据
data_sh <- w.wsd('000001.SH','open,high,low,close,volume,amt,adjfactor', '19901219')
data_zx <- w.wsd('600030.SH','open,high,low,close,volume,amt,adjfactor', '20030106')
## 转化为xts格式
data_sh <- xts(data_sh$Data[, 2:8], order.by =as.Date(data_sh$Data[, 1]))
data_zx <- xts(data_zx$Data[, 2:8], order.by =as.Date(data_zx$Data[, 1]))
## 价格复权
p_sh <- data_sh$CLOSE * data_sh$ADJFACTOR
p_zx <- data_zx$CLOSE * data_zx$ADJFACTOR
## 计算收益率
r_sh <- allReturns(p_sh)
r_zx <- allReturns(p_zx)
## 以日收益率计算beta和alpha值
beta <- CAPM.beta(r_zx$daily, r_sh$daily)
alpha <- CAPM.alpha(r_zx$daily, r_sh$daily)


计算得到的收益率如下:

R语言量化:alpha值和beta值

R语言量化:alpha值和beta值

计算得到的betaalpha如下:

R语言量化:alpha值和beta值

  也可以使用回归的方法计算betaalpha

## 截取两个序列时间重合的部分
r_1 <- r_zx$daily[!is.na(r_zx$daily)]   # 去除缺失值
r_2 <- r_sh$daily[!is.na(r_sh$daily)]   # 去除缺失值
date_1 <- index(r_1)                    # 序列1的日期
date_2 <- index(r_2)                    # 序列2的日期
date_both <- intersect(date_1, date_2)  # 共同的部分
v_1 <- r_1[date_1 %in% date_both] %>% as.vector  # 序列1中数据转化为vector
v_2 <- r_2[date_2 %in% date_both] %>% as.vector  # 序列2中数据转化为vector
# 回归
lm<- lm(v_1 ~ v_2)
summary(lm)
R语言量化:alpha值和beta值

  二者计算得到的alphabeta是一样的。

 

参考资料:CFA一级教材 Corporate Finance and Portfolio Management