Cómo Construir un Terminal Personal de Análisis Cuantitativo con Polars y DuckDB
Cualquier desarrollador que haya intentado alguna vez analizar cotizaciones de acciones con código ha pasado inevitablemente por el mismo escenario. Primero, abres un Jupyter Notebook, conectas Pandas y obtienes velas históricas a través de alguna API gratuita al azar. En un par de días, el notebook crece hasta cientos de celdas ilegibles, los cálculos de indicadores comienzan a congelarse durante minutos, y en lugar de una interfaz adecuada tienes que entrecerrar los ojos ante gráficos de Matplotlib.
Hace poco me encontré con el proyecto shy3130/tick-stock-panel en GitHub. El autor construyó una plataforma completa de código abierto para análisis cuantitativo, backtesting y monitoreo de acciones que puedes ejecutar localmente en un solo contenedor Docker. El proyecto está inicialmente diseñado para el mercado chino de acciones A, pero sus decisiones arquitectónicas y stack tecnológico merecen una revisión aparte, sin importar qué activos negocies.
Qué hay dentro y cómo funciona
El problema principal de la mayoría de screeners caseros es el rendimiento. Si calculas medias móviles, MACD, RSI y Bandas de Bollinger para miles de tickers en un bucle a través de Pandas, la máquina se satura rápidamente.
En tick-stock-panel, este problema se resolvió con un stack de datos moderno:
- Polars maneja cálculos paralelos de indicadores y screening de todo el mercado en fracciones de segundo.
- Parquet se utiliza como formato de almacenamiento local para tablas enriquecidas.
- DuckDB realiza consultas analíticas rápidas sobre Parquet directamente en disco sin levantar bases de datos pesadas.
- vectorbt se utiliza en un módulo de backtesting aislado.
- FastAPI y sse-starlette sirven datos y transmiten el progreso de cálculos pesados a través de Server-Sent Events.
- React 18 con las librerías Lightweight Charts y ECharts forma un panel de control limpio.
La arquitectura es compacta: el backend y el frontend incluido se empaquetan en un Dockerfile de dos etapas. La aplicación no necesita PostgreSQL externo ni Redis—toda la base de datos se mantiene local.
Características principales de la plataforma
El desarrollador dividió la funcionalidad en cuatro bloques clave: filtrado, pruebas de hipótesis, seguimiento del mercado y análisis de activos individuales.
| Dashboard | Strategy Screener |
![]() |
![]() |
| Backtesting | Factor Search |
![]() |
![]() |
Screener y estrategias integradas
El sistema incluye 18 estrategias de selección de acciones listas para usar. El mecanismo de filtrado funciona con Polars: después del cierre del mercado, el pipeline calcula un conjunto de datos enriquecido, y la consulta del usuario verifica condiciones en toda la tabla de tickers. Puedes combinar indicadores estándar, volúmenes y patrones de velas japonesas o escribir tus propias señales.
Backtesting y búsqueda de factores alfa
Las pruebas se dividen en dos modos:
- Evaluación individual de factores con cálculos de métricas IC e IR, rendimientos por cuantiles y spreads long-short. Esto ayuda a filtrar el ruido antes de construir un sistema de trading.
- Backtesting completo de estrategias con reglas de liquidación T+1, slippage, comisiones de brokers y stop-losses.
El módulo de búsqueda de factores está implementado de forma interesante. El sistema busca combinaciones de rankings en el conjunto de entrenamiento, filtra métricas correlacionadas y valida resultados en datos fuera de muestra. Sin embargo, las reglas descubiertas no se aplican ciegamente: el candidato se guarda en borradores y requiere confirmación manual antes de añadirlo al grupo de trabajo.
| Monitoring Center | Limit Ladder |
![]() |
![]() |
| Sector Analysis | Watchlists |
![]() |
![]() |
Monitoreo en tiempo real y anomalías
El dashboard incluye un módulo de monitoreo en vivo. Puedes establecer reglas de activación basadas en niveles de precios, indicadores o desviaciones de promedios. Cuando ocurre un evento, el panel envía un webhook, muestra una notificación en el navegador e incluso pronuncia el ticker en voz alta a través de la API de Web Speech.
Integración de modelos de lenguaje
El proyecto añadió integración con LLM a través de una interfaz compatible con OpenAI. Puedes conectar Ollama, DeepSeek o APIs cerradas. Los modelos cumplen dos roles prácticos: generar código de reglas de screener a partir de descripciones de texto y componer un informe nocturno con análisis de movimientos sectoriales después del cierre del mercado.
Cómo desplegar y ejecutar
La forma más rápida de lanzar el proyecto es a través de Docker Compose:
cp .env.example .env
docker compose up --build
Después de construir, el panel se abre en http://localhost:3018.
Para desarrollo local, necesitarás Python 3.11+, Node.js 20, los gestores de paquetes uv y pnpm:
cp .env.example .env
./dev.sh
El script verificará el entorno, instalará las dependencias del backend a través de uv y del frontend a través de pnpm, y luego iniciará FastAPI en el puerto 3018 y el servidor de desarrollo Vite en el 3011.
La configuración se establece en el archivo .env:
TICKFLOW_API_KEY= # Ключ источника данных TickFlow (можно оставить пустым для базового режима)
AI_API_KEY= # Ключ LLM-провайдера для генерации стратегий
PORT=3018 # Порт приложения
Conectar tus propias fuentes de datos
El proyecto base está configurado para el SDK del servicio chino TickFlow, sin embargo el desarrollador hizo que la capa de datos fuera conectable. El repositorio incluye un plugin de Node.js stock-sdk y ejemplos de descripciones declarativas de fuentes a través de YAML.
Si quieres adaptar el panel para MOEX, exchanges de criptomonedas o Yahoo Finance, solo necesitas implementar la interfaz del proveedor de barras diarias y alimentarlas en formato Parquet. Todo el resto de la mecánica—cálculos de medias móviles, motor de backtesting, gráficos de Lightweight Charts y sistema de alertas—seguirá funcionando sin cambios.
¿Vale la pena probarlo?
El proyecto tick-stock-panel es interesante principalmente por su limpieza arquitectónica. El autor abandonó las bases de datos relacionales pesadas en favor de Polars + DuckDB + Parquet, lo que hace que el sistema vuele en una laptop común.
Si operas en el mercado chino, el proyecto puede usarse como una herramienta de trabajo lista para usar desde el primer momento. Si tu interés está en otras bolsas, el código base del repositorio servirá como una excelente plantilla para construir tu propio terminal de análisis.
Proyectos relacionados







