R

R中這個回測程式碼背後的邏輯是什麼

  • August 9, 2015

我是 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 包繪製它們。

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