SYS-03RepositorioJupyter Notebook

Quantstack

Research y backtesting en un contenedor. Con la imagen compilada, un comando levanta JupyterLab con Zipline y ArcticDB.

Estrellas
7
Lenguaje
Jupyter Notebook

Qué es

Quantstack es una plataforma de investigación y backtesting de trading algorítmico con Zipline, ArcticDB y JupyterLab, empaquetada en Docker. La imagen parte de Miniconda sobre Debian.

Resuelve un problema de entorno. Las librerías de research no se diseñaron para usarse juntas, y en un equipo cada miembro trabaja con un sistema operativo y una configuración distintos. El contenedor fija el sistema, el gestor de paquetes y las herramientas para todos. Una vez compilada la imagen, docker compose up -d deja el entorno listo.

Qué incluye

  • docker-compose.yml: servicio notebook en el puerto 8888, con JUPYTER_TOKEN (por defecto, testing). Monta quantarmy_repo/ como carpeta de trabajo (/WorkingData).
  • DockerSource/Dockerfile: imagen continuumio/miniconda3. Instala con conda JupyterLab y TA-Lib, y con pip el resto de req.txt. Copia a la imagen la extensión de Zipline, el conector y el .env.
  • DockerSource/req.txt: zipline-reloaded, pyfolio-reloaded, alphalens-reloaded, empyrical-reloaded y exchange_calendars; arcticdb y yfinance; pandas, numpy, scipy, scikit-learn, matplotlib, plotly, seaborn y pyarrow; extensiones de JupyterLab (git, LSP, monitor del sistema, tiempo de ejecución).
  • DockerSource/extension.py: registra el bundle qa_datalake con el calendario NYSE.
  • DockerSource/qa_datalake.py: conector ArcticDB → Zipline. Lee de ArcticDB precios, dividendos y splits de los ETF de la tabla, desde 2010, y los escribe en el bundle.
  • DockerSource/overrides.json: configuración de JupyterLab (tema, fuentes).
  • quantarmy_repo/: notebooks. backtest/ (plantilla template_zipline_jupyterlab.ipynb y ejemplo de volatilidad 01-bt-zipline-variance.ipynb), datalake/ (conexión, contenidos y exploración del datalake), models/ (01_101_ALPHAS.ipynb) y tools/ (zipline_db_management.ipynb). analisis/, theory/ y howtos/ tienen, de momento, un notebook vacío.

ETF del bundle qa_datalake:

TickerDescripción
XLE.USEnergy Select Sector
XLF.USFinancial Select Sector
XLI.USIndustrial Select Sector
XLK.USTechnology Select Sector
XLP.USConsumer Staples Select Sector
XLU.USUtilities Select Sector
XLV.USHealth Care Select Sector
XLY.USConsumer Discretionary Select Sector
XLB.USMaterials Select Sector
XLC.USCommunication Services Select Sector
ITA.USiShares U.S. Aerospace & Defense

Instalación y primer uso

Requisitos: Docker y Docker Compose, y credenciales de acceso al QA Datalake (S3/ArcticDB).

git clone https://github.com/quantarmyz/quantstack.git
cd quantstack

Antes de compilar hay que crear DockerSource/.env con las credenciales del datalake. El Dockerfile lo copia dentro de la imagen (/root/.env).

IN [01]DockerSource/.envdotenv
ENDPOINT=tu-endpoint.com
DB=tu-bucket
ACCESS_KEY=tu-access-key
SECRET_KEY=tu-secret-key

Se compila la imagen y se arranca el stack, en segundo plano con -d:

docker compose build --no-cache
docker compose up -d

JupyterLab queda en http://localhost:8888, con la contraseña testing. Para cambiarla, se edita JUPYTER_TOKEN en docker-compose.yml.

Desde un terminal de JupyterLab se ingieren los datos del datalake en el bundle de Zipline:

zipline ingest -b qa_datalake

Después, en backtest/, template_zipline_jupyterlab.ipynb sirve de base para un backtest nuevo.

Cómo encaja

Quantstack es la pieza central de la cadena del laboratorio. Su conector lee del Datalake en ArcticDB, con las mismas cuatro variables de entorno, y alimenta un bundle de Zipline. La cuarta parte de la serie Big Data Management explica ese conector. Para el informe, la imagen trae pyfolio-reloaded; QAStats, la librería de reporting del laboratorio, se instala aparte.

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

Otros sistemas