Build 060.13 — WebSocket Trade Mapper
This commit is contained in:
@@ -17,6 +17,7 @@ from src.market_data.acquisition.adapters.dzengi.models import (
|
||||
DzengiTicker24hrResponse,
|
||||
DzengiWebSocketOhlcEvent,
|
||||
DzengiWebSocketQuoteResponse,
|
||||
DzengiWebSocketTradeEvent,
|
||||
)
|
||||
from src.market_data.acquisition.exceptions import (
|
||||
CandleMappingError,
|
||||
@@ -37,6 +38,7 @@ from src.market_data.acquisition.models.trade import (
|
||||
|
||||
_DZENGI_SOURCE_NAME = "dzengi"
|
||||
_DZENGI_WEBSOCKET_OHLC_SOURCE_NAME = "dzengi_websocket_ohlc"
|
||||
_DZENGI_WEBSOCKET_TRADE_SOURCE_NAME = "dzengi_websocket_trade"
|
||||
|
||||
|
||||
def map_dzengi_symbol_to_instrument(
|
||||
@@ -537,6 +539,41 @@ def map_dzengi_rest_agg_trades_to_trades(
|
||||
)
|
||||
|
||||
|
||||
def map_dzengi_websocket_trade_to_trade(
|
||||
event: DzengiWebSocketTradeEvent,
|
||||
) -> Trade:
|
||||
"""
|
||||
Преобразовать проверенную transport-модель
|
||||
WebSocket Trade в каноническую модель Trade.
|
||||
|
||||
Предполагается, что ранее успешно выполнены:
|
||||
|
||||
- Schema Validation
|
||||
- Parser
|
||||
- Value Validation
|
||||
"""
|
||||
|
||||
return Trade(
|
||||
symbol=event.symbol.strip(),
|
||||
trade_id=event.trade_id,
|
||||
price=_required_trade_decimal(
|
||||
event.price,
|
||||
field_name="price",
|
||||
),
|
||||
quantity=_required_trade_decimal(
|
||||
event.size,
|
||||
field_name="size",
|
||||
),
|
||||
executed_at=_trade_timestamp_ms_to_utc_datetime(
|
||||
event.timestamp,
|
||||
),
|
||||
aggressor_side=_websocket_trade_aggressor_side(
|
||||
event.buyer,
|
||||
),
|
||||
source=_DZENGI_WEBSOCKET_TRADE_SOURCE_NAME,
|
||||
)
|
||||
|
||||
|
||||
def _map_dzengi_rest_agg_trade(
|
||||
trade: DzengiRestAggTrade,
|
||||
*,
|
||||
@@ -572,6 +609,24 @@ def _trade_aggressor_side(
|
||||
return TradeAggressorSide.BUY
|
||||
|
||||
|
||||
def _websocket_trade_aggressor_side(
|
||||
buyer: bool,
|
||||
) -> TradeAggressorSide:
|
||||
"""
|
||||
Преобразовать направление WebSocket Trade
|
||||
в каноническую сторону агрессора.
|
||||
|
||||
WebSocket:
|
||||
buyer=True -> BUY
|
||||
buyer=False -> SELL
|
||||
"""
|
||||
|
||||
if buyer:
|
||||
return TradeAggressorSide.BUY
|
||||
|
||||
return TradeAggressorSide.SELL
|
||||
|
||||
|
||||
def _required_trade_decimal(
|
||||
value: DzengiRawNumeric,
|
||||
*,
|
||||
|
||||
Reference in New Issue
Block a user