RSI: Backtesting

Ok, ok… lo admito. Tal vez no sea mi título más inspirado ese juego de palabras entre la serie CSI: Las Vegas (que ha tenido un éxito tremendo aquí en USA durante sus más de 15 años de emisión) y el indicador técnico que vamos a introducir en nuestro entorno de backtesting: el RSI o Indicador de Fuerza Relativa (Relative Strength Indicator).

Me justificaré en que, si lo piensa, ambos se articulan en torno a una labor forense: de personas por parte de la serie televisiva y de mercados por nuestro lado. En verdad cuando llevamos a cabo un backtesting estamos haciendo un post-mortem de la actividad bursátil, buscando en sus entrañas las trazas de información que nos van a resultar vitales para decidir nuestras acciones siguientes.

Guantes. Máscara. Escalpelo. Procedamos con la disección.

Fuerza Relativa

El nombre Fuerza Relativa es excelente, ya que refiere a la esencia de lo que los indicadores técnicos pretenden capturar: el momento o empuje en la serie de precios, la fase en la que se encuentra la tendencia de un activo y la posibilidad de un cambio.

El RSI compara la magnitud de las ganancias y las pérdidas recientes, en un intento por determinar si un activo se encuentra sobrecomprado o sobrevendido. Su fórmula es:

vervfig1

Donde RS es la media de días que el mercado cierra al alza dividido por el la media de días que el mercado cierra a la baja durante un determinado periodo. El RSI es por tanto un ratio que va de 0 a 100. Se considera que un activo está sobrevendido por debajo de 30, lo que puede indicar que está infravalorado por el mercado. Por contra, un activo se considera sobrecomprado cuando el RSI supera 70, lo cual significa que puede estar sobrevalorado y es un candidato a sufrir una corrección.

En general el RSI funciona mejor cuando se combina con una o varias medias móviles para confirmar condiciones de entrada y salida, pero antes que casi cualquier otro indicador nos puede revelar un cambio de tendencia cercano, tanto al alza como a la baja.

RSI sobre el IBEX

Para nuestro ejemplo vamos a utilizar el entorno de trabajo que desarrollamos en este post para evitar el sesgo de la supervivencia: los constituyentes del IBEX en el 2010. Usaremos los archivos Ibex2010Assets.py e Ibex2010Data.py para obtener los datos necesarios en caso de que no lo hayamos hecho con anterioridad, por favor vaya a ese artículo para encontrar instrucciones detalladas.

En la estrategia vamos a reemplazar el SMA corto y SMA largo por dos conceptos similares: un SMA de entrada (entrySma) con un periodo largo, y un SMA de salida (exitSma) con un periodo breve. A ello le añadiremos el periodo del RSI que manejaremos (rsiPeriod)  así como cuál va a ser el nivel de sobreventa al que vamos a actuar (overSoldThreshold).

Nuestra entrada en el mercado se producirá cuando la línea de precios supere el SMA de entrada, y además el RSI se coloque en condición de sobreventa.

if bar.getPrice() > self._entrySmas[instrument][-1] and self._rsis[instrument][-1] <= self._overSoldThreshold:

Por otro lado, liquidaremos nuestra posición cuando la serie de precios cruce al alza el SMA de salida. Este matiz de cruce a la baja es importante: aunque ya se encuentre por encima, esperaremos a un cruce para salir de la posición. PyAlgoTrade nos proporciona las funciones cross_above y cross_below para facilitar estas operaciones:

if cross.cross_above(self._prices[instrument], self._exitSmas[instrument]):

Puede descargar aquí el archivo Ibex201Rsi.py que contiene el código completo para nuestra metodología con una serie de valores por defecto. Ejecútelo para ver los resultados:

rsi2_long

Si recuerda nuestro mejor Benchmark tenía un 42% de rentabilidad y un ratio de Sharpe de 39. Mediante el uso combinado del SMA y el RSI para organizar mejor nuestras entradas y salidas hemos conseguido alzar dicha rentabilidad anual hasta el 61.07% y, lo más importante, sin sobreexponernos al riesgo: nuestro ratio de Sharpe también ha aumentado hasta un 63.29, un digno 40% por encima de la referencia.

A continuación vamos a explorar cómo podemos usar también el RSI en un contexto diametralmente opuesto: a la baja.

Cortos

Uno de los aspectos de la bolsa que resultan más chocantes para los neófitos es que se pueda ganar tanto al alza como a la baja. Esta simetría especular se consigue con las llamadas posiciones cortas, que consisten en vender el activo al entrar y comprarlo de nuevo al salir. Con las posiciones cortas, a la contra que las largas, apostamos por una caída en el precio del activo.

Puede sonar extraño, pero es como si usted toma prestado el ordenador Pentium 3 de su amigo Pepe bajo la promesa de devolvérselo en un futuro. Usted vende inmediatamente ese ordenador en eBay, sabiendo que los precios de la tecnología siempre bajan y cuando llegue el momento de devolverlo ya habrán salido al mercado los Pentium 4, 5, 6, con lo cual comprar un Pentium 3 para resarcir a Pepe le resultará mucho más barato. Así usted habrá ganado con la diferencia… y probablemente perdido un amigo.

Recuerde que en bolsa también se puede perder tanto al alza como a la baja. Las posiciones cortas no son para todo el mundo. Descontemos ya ese barniz de capitalismo perverso, esa percepción negativa que provoca el especular con la miseria de otros (beneficiarse con una caída). Aún así con una posición larga usted puede perder como máximo el 100% de su capital, (por ejemplo, cuando el precio va de 2 a 0), que ya escuece, pero con una posición corta sus pérdidas pueden ser potencialmente ilimitadas (e.g. el precio va de 2 a 6, pierde un 200%). Y todo eso sin haber introducido todavía ningún nivel de apalancamiento.

También tenga en cuenta que al ponerse corto usted está actuando contra la macro-onda de los mercados que, desde hace más de 200 años, proporciona un retorno medio anual del 6% a largo plazo. Le aconsejo que lea las obras de Jeremy Siegel así como siempre interesantes artículos de Carlos Doblado para informarse más al respecto. Tenga en cuenta que dicha tendencia ha resistido depresiones, guerras civiles y dos guerras mundiales, que son palabras mayores. Pero la palabra clave aquí es largo plazo: estamos hablando de rangos temporales que se miden en decenas de años. Para el trading que nos ocupa ahora, medido en días y meses, el uso inteligente de cortos puede ser un complemento muy útil a nuestras posiciones largas dentro de una estrategia eficiente.

Expandiendo sobre nuestro ejemplo anterior, vamos a introducir un nivel de sobrecompra (overBoughtThreshold) a partir del cual vamos a tomar una posición corta (llamada “venta corta”), siempre y cuando el precio esté por debajo (en este caso) del SMA de entrada.

if bar.getPrice() < self._entrySmas[instrument][-1] and self._rsis[instrument][-1] >= self._overBoughtThreshold:

También tendremos que establecer una condición de salida de nuestra posición corta (llamada comúnmente “compra para cubrir”), con un cruce a la baja del SMA de salida.

if cross.cross_below(self._prices[instrument], self._exitSmas[instrument]):

Finalmente también deberemos modificar la estructura de nuestro código para poder mantener al mismo tiempo posiciones largas y cortas, evolucionando la lista _positions en dos separadas: _shortPositions y _longPositions. Todos esos cambios se encuentran dentro del archivo Ibex2010RsiShort.py. Por favor descárguelo y ejecútelo para obtener los siguientes resultados:

rsi_long_short

La introducción de los cortos ha llevado la rentabilidad de nuestra metodología hasta 72.31%. Fantástico. Pero fíjese en algo aún más interesante: el ratio de Sharpe también a aumentado, hasta 76.26. ¿Cómo es posible? Fíjese en la línea de la volatilidad: se encuentra por debajo de nuestra estrategia sólo con largos. Anualizada, representa un 11.98% frente a un 14.49%. Es decir, añadir cortos en nuestro caso reduce la volatilidad: su presencia nos descorrelaciona de la tendencia general del mercado (todo arriba, todo abajo) e introduce estabilidad, en lugar de riesgo, en nuestro sistema.

Siguientes Pasos

Eso no tiene por qué ser siempre así. Fíjese que hemos sido bastante conservadores con el nivel de sobrecompra, situándolo en el nivel 90% (a 10 puntos del máximo) frente a un nivel de sobreventa de 30 (a 30 puntos del mínimo) mucho más agresivo. Vaya con cuidado: sin un control estrecho los cortos pueden restar mucho más de lo que aportan y dañar seriamente su rentabilidad. Aproveche para experimentar con diferentes valores de entra, salida, sobrecompra, sobreventa, para ver cómo los cambios afectan a los resultados y tener una experiencia más detallada del comportamiento del sistema.

Una constante que percibirá es que estos sistemas son mucho más activos que los que utilizamos en el pasado: frente a unas pocas decenas, ahora realizamos… más de mil operaciones. Hasta este punto hemos asumido que no tenemos ningún coste por operar, pero a menos que nuestro broker sea un familiar o nos deba mucho favores esta suposición no es para nada realista. Tenemos que introducir los costes de intermediación.

Anuncios

Un comentario en “RSI: Backtesting

  1. emilionbisnes

    Impresionante Isaac. Como ya te he comentado, yo he construido mi sistema de forma mucho más artesanal. Haces que parezca sencillo, y es de agradecer que comparas tus conocimientos.

    Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s