Pregunta

Aquí está el código:

require("quantmod")

getSymbols("SPY")  

ticker <- SPY[,4]

win <- 0 

for(i in 11:NROW(ticker))

j <- i-10

if(ticker[i] > ticker[j])               

win <- win + 1

Me gustaría comprobar si el cierre de hoy es mayor que el cierre de hace 10 días y si es para incrementar la variable win.También probé lo siguiente:

for(i in 11:NROW(ticker))

if(ticker[i] > ticker[i-10])               

win <- win + 1             

Parece que ambos deberían funcionar, así que tengo dos problemas.Primero haciéndolo funcionar, pero también entendiendo por qué no funcionan.Ambos indicadores "el argumento es de longitud cero".Mi corazonada es que es el ticker [j] o ticker [i-10] el culpable.Principalmente porque cuando los reemplazo con un valor codificado de forma rígida, funcionan.

¿Fue útil?

Solución

El problema es que el ticker [i] no devuelve un objeto numérico, por lo que no puede compararlos ni restarlos.Pruebe esto para divertirse:

str(ticker[15])
ticker[15]-ticker[10]

Por lo tanto, simplemente envíelos como.numeric y obtendrá lo que necesita.

require("quantmod")
getSymbols("SPY")  
ticker <- SPY[,4]
win <- 0 
for(i in 11:NROW(ticker)){
    j <- i-10
    if(as.numeric(ticker[i]) > as.numeric(ticker[j])){             
        win <- win + 1
    }
}

Otros consejos

Esto no tiene nada que ver con los bucles for.Es porque xts / zoo están alineados por su índice antes de realizar cualquier operación.ticker[i] > ticker[j] está vacío porque los índices son diferentes.

Tampoco necesitas un bucle for.Puede hacer esto fácilmente retrasando la serie:

merged.ticker <- merge(ticker, lag(ticker,10))
win <- sum(merged.ticker[,1] > merged.ticker[,2], na.rm=TRUE)
lose <- sum(merged.ticker[,1] < merged.ticker[,2], na.rm=TRUE)

Curly braces are your friend, my friend.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top