2016-10-11 2 views
1

J'ai construit le modèle suivant qui ne fait que backtester espion. Mon problème est que je veux appliquer cette stratégie de trading à plusieurs tickers (par exemple à la fois qqq et espion).tickers backtesting

Comment faire? Voir ci-dessous:

getSymbols("spy",from ="2000-01-01", to="2015-01-01") 
SPY<-adjustOHLC(SPY) 
rsi <- RSI(Cl(SPY),2) 
smashort<-SMA(Cl(SPY),10) 
smalong<-SMA(Cl(SPY),200) 
adx<-ADX(HLC(SPY),10) 
adx<-adx[,4] 
close<-Cl(SPY) 

signal<-ifelse(rsi<15 & close<smashort & smalong<close &adx>27,1,0) 
for(i in 1:nrow(signal)) 
{signal<-ifelse(lag(signal)==1 & close<smashort,1,ifelse(rsi<15 & close<smashort & smalong<close & adx>27,1,0))} 
signal<-lag(signal,1) 
signal[is.na(signal)] <- 0 
ret <- ROC(Cl(SPY)) 
ret[1] <- 0 
equity<-exp(cumsum(ret*signal)) 
plot(equity) 

S'il vous plaît voir ci-dessous pour la multiple version téléscripteurs:

stockData <- new.env() #Make a new environment for quantmod to store data in 
 
symbols = c("TLT", "USO") 
 
getSymbols(symbols, src='yahoo',from = "2016-9-01",to = Sys.Date()) 
 
for(symbol in symbols){ 
 
    assign(symbol,adjustOHLC(get(symbol, pos=.GlobalEnv), symbol.name=symbol, 
 
          adjust=c("split"), use.Adjusted=FALSE)) 
 
} 
 

 
x <- list() 
 
for (i in 1:length(symbols)) { 
 
    x[[i]] <- get(symbols[i], pos=stockData) # get data from stockData environment 
 
    x[[i]]$sma <-SMA(Cl(x[[i]]),10) 
 
    x[[i]]$rsi <-RSI(Cl(x[[i]]),2) 
 
    x[[i]]$close <-(Cl(x[[i]])) 
 
    x[[i]]$signal<-ifelse(x[[i]]$rsi<15 & x[[i]]$close<x[[i]]$sma,1,0) 
 
\t 
 
for(i in length(x[[i]]$signal)) 
 
{x[[i]]$signal<-ifelse(lag(x[[i]]$signal)==1 & x[[i]]$close<x[[i]]$sma,1,ifelse(x[[i]]$rsi<15 & x[[i]]$close<x[[i]]$sma,1,0))} 
 

 

 
}

+0

toute aide s'il vous plaît – np2000

Répondre

1

Qu'est-ce que vous voulez faire peut être facilement fait en utilisant quantstrat. Voir le dossier de démonstration dans le paquet (Voir la stratégie RSI dans le dossier de démonstration), ou google plusieurs tutoriels en ligne à ce sujet.

devtools::install_github("braverock/quantstrat") 

Dans l'extrait de code, cette section n'a pas de sens que vous essayez de boucle sur une opération vectorielle:

for(i in length(x[[i]]$signal)) 
{x[[i]]$signal<-ifelse(lag(x[[i]]$signal)==1 & x[[i]]$close<x[[i]]$sma,1,ifelse(x[[i]]$rsi<15 & x[[i]]$close<x[[i]]$sma,1,0))} 

également for(i in length(x[[i]]$signal)) retourne simplement i = longueur du vecteur. Peut-être que vous vouliez quelque chose comme for(i in 1:NROW(x[[i]]$signal)).

On dirait que vous voulez quelque chose comme ceci:

x <- list() 
for (i in 1:length(symbols)) { 
    x[[i]] <- get(symbols[i], pos=stockData) # get data from stockData environment 
    x[[i]]$sma <-SMA(Cl(x[[i]]),10) 
    x[[i]]$rsi <-RSI(Cl(x[[i]]),2) 
    x[[i]]$close <-(Cl(x[[i]])) 
    x[[i]]$signal<-ifelse(x[[i]]$rsi<15 & x[[i]]$close<x[[i]]$sma,1,0) 
    x[[i]]$signal2 <-ifelse(lag.xts(x[[i]]$signal) ==1 & x[[i]]$close<x[[i]]$sma,1,ifelse(x[[i]]$rsi<15 & x[[i]]$close<x[[i]]$sma,1,0)) 
} 
+0

je vais essayer d'utiliser quanstrat mais je suis aussi essayer de faire les choses sans elle. C'est ce que j'ai utilisé et je pense qu'il résout le provlem. Cependant, j'ai un problème avec la deuxième boucle. Pouvez-vous s'il vous plaît m'aider avec ça? Je ne comprends pas ce qui ne va pas car la boucle for fonctionne avec un seul ticker comme vous pouvez le voir ci-dessus. voir le code ci-dessous – np2000

+0

x <- list() pour (i en 1: longueur (symboles)) { x [[i]] <- get (symboles [i], pos = stockData) # obtenir des données de l'environnement stockData x [[i]] $ sma <-SMA (Cl (x [[i]]), 10) x [[i]] $ rsi <-RSI (Cl (x [[i]]), 2) x [[i]] $ fermer <- (Cl (x [[i]])) x [[i]] $ signal <-ifelse (x [[i]] $ rsi <15 & x [[i ]] $ close np2000

+0

@ np2000 a mis à jour la réponse qui semble corriger votre erreur dans votre extrait de code. Essayez d'utiliser 'traceback()' et insérez 'browser()' dans les parties de votre code qui vous causent des problèmes. – FXQuantTrader

0

merci FX Quant Trader. J'ai trouvé une autre solution. voir attache`

x <- list() 
 
for (i in 1:length(symbols)) { 
 
    x[[i]] <- get(symbols[i], pos=stockData) # get data from stockData environment 
 
    x[[i]]$sma <-SMA(Cl(x[[i]]),10) 
 
    x[[i]]$rsi <-RSI(Cl(x[[i]]),2) 
 
    x[[i]]$close <-(Cl(x[[i]])) 
 
    x[[i]]$signal<-ifelse(x[[i]]$rsi<10 & x[[i]]$close<x[[i]]$sma,1,0) 
 
    for(k in 1:nrow(x[[i]]$signal)) 
 
{x[[i]]$signal<-ifelse(lag(x[[i]]$signal)==1 & x[[i]]$close<x[[i]]$sma,1,ifelse(x[[i]]$rsi<10 & x[[i]]$close<x[[i]]$sma,1,0))} 
 

 
x[[i]]$signal<-lag(x[[i]]$signal,1) 
 
x[[i]]$signal[is.na(x[[i]]$signal)] <- 0 
 

 
x[[i]]$ret <- ROC(Cl(x[[i]]$close)) 
 
x[[i]]$ret[1] <- 0 
 

 
x[[i]]$equity<-exp(cumsum(ret*x[[i]]$signal)) 
 
plot(x[[i]]$equity) 
 
}

`