1 votos

¿Cuál es la lógica detrás de este código de backtesting en R

Soy nuevo en R y he encontrado este sencillo código de backtesting y me podéis explicar qué está pasando aquí.

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))

enter image description here

Sé que el código utiliza esta estrategia

    Buy    
    close > SMA20
    sell
    close < SMA20

Pero tengo dudas sobre todo en estas líneas

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) si el precio de cierre es mayor que la media móvil de 20 días, entonces s$postion=1 si no s$postion=-1 ¿Por qué asignar 1 y -1? ¿Por qué calcular dailyreturns y qué pasa con myReturn,cbind()? También puede explicar estos resultados http://i.stack.imgur.com/B1h7E.png

2voto

Asaf Puntos 218

Cuando la posición = 1, entonces usted está largo el S&P ETF. Cuando la posición es -1, su cartera consiste en una posición corta de -1 S&P ETF. Por lo tanto, tendrá un vector como $Pos = (1,1,1,1,1,-1,-1,-1,-1,1,1,1,-1,-1,-1, \ldots)$ que le dará la evolución de su cartera.

Sus rendimientos son entonces los rendimientos diarios del S&P multiplicados por su posición.

Cbind es el comando para unir dos vectores por sus columnas. Así que toma la evolución del S&P (dailyReturns) y los une por columnas con la evolución de su cartera (myReturn), y los traza utilizando el paquete PerformanceAnalytics.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X