R
R中這個回測程式碼背後的邏輯是什麼
我是 R 新手,我找到了這個簡單的回測程式碼,你能解釋一下這裡發生了什麼嗎?
library(quantmod) library(PerformanceAnalytics) s <- get(getSymbols('SPY'))["2012::"] s$sma20 <- SMA(Cl(s) , 20) s$position <- ifelse(Cl(s) > s$sma20 , 1 , -1) myReturn <- lag(s$position) * dailyReturn(s) charts.PerformanceSummary(cbind(dailyReturn(s),myReturn))
我知道程式碼使用這種策略
Buy close > SMA20 sell close < SMA20
但我有疑問,尤其是在這些方面
s$position <- ifelse(Cl(s) > s$sma20 , 1 , -1) myReturn <- lag(s$position) * dailyReturn(s) charts.PerformanceSummary(cbind(dailyReturn(s),myReturn))
s$position <- ifelse(Cl(s) > s$sma20 , 1 , -1)
如果收盤價大於 20 天移動平均線,則s$postion=1
買入s$postion=-1
,為什麼分配 1 和 -1?為什麼要計算dailyreturns 以及myReturn,cbind() 發生了什麼?你也能解釋一下這個結果嗎http://i.stack.imgur.com/B1h7E.png
當倉位 = 1 時,您做多 S&P ETF。當頭寸為 -1 時,您的投資組合包含 -1 S&P ETF 的空頭頭寸。因此,您將有一個像 $ Pos = (1,1,1,1,1,-1,-1,-1,-1,1,1,1,-1,-1,-1, \ldots) $ ,這將為您提供投資組合的演變。
你的回報就是標準普爾的每日回報乘以你的頭寸。
Cbind 是通過列將兩個向量綁定在一起的命令。因此,您採用 S&P (dailyReturns) 的演變並將它們與您的投資組合 (myReturn) 的演變列綁定,並使用 PerformanceAnalytics 包繪製它們。