den4ik2003

Untitled

Dec 26th, 2025
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.44 KB | None | 0 0
  1. def get_new_private_trades(self) -> List[Dict[str, Any]]:
  2. """
  3. Returns new USER trades since last call.
  4.  
  5. On first call, returns [] (but sets internal cursor).
  6. On error, returns [].
  7.  
  8. Format (price is execAmt/execQty):
  9. {
  10. 'price': float,
  11. 'quantity': float,
  12. 'side': 'buy' or 'sell',
  13. 'timestamp': int # seconds from matchTime
  14. }
  15. """
  16. page_num = 1
  17. page_size = 100
  18. max_pages = 20
  19.  
  20. trades_raw: List[Dict[str, Any]] = []
  21. i = 0
  22. try:
  23. while True:
  24. params = {
  25. "symbol": self._symbol_code.lower(),
  26. "pageNum": page_num,
  27. "pageSize": page_size,
  28. }
  29. data = self._private_get("/trade/match/accountMatches", params=params)
  30. print('data part', i, len(data), data)
  31. i += 1
  32.  
  33. page = data or []
  34. if not page:
  35. break
  36.  
  37. trades_raw.extend(page)
  38.  
  39. if len(page) < page_size:
  40. break
  41.  
  42. if self._last_private_trade_id is not None:
  43. try:
  44. min_id_in_page = min(
  45. int(t.get("tradeId", 0)) for t in page if t.get("tradeId") is not None
  46. )
  47. except Exception:
  48. min_id_in_page = None
  49.  
  50. if min_id_in_page is not None and min_id_in_page <= self._last_private_trade_id:
  51. break
  52.  
  53. page_num += 1
  54. if page_num > max_pages:
  55. break
  56.  
  57. except Exception as e:
  58. self.logger.error(
  59. f"Failed to fetch private trades for {self._symbol_code}: {e}"
  60. )
  61. return []
  62.  
  63. if not trades_raw:
  64. return []
  65.  
  66. self.logger.info('get_new_private_trades::trades_raw:', len(trades_raw))
  67.  
  68. ids = [int(t.get("tradeId", 0)) for t in trades_raw if t.get("tradeId") is not None]
  69. if not ids:
  70. return []
  71.  
  72. max_id = max(ids)
  73.  
  74. # First call: set cursor, return no trades
  75. if self._last_private_trade_id is None:
  76. self._last_private_trade_id = max_id
  77. return []
  78.  
  79. new_trades: List[Dict[str, Any]] = []
  80.  
  81. for t in trades_raw:
  82. try:
  83. tid = int(t.get("tradeId"))
  84. except Exception:
  85. continue
  86. if tid <= self._last_private_trade_id:
  87. continue
  88.  
  89. try:
  90. qty = float(t.get("execQty", 0))
  91. amt = float(t.get("execAmt", 0))
  92. price = amt / qty if qty > 0 else 0.0
  93. except Exception:
  94. qty = 0.0
  95. price = 0.0
  96.  
  97. side_val = int(t.get("side", 0))
  98. side = "buy" if side_val == 1 else "sell"
  99.  
  100. ts = int(t.get("matchTime", 0)) # seconds
  101.  
  102. new_trades.append(
  103. {
  104. "price": price,
  105. "quantity": qty,
  106. "side": side,
  107. "timestamp": ts,
  108. }
  109. )
  110.  
  111. if new_trades:
  112. self._last_private_trade_id = max(max_id, self._last_private_trade_id)
  113.  
  114. return new_trades
Advertisement
Add Comment
Please, Sign In to add comment