Todo backtest, todo modelo y todo scanner empieza en el mismo lado: los datos. Y la regla es vieja pero implacable — garbage in, garbage out. Podés tener el mejor sistema del mundo: si los datos son malos, el resultado es basura con buena presentación.
Acá va mi mapa de dónde sacar datos, separados por presupuesto y caso de uso.
Gratuitos (para empezar y prototipar)
| Fuente | Activos | Granularidad | Nota |
|---|---|---|---|
Yahoo Finance (yfinance) | Acciones, ETFs, índices | Diario / intradía limitado | El clásico para arrancar; calidad despareja |
| Stooq | Acciones, índices, FX | Diario | Buena cobertura histórica gratis |
| Alpha Vantage | Acciones, FX, cripto | Intradía / diario | Free tier con límite de requests |
| Binance API | Cripto | Tick / klines | Gratis y muy completa para cripto |
Para empezar a aprender, Yahoo + Binance te alcanzan. Pero ojo: gratis suele significar sin garantías de calidad ni de continuidad.
Pagos / freemium (cuando vas en serio)
| Fuente | Fuerte en | Por qué |
|---|---|---|
| Polygon.io | Acciones y opciones US | Datos intradía y tick de buena calidad, API moderna |
| Tiingo | Acciones, fundamentals | Excelente relación precio/calidad, históricos limpios |
| Databento | Equities, futuros | Datos de mercado crudos, point-in-time, nivel pro |
| Nasdaq Data Link (ex-Quandl) | Multi-asset, alternativos | Catálogo enorme de datasets |
| Dukascopy | Forex | Tick data histórico de FX, gratis y profundo |
Mi regla: si vas a tomar decisiones con plata real, pagá los datos. Es la inversión con mejor relación costo-beneficio de todo el stack.
El tema que casi nadie mira: splits y dividendos
Acá es donde se arruinan la mayoría de los backtests de acciones sin que el autor se entere.
- Splits: si una acción hace un split 2:1, el precio cae a la mitad de un día para el otro. Si tus datos no están ajustados, tu sistema va a ver una "caída del 50%" que nunca existió.
- Dividendos: el día ex-dividendo el precio baja por el pago. Sin ajustar, parece una pérdida; en realidad el dinero fue al accionista.
Por eso existen dos tipos de precio:
- Raw / unadjusted: el precio que realmente cotizó ese día. Sirve para simular ejecución real.
- Adjusted close: ajustado por splits y dividendos. Sirve para medir retorno total y comparar performance en el tiempo.
Regla práctica: backtesteá señales con precios ajustados por splits siempre, y decidí caso por caso si querés total return (con dividendos) o price return. Lo que nunca podés hacer es mezclar series ajustadas y crudas sin darte cuenta.
import yfinance as yf
# auto_adjust=True devuelve precios ajustados por splits y dividendos
df = yf.download("AAPL", start="2015-01-01", auto_adjust=True)
Mi recomendación por caso de uso
- Aprendiendo / prototipo: Yahoo Finance + Binance.
- Equities US en serio: Polygon o Tiingo.
- Futuros / datos pro: Databento.
- Forex: Dukascopy.
Empezá gratis para entender el problema. Pero el día que tu decisión mueve dinero, los datos buenos dejan de ser un lujo y pasan a ser parte del edge.
— José