Question

Voici le code:

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

Je voudrais vérifier si la fermeture d'aujourd'hui est supérieure à la clôture il y a 10 jours, et si c'est à incrémenter la variable de victoire. J'ai également essayé ce qui suit:

for(i in 11:NROW(ticker))

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

win <- win + 1             

Les deux semblent qu'ils devraient travailler, donc j'ai en fait deux problèmes. Tout d'abord, le faire fonctionner, mais aussi important pour comprendre pourquoi ils ne fonctionnent pas. Les deux drapeau "L'argument est de longueur zéro". Mon intuition est que c'est le ticker [j] ou le ticker [I-10] qui est le coupable. Surtout parce que lorsque je les remplace par une valeur codée dure, ils fonctionnent.

Était-ce utile?

La solution

Le problème est que Ticker [i] ne renvoie pas un objet numérique, vous ne pouvez donc pas comparer ou les soustraire. Essayez ceci pour le plaisir:

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

Donc, il suffit de les envelopper en tant que.numériques et vous obtiendrez ce dont vous avez besoin.

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

Autres conseils

Cela n'a rien à voir pour les boucles. C'est parce que XTS / ZOO est aligné par leur index avant que toutes les opérations ne soient effectuées. ticker[i] > ticker[j] est vide car les index sont différents.

Vous n'avez pas vraiment besoin d'une boucle pour une boucle non plus. Vous pouvez le faire facilement en traînant la série:

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)

Les accolades bouclées sont votre ami, mon ami.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top