程式
計算使用 quantmod 下載的一組證券的回報
我使用 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 日創建