Domanda

Ecco il codice:

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

Vorrei verificare se la chiusura odierna è maggiore della chiusura di 10 giorni fa e se è per incrementare la variabile win.Ho anche provato quanto segue:

for(i in 11:NROW(ticker))

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

win <- win + 1             

Sembra che entrambi dovrebbero funzionare, quindi in realtà ho due problemi.Prima di farlo funzionare, ma soprattutto capire perché non funzionano.Entrambi i flag "l'argomento è di lunghezza zero".La mia impressione è che il colpevole sia il ticker [j] o il ticker [i-10].Principalmente perché quando li sostituisco con un valore hardcoded funzionano.

È stato utile?

Soluzione

Il problema è che il ticker [i] non restituisce un oggetto numerico, quindi non puoi confrontare o sottrarre da essi.Prova questo per divertimento:

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

Quindi, racchiudili in as.numeric e otterrai ciò di cui hai bisogno.

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

Altri suggerimenti

Questo non ha nulla a che fare con i cicli for.È perché xts / zoo sono allineati in base al loro indice prima che venga eseguita qualsiasi operazione.ticker[i] > ticker[j] è vuoto perché gli indici sono diversi.

Non hai nemmeno bisogno di un ciclo for.Puoi farlo facilmente ritardando 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)

Le parentesi graffe sono tuo amico, amico mio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top