
    ":h`                       d dl Zd dlmZmZmZmZ d dlZd dlm	Z	m
Z
mZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dl m!Z!  G d dejD                  jF                        Z#y)    N)
ArrayCacheArrayCacheBySymbolByIdArrayCacheBySymbolBySideArrayCacheByTimestamp)AnyBalancesIntOrder	OrderBookPositionStrStringsTickerTickersTrade)Client)List)ExchangeError)AuthenticationError)ArgumentsRequired)
BadRequest)RateLimitExceeded)ChecksumError)UnsubscribeError)Precisec            
           e Zd Zdef fdZi fdZi fdedefdZi fdedefdZ	di fde
defd	Zd
efdZdBdZdi fde
defdZd
efdZdBdZdddi fdedededee   fdZdi fdedefdZd
efdZdBdefdZdi fdededefdZi fdedefdZi fdedededefdZdi fdee   dedefdZd
efdZd
ededefdZ d  Z!d! Z"ddi fdedededee#   fd"Z$ddi fdee   dededee#   fd#Z%i fdedefd$Z&d
efd%Z'dBd&Z(dddi fde
dededee)   fd'Z*d
efd(Z+dBd)Z,dddi fde-dededee.   fd*Z/d
efd+Z0dBd,Z1d- Z2dddi fde-dededee#   fd.Z3d
efd/Z4i fde5fd0Z6d
efd1Z7i fd2Z8i fd3Z9i fd4Z:i fd5Z;i fd6Z<d
efd7Z=d
efd8Z>d
efd9Z?d
efd:Z@d
efd;ZAd
efd<ZBd
efd=ZCd
efd>ZDd
efd?ZEd
efd@ZFd
efdAZG xZHS )Cbitgetreturnc                    | j                  t        t        |          i ddddddddddddd	dd
ddddddddddddddddddddddddddddddddidddddd d!d"d#d$d%d&d'
d(did)did*d+| j                  idt
        t        t
        t        t        t        t        t        t        t        t
        t        t
        d,i d-id.      S )/NwsTcreateOrderWsFeditOrderWsfetchOpenOrdersWsfetchOrderWscancelOrderWscancelOrdersWscancelAllOrdersWswatchBalancewatchMyTrades
watchOHLCVwatchOHLCVForSymbolswatchOrderBookwatchOrderBookForSymbolswatchOrderswatchTickerwatchTickers)watchBidsAskswatchTradeswatchTradesForSymbolswatchPositionsapiz wss://ws.bitget.com/v2/ws/publicz!wss://ws.bitget.com/v2/ws/private)publicprivatez#wss://wspap.bitget.com/v2/ws/publicz$wss://wspap.bitget.com/v2/ws/private)r    demo  1m5m15m30m1H4H6H12H1D1W)
r:   r;   r<   r=   1h4h6h12h1d1wchecksumignoreDuplicates)tradesLimit
OHLCVLimit
timeframesr,   r2   ping)30001300023000330004300053000630007300113001230013300143001530016)exactbroad)hasurlsoptions	streaming
exceptions)deep_extendsuperr   describerO   r   r   r   )self	__class__s    I/var/www/html/turnos/venv/lib/python3.12/site-packages/ccxt/pro/bitget.pyrf   zbitget.describe   s   fd < >d u $U	
    !% $U    d ' !$ +D t  t!" #$ "&#)-"&+0 "D#F
 #H#I	  $"     # ' '0 		 !+!4!+!4!4!2!2!4!4!4!+!4!+  !}RA
 R R	    c                     d }|| j                  d |      \  }}n"|d   s|d   r| j                  ||      \  }}nd}d }| j                  |dd|      \  }}|}||gS )NswapfutureSPOTgetInstTypeinstType)handleProductTypeAndParamshandle_option_and_params)rg   marketparamsrp   
instypeAuxs        ri   get_inst_typezbitget.get_inst_typem   s    >#>>tVLHfVn&"2#>>vvNHfH
!::6=R\^fg
F&!!rj   symbolc                    K   | j                          d{    | j                  |      }|d   }d|z   }d}| j                  ||      \  }}|d|d   d}| j                  |||       d{   S 7 Z7 w)a0  
        watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

        https://www.bitget.com/api-doc/spot/websocket/public/Tickers-Channel
        https://www.bitget.com/api-doc/contract/websocket/public/Tickers-Channel

        :param str symbol: unified symbol of the market to watch the ticker for
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
        Nrw   ticker:tickeridrp   channelinstId)load_marketsrs   rv   watch_public)rg   rw   rt   rs   messageHashrp   argss          ri   watch_tickerzbitget.watch_tickerz   s      !!!V$!&(--ff=& Tl

 &&{D&AAA 	" Bs"   A5A1AA5,A3-A53A5c                 z   K   | j                          d{    | j                  |dd|       d{   S 7  7 w)a  
        unsubscribe from the ticker channel

        https://www.bitget.com/api-doc/spot/websocket/public/Tickers-Channel
        https://www.bitget.com/api-doc/contract/websocket/public/Tickers-Channel

        :param str symbol: unified symbol of the market to unwatch the ticker for
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns any: status of the unwatch request
        Nrz   r   un_watch_channelrg   rw   rt   s      ri   un_watch_tickerzbitget.un_watch_ticker   s=      !!!**68XvNNN 	"N   ;7;9;;Nsymbolsc                 "  K   | j                          d{    | j                  |dd      }| j                  |d         }d}| j                  ||      \  }}g }g }t	        dt        |            D ]F  }||   }| j                  |      }	|d|	d   d}
|j                  |
       |j                  d|z          H | j                  |||       d{   }| j                  ri }|||d   <   |S | j                  | j                  d|      S 7 7 ;w)	aA  
        watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list

        https://www.bitget.com/api-doc/spot/websocket/public/Tickers-Channel
        https://www.bitget.com/api-doc/contract/websocket/public/Tickers-Channel

        :param str[] symbols: unified symbol of the market to watch the tickers for
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
        NFr   rz   r{   r|   ry   rw   )r   market_symbolsrs   rv   rangelenappendwatch_public_multiple
newUpdatesfilter_by_arraytickersrg   r   rt   rs   rp   topicsmessageHashesirw   marketInnerr   r   results                ri   watch_tickerszbitget.watch_tickers   s+     !!!%%gtU;WQZ(--ff=&q#g,' 		5AQZF++f-K$#%d+D
 MM$  V!34		5 22=&&QQ??F(/F78$%M##DLL(GDD- 	"" R"   DDB:DD:DDclientc                     | j                  ||       | j                  |      }|d   }|| j                  |<   d|z   }|j                  ||       y )Nrw   ry   )handle_bid_askparse_ws_tickerr   resolverg   r   messagerz   rw   r   s         ri   handle_tickerzbitget.handle_ticker   sT    > 	FG,%%g.!%V&(v{+rj   c                 h   | j                  |di       }| j                  |dg       }| j                  |di       }| j                  |d      }| j                  |d      }|dk(  rdnd}| j                  |d	      }	| j                  |	|d |      }| j                  |d
      }
| j                  |d      }t	        j
                  |d      }| j                  i d|d   d|d| j                  |      d| j                  |d      d| j                  |d      d| j                  |d      d| j                  |d      d| j                  |d      d| j                  |d      dd d| j                  |d      d|
d |
d!d d"d d#|d$d | j                  |d%      | j                  |d&      |d'|      S )(Nargdatar   tsrp   rn   spotcontractr~   lastPr	change24h100rw   	timestampdatetimehighhigh24hlowlow24hbidbidPr	bidVolumebidSzaskaskPr	askVolumeaskSzvwapopenopen24hcloselastpreviousClosechange
percentageaverage
baseVolumequoteVolume)r   r   info)
safe_valuesafe_integersafe_stringsafe_marketr   
string_mulsafe_tickeriso8601)rg   r   rs   r   r   rz   r   rp   
marketTypemarketIdr   changeDecimalr   s                ri   r   zbitget.parse_ws_ticker   sC   N oogub1w3q"-%%fd3	##C4 (F 2V
##FH5!!(FD*E  2((=##M59 !
fX&!
!
 Y/!
 D$$VY7	!

 4##FH5!
 4##FG4!
 ))&':!
 4##FG4!
 ))&':!
 D!
 D$$VY7!
 U!
 E!
 T!
 d!
  &!!
" t#!
$ **6<@++FMB)!
* + 	rj   c                 "  K   | j                          d{    | j                  |dd      }| j                  |d         }d}| j                  ||      \  }}g }g }t	        dt        |            D ]F  }||   }| j                  |      }	|d|	d   d}
|j                  |
       |j                  d|z          H | j                  |||       d{   }| j                  ri }|||d   <   |S | j                  | j                  d|      S 7 7 ;w)	a  

        https://www.bitget.com/api-doc/spot/websocket/public/Tickers-Channel
        https://www.bitget.com/api-doc/contract/websocket/public/Tickers-Channel

        watches best bid & ask for symbols
        :param str[] symbols: unified symbol of the market to fetch the ticker for
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
        NFr   rz   r{   r|   bidask:rw   )r   r   rs   rv   r   r   r   r   r   r   bidsasksr   s                ri   watch_bids_askszbitget.watch_bids_asksR  s+     !!!%%gtU;WQZ(--ff=&q#g,' 		5AQZF++f-K$#%d+D
 MM$  V!34		5 22=&&QQ??F(/F78$%M##DMM8WEE- 	"" Rr   c                 |    | j                  |      }|d   }|| j                  |<   d|z   }|j                  ||       y )Nrw   r   )parse_ws_bid_askr   r   r   s         ri   r   zbitget.handle_bid_asku  sB    &&w/! &f&(v{+rj   c                    | j                  |di       }| j                  |dg       }| j                  |di       }| j                  |d      }| j                  |d      }|dk(  rdnd}| j                  |d	      }	| j                  |	|d |      }| j	                  |d
   || j                  |      | j                  |d      | j                  |d      | j                  |d      | j                  |d      |d|      S )Nr   r   r   r   rp   rn   r   r   r~   rw   r   r   r   r   )rw   r   r   r   r   r   r   r   )r   r   r   r   r   r   )
rg   r   rs   r   r   rz   r   rp   r   r   s
             ri   r   zbitget.parse_ws_bid_ask|  s	   oogub1w3q"-%%fd3	##C4 (F 2V
##FH5!!(FD*EX&"Y/##FG4))&':##FG4))&':	!
 	 		rj   r:   sincelimitc                   K   | j                          d{    | j                  |      }|d   }| j                  | j                  d      }| j	                  ||      }d|z   dz   |z   }	d}
| j                  ||      \  }
}|
d|z   |d   d}| j                  |	||       d{   }| j                  r|j                  ||      }| j                  |||d	d
      S 7 7 9w)a  
        watches historical candlestick data containing the open, high, low, close price, and the volume of a market

        https://www.bitget.com/api-doc/spot/websocket/public/Candlesticks-Channel
        https://www.bitget.com/api-doc/contract/websocket/public/Candlesticks-Channel

        :param str symbol: unified symbol of the market to fetch OHLCV data for
        :param str timeframe: the length of time each candle represents
        :param int [since]: timestamp in ms of the earliest candle to fetch
        :param int [limit]: the maximum amount of candles to fetch
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns int[][]: A list of candles ordered, open, high, low, close, volume
        Nrw   rN   candles::candler{   r|   r   T)
r   rs   r   ra   r   rv   r   r   getLimitfilter_by_since_limit)rg   rw   	timeframer   r   rt   rs   rN   intervalr   rp   r   ohlcvs                ri   watch_ohlcvzbitget.watch_ohlcv  s      !!!V$!__T\\<@
##J	: 9,s2V;--ff=& (*Tl

 ''T6BB??NN651E))%q$GG! 	" Cs"   CCBC#C$8CCc                    K   | j                          d{    | j                  | j                  d      }| j                  ||      }d|z   }| j	                  ||d|z   |       d{   S 7 V7 w)a^  
        unsubscribe from the ohlcv channel

        https://www.bitget.com/api-doc/spot/websocket/public/Candlesticks-Channel
        https://www.bitget.com/api-doc/contract/websocket/public/Candlesticks-Channel

        :param str symbol: unified symbol of the market to unwatch the ohlcv for
        :param str [timeframe]: the period for the ratio, default is 1 minute
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
        NrN   r   r   )r   	safe_dictra   r   r   )rg   rw   r   rt   rN   r   r}   s          ri   un_watch_ohlcvzbitget.un_watch_ohlcv  sv      !!!^^DLL,?
##J	:X%**67J<RTZ[[[	 	" \s"   A1A-AA1(A/)A1/A1c                 D   | j                  |di       }| j                  |d      }|dk(  rdnd}| j                  |d      }| j                  |d d |      }|d   }| j                  | j                  |i       | j                  |<   | j                  |d      }	|	j	                  d	d
      }
| j                  | j
                  d      }| j                  |
|      }| j                  | j                  |   |      }|:| j                  | j
                  dd      }t        |      }|| j                  |   |<   | j                  |dg       }t        dt        |            D ](  }| j                  ||   |      }|j                  |       * d|z   dz   |z   }|j                  ||       y )Nr   rp   rn   r   r   r~   rw   r}   r    rN   rM   r9   r   r   r   r   )r   r   r   ohlcvsreplacera   find_timeframer   r   r   r   parse_ws_ohlcvr   r   )rg   r   r   r   rp   r   r   rs   rw   r}   r   rN   r   storedr   r   r   parsedr   s                      ri   handle_ohlcvzbitget.handle_ohlcv  s   D oogub1##C4 (F 2V
##C2!!(D$
C!"oodkk62FF""3	2??8R0__T\\<@
''*=	V!4i@>%%dllL$GE*51F-3DKK	*w3q#d)$ 	"A((a&9FMM&!	" !9,s2V;v{+rj   c           	          |d   rdnd}| j                  |d      | j                  |d      | j                  |d      | j                  |d      | j                  |d      | j                  ||      gS )	Ninverse      r               )r   safe_number)rg   r   rs   volumeIndexs       ri   r   zbitget.parse_ws_ohlcv  s|     #9-aAeQ'UA&UA&UA&UA&UK0
 	
rj   c                 F   K   | j                  |g||       d{   S 7 w)a  
        watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

        https://www.bitget.com/api-doc/spot/websocket/public/Depth-Channel
        https://www.bitget.com/api-doc/contract/websocket/public/Order-Book-Channel

        :param str symbol: unified symbol of the market to fetch the order book for
        :param int [limit]: the maximum amount of order book entries to return
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
        N)watch_order_book_for_symbols)rg   rw   r   rt   s       ri   watch_order_bookzbitget.watch_order_book  s%      66xOOOOs   !!c                    K   | j                          d{    d}| j                  |d      }|dk(  s
|dk(  s|dk(  r | j                  |d      }|t        |      z  }| j	                  ||d|       d{   S 7 c7 w)aR  
        unsubscribe from the orderbook channel

        https://www.bitget.com/api-doc/spot/websocket/public/Depth-Channel
        https://www.bitget.com/api-doc/contract/websocket/public/Order-Book-Channel

        :param str symbol: unified symbol of the market to fetch the order book for
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param int [params.limit]: orderbook limit, default is None
        :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
        Nbooksr   r   r      	orderbook)r   r   omitstrr   )rg   rw   rt   r}   r   s        ri   un_watch_order_bookzbitget.un_watch_order_book   s      !!!!!&'2QJEQJERKYYvw/Fs5z!G**67KPPP 	" Qs"   A>A:AA>5A<6A><A>r}   messageHashTopicc                    K   | j                          d {    | j                  |      }d|z   dz   |d   z   }d }| j                  ||      \  }}|||d   d}| j                  |||       d {   S 7 ^7 w)Nzunsubscribe:r   rw   r{   r|   )r   rs   rv   un_watch_public)	rg   rw   r}   r  rt   rs   r   rp   r   s	            ri   r   zbitget.un_watch_channel4  s     !!!V$$'77#=x@PP--ff=& Tl

 ))+tVDDD 	" Es"   A9A5AA90A71A97A9c                   K   | j                          d{    | j                  |      }d}d}|dk(  s
|dk(  s|dk(  r|t        |      z  }d}g }g }t        dt	        |            D ]]  }||   }	| j                  |	      }
d}| j                  |
|      \  }}|||
d	   d
}|j                  |       |j                  d|	z          _ | j                  |||       d{   }|r|j                         S |S 7 7 w)aw  
        watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

        https://www.bitget.com/api-doc/spot/websocket/public/Depth-Channel
        https://www.bitget.com/api-doc/contract/websocket/public/Order-Book-Channel

        :param str[] symbols: unified array of symbols
        :param int [limit]: the maximum amount of order book entries to return
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
        Nr   Tr   r   r   Fr   r{   r|   
orderbook:)
r   r   r  r   r   rs   rv   r   r   r   )rg   r   r   rt   r}   incrementalFeedr   r   r   rw   rs   rp   r   r   s                 ri   r   z#bitget.watch_order_book_for_symbolsA  s!     !!!%%g.QJEQJERKs5z!G#Oq#g,' 	8AQZF[[(FH#11&&AHf$" ,D
 MM$  !67	8 44]FFSS	??$$3 	"* Ts"   C;C7CC;C9C;9C;c                    | j                  |d      }| j                  |d      }| j                  |d      }|dk(  rdnd}| j                  |d      }| j                  |d d |      }|d   }	d	|	z   }
| j                  |d
      }| j                  |d      }| j                  |d      }|dk(  }|r|	| j                  vr%| j                  i       }|	|d<   || j                  |	<   | j                  |	   }| j                  |dg       }| j                  |dg       }| j                  |d   |       | j                  |d   |       ||d<   | j                  |      |d<   | j                  ddd      }| j                  |d      dk(  }|sF|rC|d   }|d   }t        |      }t        |      }g }t        dd      D ]u  }||k  r4|j                  ||   d   d          |j                  ||   d   d          ||k  sB|j                  ||   d   d          |j                  ||   d   d          w dj                  |      }| j                  |d      }| j                  |d      }||k7  rc| j                  | j                  ||	|
       y | j!                  i       }| j#                  ||	|      }|j%                  |       || j                  |	<   |j'                  | j                  |	   |
       y )Nr   r}   rp   rn   r   r   r~   rw   r  r   r   r   r   asksbidsr   r   r,   rJ   Tactionsnapshot   r   r   r   )r   r   r   r   
orderbookscounted_order_bookhandle_deltasr   handle_optionr   r   r   joincrc32spawnhandle_check_sum_error
order_bookparse_order_bookresetr   ) rg   r   r   r   r}   rp   r   r   rs   rw   r   r   rawOrderBookr   incrementalBookobstoredOrderBookr  r  rJ   
isSnapshot
storedAsks
storedBids
asksLength
bidsLengthpayloadArrayr   payloadcalculatedChecksumresponseChecksumr   parsedOrderbooks                                    ri   handle_order_bookzbitget.handle_order_bookh  s   > oogu-""3	2##C4 (F 2V
##C2!!(D$
C!"V+w/tQ/%%lD9	!W,doo-,,R0%8*,'"oof5O??<<D??<<Dv6=v6=+4OK(*.,,y*AOJ'))*:JMH))'8<
JJ(,V4
,V4
 _
 _
!q" AA:~$++JqM!,<Q,?@$++JqM!,<Q,?@:~$++JqM!,<Q,?@$++JqM!,<Q,?@A ((<0%)ZZ%>"#'#4#4\:#N %)99
 JJt::FFKX+I"33L&)TOOOO,&/DOOF#tv.<rj   r   c                    K   | j                  |       d {    t        | j                  dz   | j                  |      z         }|j	                  ||       y 7 Aw)N )r  r   r{   orderbook_checksum_messagereject)rg   r   rw   r   errors        ri   r  zbitget.handle_check_sum_error  sO     &&v...dggmd.M.Mf.UUVe[) 	/s   AAAAc                 n    | j                  |dd      }|j                  |       |j                  |       y )Nr   r   )parse_bid_askr   
storeArray)rg   booksidedeltabidAsks       ri   handle_deltazbitget.handle_delta  s2    ##E1a0 	eF#rj   c                 b    t        dt        |            D ]  }| j                  |||           y )Nr   )r   r   r5  )rg   r2  deltasr   s       ri   r  zbitget.handle_deltas  s0    q#f+& 	3Ahq	2	3rj   c                 H   K   | j                  |g|||       d{   S 7 w)a~  
        get the list of most recent trades for a particular symbol

        https://www.bitget.com/api-doc/spot/websocket/public/Trades-Channel
        https://www.bitget.com/api-doc/contract/websocket/public/New-Trades-Channel

        :param str symbol: unified symbol of the market to fetch trades for
        :param int [since]: timestamp in ms of the earliest trade to fetch
        :param int [limit]: the maximum amount of trades to fetch
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
        N)watch_trades_for_symbols)rg   rw   r   r   rt   s        ri   watch_tradeszbitget.watch_trades  s'      22F8UE6RRRRs   " "c                    K   t        |      }|dk(  rt        | j                  dz         | j                          d{    | j	                  |      }g }g }t        dt        |            D ]]  }||   }	| j                  |	      }
d}| j                  |
|      \  }}|d|
d   d}|j                  |       |j                  d|	z          _ | j                  |||       d{   }| j                  r6| j                  |d      }| j                  |d      }|j                  ||      }| j                  |||d	d
      }| j                  ddd
      r%| j!                  |      }| j#                  |d	      }|S |S 7 ;7 w)a  
        get the list of most recent trades for a particular symbol

        https://www.bitget.com/api-doc/spot/websocket/public/Trades-Channel
        https://www.bitget.com/api-doc/contract/websocket/public/New-Trades-Channel

        :param str[] symbols: unified symbol of the market to fetch trades for
        :param int [since]: timestamp in ms of the earliest trade to fetch
        :param int [limit]: the maximum amount of trades to fetch
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
        r   z> watchTradesForSymbols() requires a non-empty array of symbolsNtrader{   r|   trade:rw   r   Tr2   rK   )r   r   r{   r   r   r   rs   rv   r   r   r   r   r   r   r   r  !remove_repeated_trades_from_arraysort_by)rg   r   r   r   rt   symbolsLengthr   r   r   rw   rs   rp   r   tradesfirsttradeSymbolr   filtereds                     ri   r9  zbitget.watch_trades_for_symbols  s     GA#DGG.n$noo!!!%%g.q#g,' 	4AQZF[[(FH#11&&AHf$" ,D
 MM$  F!23	4 11-PP??OOFA.E**5(;KOOK7E++FE5+tTm-?F==fEH||Hk:HO5 	"  Qs#   <E>E9B$E>#E<$BE><E>c                 z   K   | j                          d{    | j                  |dd|       d{   S 7  7 w)a  
        unsubscribe from the trades channel

        https://www.bitget.com/api-doc/spot/websocket/public/Trades-Channel
        https://www.bitget.com/api-doc/contract/websocket/public/New-Trades-Channel

        :param str symbol: unified symbol of the market to unwatch the trades for
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns any: status of the unwatch request
        Nr<  r   r   s      ri   un_watch_tradeszbitget.un_watch_trades  s=      !!!**67GVLLL 	"Lr   c                 L   | j                  |di       }| j                  |d      }|dk(  rdnd}| j                  |d      }| j                  |d d |      }|d   }| j                  | j                  |      }	|	7| j	                  | j
                  dd	      }
t        |
      }	|	| j                  |<   | j                  |d
g       }t        |      }t        d|      D ]2  }||z
  dz
  }||   }| j                  ||      }|	j                  |       4 d|z   }|j                  |	|       y )Nr   rp   rn   r   r   r~   rw   rL   r9   r   r   r   r=  )r   r   r   rA  r   ra   r   	safe_listr   r   parse_ws_trader   r   )rg   r   r   r   rp   r   r   rs   rw   r   r   r   lengthr   indexrawTrader   r   s                     ri   handle_tradeszbitget.handle_trades  s0   " oogub1##C4 (F 2V
##C2!!(D$
C!f5>%%dllM4HE&F"(DKK~~gvr2Tq&! 	"AQJNEE{H((6:FMM&!		"
 'v{+rj   c                    | j                  |dd      }| j                  |d      }|dnd}|| j                  |d d |      }| j                  |g d      }| j	                  |dg       }| j                  |d      }d }	|K| j                  |d	      }
| j                  |
      }t        j                  | j                  |d
            |d}	| j                  || j                  |d      | j                  |d      || j                  |      |d   | j                  |d      | j                  |d      | j                  |d      | j                  |dd      | j                  |dd      | j                  |dd      |	d|      S )Nrw   r~   posModer   r   )uTimecTimer   	feeDetailr   feeCointotalFeecostcurrencytradeIdorderId	orderTypeside
tradeScopepriceAvgpricesizer   amountr   )r   r{   orderr   r   rw   typer[  takerOrMakerr^  r`  rV  fee)safe_string_2r   r   safe_integer_nrH  r   safe_currency_coder   
string_abs
safe_trader   )rg   r<  rs   r~   rO  defaultTyper   rR  rB  rd  feeCurrencyIdfeeCurrencyCodes               ri   rI  zbitget.parse_ws_tradeA  s   t ##E8X>""5)4%,%8jv>%%fdD+FF''/GH	NN5+r:	y!, ,,UI>M"55mDO**4+;+;E:+NO+C ""5)4%%eY7"Y/X&$$UK8$$UF3 ,,ULA''z7C((E&&uhF 
  	rj   c                 |  K   | j                          d{    d}d}d}d}| j                  |      }| j                  |      s&| j                  |      }| j	                  ||      \  }}|dz   |z   }|ddd}	| j                  |||	|       d{   }
| j                  r|
S | j                  |
|||d      S 7 7 )w)	a  
        watch all open positions

        https://www.bitget.com/api-doc/contract/websocket/private/Positions-Channel

        :param str[]|None symbols: list of unified market symbols
        :param int [since]: the earliest time in ms to fetch positions for
        :param int [limit]: the maximum number of positions to retrieve
        :param dict params: extra parameters specific to the exchange API endpoint
        :param str [params.instType]: one of 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES', default is 'USDT-FUTURES'
        :returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
        Nr   	positionsUSDT-FUTURES
:positionsdefaultr|   T)r   r   is_emptyget_market_from_symbolsrv   watch_privater   filter_by_symbols_since_limit)rg   r   r   r   rt   rs   r   subscriptionHashrp   r   newPositionss              ri   watch_positionszbitget.watch_positions  s      !!!&!%%g.}}W%11':F#11&&AHf-; "

 "//=MtU[\\??11,PUW[\\% 	" ]s"   B<B8A9B<B:(B<:B<c                 x   | j                  |di       }| j                  |dd      }| j                  i | _        | j                  |d      }|| j                  vs|dk(  rt               | j                  |<   | j                  |   }| j                  |dg       }g }t	        dt        |            D ]a  }	||	   }
| j                  |
d      }| j                  |d d d	      }| j                  |
|      }|j                  |       |j                  |       c | j                  ||d
z         }t	        dt        |            D ]f  }	||	   }|j                  d      }|d   }|j                  d      }| j                  |d|d      }| j                  |      rU|j                  ||       h |j                  ||dz          y )Nr   rp   r   r  r  r   r   r~   r   z:positions::z::r   ,rw   Frp  )r   r   rn  r   r   r   r   parse_ws_positionr   find_message_hashessplitr   rr  r   )rg   r   r   r   rp   r  cacherawPositionsrw  r   rawPositionr   rs   positionr   r   partssymbolsStringr   rn  s                       ri   handle_positionszbitget.handle_positions  s   L oogub1##CR8>>!DN!!'84DNN**0D'?'ADNN8$x(w;q#l+, 	#A&q/K''X>H%%hdJGF--k6BH)LL"	# 00N9RSq#m,- 	7A'*K%%d+E!!HM#))#.G,,\8WeTI==+y+6	7 	|X%<=rj   c                 L   | j                  |d      }| j                  |d      }| j                  |ddd      }| j                  |d      }|dk(  rdnd	}| j                  |d
d      }| j                  |d      }	t        j                  |	d      }
d }||d   }| j                  i d|d| j                  |d      d| j                  ||d d      dd d|d| j                  |d      d| j                  |d      d| j                  |d      d| j                  |
      d| j                  |d      d|dd d| j                  |d      d |d!|d"| j                  |      d#d | j                  |d$      d d d | j                  |d%      | j                  |d&      d'      S )(Nr~   
marginModecrossisolated)crossedr  rO  
hedge_modeTFrP  rQ  unrealizedPLRr   contractSizer   r{   posIdrw   r   notionalliquidationPrice
entryPriceopenPriceAvgunrealizedPnlunrealizedPLr   	contractstotal	markPricer[  holdSidehedgedr   r   maintenanceMarginkeepMarginRateleverage
marginRate)maintenanceMarginPercentage
collateralinitialMargininitialMarginPercentager  marginRatio)
r   get_supported_mappingsafe_integer_2r   r   safe_positionsafe_symbolr   parse_numberr   )rg   r  rs   r   marginModeIdr  hedgedIdr  r   percentageDecimalr   r  s               ri   r{  zbitget.parse_ws_position  sK   4 ##Hh7'',?//"?
 
 ##Hi8"l2'''7C	 ,,XG''(95A
!.1L!! #
H#
$""8W5#
 d&&xzJ#
 	#

 *#
  0 0;M N#
 $**8^D#
 T--hG#
 $++J7#
 ))(G<#
 L#
 #
 D$$Xz:#
 f#
 #
  Y/!#
"  ##
$ ,0+;+;HFV+W!'+((:>++HlC/#
  	rj   c                   K   | j                          d{    d}d}d}| j                  |      \  }}|rdnd}d}	|#| j                  |      }|d   }|d   }|dz   |z   }| j                  |d      }
d}| j	                  d	||      \  }}d}| j                  d	||d
      \  }}|dk(  s|dk(  r|d}|
|dk7  r|	|dz   |z   }n |
dk(  r|dz   }n|
dk(  r|dz   }n
|
dk(  r|dz   }d}||dk(  rd}n| j                  ||      \  }}|dk(  r
||	dz   |z   }	|r|	dz   }	|dk(  s|dk(  r|nd}|rdnd}d}| j                  d	|      \  }}|d}|dz   |z   }|dk(  rd}nd}|	dz   |z   }	|||d}| j                  ||	||       d{   }| j                  r|j                  ||      }| j                  ||||d      S 7 7 :w)a  
        watches information on multiple orders made by the user

        https://www.bitget.com/api-doc/spot/websocket/private/Order-Channel
        https://www.bitget.com/api-doc/contract/websocket/private/Order-Channel
        https://www.bitget.com/api-doc/contract/websocket/private/Plan-Order-Channel
        https://www.bitget.com/api-doc/margin/cross/websocket/private/Cross-Orders
        https://www.bitget.com/api-doc/margin/isolated/websocket/private/Isolate-Orders

        :param str symbol: unified market symbol of the market orders were made in
        :param int [since]: the earliest time in ms to fetch orders for
        :param int [limit]: the maximum number of order structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param boolean [params.trigger]: *contract only* set to True for watching trigger orders
        :param str [params.marginMode]: 'isolated' or 'cross' for watching spot margin orders]
        :param str [params.type]: 'spot', 'swap'
        :param str [params.subType]: 'linear', 'inverse'
        :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
        NtriggerOrderra  zorder:tradesrw   r{   r   productTyper.   linearr   marginrq  ro  z:linearCOIN-FUTURESz:inverseUSDC-FUTURESz:usdcfuturesrn   z:stoporders-algoordersMARGINr  orders-isolatedorders-crossedr|   T)r   is_trigger_orderrs   r   handle_market_type_and_paramshandle_sub_type_and_paramsrv   handle_margin_mode_and_paramsrt  r   r   filter_by_symbol_since_limit)rg   rw   r   r   rt   rs   r   	isTriggerr   rv  r  rb  subTyperp   r~   r}   r  r   r  s                      ri   watch_orderszbitget.watch_orders@  su    ( !!!	 11&9	6)2n)[[(FH%Fd|H%+f4K&&v}=99-QWXf99-QWYabFNdh.V^ Hdfn6>%+g5KN*%	1KN*%
2KN*%6K>dfnH#11&&AHf6>v1/#5>/'9"fn0@y#,-(
!??vV
F!H%+j8KZ'+*+c1H< 

 ))+7GvVV??OOFE2E00tTTq 	"j Ws"   F?F:E+F?F=8F?=F?c                 B   | j                  |di       }| j                  |d      }| j                  |d      }| j                  |d      }d }|dk(  rd}n
|dk(  rd}nd}|d	k(  }|d
k(  }	|dk(  }
| j                  |dg       }| j                  =| j	                  | j
                  dd      }t        |      | _        t        |      | _        |dk(  xs |dk(  }|r| j                  n| j                  }|rdnd}i }t        dt        |            D ][  }||   }| j                  |d|      }| j                  |d d |      }| j                  ||      }|j                  |       |d   }d||<   ] t        |j                               }t        dt        |            D ]6  }||   }|dz   |z   }|dk(  r|dz   }n
|dk(  r|dz   }|j                  ||       8 |j                  ||       |r|j                  |d       |	r|j                  |d       |
r|j                  |d       y y )Nr   r}   rp   r~   rn   r   r  r   ro  r  r  r   ordersLimitr9   r  
ordersAlgor  ra  r   rw   Tr   r  z:crossr  z	:isolatedzorder:linearzorder:inversezorder:usdcfutures)r   r   r   r  r   ra   r   triggerOrdersr   r   r   parse_ws_orderr   listkeysr   )rg   r   r   r   r}   rp   	argInstIdr   isLinearSwapisInverseSwapisUSDCFuturesr   r   r  r   r   marketSymbolsr   ra  r   rs   r   rw   r  innerMessageHashs                            ri   handle_orderzbitget.handle_order  sX   F nnWeR0""3	2##C4$$S(3	
vJ!J#J N2!^3!^3w3;;%%dllM4HE07DK!7!>D-K7l3J	'0##dkk(1nw q#d)$ 	)AGE''xCH%%hdJGF((7FMM&!H%F$(M&!	) M&&()q#d)$ 	5A!WF*S069**#3h#> --#3k#A NN6#34	5 	v{+NN6>2NN6?3NN6#67 rj   c                 b   d|v}d|v }| j                  |d      }| j                  ||      }| j                  |d      }|d   }| j                  |d      }| j                  |dg       }	| j                  |	d      }
| j                  |
d	      }d }|H| j                  |
d
      }| j	                  t        j                  |            | j                  |      d}| j                  |d      }|d u}d }|s| j                  |d      }n|r|r| j                  |d      }| j                  | j                  |dd            }| j                  |d      }| j                  |d      }| j                  | j                  |d            }| j                  | j                  |d            }|dk(  }|dk(  }d }d }d }d }| j                  |d      }|rq|r7| j                  |d      }| j                  |d      }| j                  |d      }nn| j                  |d      }||}n|}|r
|r|}|}nL|}nI| j                  |d      }n6| j                  |d      }| j                  |d      }| j                  |d      }t        j                  ||      }| j                  i d|d|d| j                  |d      d| j                  |d       d!|d"| j                  |      d#| j                  |d$      d%|d&| j                  |d'      d(d d|d|d|d)|d*|d+|d,||| j                  |      |d d-|      S ).NrO  loanTyper~   rQ  rw   statusrR  r   rd  rS  rU  triggerPricer^  executePricer]  	fillPricer[  rZ  accBaseVolumenewSizers   buybaseSizer   fillTotalAmountr_  fillNotionalUsdr   r{   rY  clientOrderId	clientOidr   r   lastTradeTimestamprP  rb  timeInForceforcepostOnlyr`  rV  r   filled)	remainingr  rd  rA  )r   r   r   r   r  r   rh  rg  r   	omit_zerore  
string_sub
safe_orderr   safe_string_upperparse_ws_order_status)rg   ra  rs   isSpotisMarginr   r   rw   	rawStatusorderFeerd  	feeAmount	feeObjectfeeCurrencyr  isTriggerOrderr^  avgPricer[  rb  r  newSizeValueisMarketOrderisBuytotalAmountfilledAmountrV  r  totalFilledpartialFillAmounts                                 ri   r  zbitget.parse_ws_order  s   l  5(%'##E84!!(F3%%eW5	!$$UH5	??5+r:ooh*$$S%0		 **3	:K))'*<*<Y*GH 33K@I ''~>&d2$$UG4E$$UN;E>>$"4"4UJ"TUv.{3t'7'7'OP~~d&6&6ui&HI)	&&uo>"..ujA"..ulC''/@A$($4$4UL$I!$0#4L#.L &3+&2 #'"2"25)"DK  ++E<@L**5&9K##E+<=D&&{K@	  
E 
f 
 $""5)4 
 T--e[A	 

  
 Y/ 
 !$"3"3E7"C 
 D 
 411%A 
  
 D 
 U 
 L 
 k 
 D 
  x! 
" l# 
$ #00;+ 
, - 	rj   c                 8    dddddd}| j                  |||      S )Nr   closedcanceled)livepartially_filledr  	cancellednot_trigger)r   )rg   r  statusess      ri   r  zbitget.parse_ws_order_status  s/     &#!
 &&99rj   c                   K   | j                          d{    d}d}|| j                  |      }|d   }|dz   |z   }d}| j                  d||      \  }}d}||dk(  rd}n| j                  ||      \  }}d|z   }	|d	d
d}
| j	                  ||	|
|       d{   }| j
                  r|j                  ||      }| j                  ||||d      S 7 7 9w)a  
        watches trades made by the user

        https://www.bitget.com/api-doc/contract/websocket/private/Order-Channel

        :param str symbol: unified market symbol
        :param int [since]: the earliest time in ms to fetch trades for
        :param int [limit]: the maximum number of trades structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
        NmyTradesrw   r   r)   r   rn   zfill:fillrq  r|   T)r   rs   r  rv   rt  r   r   r  )rg   rw   r   r   rt   rs   r   rb  rp   rv  r   rA  s               ri   watch_my_tradeszbitget.watch_my_trades  s     !!! [[(FH%F%+f4K99/6SYZf>dfnH#11&&AHf"X- 

 ))+7GvVV??OOFE2E00tTT/ 	"( Ws"   CCBCC8CCc                    | j                   -| j                  | j                  dd      }t        |      | _         | j                   }| j	                  |dg       }t        |      }d}t        d|      D ]E  }||   }	| j                  |	      }
|j                  |
       |
d   }d|z   }|j                  ||       G |j                  ||       y )NrL   r9   r   r  r   rw   z	myTrades:)
r  r   ra   r   rH  r   r   rI  r   r   )rg   r   r   r   r   r   rJ  r   r   r<  r   rw   symbolSpecificMessageHashs                ri   handle_my_tradeszbitget.handle_my_trades  s    P == %%dllM4HE&u-DM~~gvr2T q&! 	>AGE((/FMM&!H%F(3f(<%NN6#<=	> 	v{+rj   c                 H  K   d}| j                  dd|      \  }}d}| j                  d|      \  }}d}d}|dk(  s|dk(  rd}n|d}|dk(  rd	}nd
}nd}| j                  |dd|      \  }}||dd}d|j                         z   }| j	                  ||||       d{   S 7 w)a  
        watch balance and get the amount of funds available for trading or funds locked in orders

        https://www.bitget.com/api-doc/spot/websocket/private/Account-Channel
        https://www.bitget.com/api-doc/contract/websocket/private/Account-Channel
        https://www.bitget.com/api-doc/margin/cross/websocket/private/Margin-Cross-Account-Assets
        https://www.bitget.com/api-doc/margin/isolated/websocket/private/Margin-isolated-account-assets

        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param str [params.type]: spot or contract if not provided self.options['defaultType'] is used
        :param str [params.instType]: one of 'SPOT', 'MARGIN', 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
        :param str [params.marginMode]: 'isolated' or 'cross' for watching spot margin balances
        :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
        Nr(   accountrl   rm   ro  r  r  account-isolatedaccount-crossedrn   rp   rq  )rp   r}   coinbalance:)r  r  rr   lowerrt  )rg   rt   rb  r  rp   r}   r   r   s           ri   watch_balancezbitget.watch_balance6  s      99.$PVWf
!??PVW
FFN 0%H#HZ',+H88Q[]ef& 

 !8>>#33''[$OOOOs   BB"B B"c                    | j                  |dg       }t        dt        |            D ]  }||   }| j                  |dd      }| j	                  |      }|| j
                  v r| j
                  |   n| j                         }| j                  |d      }	|	+| j                  |d      }
t        j                  |	|
      |d<   d|v rdnd	}| j                  ||      |d
<   | j                  |d      |d<   | j                  |d      |d<   || j
                  |<    | j                  | j
                        | _        | j                  |d      }| j                  |d      }d|z   }|j                  | j
                  |       y )Nr   r   r  
marginCoinborrowinterestdebtmaxTransferOut	availablefreeequityr  frozenusedr   rp   r	  )r   r   r   re  rg  balancer  r   r   
string_addsafe_balancesafe_string_lowerr   )rg   r   r   r   r   
rawBalance
currencyIdcoder  r  r  	freeQueryr   rp   r   s                  ri   handle_balancezbitget.handle_balance^  sv   v w3q#d)$ 	)AaJ++JMJ**:6D-1T\\-Adll4(G%%j(;F!++J
C")"4"4VX"F-=-K(R]I"..z9EGFO#//
HEGG"..z8DGFO!(DLL	) ((6oogu-))#z: 8+t||[1rj   c                 L  K   | j                   d   d   d   }| j                  | j                  ddd      }|r6| j                  |d      }|dk7  r|d	k7  r|d
k7  r| j                   d   d   d   }d|gd}| j	                  ||      }| j                  ||||       d {   S 7 w)Nr5   r    r6   sandboxModesandboxFrp   SCOIN-FUTURESSUSDT-FUTURESSUSDC-FUTURESr8   	subscribeopr   r`   safe_bool_2ra   r   extendwatch	rg   r   r   rt   urlr!  rp   requestr   s	            ri   r   zbitget.watch_public  s     iit$X.&&t||]IuU''j9HO+(o2MT\`oToii&v.x8F
 ++gv.ZZ[';GGGG   BB$B"B$c                 L  K   | j                   d   d   d   }| j                  | j                  ddd      }|r6| j                  |d      }|dk7  r|d	k7  r|d
k7  r| j                   d   d   d   }d|gd}| j	                  ||      }| j                  ||||       d {   S 7 w)Nr5   r    r6   r!  r"  Frp   r#  r$  r%  r8   unsubscriber'  r)  r-  s	            ri   r  zbitget.un_watch_public  s     iit$X.&&t||]IuU''j9HO+(o2MT\`oToii&v.x8F
 ++gv.ZZ[';GGGGr0  c                 p  K   | j                   d   d   d   }| j                  | j                  ddd      }|rI| j                  |di       }| j	                  |d      }|d	k7  r|d
k7  r|dk7  r| j                   d   d   d   }d|d}| j                  ||      }	| j                  |||	|       d {   S 7 w)Nr5   r    r6   r!  r"  Fr   rp   r#  r$  r%  r8   r&  r'  )r`   r*  ra   r   r   r+  watch_multiple)
rg   r   	argsArrayrt   r.  r!  argsArrayFirstrp   r/  r   s
             ri   r   zbitget.watch_public_multiple  s     iit$X.&&t||]IuU!^^Iq"=N''
CHO+(o2MT\`oToii&v.x8
 ++gv.((mWmTTTTs   B-B6/B40B6c                 N  K   | j                          | j                  |d      }| j                  |      }d}|j                  |      }| j	                  |j
                  |      }|t        | j                               }|dz   dz   }| j                  | j                  |      | j                  | j                        t        j                  d      }	d}
|
| j                  | j                  ||	dgd}| j                  ||      }| j!                  ||||       | d {   S 7 w)	Nr.  authenticatedGETz/user/verifybase64login)apiKey
passphraser   signr'  )check_required_credentialsr   r   rm   r   subscriptionsr  secondshmacencodesecrethashlibsha256r<  passwordr+  r,  )rg   rt   r.  r   r   rm   r8  r   auth	signature	operationr/  r   s                ri   authenticatezbitget.authenticate  s    '')vu-S!%{+(<(<kJ DLLN+Iu$~5D		$++d"3T[[5Mw~~_ghII #'++&*mm%. )	
G kk'62GJJsK+>||s   DD%D#D%c                   K   | j                   d   d   d   }| j                  | j                  ddd      }|r6| j                  |d      }|dk7  r|d	k7  r|d
k7  r| j                   d   d   d   }| j	                  d|i       d {    d|gd}| j                  ||      }	| j                  |||	|       d {   S 7 87 w)Nr5   r    r7   r!  r"  Frp   r#  r$  r%  r8   r.  r&  r'  )r`   r*  ra   r   rK  r+  r,  )
rg   r   rv  r   rt   r.  r!  rp   r/  r   s
             ri   rt  zbitget.watch_private  s     iit$Y/&&t||]IuU''j9HO+(o2MT\`oToii&v.y9---F
 ++gv.ZZ[';KLLL 	. Ms$   BCB=3C8B?9C?Cc                 b    d}| j                  |j                  |      }|j                  d       y )Nr8  T)r   futuresr   )rg   r   r   r   rm   s        ri   handle_authenticatezbitget.handle_authenticate  s)     &=trj   c                 0   | j                  |d      }	 |dk(  r| j                  |d      }| j                  dz   | j                  |      z   }| j                  | j                  d   d   ||       | j                  |dd      }| j                  | j                  d   d	   ||       t        |      y
# t        $ r[}t        |t              r0d}|j                  ||       ||j                  v r|j                  |= n|j                  |       Y d }~yd }~ww xY w)Neventr.  r  r+  r    r]   msgr   r^   Fr8  T)r   r{   jsonthrow_exactly_matched_exceptionrc   throw_broadly_matched_exceptionr   	Exception
isinstancer   r-  r@  )	rg   r   r   rQ  r  feedbackrR  er   s	            ri   handle_error_messagezbitget.handle_error_message  s      '2	''877S=499W+==44T__T5J75SUY[cd&&wr:44T__T5J75SUXZbc#H-- 		!01-a-&"6"66,,[9 a 		s   BB1 1	D:ADDc                    | j                  ||      ry | j                  |d      }|dk(  r| j                  ||       y |dk(  r| j                  ||       y | j                  |d      }|dk(  r| j                  ||       y |dk(  r| j	                  ||       y |dk(  r| j                  ||       y | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  d}| j                  |di       }| j                  |d	d
      }| j                  ||      }|	 |||       |j                  d      dk\  r| j                  ||       |j                  d      dk\  r| j                  ||       y y )Nr   pongrQ  r;  r&  r2  )rz   r<  r  r  r  r  r  r  r  rn  r  r  r   r}   r   r   r   r   )rZ  r   handle_pongrO  handle_subscription_statushandle_un_subscription_statusr   rM  r  r  r  r  r   findr   r)  )	rg   r   r   contentrQ  methodsr   topicmethods	            ri   handle_messagezbitget.handle_message$  s   \ $$VW5""7I6fVW-fVW-  '2G$$VW5K++FG<M!..vw?((''))''++,,"//#00**.. $ 3 3#22
 oogub1Y3%067#::h1$fg.::g!#""673 $rj   c                      y)NrO    )rg   r   s     ri   rO   zbitget.ping}  s    rj   c                 0    | j                         |_        |S N)millisecondslastPongrg   r   r   s      ri   r]  zbitget.handle_pong  s    ++-rj   c                     |S ri  rg  rl  s      ri   r^  z!bitget.handle_subscription_status  s	     rj   c                    | j                  |di       }| j                  |d      }|dk(  rdnd}| j                  |d      }| j                  |d d |      }|d   }d|d   z   }	d|z   }
|| j                  v r| j                  |= |
|j
                  v r|j
                  |
= |	|j
                  v r|j
                  |	= t        | j                  d	z   |z         }|j                  ||
       |j                  d
|	       y )Nr   rp   r   r   r~   rw   zunsubscribe:orderbook:r  z orderbook T)
r   r  r   r   r  r@  r   r{   r-  r   rg   r   r   r   rp   rb  r~   rs   rw   r   subMessageHashr.  s               ri   !handle_order_book_un_subscriptionz(bitget.handle_order_book_un_subscription  s    nnWeR0))#z:"f,v:!!#x0!!&$d;!.1AA%.T__$'V111$$^4&...$$[1 =!86!ABe^,t[)rj   c                    | j                  |di       }| j                  |d      }|dk(  rdnd}| j                  |d      }| j                  |d d |      }|d   }d|d   z   }	d|z   }
|| j                  v r| j                  |= |
|j
                  v r|j
                  |
= |	|j
                  v r|j
                  |	= t        | j                  d	z   |z         }|j                  ||
       |j                  d
|	       y )Nr   rp   r   r   r~   rw   zunsubscribe:trade:r=  z trades T)
r   r  r   r   rA  r@  r   r{   r-  r   ro  s               ri   handle_trades_un_subscriptionz$bitget.handle_trades_un_subscription  s    nnWeR0))#z:"f,v:!!#x0!!&$d;!*VH-==!F*T[[ F#V111$$^4&...$$[1 :!5!>?e^,t[)rj   c                    | j                  |di       }| j                  |d      }|dk(  rdnd}| j                  |d      }| j                  |d d |      }|d   }d|d   z   }	d|z   }
|| j                  v r| j                  |= |
|j
                  v r|j
                  |
= |	|j
                  v r|j
                  |	= t        | j                  d	z   |z         }|j                  ||
       |j                  d
|	       y )Nr   rp   r   r   r~   rw   zunsubscribe:ticker:ry   z ticker T)
r   r  r   r   r   r@  r   r{   r-  r   ro  s               ri   handle_ticker_un_subscriptionz$bitget.handle_ticker_un_subscription  s    nnWeR0))#z:"f,v:!!#x0!!&$d;!+fX.>>"V+T\\!V$V111$$^4&...$$[1 :!5!>?e^,t[)rj   c                    | j                  |di       }| j                  |d      }|dk(  rdnd}| j                  |d      }| j                  |d      }|j                  dd      }| j	                  | j
                  d	      }	| j                  ||	      }
| j                  |d d |      }|d
   }d|
z   dz   |d
   z   }d|
z   dz   |z   }|| j                  v r!|
| j                  |   v r| j                  |   |
= | j                  |||       y )Nr   rp   r   r   r~   r}   r   r   rN   rw   zunsubscribe:candles:r   r   )
r   r  r   r   r   ra   r   r   r   clean_unsubscription)rg   r   r   r   rp   rb  r~   r}   r   rN   r   rs   rw   r   rp  s                  ri   handle_ohlcv_un_subscriptionz#bitget.handle_ohlcv_un_subscription  s    nnWeR0))#z:"f,v:!!#x0""3	2??8R0__T\\<@
''*=	!!&$d;!,y83>AQQ#i/#5>T[[ DKK//KK'	2!!&.+Frj   c                    | j                  |d      }|| j                  |di       g}t        dt        |            D ]  }||   }| j	                  |d      }|dk(  r| j                  ||       2|dk(  r| j                  ||       J|dk(  r| j                  ||       b|j                  d      st| j                  ||        |S )	Nr   r   r   r}   r   r<  rz   r   )
rH  r   r   r   r   rq  rs  ru  
startswithrx  )rg   r   r   argsListr   r   r}   s          ri   r_  z$bitget.handle_un_subscription_status  s    ( >>'62wr:;Hq#h-( 	CA1+C&&sI6G'!66vwGG#2267CH$2267C##H-11&'B	C rj   ri  )I__name__
__module____qualname__r   rf   rv   r  r   r   r   r   r   r   r   r   r   r   r   r   r	   r   r  r   r   r   r   r   r   r  r   r   r)  r  r5  r  r   r:  r9  rF  rM  rI  r   rx  r  r{  r   r
   r  r  r  r  r   r  r   r  r  r   r  r   rK  rt  rO  rZ  re  rO   r]  r^  rq  rs  ru  rx  r_  __classcell__)rh   s   @ri   r   r      sz   S# Sj ,. " 68 B BF B0 9; OC Os O 6:" !E7 !E !EF$,F $,LgR 8<B !FW !F7 !FF,V ,( 8<$]ajl H HC HWZ Hquvzq{ H@ ;?r \3 \c \$7,6 7,r
D 
. @DB PS P PS\ P =? Q Q3 Q( _a ES E3 ERU Eeh E SW_a %$s) %C %fo %NW= W=r*6 *3 *UX *
$3 <@d[] S SS S Sbfglbm S OSaenp *d3i * *[^ *uyz  vA *X 9; MC Ms M%,F %,NXt 8<$]ajl ]W ]C ]WZ ]quv~q ]B@>v @>D@D 04$UYbd LU LUC LUs LUimnsit LU\Q86 Q8fL\: 37TX\eg #UC #Us #URU #Ulpqvlw #UJV,v V,p *, &P &PPN2V N2` <> H ?A H LN U )+ 6 OQ M& 6 2W4V W4r6 &  * *,*F *,*F *,G6 G*#F #rj   r   )$ccxt.async_supportccxt ccxt.async_support.base.ws.cacher   r   r   r   rE  ccxt.base.typesr   r   r	   r
   r   r   r   r   r   r   r   !ccxt.async_support.base.ws.clientr   typingr   ccxt.base.errorsr   r   r   r   r   r   r   ccxt.base.preciser   async_supportr   rg  rj   ri   <module>r     s]     A  A  p p p p 4  * 0 . ' . * - %qT&& qrj   