4 votos

¿Cómo hacer un backtest de la estrategia en la cartera de acciones utilizando SIT R?

Estoy creando y probando estrategias en código R y utilizando el paquete systemic investor toolbox(SIT) como herramienta de backtesting. Copié un código de backtesting SIT de un sitio web e hice pequeños cambios para hacer el código de abajo y su trabajo bien.

#backtesing long Apple
#long when fast MA is greater than slow MA and rsi less than 50 else exit
library(quantmod)
library(SIT)
data <- new.env()

# Load historical data and adjusts for splits and dividends
tickers = spl('AAPL')
getSymbols(tickers, src = 'yahoo', from = '2000-01-01', env = data, auto.assign = T)    
for(i in ls(data)) data[[i]] = adjustOHLC(data[[i]], use.Adjusted=T)  

#Calculate the moving averages and lag them one day to prevent lookback bias
close<-Cl(data[['AAPL']])
MAF <- lag(SMA(close,50))  
MAC <- lag(SMA(close,100))
rsi<- RSI(close,25)

#Sets backtesting environment
bt.prep(data, align='remove.na') 
prices = data$prices   

#Create a empty list for attaching the models to at a later stage
models = list()

#Specify the weights to be used in the backtest
data$weight[] = NA #Zero out any weights from previous
data$weight[] = ifelse(MAF>MAC&rsi<50,1,0)  #If price of SPY is above the SMA then buy

#Call the function to run the backtest given the data, which contains the prices and weights.
models$technical_model = bt.run.share(data, trade.summary=T)

#Plot equity curve and export the trades list to csv
plot(models$technical_model$equity, main="Equity Curve")

Actualmente, para comprobar la calidad de mi estrategia, utilizo el código anterior contra 10 acciones e índices elegidos al azar en mi cartera (AAPL, GOOG, GE, GS, PFE, AA, SPY, ^GSPC, XOM, C) y luego tomo manualmente los promedios de los resultados (por ejemplo, reducción, sharpe, factor de beneficio, etc.) para comprobar la viabilidad de la estrategia. Pero hacer esto me lleva mucho tiempo y energía. ¿Cómo puedo hacer un backtest de mi estrategia contra todo mi protofolio en lugar de uno por uno en SIT para obtener una mejor estimación de mi estrategia. ¿Qué tipo de modificaciones debo hacer en el código anterior?

0 votos

El código SIT fue escrito en el curso de una serie de blogs ( systematicinvestor.wordpress.com ) puede que encuentres una vista de la cartera allí también. De lo contrario, si su pregunta es: Tengo código para una sola acción cómo puedo usarlo para muchos, entonces esto no es una pregunta QSE.

0 votos

Si lo entiendo mal, entonces es sólo trivial: tienes código para una acción. Hay muchas maneras de utilizarlo para un montón de acciones. Además: ¿de qué naturaleza es su estrategia? ¿Ofrece señales para una sola acción o para muchas (como la clasificación de acciones o la creación de carteras)?

1voto

dincer80 Puntos 652

Supongo que podrías intentarlo:

  1. Rellenar el vector "tickers" con los nombres de los símbolos del resto de las acciones de su cartera que desea medir de una vez.
  2. Utilice SIT::bt.apply.matrix o una función similar cuyo argumento principal sea la variable 'prices' para conseguir que sus señales se apliquen a todos los 'tickers' que haya declarado antes al principio.
  3. Corre y mide.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X