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.pdfsi no se le da nombre).interesting_periods: eventos de mercado que usan los drawdowns en periodos relevantes.extensionyutils:extend_pandas(añadevarusda 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.
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:
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.