为使用 quantmod 下载的一组证券计算 return

Calculate return for a set of securities downloaded using quantmod

我使用 quantmod 下载一组证券的调整收盘价。我想计算所有证券的 daily/weekly/monthly return。通常的 dailyReturn、weeklyReturn 等不起作用。我需要做什么?这是我的代码。

tickers <- c('FB','MMM')
data_env <- new.env()
getSymbols(Symbols = tickers, env = data_env)
tempPort <- do.call(merge, eapply(data_env, Ad))

head(tempPort )
           MMM.Adjusted FB.Adjusted
2007-01-03     57.00983          NA
2007-01-04     56.78401          NA
2007-01-05     56.39790          NA
2007-01-08     56.52174          NA
2007-01-09     56.58731          NA
2007-01-10     56.71116          NA

head(weeklyReturn(tempPort,  type = 'log', leading=TRUE))
           weekly.returns
2012-05-18   -0.010791856
2012-05-25    0.015093078
2012-06-01   -0.023027534
2012-06-08    0.037315263
2012-06-15    0.016605617
2012-06-22   -0.007000966

我想在两个不同的列中为 MMM 和 FB 提供 return 的数据。在我的实际问题中,我有 50 多个代码。因此单独计算 returns 不是解决方案。

这样循环执行:

library(PerformanceAnalytics)

prices <- list()
returns <- list()

for(i in 1:length(tickers)) {
  getSymbols(tickers[i], adjusted = TRUE, output.size = "full")

  prices[[i]] <- Ad(get(tickers[i])) # Gets the adjusted close column
  ret         <- Return.calculate(Ad(get(tickers[i])), method = "log")
  returns[[i]]   <- ret # Adds return calculation to the list

}

也可以考虑使用 alpha 优势 api。您需要访问他们的网站并获取 api 密钥,然后在 getSymbols() 函数调用中设置 source='av'

然后,像这样合并您的数据后记:

returns <- do.call(cbind, returns)

您可以使用 quantmod add-in 包 qmao,它有一个 built-in RF(代表 return frame),它可以满足您的需求。假设您已经下载了 FBAMZN 这是要使用的行:

library(qmao)    
rets <- RF(c(‘FB’,’AMZN’), silent = TRUE, type = ‘discrete )

> tail(rets)
                  FB      AMZN
2019-05-10 -0.001643 -0.005206
2019-05-13 -0.036105 -0.035609
2019-05-14 -0.004462  0.009568
2019-05-15  0.030654  0.016863
2019-05-16  0.003865  0.019464
2019-05-17 -0.009038 -0.020219

查看 ?RF 以检查可用的参数选项。