SYS-01LibreríaPython

QAStats

Reporting de estrategias sobre pandas. De una serie de retornos diarios a un informe completo.

Versión
3.0.1
Estrellas
2
Lenguaje
Python

Qué es

QAStats es una librería de Python para reporting financiero de carteras y estrategias, construida sobre pandas. Parte de empyrical y pyfolio, en sus versiones -reloaded, y los adapta a un flujo de trabajo propio.

Nació para resolver un problema de método. Sin una herramienta común, cada miembro del equipo calculaba y presentaba los resultados a su manera, y los informes no se podían comparar. QAStats fija una sola forma de medir: las mismas estadísticas y los mismos gráficos para todas las estrategias.

La entrada es simple: la variación porcentual diaria de la estrategia y la de su benchmark. No trabaja con operaciones sueltas, sino con el agregado al cierre de cada día. Se puede usar tal cual, pero está pensada como base: conviene entender su funcionamiento interno y adaptarla a cada caso.

Qué incluye

El paquete qastats (versión 3.0.1) tiene estos módulos:

  • stats: tabla de estadísticas diarias (get_daily_stats) y mensuales, drawdowns en periodos relevantes (get_drawdown_stats), VAMI diario (get_vami_diario), peores periodos de drawdown, ratios SQN y omega, y VaR en dólares (var_usd).
  • plots: retornos acumulados frente al benchmark, mapa de calor y distribución de retornos mensuales, retornos anuales, drawdown underwater y periodos de drawdown, eventos de estrés, volatilidad, alfa, beta, Sharpe y VaR móviles, y Monte Carlo.
  • timeseries: drawdown máximo y principales drawdowns, métricas móviles y cono de previsión por bootstrap.
  • randomizer: Monte Carlo paramétrico de la curva, con percentiles de rentabilidad y de drawdown máximo.
  • reports: create_return_dd, el informe completo en una sola figura. Se guarda en PDF (noname.pdf si no se le da nombre).
  • interesting_periods: eventos de mercado que usan los drawdowns en periodos relevantes.
  • extension y utils: extend_pandas (añade varusd a los objetos de pandas) y utilidades de tablas y fechas.

El repositorio trae un ejemplo, examples/example1.ipynb, con su serie de retornos (examples/diario_normal.pickle), y el informe que genera (noname.pdf, noname.png).

La versión 3 añade el ratio SQN a las estadísticas avanzadas, actualiza la lista de eventos relevantes, corrige errores y se instala con pip.

Instalación y primer uso

En un entorno de conda propio, se clona el repositorio y se instalan las dependencias y el paquete. requirements.txt incluye una versión corregida de quantstats que la librería importa.

conda create -n qastats python
conda activate qastats
git clone https://github.com/quantarmyz/QAStats
cd QAStats
pip install -r requirements.txt
pip install .

El ejemplo del repositorio usa un DataFrame con dos columnas de retornos diarios: Close (la estrategia) y bench (el benchmark). En el ejemplo, el benchmark es sintético: retornos de la misma estrategia tomados al azar.

IN [01]python
import numpy as np
import pandas as pd
import qastats

data = pd.read_pickle('examples/diario_normal.pickle')
data['bench'] = np.random.choice(data['Close'], len(data))

qastats.stats.get_daily_stats(data)

El informe completo sale con una sola llamada:

IN [02]python
qastats.reports.create_return_dd(data)

Cómo encaja

QAStats es la última pieza de la cadena del laboratorio. Los datos salen del Datalake, el backtest se hace con Zipline en Quantstack y el informe, con QAStats.

En el quant stack de los research, el reporting lo hacen pyfolio y empyrical. QAStats nació para llevar las ideas de pyfolio a un formato propio, sobre los cálculos de empyrical. No viene en la imagen de Quantstack: se instala aparte, con los pasos de arriba.

Fig. — Datos, backtest e informe: Datalake → Quantstack (Zipline) → QAStats

Otros sistemas