ITPub博客

首页 > > > R语言金融基础:构建CAPM模型

R语言金融基础:构建CAPM模型

作者:浪花小雨滴 时间:2019-05-19 10:47:11 0 删除 编辑

作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R/Python),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等。知乎专栏:R语言数据挖掘 邮箱:huang.tian-yuan@qq.com.欢迎合作交流。

前文:

HopeR:R语言金融基础:tidyquant获取数据(标普500与纳斯达克)

HopeR:R语言金融基础:tidyquant获取数据(股票每日行情)

HopeR:R语言金融基础:tidyquant获取数据(宏观经济数据)

HopeR:R语言金融基础:tidyquant数据整理(日行情转月行情、MACD的使用)

HopeR:R语言金融基础:tidyquant数据整理(滑窗建模)

HopeR:R语言金融基础:tidyquant数据整理(算术/对数收益率)


CAPM模型(Capital Asset Pricing Model ),即资本资产定价模型,是由美国学者夏普(William Sharpe)、林特尔(John Lintner)、特里诺(Jack Treynor)和莫辛(Jan Mossin)等人于1964年在资产组合理论和资本市场理论的基础上发展起来的,主要研究证券市场中资产的预期收益率与风险资产之间的关系,以及均衡价格是如何形成的,是现代金融市场价格理论的支柱,广泛应用于投资决策和公司理财领域。资本资产定价模型假设所有投资者都按马克维茨的资产选择理论进行投资,对期望收益、方差和协方差等的估计完全相同,投资人可以自由借贷。基于这样的假设,资本资产定价模型研究的重点在于探求风险资产收益与风险的数量关系,即为了补偿某一特定程度的风险,投资者应该获得多少的报酬率(见资产定价模型(CAPM))。比较好的阐明这个模型的帖子有:

如何通俗易懂地解释 CAPM 理论?

Capital Asset Pricing Model (CAPM)


本文会使用tidyquant包来建立这个模型,主要参考了:

Performance Analysis with tidyquant​business-science.github.io图标

首先大致了解这个工作流:

也就是说,做这个模型首先需要一个基线,然后再选择自己的资产组合。把两者都调整为一个时间间隔然后合并起来,建立模型进行评估。下面我们来实操一下:

1、个股选择

这里,首先选择了苹果(Apple)、谷歌(Google)和网飞(Netflix)公司三支股票在2010年到2015年的表现,然后得到各自的月收盘价(矫正后)。

library(tidyquant)

Ra <- c("AAPL", "GOOG", "NFLX") %>%
  tq_get(get  = "stock.prices",
         from = "2010-01-01",
         to   = "2015-12-31") %>%
  group_by(symbol) %>%
  tq_transmute(select     = adjusted, 
               mutate_fun = periodReturn, 
               period     = "monthly", 
               col_rename = "Ra")
Ra

# A tibble: 216 x 3
# Groups:   symbol [3]
   symbol date            Ra
   <chr>  <date>       <dbl>
 1 AAPL   2010-01-29 -0.103 
 2 AAPL   2010-02-26  0.0654
 3 AAPL   2010-03-31  0.148 
 4 AAPL   2010-04-30  0.111 
 5 AAPL   2010-05-28 -0.0161
 6 AAPL   2010-06-30 -0.0208
 7 AAPL   2010-07-30  0.0227
 8 AAPL   2010-08-31 -0.0550
 9 AAPL   2010-09-30  0.167 
10 AAPL   2010-10-29  0.0607
# ... with 206 more rows

2、基线选择

把高科技指数(高科技指数ETF-SPDR(XLK)股票股价,实时行情,新闻,财报,研报评级_新浪财经_新浪网)作为基线,获得相同时间的月收盘价作为比较。

Rb <- "XLK" %>%
    tq_get(get  = "stock.prices",
           from = "2010-01-01",
           to   = "2015-12-31") %>%
    tq_transmute(select     = adjusted, 
                 mutate_fun = periodReturn, 
                 period     = "monthly", 
                 col_rename = "Rb")
Rb

# A tibble: 72 x 2
   date            Rb
   <date>       <dbl>
 1 2010-01-29 -0.0993
 2 2010-02-26  0.0348
 3 2010-03-31  0.0684
 4 2010-04-30  0.0126
 5 2010-05-28 -0.0748
 6 2010-06-30 -0.0540
 7 2010-07-30  0.0745
 8 2010-08-31 -0.0561
 9 2010-09-30  0.117 
10 2010-10-29  0.0578
# ... with 62 more rows

3、合并两个数据框

RaRb <- left_join(Ra, Rb, by = c("date" = "date"))
RaRb

# A tibble: 216 x 4
# Groups:   symbol [3]
   symbol date            Ra      Rb
   <chr>  <date>       <dbl>   <dbl>
 1 AAPL   2010-01-29 -0.103  -0.0993
 2 AAPL   2010-02-26  0.0654  0.0348
 3 AAPL   2010-03-31  0.148   0.0684
 4 AAPL   2010-04-30  0.111   0.0126
 5 AAPL   2010-05-28 -0.0161 -0.0748
 6 AAPL   2010-06-30 -0.0208 -0.0540
 7 AAPL   2010-07-30  0.0227  0.0745
 8 AAPL   2010-08-31 -0.0550 -0.0561
 9 AAPL   2010-09-30  0.167   0.117 
10 AAPL   2010-10-29  0.0607  0.0578
# ... with 206 more rows

4、计算CAPM

RaRb_capm <- RaRb %>%
    tq_performance(Ra = Ra, 
                   Rb = Rb, 
                   performance_fun = table.CAPM)
RaRb_capm

# A tibble: 3 x 13
# Groups:   symbol [3]
  symbol ActivePremium  Alpha AnnualizedAlpha  Beta `Beta-` `Beta+` Correlation
  <chr>          <dbl>  <dbl>           <dbl> <dbl>   <dbl>   <dbl>       <dbl>
1 AAPL          0.178  0.0127          0.163  1.14    0.638  0.981       0.653 
2 GOOG          0.0345 0.0028          0.0344 1.14    1.39   1.16        0.645 
3 NFLX          0.447  0.053           0.859  0.384  -1.52   0.0044      0.0817
# ... with 5 more variables: `Correlationp-value` <dbl>, InformationRatio <dbl>,
#   `R-squared` <dbl>, TrackingError <dbl>, TreynorRatio <dbl>

这样一来,我们就快速构建了CAPM模型。如果想专门看alpha和beta,可以这样操作:

RaRb_capm %>%
    select(Alpha, Beta)

# A tibble: 3 x 3
# Groups:   symbol [3]
  symbol  Alpha  Beta
  <chr>   <dbl> <dbl>
1 AAPL   0.0127 1.14 
2 GOOG   0.0028 1.14 
3 NFLX   0.053  0.384

关于这两个参数的解释,可以参照:

https://www.investopedia.com/ask/answers/102714/whats-difference-between-alpha-and-beta.asp​www.investopedia.com

总的来说,alpha代表无风险收益率,它是评价选股人能力的重要指标;beta代表个股与大盘的相关性,能够反映一支股票在多大程度上受到大盘的影响。搬运一段精华:

KEY TAKEAWAYS


  • Alpha and beta are common measurements that gauge the performance of portfolio managers compared to their peers.
  • Alpha is the excess return or active return of an investment or a portfolio.
  • Beta measures volatility of a security or portfolio compared to the market.
  • Both alpha and beta are backward-looking and can't guarantee future results.

原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39928