Build 060.8: add Dzengi REST Trades Document Source
This commit is contained in:
@@ -9,12 +9,14 @@ from src.market_data.acquisition.exceptions import (
|
||||
CandleTransportError,
|
||||
InstrumentReferenceTransportError,
|
||||
QuoteTransportError,
|
||||
TradeTransportError,
|
||||
)
|
||||
|
||||
|
||||
_EXCHANGE_INFO_PATH = "/api/v1/exchangeInfo"
|
||||
_TICKER_24HR_PATH = "/api/v1/ticker/24hr"
|
||||
_KLINES_PATH = "/api/v1/klines"
|
||||
_AGG_TRADES_PATH = "/api/v1/aggTrades"
|
||||
|
||||
|
||||
# Минимальный транспортный контракт, необходимый Dzengi REST adapter.
|
||||
@@ -154,4 +156,60 @@ class DzengiCandlesDocumentSource:
|
||||
"Не удалось получить свечи "
|
||||
f"от Dzengi для символа '{symbol}', "
|
||||
f"интервала '{interval}' и типа цены '{price_type}': {exc}"
|
||||
) from exc
|
||||
|
||||
|
||||
class DzengiTradesDocumentSource:
|
||||
"""Источник сырого документа агрегированных сделок через Dzengi REST API."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
client: _PayloadRestClient | None = None,
|
||||
) -> None:
|
||||
self._client = client
|
||||
|
||||
def fetch_trades_document(
|
||||
self,
|
||||
symbol: str,
|
||||
*,
|
||||
start_time: int | None = None,
|
||||
end_time: int | None = None,
|
||||
limit: int | None = None,
|
||||
) -> object:
|
||||
"""
|
||||
Получить декодированный ответ Dzengi aggTrades без его обработки.
|
||||
|
||||
Метод не выполняет schema validation, parsing, value validation,
|
||||
mapping, сортировку, дедупликацию или кэширование.
|
||||
"""
|
||||
|
||||
params: dict[str, str] = {
|
||||
"symbol": symbol,
|
||||
}
|
||||
|
||||
if start_time is not None:
|
||||
params["startTime"] = str(start_time)
|
||||
|
||||
if end_time is not None:
|
||||
params["endTime"] = str(end_time)
|
||||
|
||||
if limit is not None:
|
||||
params["limit"] = str(limit)
|
||||
|
||||
try:
|
||||
client: _PayloadRestClient = (
|
||||
self._client
|
||||
if self._client is not None
|
||||
else ExchangeRestClient()
|
||||
)
|
||||
|
||||
return client.get_payload(
|
||||
_AGG_TRADES_PATH,
|
||||
params=params,
|
||||
)
|
||||
|
||||
except Exception as exc:
|
||||
raise TradeTransportError(
|
||||
"Не удалось получить агрегированные сделки "
|
||||
f"от Dzengi для символа '{symbol}': {exc}"
|
||||
) from exc
|
||||
@@ -119,6 +119,11 @@ class CandleFeedRegistryError(MarketDataAcquisitionError):
|
||||
pass
|
||||
|
||||
|
||||
# Ошибка получения Trades Feed от внешнего источника.
|
||||
class TradeTransportError(MarketDataAcquisitionError):
|
||||
pass
|
||||
|
||||
|
||||
# Ошибка структуры документа Trades Feed.
|
||||
class TradeSchemaError(MarketDataAcquisitionError):
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user