jueves, 22 de diciembre de 2011

Mejorando el sistema REBOTE

Bueno, ya tenemos nuestro primer sistema en marcha. Es un sistema que antitendencial que busca zonas en las que sea facil tener un rebote, e intentaremos aprovecharnos de eso.


Vamos a recordar sus resultados en diario sobre el Ibex35


No estan mal los resultados, aplicando unas comisiones y slippage de 10 euros por operacion, tenemos un 60.77% de operaciones ganadoras, un Drawdown muy aceptable (10.98%), y un run up interesante (32.71%). Eso si, el Ratio ganancia/perdida es de solo un 1.78, lo cual no es demasiado bueno

Aunque el sistema parece funcionar bastante bien sin mas, vamos a intentar mejorarlo.
Y ya que estamos buscando entradas contratendenciales, vamos a filtrar las señales con un estocastico.

El estocastico es un osclador que nos indica zona de sobrecompra (cuando se situa por encima de 80) y de sobreventa (por debajo de 20).

Vamos a ver como quedaria el codigo del sistema:

// Probacktest para comprobar la utilidad del MACd con BB para detectar zonas de rebote
// Esta version entra cuando el MACD se introduce en la BB, y el MACD marca sobrecompra o sobreventa

//Definimos el MACD
rapida = exponentialaverage[r](close) //r seria una variable a optimizar
lenta= exponentialaverage[l](close) //l seria otra variable a optimizar
miMACD = rapida - lenta
//definimos las BB
BBm = average[20](miMACD)
BBsup = BBm + 2*STD[20](miMACD)
BBinf =  BBm - 2*STD[20](miMACD)
//definimos las condiciones para entrar largos y cortos
l1 = miMACD crosses over BBinf
l2 = Stochastic[14,6](close) < 20 //introducimos el Estocasticvo como filtro, y para largos debe ser inferior a 20
c1 = miMACD crosses under BBsup
c2 = Stochastic[14,6](close) > 80 // para cortos debe ser superior a 80

//entramos largos y cortos si se cumplen las condiciones
if l1 and l2 then
    buy 1share at market nextbaropen
endif
if c1 and c2 then
    sellshort at market nextbaropen
endif

//definimos la condicion de cierre
cl1 = close > (entryquote+ beneficio*AverageTrueRange[14](close))
stopinferior = lowest[13](low)
if longonmarket and cl1 then
    sell at market thisbaronclose
    set stop stopinferior[1]
endif

if longonmarket then
    sell at stopinferior stop
endif
cc1 = close < (entryquote- beneficio*AverageTrueRange[14](close))
stopsuperior = highest[13](high)
if shortonmarket and cc1 then
    exitshort at market thisbaronclose
    set stop stopsuperior[1]
endif

//////////////////////////////////FIN////////////////////////////////////////////

Bueno, pues ahora vamos a ver como se comporta el sistema aplicando un estocastico normal (periodo14/ K3/ D3):

Podemos ver que la cosa ha mejorado bastante, tenemos un 65.55% de operaciones ganadoras, un Drawdown menor (10.05%), y un run up muy superior (40.94%). Ademas, el Ratio ganancia/perdida sube a 3.5, que ya es un valor mucho mas interesante.

Ahora vamos a probar que ocurre utilizando un estocastico mas lento todavia.
El primer sistema usa un estocastico 14/3/3 como filtro
El segundo un estocastico 21/6/3
Y el tercero es el sistema sin filtros


Se puede ver que el sistema con el estocastico lento (el segundo), es el que menos gana. Pero vamos a ver las estadisticas de los 3

Con estos resultados, ¿con cual os quedariais? . Yo probablemente con el el primero, ya que el beneficio es mucho mayor y el DrawDown es perfectamente aceptable.

En cualquier caso, hay que tener cuidado con los backtests, ya que de un dia para otro pueden variar ligeramente los resultados... ((y mas si no me doy cuenta de igualar las comisiones y slippages, culpa mia y no de PROREALTIME)

6 comentarios:

  1. Muchas felicidades por la iniciativa. Te he encontrado gracias a Blai5 (que por cierto sigo mucho en su blog).

    A la hora de pasar tu código al proBacktest de PRT me dice que defina las variables r, l y beneficio. ¿sabes a qué se debe?

    muchas gracias y ánimo en tu trabajo en el bog

    ResponderEliminar
  2. La variables r, l y beneficio hay que definirlas.
    "r" es la media rapida del MACD, su valor puede- suele estar entre 5-13
    "l" es la media lenta del MACD, puedes definirla entre 15-50
    Y "beneficio" es el factor de AverageTrueRange por encima del que cerraremos la operacion.
    Normalmente lo situo entre 0.4-2.

    Voy a intentar hacer un pequeño manual, aunque se que Xar3.com o Blai5.net tenian algo ya hecho, pero no lo encuentro

    ResponderEliminar
  3. ¡Excelente, José!

    Voy a echarle un ojo en detalle a Rebote. Tiene una pinta magnífica.

    ¡Un saludo!

    ResponderEliminar
  4. Sería posible acceder en algún sitio a como se introducen las variables? es que soy novato y me pierdo...gracias

    ResponderEliminar
  5. he probado con acciones del ibex y no funciona muy bien. con índices si parece mejor. gracias

    ResponderEliminar
  6. Hola josemayo2.
    Probablemente se debe a que el sistema esta configurado para indices, y para acciones hay que hacer alguna pequña modificacion.

    Te pongo los resultados con 5 valores del Ibex en otra entrada

    ResponderEliminar