Duelo Cuantitativo: Cómo batir al mercado con Piotroski y la Fórmula Mágica usando Python
¿Alguna vez has comprado una acción "barata" por su PER bajo, para ver cómo seguía cayendo un 40% más? Bienvenido al dolor de la "trampa de valor".
El Value Investing tradicional nos dice que compremos empresas baratas, pero a menudo olvidamos la otra mitad de la ecuación: la empresa debe estar sanando internamente. Si compramos barato una empresa en decadencia, barato sale caro.
Para resolver esto, a finales del siglo pasado dos grandes mentidos de las finanzas crearon dos estrategias sistemáticas:
- Joseph Piotroski publicó su famoso F-Score: 9 criterios contables estrictos para detectar empresas que están mejorando (reduciendo deuda, mejorando márgenes, generando caja).
- Joel Greenblatt lanzó la Fórmula Mágica: un sistema que ranquea empresas combinando su rentabilidad sobre el capital (ROC) y lo baratas que están respecto a su beneficio operativo (Earnings Yield).
Ambas estrategias prometen batir al mercado a largo plazo. Pero, ¿cuál funciona mejor hoy en día?
El Experimento: Backtesting sin sesgos
En lugar de leer la teoría, he construido un motor cuantitativo en Python para resolverlo. El sistema descarga datos fundamentales de Yahoo Finance y precios históricos de Tiingo, y los somete a un backtest estricto.
Para evitar el sesgo de mirada al futuro (ese error de novato de usar datos de hoy para simular una compra en el pasado), congelé la fecha de análisis al 1 de marzo de 2024. El algoritmo fingió que ese día era "hoy" y compró las acciones que le recomendaba cada estrategia con 10.000 € virtuales. Luego, simulamos qué habría pasado con la cartera hasta la actualidad.
El universo de análisis estuvo compuesto por 10 grandes compañías (Apple, Microsoft, Google, Amazon, Meta, Coca-Cola, J&J, JPMorgan, Ford y Boeing).
Los Resultados del Duelo (Marzo 2024 - Actualidad)
El motor analizó los balances y emitió sus señales de compra. Estos fueron los resultados crudos:
Estrategia |
Acciones Seleccionadas |
Rentabilidad |
Ratio de Sharpe |
Máxima Caída (DD) |
|---|---|---|---|---|
Piotroski F-Score |
Apple, Google, Amazon, Coca-Cola, Boeing |
+72.80% |
1.22 |
-20.70% |
Fórmula Mágica |
Apple, Microsoft |
+47.82% |
0.67 |
-26.75% |
Análisis del ganador: Piotroski La estrategia de Piotroski destrozó al mercado en este periodo. ¿Por qué? Por su capacidad para detectar inflexiones técnicas. Fíjate en el caso de Boeing. A marzo de 2024, Boeing tenía un ROA negativo (-1.62%). Estaba "en la UCI" financiera. Sin embargo, el algoritmo detectó que su ROA había mejorado respecto al año anterior, había reducido deuda y mejorado márgenes. Estaba pasando de la UCI a la planta de recuperación. El mercado tardó meses en darse cuenta, y cuando lo hizo, la acción subió de golpe.
¿Por qué perdió la Fórmula Mágica en este caso? La Fórmula Mágica de Greenblatt es implacable buscando la rentabilidad pura (ROC). En este universo de 10 mega-empresas, solo consideró lo suficientemente rentables a Apple y Microsoft. Al no detectar la mejora de Boeing o Google, su cartera fue menos diversificada (solo 2 acciones), lo que aumentó su volatilidad (Drawdown del -26.75%) y redujo su rentabilidad ajustada al riesgo (Sharpe de 0.67).
La conclusión para el inversor particular
La Fórmula Mágica es históricamente fabulosa, pero funciona mucho mejor cuando se aplica a un universo de miles de empresas pequeñas y medianas. Piotroski, por el contrario, demostró ser excepcional filtrando "basura" en un universo reducido de grandes cotizadas, detectando el momento exacto de inflexión contable.
¿Qué aprendemos de esto?
- La contabilidad adelanta al precio: Si una empresa está sanando internamente, el mercado acabará dándose cuenta y revalorizará la acción.
- El algoritmo quita la emoción: Un inversor humano nunca habría comprado Boeing en marzo de 2024 viendo su ROA negativo en las noticias. Un algoritmo matemático sí lo hizo, y ganó dinero.
- La reproducibilidad es clave: Al fijar la fecha de análisis, no nos engañamos a nosotros mismos. Auditar el pasado es la única forma de confiar en una señal de compra para el futuro.
¿Quieres probarlo tú mismo?
He documentado todo el proceso, el código fuente en Python (con manejo de APIs, caché local para reproducibilidad eterna y métricas de riesgo) y el manual completo de ambas estrategias.
Lo he dejado todo empaquetado y disponible para la comunidad en el siguiente enlace: 🔗 Descargar Código y Manual Completo (ZIP)
Solo necesitas Jupyter Lab, una cuenta gratuita en Tiingo para los precios, y ganas de dejar que las matemáticas trabajen por ti.
Y tú, ¿sigues leyendo titulares de noticias para comprar, o ya dejas que los balances contables te digan cuándo entrar?
(Nota: Este artículo y el código adjunto son estrictamente educativos y no constituyen asesoramiento financiero. El rendimiento pasado no garantiza resultados futuros. La inversión en bolsa conlleva riesgo de pérdida de capital).