首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算滚动Beta

计算滚动Beta
EN

Stack Overflow用户
提问于 2021-08-26 01:38:25
回答 1查看 155关注 0票数 0

我正在尝试为股票生成滚动betas,但我的滚动函数不起作用。到目前为止,我尝试了以下几点:

代码语言:javascript
复制
library(tidyquant)
library(tidyverse)
library(tibbletime)

ticker_data <- tq_get(c("AAPL", "SPY"))


daily_returns <- ticker_data %>% 
  group_by(symbol) %>%
  tq_transmute(select     = close, 
               mutate_fun = periodReturn, 
               period     = "daily", 
               col_rename = "daily_return") %>% 
  ungroup
  
all_returns_df <- left_join(daily_returns %>% filter(symbol == "AAPL"),
          daily_returns %>% filter(symbol == "SPY") %>% 
            select(-symbol) %>% 
            rename(mkt_daily_return = daily_return))



# Can generate one Beta for all dates
all_returns_df %>% 
  tq_performance(Ra = daily_return,
                 Rb = mkt_daily_return, 
                 scale = 252,
                 performance_fun = table.CAPM)


# Rolling Beta is not working

#Function that is not working
roll_beta <- rollify(.f = function(xy){ tq_performance(data = xy,
                                                       Ra = daily_return,
                                                       Rb = mkt_daily_return, 
                                                       scale = 252,
                                                       performance_fun = table.CAPM)},
                     window = 40)

# This fails
all_returns_df %>% roll_beta()

你有什么办法让我这么做吗?

我的主要目标是以一种“整洁”的方式来做这件事。

EN

回答 1

Stack Overflow用户

发布于 2021-08-26 12:57:30

注: tibbletime已停用你应该调查一下时刻表。

现在timetk用slidify代替了rollify函数。但是我不能让它正常工作,因为它一直在抱怨这个时期。但是回到zoo::rollapply可以解决这个问题。由于某些原因,获取整个表也是一个问题。

下面的代码将适用于给定的示例并返回测试版。我使用函数CAPM.beta来返回测试版。

代码语言:javascript
复制
CAPM_beta_roll <- function(data, width = 40) {
  data <- timetk::tk_xts(data, date_var = date)
  beta <- zoo::rollapply(data = data[, 1], 
                         FUN = CAPM.beta, 
                         Rb = data[, 2], 
                         width = width, 
                         by = 1, 
                         align = "right",
                         by.column = TRUE) 
  names(beta) <- "beta"
  out <- timetk::tk_tbl(beta, preserve_index = FALSE)
  out$beta
}

all_returns_df %>%
  mutate(beta = CAPM_beta_roll(.))

# A tibble: 2,680 x 5
   symbol date       daily_return mkt_daily_return  beta
   <chr>  <date>            <dbl>            <dbl> <dbl>
 1 AAPL   2011-01-03     0                0           NA
 2 AAPL   2011-01-04     0.00522         -0.000551    NA
 3 AAPL   2011-01-05     0.00818          0.00520     NA
 4 AAPL   2011-01-06    -0.000808        -0.00196     NA
 5 AAPL   2011-01-07     0.00716         -0.00196     NA
 6 AAPL   2011-01-10     0.0188          -0.00126     NA
 7 AAPL   2011-01-11    -0.00237          0.00354     NA
 8 AAPL   2011-01-12     0.00814          0.00902     NA
 9 AAPL   2011-01-13     0.00366         -0.00163     NA
10 AAPL   2011-01-14     0.00810          0.00724     NA
# ... with 2,670 more rows
Warning message:
Problem with `mutate()` column `beta`.
i `beta = CAPM.beta_roll(.)`.
i Non-numeric columns being dropped: symbol, date 

您可以忽略警告消息。这些来自time_tk::tk_xts

为了更快地实现该函数,您可以在此SO post中找到几个示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68931512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档