Frage

Hier ist der 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

Ich möchte überprüfen, ob der heutige Schlusskurs größer ist als vor 10 Tagen und ob die Gewinnvariable erhöht werden soll.Ich habe auch Folgendes versucht:

for(i in 11:NROW(ticker))

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

win <- win + 1             

Beide scheinen zu funktionieren, also habe ich tatsächlich zwei Probleme.Zuerst muss es funktionieren, aber es ist auch wichtig zu verstehen, warum sie nicht funktionieren.Beide Flag "Argument hat die Länge Null".Meine Vermutung ist, dass der Ticker [j] oder Ticker [i-10] der Schuldige ist.Meistens, weil sie funktionieren, wenn ich sie durch einen fest codierten Wert ersetze.

War es hilfreich?

Lösung

Das Problem ist, dass der Ticker [i] kein numerisches Objekt zurückgibt, sodass Sie es nicht vergleichen oder von ihm subtrahieren können.Versuchen Sie dies zum Spaß:

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

Also, wickeln Sie sie einfach in as.numeric ein und Sie erhalten, was Sie brauchen.

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

Andere Tipps

Dies hat nichts mit for-Schleifen zu tun.Dies liegt daran, dass xts / zoo an ihrem Index ausgerichtet sind, bevor Operationen ausgeführt werden.ticker[i] > ticker[j] ist leer, da die Indizes unterschiedlich sind.

Sie brauchen auch keine for-Schleife.Sie können dies leicht tun, indem Sie die Serie verzögern:

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)

Geschweifte Klammern sind dein Freund, mein Freund.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top