Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -110,9 +110,12 @@ oanda = [
cot = [
"cot-reports>=0.1.0", # CFTC Commitment of Traders data
]
alpaca = [
"alpaca-py>=0.30.0",
]

all-providers = [
"ml4t-data[yahoo,databento,oanda,cot]",
"ml4t-data[yahoo,databento,oanda,cot,alpaca]",
]

# Development dependencies
Expand Down Expand Up @@ -171,6 +174,7 @@ dev = [
"yfinance>=0.2.0",
"oandapyV20>=0.7.0",
"xlsxwriter>=3.1.0",
"alpaca-py>=0.30.0",
]

[tool.pytest.ini_options]
Expand Down
10 changes: 10 additions & 0 deletions src/ml4t/data/managers/provider_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,13 @@ def _get_provider_classes(cls) -> dict[str, type]:
except ImportError:
pass

try:
from ml4t.data.providers.alpaca import AlpacaProvider

provider_classes["alpaca"] = AlpacaProvider
except ImportError:
pass

cls._PROVIDER_CLASSES = provider_classes
return provider_classes

Expand Down Expand Up @@ -248,6 +255,9 @@ def _detect_available_providers(self) -> None:
if free_provider not in self._available_providers:
self._available_providers.append(free_provider)

if "alpaca" in self._provider_classes and "alpaca" not in self._available_providers:
self._available_providers.append("alpaca")

@property
def available_providers(self) -> list[str]:
"""Get list of available provider names."""
Expand Down
1 change: 1 addition & 0 deletions src/ml4t/data/providers/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
| File | Lines | Purpose |
|------|-------|---------|
| yahoo.py | 603 | Yahoo Finance (free) |
| alpaca.py | — | Alpaca Markets OHLCV |
| binance_api.py | 410 | Binance REST API |
| binance_bulk.py | 1430 | Binance bulk historical archive |
| eodhd.py | 464 | EOD Historical Data |
Expand Down
9 changes: 9 additions & 0 deletions src/ml4t/data/providers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
Available Providers (20 live + 3 synthetic/testing):
- BaseProvider: Abstract base class for all providers
- YahooFinanceProvider: Yahoo Finance (free, no API key)
- AlpacaProvider: Alpaca Markets bars (optional: pip install 'ml4t-data[alpaca]')
- TiingoProvider: Tiingo stocks (free tier: 1000 req/day, 500 symbols/month)
- FinnhubProvider: Finnhub multi-asset data (free tier: 60 req/min)
- EODHDProvider: EODHD global equities (free tier: 500 req/day, 1 year depth)
Expand Down Expand Up @@ -48,6 +49,12 @@
except ImportError:
YahooFinanceProvider = None # type: ignore

try:
from ml4t.data.providers.alpaca import AlpacaHistoricalProvider, AlpacaProvider
except ImportError:
AlpacaHistoricalProvider = None # type: ignore
AlpacaProvider = None # type: ignore

try:
from ml4t.data.providers.tiingo import TiingoProvider
except ImportError:
Expand Down Expand Up @@ -148,6 +155,8 @@
"Provider",
# Equity providers
"YahooFinanceProvider",
"AlpacaHistoricalProvider",
"AlpacaProvider",
"TiingoProvider",
"FinnhubProvider",
"EODHDProvider",
Expand Down
Loading