Luno Exchange `watch_order_book` 未处理交易更新
作者: badokun创建于 2025年11月5日更新于 2026年9月15日
标签bugenhancementsuggestion
处理交易
def handle_trades(self, client: Client, message, subscription):
#
# {
# "sequence": "110980825",
# "trade_updates": [],
# "create_update": {
# "order_id": "BXHSYXAUMH8C2RW",
# "type": "ASK",
# "price": "24081.09000000",
# "volume": "0.07780000"
# },
# "delete_update": null,
# "status_update": null,
# "timestamp": 1660598775360
# }
#
rawTrades = self.safe_value(message, 'trade_updates', [])
length = len(rawTrades)
if length == 0:
return
symbol = subscription['symbol']
market = self.market(symbol)
messageHash = 'trades:' + symbol
stored = self.safe_value(self.trades, symbol)
if stored is None:
limit = self.safe_integer(self.options, 'tradesLimit', 10000)
stored = ArrayCache(limit)
self.trades[symbol] = stored
for i in range(0, len(rawTrades)):
rawTrade = rawTrades[i]
trade = self.parse_trade(rawTrade, market)
stored.append(trade)
self.trades[symbol] = stored
client.resolve(self.trades[symbol], messageHash)
# FIX: 根据交易更新订单书中的数量
if length > 0 and symbol in self.orderbooks:
orderbook = self.orderbooks[symbol]
for trade in rawTrades:
maker_order_id = self.safe_string(trade, 'maker_order_id')
base_volume = self.safe_string(trade, 'base') # 交易的数量
if maker_order_id and base_volume:
# 从报价和询价中减少订单的数量(我们不知道哪个方向)
# 使用volume=0的storeArray方法将删除如果数量为0
self._reduce_order_volume(orderbook['bids'], maker_order_id, base_volume)
self._reduce_order_volume(orderbook['asks'], maker_order_id, base_volume)
def _reduce_order_volume(self, order_side, order_id: str, traded_volume: str):
"""
在交易后减少订单在订单书中的数量。
Args:
order_side: 订单书的报价或询价方
order_id: 进行交易的创建者订单ID
traded_volume: 进行交易的数量(作为字符串)
…
内容来源: ccxt/ccxt