波動性
R中滾動波動的回測
所以我是 R 的新手。我想對 3 隻股票 SPY、EEM、AGG 的策略進行回測。
使用庫(RiskPortfolios),我可以計算
optimalPortfolio(Sigma = Sigma, control = list(type = 'invvol',constraint = 'lo'))
這給了我在股票價格可用的整個時間段內的反向波動率。
如果我想根據過去 20 個交易日的波動率計算 inv vol 權重怎麼辦?
我還想每月使用基於過去 20 個交易日波動率的新權重來重新平衡投資組合,而不是在整個時間內保持相同的權重。我聽說我可以用包(PerformanceAnalytics)做到這一點,但我不知道怎麼做。
這是一個草圖,如何使用
btest
PMwR 包中的函式完成這樣的回測。該軟體包不在 CRAN 上,但可從 https://github.com/enricoschumann/PMwR獲得。(披露:我是包作者。)的主要輸入
btest
是一個計算目標投資組合的函式,無論是作為實際頭寸還是作為權重。在您的情況下,它可能如下所示:inv_vol <- function() { ## get prices for last 20 days ## and compute returns R <- returns(Close(n = 20)) optimalPortfolio(Sigma = cov(R), control = list(type = 'invvol', constraint = 'lo')) }
我應該在這裡警告我從未使用過這個
RiskPortfolios
包。如果您真的只想要與反向 vol 成比例的投資組合權重,您可以編寫如下函式:inv_vol2 <- function() { ## get prices for last 20 days ## and compute returns R <- returns(Close(n = 20)) w <- 1/apply(R, 2, sd) w/sum(w) }
這將是完整的範例。我先準備一些數據。我無法
AAG
從雅虎獲得你的股票價格數據,所以我替換了它。只需插入您的價格:它們應該儲存為動物園系列prices
並且沒有缺失值。library("PMwR") library("RiskPortfolios") library("tseries") library("zoo") start <- as.Date("2017-1-1") ticker <- c("SPY", "EEM", "IUSB") temp <- list() for (t in ticker) temp[[t]] <- get.hist.quote(t, start = start, quote = "AdjClose") prices <- do.call(merge, temp) colnames(prices) <- ticker head(prices) ## SPY EEM IUSB ## 2017-01-03 220.0632 34.74012 48.47526 ## 2017-01-04 221.3724 35.00487 48.50420 ## 2017-01-05 221.1965 35.38727 48.60073 ## 2017-01-06 221.9879 35.24019 48.52351 ## 2017-01-09 221.2552 35.21078 48.56213 ## 2017-01-10 221.2552 35.41669 48.55247
通過將數據和
inv_vol
函式傳遞給btest
.res <- btest(list(coredata(prices)), signal = inv_vol, do.rebalance = "lastofmonth", b = 20, ## burnin convert.weights = TRUE, initial.cash = 100, include.data = TRUE, timestamp = index(prices))
訪問結果:
## summary stats summary(as.NAVseries(res)) ## --------------------------------------------------------- ## 31 Jan 2017 ==> 11 May 2018 (323 data points, 0 NAs) ## 100 108.488 ## --------------------------------------------------------- ## High 111.86 (26 Jan 2018) ## Low 99.35 (09 Mar 2017) ## --------------------------------------------------------- ## Return (%) 6.6 (annualised) ## --------------------------------------------------------- ## Max. drawdown (%) 4.2 ## _ peak 111.86 (26 Jan 2018) ## _ trough 107.11 (08 Feb 2018) ## _ underwater now (%) 3.0 ## --------------------------------------------------------- ## Volatility (%) 3.5 (annualised) ## _ upside 3.2 ## _ downside 2.1 ## --------------------------------------------------------- ## ## Monthly returns ▂▁▂▃█▅▃ ## ## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec YTD ## 2017 0.0 0.8 1.0 1.1 0.3 1.6 0.9 -0.1 1.2 0.6 0.9 8.5 ## 2018 2.1 -2.2 0.4 -0.9 0.6 -0.1 ## trades journal(res) ## instrument timestamp amount price ## 1 SPY 2017-02-28 0.158031858 231.03508 ## 2 EEM 2017-02-28 0.464671930 37.25028 ## 3 IUSB 2017-02-28 0.938666713 48.90283 ## [....] ## ## 48 transactions ## raw equity series (zoo series) as.zoo(as.NAVseries(res))