程式

計算使用 quantmod 下載的一組證券的回報

  • March 17, 2022

我使用 quantmod 為一組證券下載了調整後的收盤價。我想計算所有證券的每日/每週/每月回報。通常的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

它返回垃圾。如何處理?

weeklyReturn用於單變數系列。

嘗試這個

tail(do.call("merge",apply(tempPort,2,weeklyReturn,type = 'log', leading=TRUE)))

#             weekly.returns weekly.returns.1
# 2019-04-18    0.006692682      -0.00458900
# 2019-04-26   -0.132748543       0.07148027
# 2019-05-03   -0.034230826       0.02057131
# 2019-05-10   -0.051856081      -0.03715810
# 2019-05-17   -0.039257136      -0.01627267
# 2019-05-24   -0.009381505      -0.02314769

也許在計算回報之前創建一個每週系列。

library(xts)
library(quantmod)

tickers <- c('FB','MMM')
data_env <- new.env()
getSymbols(Symbols = tickers, env = data_env)

tempPort_weekly <- do.call(merge, eapply(data_env, function(x) {
 x <- Ad(x)
 w <- Cl(to.weekly(x))
 colnames(w) <- colnames(x)
 w
}))

tail(diff(log(tempPort_weekly)))
#>            MMM.Adjusted  FB.Adjusted
#> 2021-09-10 -0.051945999  0.006437513
#> 2021-09-17 -0.016719862 -0.037587995
#> 2021-09-24 -0.002482621 -0.032775228
#> 2021-10-01 -0.024377816 -0.028595080
#> 2021-10-08  0.001527043 -0.038515509
#> 2021-10-15  0.027809784 -0.016157643

reprex 包(v0.2.1)於 2021 年 10 月 18 日創建

引用自:https://quant.stackexchange.com/questions/45581