Automatización de Trading
Data Engineering · Análisis Cuantitativo · ClickHouse · PostgreSQL · Airflow
Hago trading con mi propio dinero. No mucho, pero lo suficiente como para que me importen los resultados. Lo que empezó como una hoja de cálculo siguiendo unas pocas posiciones se convirtió en un proyecto de data engineering real cuando me cansé de copiar precios manualmente y ejecutar backtests en notebooks de Jupyter que se rompían cada vez que los volvía a abrir. Ahora tengo PostgreSQL para operaciones en vivo, ClickHouse para análisis histórico, y Airflow asegurándose de que todo funcione mientras duermo.
Por qué construir esto
La investigación de trading genera muchos datos. Feeds de precios, order books, señales de sentimiento, indicadores macro. La mayoría de los traders retail pierden estos datos o los meten en hojas de cálculo que se desmoronan a escala. Yo fui uno de ellos durante años.
El punto de inflexión fue el backtesting. Tenía una idea de estrategia, traje datos históricos a un notebook, ejecuté un backtest, obtuve resultados prometedores. Dos semanas después quise probar una variación y no pude reproducir mi propio trabajo. Diferentes rangos de datos, parámetros ligeramente diferentes, outputs que no coincidían. Me había estado engañando a mí mismo con una metodología descuidada.
Necesitaba infraestructura. Pipelines reales que corran de forma fiable. Datos históricos en los que pudiera confiar. Backtests que fueran reproducibles. Si iba a arriesgar dinero en estrategias sistemáticas, quería tratarlo como ingeniería, no como apuestas.
La arquitectura
Dos bases de datos, un scheduler. Suena simple porque lo es. La complejidad está en los flujos de datos, no en el stack.
PostgreSQL maneja el estado operacional. Posiciones, órdenes, balances de cuenta. Cualquier cosa que necesite garantías transaccionales y acceso de baja latencia. Cuando una señal se dispara y necesito verificar la exposición actual antes de dimensionar una operación, esa consulta va a Postgres.
ClickHouse maneja las consultas analíticas. Cinco años de historial de precios. Tick data. Resultados de backtests. Miles de millones de filas que aplastarían a Postgres pero que ClickHouse escanea en milisegundos. Cuando quiero saber cómo se comportó una estrategia durante el drawdown de 2022 o comparar ratios de Sharpe entre 20 variaciones, esa consulta va a ClickHouse.
Airflow orquesta todo. Los jobs de ingesta extraen de APIs de exchanges. Los jobs de transformación calculan indicadores técnicos. La generación de reportes corre durante la noche. Tengo más de 30 DAGs que coordinan todo el sistema. Cuando algo se rompe, recibo una alerta en lugar de descubrir datos obsoletos tres días después.
Cómo fluyen los datos
Conexiones websocket en tiempo real transmiten precios continuamente. Esos datos aterrizan primero en Postgres para uso operacional, luego se cargan en lotes a ClickHouse cada hora para análisis histórico. La separación importa porque las consultas analíticas en ClickHouse arruinarían el rendimiento de Postgres, y necesito que Postgres responda rápido para el trading.
Los datos raw se transforman en indicadores, features, señales. Medias móviles, medidas de volatilidad, clasificaciones de régimen. Estos viven como materialized views en ClickHouse que se refrescan según un schedule. Puedo consultar los datos derivados sin recalcularlos cada vez.
Los resultados de backtests también se almacenan. Cada variación de estrategia que pruebo va a una tabla de resultados con los parámetros usados, las métricas de rendimiento y timestamps. Cuando revisito una idea meses después, puedo ver exactamente lo que ya probé.
El motor de señales
Hago trading discrecional, pero quería sistematizar la investigación. El motor de señales codifica mis ideas en lógica testeable. Define condiciones de entrada, condiciones de salida, reglas de dimensionamiento de posiciones. Corre contra datos históricos. Almacena resultados.
He probado más de 20 variaciones de estrategia con este framework. La mayoría no funcionó. Ese es el punto. Descubrir que una estrategia falla en backtest es barato. Descubrir que falla con dinero real es caro. El sistema existe para fallar rápido en ideas malas.
La gestión de riesgo está incorporada. Dimensionamiento de posiciones basado en volatilidad. Límites máximos de exposición. Verificaciones de correlación para evitar concentración. Las barreras de protección corren automáticamente para que no pueda convencerme a mí mismo de hacer apuestas excesivas cuando me siento confiado.
IA para investigación, no para trading
Integré la API de OpenAI para asistencia en investigación, no para generar señales de trading. Análisis de sentimiento en titulares. Resúmenes de minutas del FOMC. Reconocimiento de patrones en gráficos que podrían valer la pena investigar manualmente. La IA sugiere, yo decido.
Honestamente, esta parte es experimental. No estoy convencido de que los LLMs entiendan los mercados mejor que el ruido. Pero son útiles para procesar texto que no tengo tiempo de leer, y ocasionalmente sacan algo a la luz que habría pasado por alto.
Dashboards de Streamlit
Tres dashboards para diferentes propósitos. La vista de portfolio muestra posiciones actuales, PnL, métricas de riesgo. La vista de investigación consulta ClickHouse para análisis histórico y comparación de estrategias. El monitor de pipelines rastrea la salud de Airflow y la frescura de los datos.
Los construí en Streamlit porque quería algo funcional en horas, no días. No son bonitos, pero funcionan.
Lo que realmente cambió
La plataforma me ahorra como mínimo una hora al día. No más recolección manual de datos. No más notebooks rotos. No más preguntarme si los datos están frescos.
Más importante aún, la calidad de mi investigación mejoró. Backtests reproducibles. Parámetros de estrategia versionados. Resultados históricos que puedo consultar. Cuando creo que una estrategia funcionó, puedo verificar que funcionó contra datos reales, no un recuerdo vago de haber corrido algo similar alguna vez.
ClickHouse devuelve resultados en menos de un segundo en consultas que tomarían minutos en Postgres. Eso cambia cómo exploro ideas. Puedo hacer preguntas de forma interactiva en lugar de esperar jobs en lote.
Lo que aprendí
Construir esto me enseñó data engineering a un nivel que el trabajo para clientes nunca logró. Cuando es tu propio sistema, tus propios datos, tu propio dinero en juego, te importa cada detalle. Las decisiones de diseño de esquemas que parecían académicas se vuelven concretas cuando eres tú quien paga por el rendimiento de las consultas.
OLAP vs OLTP no es solo un concepto. Sentí la diferencia cuando las consultas analíticas empezaron a impactar la latencia operacional. Separar las bases de datos no fue optimización prematura; fue supervivencia.
La infraestructura self-hosted te enseña el overhead operacional. Airflow necesita monitoreo. ClickHouse necesita gestión de espacio en disco. Postgres necesita verificación de backups. La opción "gratis" cuesta tiempo en lugar de dinero.
La mayoría de las ideas de trading no funcionan. Tener infraestructura para probarlas rápidamente importa más que tener ideas inteligentes. La ventaja no está en la señal; está en probar más señales más rápido con mejor metodología. Ese es un problema de ingeniería, no de finanzas.
Todavía estoy averiguando si alguna de mis estrategias realmente tiene ventaja. Pero al menos ahora sabré con seguridad cuando no la tengan.