Providers¶
ML4T Data supports 20 live data providers with a unified API (plus synthetic and testing providers).
Provider Comparison¶
| Provider | Asset Class | Free Tier | Async | API Key |
|---|---|---|---|---|
| Yahoo Finance | Stocks, ETFs, Crypto | Unlimited | Thread | No |
| CoinGecko | Crypto | 10K+ coins | Native | No |
| FRED | Economic Data | 120/min | Thread | Yes |
| Fama-French | Factors | Unlimited | Thread | No |
| AQR | Factors | Unlimited | Thread | No |
| Wiki Prices | Historical | Static | Thread | No |
| Kalshi | Prediction Markets | Public data | Thread | No |
| Polymarket | Prediction Markets | Public data | Thread | No |
| Binance Bulk | Crypto | Bulk downloads | Thread | No |
| NASDAQ ITCH | Tick Data | Sample data | Thread | No |
| EODHD | Global Stocks | 500/day | Native | Yes |
| Tiingo | US Stocks | 1000/day | Thread | Yes |
| TwelveData | Multi-asset | 800/day | Native | Yes |
| DataBento | Futures, Options | $10 credits | Thread | Yes |
| Polygon | Multi-asset | Paid only | Thread | Yes |
| Finnhub | Global Stocks | 30/day OHLCV | Thread | Yes |
| Binance API | Crypto | Unlimited | Native | No |
| OKX | Crypto Perpetuals | No geo-limits | Native | No |
| CryptoCompare | Crypto | Good | Native | Optional |
| Oanda | Forex | Demo only | Thread | Yes |
Async Support¶
All providers support async via async_batch_load():
- Native async: Uses
httpx.AsyncClientfor true non-blocking I/O - Thread-wrapped: Uses
asyncio.to_thread()for sync SDKs
from ml4t.data.managers.async_batch import async_batch_load
async with YahooFinanceProvider() as provider:
df = await async_batch_load(
provider,
symbols=["AAPL", "MSFT", "GOOGL"],
start="2024-01-01",
end="2024-12-31",
)
Unified API¶
All providers implement the same interface:
Returns a Polars DataFrame with columns:
timestamp, symbol, open, high, low, close, volume