add support for alternative ticker universe formatting
Deploy / lint (push) Successful in 5s
Deploy / test (push) Successful in 26s
Deploy / deploy (push) Successful in 19s

This commit is contained in:
2026-03-07 17:27:57 +01:00
parent d331f551e3
commit 79ca19f45f
2 changed files with 30 additions and 9 deletions
+14 -3
View File
@@ -25,13 +25,24 @@ class AlpacaOHLCVProvider:
raise ProviderError("Alpaca API key and secret are required")
self._client = StockHistoricalDataClient(api_key, api_secret)
@staticmethod
def _to_alpaca_symbol(symbol: str) -> str:
"""Convert internal symbol format (BRK-B) to Alpaca format (BRK.B)."""
return symbol.replace("-", ".")
@staticmethod
def _from_alpaca_symbol(symbol: str) -> str:
"""Convert Alpaca symbol format (BRK.B) back to internal format (BRK-B)."""
return symbol.replace(".", "-")
async def fetch_ohlcv(
self, ticker: str, start_date: date, end_date: date
) -> list[OHLCVData]:
"""Fetch daily OHLCV bars for *ticker* between *start_date* and *end_date*."""
alpaca_symbol = self._to_alpaca_symbol(ticker)
try:
request = StockBarsRequest(
symbol_or_symbols=ticker,
symbol_or_symbols=alpaca_symbol,
timeframe=TimeFrame.Day,
start=start_date,
end=end_date,
@@ -42,11 +53,11 @@ class AlpacaOHLCVProvider:
bars = await asyncio.to_thread(self._client.get_stock_bars, request)
results: list[OHLCVData] = []
bar_set = bars.get(ticker, []) if hasattr(bars, "get") else getattr(bars, "data", {}).get(ticker, [])
bar_set = bars.get(alpaca_symbol, []) if hasattr(bars, "get") else getattr(bars, "data", {}).get(alpaca_symbol, [])
for bar in bar_set:
results.append(
OHLCVData(
ticker=ticker,
ticker=ticker, # use original internal symbol
date=bar.timestamp.date(),
open=float(bar.open),
high=float(bar.high),