Backtesting y Gráficos

En nuestro anterior post destacamos lo importante que es analizar los indicadores clave de su sistema antes de lanzarse a la aventura de la inversión, pues no todas las formas lícitas de ganar dinero son para todos los públicos.

Por ejemplo, sabemos que es posible ganar mucho dinero con un sistema en el que los indicadores muestran que se equivoca con frecuencia (mientras por promedio gane mucho más en los aciertos de lo que pierde en cada fallo). Pero si eso le parece contra-intuitivo, mejor no se meta; no es apto para cardíacos y su intuición le hará la vida imposible.

A veces es un sólo número el que nos proporciona la información que buscamos. En otras ocasiones es más conveniente analizar una serie de datos mediante su representación gráfica, algo a lo que los analistas técnicos son especialmente adeptos. Así que en este post vamos a revisar las capacidades dentro y fuera de PyAlgoTrade para crear ese chart de oro.

Riesgo en Serie

En primer lugar vamos a generar una serie de datos que valga la pena añadir a nuestros gráficos, y para ello vamos a utilizar la volatilidad sobre nuestro ejemplo de estrategia en el S&P 500. Ya vimos la volatilidad dentro del Ratio de Sharpe como el riesgo que asumimos en nuestra inversión (representado por los movimientos de valor de los activos).

También nos puede resultar conveniente analizar la evolución de dicho riesgo de forma independiente en lugar del valor que usamos en la fórmula, que al abarcar un periodo tan amplio pierde granularidad. Para ello generaremos una serie histórica de volatilidades actuales, utilizando las últimas 126 sesiones (medio año, el standard en la industria financiera).

Aquí es donde se muestra el músculo de nuestro bricolaje financiero. ¿Su entorno de backtesting no tiene esa herramienta, o no funciona como usted quiere? Ningún problema, PyAlgoTrade es abierto y extensible, con lo cual puede crear las herramientas que desee.  Puede bajarse el código de mi versión desde el repositorio GitHub de este proyecto PyAlgoSamples. Los archivos relevantes se encuentra en la carpeta pyalgoext.

Nuestro analizador de volatilidades se encuentra en el archivo volatility.py, mientra que __init__.py sirve para identificar toda la carpeta pyalgoext como un paquete  donde podremos guardar este y otros módulos futuros que desarrollemos.

Gráficos con PyAlgoTrade

Con el módulo de volatilidades a nuestra disposición ya podemos incorporarlo a nuestras estrategias:

from pyalgoext import volatility

volaAnalyzer = volatility.VolaAnalyzer(126)
myStrategy.attachAnalyzer(volaAnalyzer)
# ejecutar la estrategia
volaSeries = volaAnalyzer.getVolaSeries()

PyAlgoTrade cuenta con un completo módulo de charts, plotter.py (basado a su vez en la popular librería gráfica matplotlib.py) que ya hemos usado de forma simple con anterioridad. Sólo nos queda crear un SubPlot para la serie de las volatilidades y, de paso, también añadir las series de los SMAs (corto y largo) al SubPlot del instrumento financiero (cotización del S&P500) antes de ejecutar la estrategia.

plt = plotter.StrategyPlotter(myStrategy)
plt.getInstrumentSubplot(index).addDataSeries("SMA Short", myStrategy.getSMAShort())
plt.getInstrumentSubplot(index).addDataSeries("SMA Long", myStrategy.getSMALong())
volaSeries = volaAnalyzer.getVolaSeries()
plt.getOrCreateSubplot("Volatility").addDataSeries("Volatility", volaSeries)
# ejecutar la estrategia

Para bonus points, también vamos a calcular nuestra volatilidad media actual de las últimas 60 sesiones (de nuevo el standard en la industria).

myStrategy.info("Vola Media: " + str(stats.mean(volaSeries[-60:])))

Puede descargar el código completo de nuestro estudio desde SpxStrategyGraph.py y SpxBenchmarkGraph.py para la metodología y su benchmark “buy and hold” respectivamente. Cuando los ejecute, obtendrá un chart cubriendo 5 años de inversiones similar al siguiente:

He preferido abarcar sólo los últimos cinco años para mostrar una imagen más limpia aquí en el web, pero usted mismo puede modificar los archivos para que se ejecuten desde el 1950, u otro periodo. Allí podrá ver la manera en que las bandas de las SMAs evolucionan respecto al precio y cómo nuestra simple estrategia, en general, se comporta mejor ante las erupciones de volatilidad.

Fíjese también que al operar sobre el S&P 500 nuestra serie de volatilidades funciona como un indicador similar al VIX sobre este rango temporal. De modo que si usted es adepto a las teorías de mercados eficientes de Eugene Fama y la escuela de Chicago podrá atisbar que tal vez le han estado tomando el pelo y que los mercados de hoy no son más estables, seguros y eficientes que antaño:

Exportar a CSV

A pesar de su potencia, en algunas ocasiones la librería chartista de PyAlgoTrade se nos puede quedar pequeña y preferiremos usar otro programa de gráficos. O tal vez queremos poder compartir los resultados con nuestros colaboradores en un formato que puedan manipular para desarrollar sus propias conclusiones.

En tales casos podemos exportar los datos a CSV (acrónimo inglés para “Valores Separados por Comas”), un standard que prácticamente la totalidad de programas pueden interpretar y, por ende, el mismo formato que ya utilizamos al descargar datos desde Yahoo Finance.

Podríamos escribir directamente los datos con comas a un archivo, pero esto nos expondría a una serie de incompatibilidades con las que no queremos lidiar (comas en los propios datos, etc), especialmente habida cuenta que Python ya los ha resuelto por nosotros con un soporte excelente para CSV. Como ejemplo vamos a generar automáticamente el estudio por décadas que vimos en nuestra introducción a los índices. Porque es más eficiente, y porque lo prometido es deuda.

import csv

index = "^GSPC"
with open("SxpStudy.csv", "wb") as csvFile:
    csvWriter = csv.writer(csvFile)
    csvWriter.writerow(["Year", "Strategy", "Benchmark", "Delta"])
    for startYear in range (1950, 2016, 10):
        endYear = startYear + 10
        if endYear > 2016:
            endYear = 2016
        csvWriter.writerow(run_strategy(index, startYear, endYear, 50, 200))

Así de sencillo. Para facilitar la creación de dos columnas conjuntas de metodología y benchmark he modificado el código para incluir ambas estrategias en un sólo archivo. Aquí pueden descargar SpxBatchCsv.py con todos los cambios, le animo a que experimente con su propia implementación para practicar.

Exportar a Excel

El archivo con los resultados de nuestro trabajo previo, SpxStudy.csv, puede visualizarse sin problemas con Excel, gracias a su compatibilidad universal. Sin embargo notará que carece por completo de ornamentos: cabeceras resaltadas en negrita, valores negativos en rojo, diferentes colores… el formato CSV es ajeno a todo ello. Mismo caso en el aspecto gráfico: si queremos algún chart sobre los datos, tendremos que crearlo manualmente.

¿Estamos condenados a ese tedio repetitivo con cada análisis? Por suerte no, ya que si bien Python por defecto no entiende el formato de archivos usado por Excel, existen varios paquetes gratuitos que nos permitirán obtener el soporte necesario y podemos instalar cómodamente con una herramienta que ya conocemos, pip:

C:\> pip install xlsxwriter

Para el caso en uso voy a utilizar la librería XlsxWriter porque cuenta con múltiples opciones gráficas y no requiere en absoluto que usted tenga instalado Office en la máquina que genera el archivo, lo cual es una gran ventaja (e.g. frente a las APIs propias de .NET) en caso de que se trate de un sistema sin Windows, por ejemplo en la nube. Más tarde puede explorar otras opciones disponibles en www.python-excel.org. Le dejo el código completo en SpxBatchExcel.py con el cual podrá generar sin esfuerzos la siguiente versión de nuestro ejemplo para Excel, claramente mejorada:

Resumen

En este capítulo hemos cubierto mucho terreno de cara a expandir nuestro entorno de backtesting financiero. En particular hemos aprendido a:

  • Extenderlo con nuestros propios Analizadores de Estrategias.
  • Exportar los resultados para interactuar con otros programas.
  • Representar las estrategias gráficamente, dentro y fuera de PyAlgoTrade.

En el próximo post veremos diferentes herramientas de análisis técnico, tanto clásicas como modernas, que nos ayudarán a mejorar la potencia de las estrategias, y pondremos a prueba nuestras capacidades con carteras de múltiples activos, en las que la diversificación emerge como una tarea de importancia capital.

¡Hasta entonces sean buenos, y no olviden vitaminarse y supermineralizarse!

Anuncios

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