#27239·ccxt

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: 进行交易的数量(作为字符串)