Backtesting y Precios

¿Cuál es el valor de unas tapas con los amigos? ¿De una hermosa puesta de sol? ¿Del amor de su vida? En efecto, no tienen precio. No hay una manera objetiva de medir su valor, ni debería haberlo. Como nos advierte Oscar Wilde, el cínico es aquel que conoce el precio de todo, pero el valor de nada.

El valor de una empresa también es sorprendentemente difícil de medir. ¿Nos ceñimos al patrimonio efectivo, una vez satisfechas las deudas? ¿Añadimos la cuenta de resultados y, en tal caso, por cuantos años? ¿Siendo esos meros reflejos del pasado, factorizamos su capacidad de crecimiento? Todo eso y mucho más: expectativas, sensaciones, rumores, euforia y miedo hierven colectivamente en el caldero mágico de los mercados financieros para producir, finalmente, un precio.

Pero al menos convendremos que, una vez obtenido, ese precio es una referencia de valor a futuro indiscutible. ¿Verdad? Pues me temo que se equivoca.

Eventos Corporativos

Las empresas son entidades en evolución: como nosotros nacen, crecen, disminuyen, y eventualmente mueren. Incluso a veces durante ese trayecto también se fusionan y se dividen. Todos esos acontecimientos, referidos de forma común como eventos corporativos, deben incorporarse al precio. Tanto si afectan al valor de la compañía como si no. Y sí, con efectos retroactivos.

Antes de que se escandalice por manipulaciones de mercados y conspiraciones judeomasónicas, permítame que le de un ejemplo para que lo evalúe por sí mismo. Compruebe el precio de Apple (AAPL) durante Junio del 2014 en el gráfico adjunto, u obtenga el suyo propio desde este enlace a Yahoo Finance.

aapl_tr

El precio de cierre de una acción de Apple era 645.57 el día 6, y apenas 93.70 el día 9. ¿Qué ha sucedido? Tiene la respuesta en la propia tabla: 7:1 stock split. La cotización de Apple había aumentado tanto que sus directivos decidieron dividir cada acción antigua por siete nuevas para que volviese a un nivel más idóneo para las transacciones. ¿Cambia el valor de la compañía? En absoluto. Pero imagínese que no lo tiene en cuenta: en sus análisis vería una caída enorme de precio, deduciendo que Apple está a la baja, cuando en realidad lo que sucedió es todo lo contrario, consecuencia de una ristra de éxitos que se salen del mapa.

Yahoo le da el precio bruto, sin ajustes, mientras que ciertas plataformas, como Bloomberg y Factset, ajustan por defecto sus precios por splits. No lo hacen en cambio por spinoffs: el caso en que una empresa se divide en varias, por ejemplo independizando una de sus líneas de negocio. Aquí no cambia el número de acciones, pero si el valor (una parte se separa) lo cual hemos de ajustar en los precios. Y además, están los dividendos.

Dividendos

Muchas empresas otorgan a sus accionistas pagos periódicos, una forma de premiar su fidelidad de manera instantánea sin tener que esperar a la venta de la posición o la liquidación de la compañía. Estos dividendos son variables en cantidad y frecuencia, pudiendo ser regulares o extraordinarios.

En el caso de que el dividendo sea en acciones ya que no ha variado el valor de la compañía lo que en realidad ha acontecido es una dilución del capital: los efectos prácticos son los de un split que vimos con anterioridad.

Por contra, si el dividendo es en dinero se produce una salida de valor, y una (pequeña) caída del precio de mercado por la misma cantidad. ¿Entonces, todo está bien? No, porque ese dinero ha ido a su bolsillo, y como tal forma parte la rentabilidad que se deriva de su posición en dicho activo. Si no lo tiene en cuenta está subestimando su retorno e introduciendo arbitrariedad en su sistema.

Total Return

En tales casos la convención es trabajar con una política de dividendo reinvertido: suponer que en el momento en que usted recibe el dividendo usted lo aprovecha para aumentar la posición en el activo por el mismo valor. Es la opción más racional: a parte de lo complicado e inútil que resultaría contabilizar todos los dividendos por separado, si usted prefiere liquidez a acciones… lo puede conseguir en cualquier momento vendiendo todo o parte de su posición, no tiene por qué esperar a un dividendo.

A esa serie retroactiva que incorpora todos los eventos se la conoce como precio ajustado por dividendos y ampliaciones o, en breve, precio total return. Es lo que usted ve representado en la última columna de las tablas de Yahoo, bajo el encabezado Adj Close. Por las razones que hemos mencionado, le recomiendo que utilice siempre que pueda el precio total return en sus sistemas. Obtendrá más precisión, fiabilidad, y mejores resultados.

PyAlgoTrade nos facilita esta tarea con una cómoda abstracción: usted puede solicitar el precio en una serie de datos o en una barra como sigue:

# Precios sin ajustar
feed[instrument].getCloseDataSeries()
bar.getClose()
# Precios ajustados
feed[instrument].getAdjCloseDataSeries()
bar.getAdjClose()

Pero también puede usar la propiedad useAdjustedValues en su barra, serie de datos o estrategia para elegir unos u otros de forma global, y así por ejemplo comparar resultados, o revertir a la serie de contado en el caso excepcional de que no posea datos total return.

myStrategy.setUseAdjustedValues(True)
# Precios ajustados
feed[instrument].getPriceSeries()
bar.getPrice()

Un error común que se comete, por ejemplo, es tomar una posición corta y no contabilizar los dividendos. Cuando me pongo corto (veremos esto en detalle más adelante) soy yo quien es responsable de pagar el dividendo, con lo cual es un coste neto por mi lado. Otro error común es comparar al IBEX español con el DAX alemán, ambos principales índices bursátiles de sus respectivos mercados. ¿Bien hasta aquí, verdad? Pero es que el IBEX es un índice de contado, mientras que el DAX es un índice total return: incorpora dividendos y ampliaciones. Es como comparar peras y manzanas, que diría mi querida abuela.

precio_sesgo

Ahora vemos uno de los problemas de nuestro backtesting anterior sobre el IBEX: en la estrategia hemos utilizado precios ajustados (porque Yahoo proporciona ambos para las acciones), mientras que en el benchmark hemos utilizado precios al contado (porque Yahoo proporciona siempre el mismo precio en ambas columnas para los índices). ¡Ups!

Aquí conviene una advertencia importante: tanto en Yahoo como en otras fuentes los precios total return de las acciones se ajustan retroactivamente, pero no los de los índices. Esto lo puede constatar porque a día de hoy el precio total return y contado de una acción son el mismo (divergen hacia el pasado) mientras que los de un índice son muy dispares, como ya vimos con el S&P 500 en sus versiones contado (^GSPC) y total return (^SP500TR). Tiene sentido por el quebradero de cabeza que supondría reajustar cada uno de sus constituyentes mientras que no debe afectar a sus cálculos proporcionales (los movimientos relativos siguen siendo los mismos), pero si no lo sabe le podría llevar a error en otro tipo de operaciones o bien comparando series de fechas diferentes entre sí.

Excepto para ciertos índices muy populares como el S&P 500 puede resultar difícil obtener precios total return. Pero tenemos otra opción sencilla: aplicar la metodología “buy and hold” del benchmark sobre sus constituyentes, de los cuales sí que disponemos de precios ajustados. Y nuestro flexible entorno de backtesting nos lo pone bien sencillo:

run_strategy(False, assets.instruments, 35, smaShort, smaLong)

ibex_bench2

¿Qué ha sucedido aquí? Se suponía que perdíamos un 9% y ahora estamos ganando un… ¿42%? ¿Con un Ratio de Sharpe de 39? Un momento, ¿La estrategia es mejor? ¿Peor? ¿Quién ha cambiado la película?

Esto nos sirve como introducción, querido lector, en el segundo y mucho más peligroso problema de nuestro ejercicio, tanto que merece su propio episodio, probablemente uno que empiece en medio de una lluvia torrencial con una panorámica sobre un cementerio desolado mientras suena una tétrica banda sonora y se imprimen en pantalla, lentamente, los vaporosos caracteres del título: Los Muertos No Hablan.

Anuncios

2 comentarios en “Backtesting y Precios

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