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 con unas pocas posiciones se convirtió en un proyecto de data engineering serio cuando me cansé de copiar precios a mano y correr 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 encargá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 traders retail pierden esos datos o los meten en hojas de cálculo que revientan a escala. Yo fui uno de ellos durante años.
El punto de inflexión fue el backtesting. Tenía una idea de estrategia, cargué datos históricos en un notebook, corrí un backtest, obtuve resultados prometedores. Dos semanas después quise probar una variación y no pude reproducir mi propio trabajo. Rangos de datos distintos, parámetros ligeramente diferentes, resultados que no cuadraban. Me había estado engañando con una metodología chapucera.
Necesitaba infraestructura. Pipelines reales que funcionen de forma fiable. Datos históricos en los que poder confiar. Backtests reproducibles. Si iba a arriesgar dinero con 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 gestiona el estado operacional. Posiciones, órdenes, balances de cuenta. Todo lo que necesita garantías transaccionales y acceso de baja latencia. Cuando salta una señal y necesito comprobar la exposición actual antes de dimensionar una operación, esa consulta va a Postgres.
ClickHouse se encarga de las consultas analíticas. Cinco años de historial de precios. Tick data. Resultados de backtests. Miles de millones de filas que tumbarían a Postgres pero que ClickHouse escanea en milisegundos. Si 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 tiran de APIs de exchanges. Los de transformación calculan indicadores técnicos. La generación de informes corre por la noche. Tengo más de 30 DAGs coordinando el sistema entero. Cuando algo se rompe, me llega una alerta en vez de descubrir datos obsoletos tres días después.
Cómo fluyen los datos
Conexiones websocket en tiempo real transmiten precios de forma continua. Esos datos llegan primero a Postgres para uso operacional y luego se cargan en lote a ClickHouse cada hora para análisis histórico. La separación importa porque las consultas analíticas machacarían el rendimiento de Postgres, y necesito que Postgres responda rápido para operar.
Los datos en bruto se transforman en indicadores, features, señales. Medias móviles, medidas de volatilidad, clasificaciones de régimen. 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 guardan. 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 retomo una idea meses después, puedo ver exactamente qué probé ya.
El motor de señales
Opero de forma 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 sizing de posiciones. Corre contra datos históricos. Guarda resultados.
He probado más de 20 variaciones de estrategia con este framework. La mayoría no funcionó. De eso se trata. Descubrir que una estrategia falla en backtest sale barato. Descubrirlo con dinero real sale caro. El sistema existe para descartar ideas malas rápido.
La gestión de riesgo va integrada. Sizing de posiciones basado en volatilidad. Límites máximos de exposición. Chequeos de correlación para evitar concentración. Las barreras corren solas para que no me pueda convencer de apostar de más cuando me siento seguro.
IA para investigación, no para trading
Integré la API de OpenAI para ayudar en la 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 merecer investigación manual. La IA sugiere; yo decido.
Siendo honesto, esta parte es experimental. No tengo claro que los LLMs entiendan los mercados mejor que el ruido. Pero son útiles para procesar texto que no tengo tiempo de leer, y de vez en cuando sacan a la luz algo que se me habría escapado.
Dashboards de Streamlit
Tres dashboards con propósitos distintos. La vista de portfolio muestra posiciones actuales, PnL, métricas de riesgo. La de investigación consulta ClickHouse para análisis histórico y comparación de estrategias. El monitor de pipelines vigila la salud de Airflow y la frescura de los datos.
Los hice en Streamlit porque quería algo funcional en horas, no en días. No son bonitos, pero cumplen.
Lo que realmente cambió
La plataforma me ahorra como mínimo una hora al día. Se acabó recoger datos a mano. Se acabaron los notebooks rotos. Se acabó preguntarme si los datos están al día.
Más importante: la calidad de mi investigación mejoró. Backtests reproducibles. Parámetros de estrategia versionados. Resultados históricos consultables. Cuando creo que una estrategia funcionó, puedo verificarlo contra datos reales, no contra un recuerdo vago de haber corrido algo parecido alguna vez.
ClickHouse devuelve resultados en menos de un segundo en consultas que en Postgres tardarían minutos. Eso cambia la forma de explorar ideas. Puedo preguntar de forma interactiva en vez de esperar jobs en lote.
Lo que aprendí
Construir esto me enseñó data engineering a un nivel que el trabajo para clientes nunca alcanzó. Cuando es tu propio sistema, tus propios datos y tu propio dinero en juego, cada detalle importa. Las decisiones de diseño de esquemas que parecían académicas se vuelven muy concretas cuando eres tú quien paga por el rendimiento de las consultas.
OLAP vs OLTP no es solo un concepto. Lo sentí de lleno cuando las consultas analíticas empezaron a afectar la latencia operacional. Separar las bases de datos no fue optimización prematura; fue supervivencia.
La infraestructura self-hosted te enseña lo que cuesta mantenerla. Airflow necesita monitoreo. ClickHouse necesita gestión de disco. Postgres necesita verificación de backups. La opción "gratis" cuesta tiempo en vez de dinero.
La mayoría de ideas de trading no funcionan. Tener infraestructura para probarlas rápido importa más que tener ideas brillantes. La ventaja no está en la señal, sino en probar más señales más rápido con mejor metodología. Eso es un problema de ingeniería, no de finanzas.
Sigo averiguando si alguna de mis estrategias tiene ventaja real. Pero al menos ahora sabré con certeza cuándo no la tienen.