
    eiО                       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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j"        j#                  Z#dS )    N)
ArrayCacheArrayCacheBySymbolByIdArrayCacheBySymbolBySideArrayCacheByTimestamp)AnyBalancesBoolIntMarketOrder	OrderBookPositionStrStringsTickerTrade)Client)List)ExchangeError)AuthenticationError)ArgumentsRequired)
BadRequest)	BadSymbol)NetworkError)InvalidNonce)ChecksumErrorc                       e Zd Zdef fdZd Zi fdedefdZi fdedefdZ	de
fdZd	d	i fd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dd	d	i fdeded
ededee         f
dZdi fdededefdZd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de
fdZd Zd Zd Zde
fdZde
fdZde
fdZd	d	d	i fde d
ededee         fdZ!d	i fdZ"d	d	d	i fde d
ededee#         fdZ$de
fd Z%d>d!Z&d>d"Z'd	d	d	i fd#e(d
ededee)         fd$Z*d% Z+i fde,fd&Z-de
fd'Z.de
fd(Z/de
d)e0fd*Z1de
fd+Z2de
fd,Z3d- Z4de
fd.Z5de
fd/Z6de
de7fd0Z8de
fd1Z9i fde
fd2Z:d>d3Z;d?d6Z<d	i fd7Z=i fd8e>d9ed:efd;Z?i i fd<Z@i fd=ZA xZBS )@htxreturnc                    |                      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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id'd'dd(dd)d*d+did,d-id.dd/t          t
          t          t          t          t          t          d0iid1          S )2NwsTcreateOrderWsFeditOrderWsfetchOpenOrdersWsfetchOrderWscancelOrderWscancelOrdersWscancelAllOrdersWsfetchTradesWsfetchBalanceWswatchOrderBookwatchOrderswatchTickerswatchTickerwatchTradeswatchTradesForSymbolswatchMyTrades)watchBalance
watchOHLCVunWatchTickerunWatchOHLCVunWatchTradesunWatchOrderBookapizwss://{hostname}/wszwss://{hostname}/ws/v2zwss://{hostname}/feed)publicprivatefeedz wss://api.hbdm.vn/linear-swap-wsz*wss://api.hbdm.vn/linear-swap-notification)r9   r:   zwss://api.hbdm.vn/wszwss://api.hbdm.vn/notification)linearinversezwss://api.hbdm.vn/swap-wsz#wss://api.hbdm.vn/swap-notification)r=   r<   )spotfutureswapzwss://api-aws.huobi.pro/wszwss://api-aws.huobi.pro/ws/v2)r8   zapi-aws        )
maxRetrieschecksumdepthgunzipnamemarket.{marketId}.detail)tradesLimit
OHLCVLimitr8   r+   r!   r.   exact)zbad-request200220212001201120404007)hasurlsoptions
exceptions)deep_extendsuperr   describer   r   r   )self	__class__s    J/var/www/html/volatility/venv/lib/python3.11/site-packages/ccxt/pro/htx.pyrY   zhtx.describe   s   c4 0 0 9 9 ; ;d u $U	
    !% $U   !% !$ t  t t  (!"  #$ !%"!% $!%$(/  4  +@+C(?% % /Q/[+" +"
 /E/O," ,"	' 	' /J/T," ,"
 /Q/[+" +"	% 	%!   < +G+J(?% % /Q/[+" +"
 /E/O," ,"	' 	' /Q/[+" +"
 /J/T," ,"	% 	%!$ $;8 8:<|  $""# $ # # d 6  " '1 3 * ) ) * * 
Ot>
 t>
 t t t	    c                     |                                   |                     |                     | j        dd          d          }|| j        d<   |                                  t          |          S )N	requestIdr      )lock_idsumsafe_integerrU   	unlock_idstr)rZ   r_   s     r\   
request_idzhtx.request_id   s^    HHT..t|[!LLaPP	$-[!9~~r]   symbolc                   K   |                                   d{V  |                     |          }|d         }|                     | j        di           }|                     |dd          }|dk    r#|d         dk    rt          | j        d	z             |                     |d
|d         i          }|                     |d         |d                   }| 	                    |||d|           d{V S )aJ  
        watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

        https://www.htx.com/en-us/opend/newApiPages/?id=7ec53561-7773-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=28c33ab2-77ae-11ed-9966-0242ac110003

        :param str symbol: 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>`
        Nrg   r.   rH   rI   market.{marketId}.tickertyper>   x watchTicker() with name market.{marketId}.ticker is only allowed for spot markets, use market.{marketId}.detail insteadmarketIdidr<   )
load_marketsmarket	safe_dictrU   safe_stringr   rm   implode_paramsget_url_by_market_typesubscribe_public)rZ   rg   paramsro   rU   topicmessageHashurls           r\   watch_tickerzhtx.watch_ticker   s      !!!!!!!!!V$$!..}bAA  &2LMM...6&>V3K3KTW  (b  b  c  c  c))%*fTl1KLL))&.&:JKK**3T6RRRRRRRRRr]   c                   K   |                                   d{V  |                     |          }d}|                     | j        di           }|                     |dd          }|dk    r#|d         dk    rt          | j        d	z             |                     |d
|d         i          }|                     ||||           d{V S )aY  
        unWatches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list

        https://www.htx.com/en-us/opend/newApiPages/?id=7ec53561-7773-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=28c33ab2-77ae-11ed-9966-0242ac110003

        :param str symbol: 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>`
        Ntickerr.   rH   rI   ri   rj   r>   rk   rl   rm   )	rn   ro   rp   rU   rq   r   rm   rr   unsubscribe_publicrZ   rg   ru   ro   rv   rU   channelsubMessageHashs           r\   un_watch_tickerzhtx.un_watch_ticker   s       !!!!!!!!!V$$..}bAA""7F4NOO000VF^v5M5MTW  (b  b  c  c  c,,Wz6$<6PQQ,,V^UFSSSSSSSSSr]   clientc                    |                      |di           }|                     |d          }|                    d          }|                     |d          }|                     |          }|                     ||          }|                      |d          }	|	|d<   |                     |	          |d<   |d         }
|| j        |
<   |                    ||           |S )	Ntickch.r`   ts	timestampdatetimerg   )
safe_valuerq   splitsafe_marketparse_tickeriso8601tickersresolve)rZ   r   messager   r   partsrl   ro   r{   r   rg   s              r\   handle_tickerzhtx.handle_ticker   s    B w33gt,,##E1--!!(++""400OOGT22	'{!\\)44z!%Vvr"""r]   Nsincelimitc                 ~  K   |                                   d{V  |                     |          }|d         }d|d         z   dz   }|                     |d         |d                   }|                     |||d|           d{V }| j        r|                    ||          }|                     |||dd	          S )
a  
        get the list of most recent trades for a particular symbol

        https://www.htx.com/en-us/opend/newApiPages/?id=7ec53b69-7773-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=28c33c21-77ae-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=28c33cfe-77ae-11ed-9966-0242ac110003

        :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>`
        Nrg   market.rm   z.trade.detailrj   r<   r   T)rn   ro   rs   rt   
newUpdatesgetLimitfilter_by_since_limit)	rZ   rg   r   r   ru   ro   rw   rx   tradess	            r\   watch_tradeszhtx.watch_trades   s       !!!!!!!!!V$$!&,.@))&.&:JKK,,S&+tVTTTTTTTT? 	3OOFE22E))&%TRRRr]   c                 F  K   |                                   d{V  |                     |          }d}|                     | j        di           }|                     |dd          }|                     |d|d         i          }|                     ||||           d{V S )a  
        unWatches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list

        https://www.htx.com/en-us/opend/newApiPages/?id=7ec53b69-7773-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=28c33c21-77ae-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=28c33cfe-77ae-11ed-9966-0242ac110003

        :param str symbol: 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>`
        Nr   r/   rH   zmarket.{marketId}.trade.detailrl   rm   )rn   ro   rp   rU   rq   rr   r|   r}   s           r\   un_watch_tradeszhtx.un_watch_trades  s       !!!!!!!!!V$$..}bAA""7F4TUU,,Wz6$<6PQQ,,V^UFSSSSSSSSSr]   c                    |                      |di           }|                      |di           }|                     |d          }|                    d          }|                     |d          }|                     |          }|d         }	|                      | j        |	          }
|
5|                     | j        dd          }t          |          }
|
| j        |	<   t          d	t          |                    D ]3}| 
                    ||         |          }|
                    |           4|                    |
|           |S )
Nr   datar   r   r`   rg   rJ   rA   r   )r   rq   r   r   r   rc   rU   r   rangelenparse_tradeappendr   )rZ   r   r   r   r   r   r   rl   ro   rg   tradesCacher   itrades                 r\   handle_tradeszhtx.handle_trades  s9   * w33tVR00gt,,##E1--!!(++!oodk6::%%dlM4HHE$U++K"-DKq#d))$$ 	& 	&A$$T!Wf55Eu%%%%{B'''r]   1m	timeframec                   K   |                                   d{V  |                     |          }|d         }|                     | j        ||          }d|d         z   dz   |z   }|                     |d         |d                   }	|                     |	||d|           d{V }
| j        r|
                    ||          }|                     |
||dd	          S )
aj  
        watches historical candlestick data containing the open, high, low, and close price, and the volume of a market

        https://www.htx.com/en-us/opend/newApiPages/?id=7ec53241-7773-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=28c3346a-77ae-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=28c33563-77ae-11ed-9966-0242ac110003

        :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
        Nrg   r   rm   .kline.rj   r<   r   T)	rn   ro   rq   
timeframesrs   rt   r   r   r   )rZ   rg   r   r   r   ru   ro   intervalrw   rx   ohlcvs              r\   watch_ohlcvzhtx.watch_ohlcvC  s       !!!!!!!!!V$$!##DOY	JJ&,.:XE))&.&:JKK++CdFSSSSSSSS? 	2NN6511E))%q$GGGr]   c                   K   |                                   d{V  |                     |          }|                     | j        ||          }d|d         z   dz   |z   }d}|d         |gg|d<   |                     ||||           d{V S )aK  
        unWatches historical candlestick data containing the open, high, low, and close price, and the volume of a market

        https://www.htx.com/en-us/opend/newApiPages/?id=7ec53241-7773-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=28c3346a-77ae-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=28c33563-77ae-11ed-9966-0242ac110003

        :param str symbol: unified symbol of the market
        :param str timeframe: the length of time each candle represents
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param dict [params.timezone]: if provided, kline intervals are interpreted in that timezone instead of UTC, example '+08:00'
        :returns int[][]: A list of candles ordered, open, high, low, close, volume
        Nr   rm   r   r   rg   symbolsAndTimeframes)rn   ro   rq   r   r|   )rZ   rg   r   ru   ro   r   r   rv   s           r\   un_watch_ohlcvzhtx.un_watch_ohlcv]  s       !!!!!!!!!V$$##DOY	JJ"VD\1I=H+1(+;Y*G)H%&,,V^UFSSSSSSSSSr]   c                    |                      |d          }|                    d          }|                      |d          }|                     |          }|d         }|                      |d          }|                     |          }	|                     | j        |i           | j        |<   |                     | j        |         |	          }
|
;|                     | j        dd          }t          |          }
|
| j        |         |	<   |                     |d          }| 	                    ||          }|

                    |           |                    |
|           d S )	Nr   r   r`   rg   rB   rK   rA   r   )rq   r   r   find_timeframer   ohlcvsrc   rU   r   parse_ohlcvr   r   )rZ   r   r   r   r   rl   ro   rg   r   r   storedr   r   parseds                 r\   handle_ohlcvzhtx.handle_ohlcvs  sJ   " gt,,##E1--!!(++!##E1--''11	"oodk62FFFV!4i@@>%%dlL$GGE*511F-3DK	*w//!!$//fvr"""""r]   c                   K   |                                   d{V  |                     |          }|d         }g d}|                     | j        di           }||                     |dd          }|                     ||          st          | j        dz             d}|d         r%d	|d
         z   dz   |                     |          z   }n'd	|d
         z   dz   |                     |          z   dz   }| 	                    |d         |d         dd          }| j
        }	|d         s|                     |          }d|d<   d}	|                     ||||	|           d{V }
|
                                S )a  

        https://huobiapi.github.io/docs/dm/v1/en/#subscribe-market-depth-data
        https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#subscribe-incremental-market-depth-data
        https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-subscribe-incremental-market-depth-data

        watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
        :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
        Nrg   )      rC   i  r+   rF   rC   z? watchOrderBook market accepts limits of 5, 20, 150 or 400 onlyr>   r   rm   .mbp..depth.size_
.high_freqrj   r<   FTincremental	data_type)rn   ro   rp   rU   rc   in_arrayr   rm   number_to_stringrs   handle_order_book_subscriptionextendrt   r   )rZ   rg   r   ru   ro   allowedLimitsrU   rw   rx   method	orderbooks              r\   watch_order_bookzhtx.watch_order_book  s      !!!!!!!!!V$$!)))
 ../?DD=%%gw<<E}}UM22 	m*k klll&> 	r#fTl2W<t?T?TUZ?[?[[KK#fTl2^CdF[F[\aFbFbbeqqK))&.&:JESWXX4f~ 	[[((F"/F;F//V[&RXYYYYYYYY	   r]   c                   K   |                                   d{V  |                     |          }d}|                     | j        di           }|                     |dd          }d}|d         r%d|d         z   d	z   |                     |          z   }n'd|d         z   d
z   |                     |          z   dz   }|d         sd|d<   |                     ||||           d{V S )a  
        unsubscribe from the orderbook channel

        https://huobiapi.github.io/docs/dm/v1/en/#subscribe-market-depth-data
        https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#subscribe-incremental-market-depth-data
        https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-subscribe-incremental-market-depth-data

        :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
        Nr   r+   rF   rC   r>   r   rm   r   r   r   r   r   )rn   ro   rp   rU   rc   r   r|   )rZ   rg   ru   ro   rv   rU   rF   r   s           r\   un_watch_order_bookzhtx.un_watch_order_book  s      !!!!!!!!!V$$../?DD!!'7C88&> 	u&5?$BWBWX]B^B^^NN&5FI^I^_dIeIeehttNv 	0"/F;,,V^UFSSSSSSSSSr]   c                    |                      |d          }|                      |d          }|                      |d          }|                     |d          }	 | j        |         }|                     |d          }	|j        }
|                     |
di           }|                     |	|          }|                     |d          }|                     |d          }|                     |	d	          }||d
<   |                     |d          }||d<   |                     |d          }|                     ||          }|                    ||           |||k     r|                     ddd          }|                     |dd          }||k     ri||j	        v r^| 
                    |d          }| 
                    d||z
            }||d<   ||j	        |<   |                     || j        |||           d S d S t          | j        dz   |z   dz   t          |          z   dz             |                    |           t#          dt%          |
                    D ]}|                     ||
|                    g |_        || j        |<   |                    ||           d S # t(          $ r1}|j	        |= | j        |= |                    ||           Y d }~d S d }~ww xY w)Nrg   rw   rm   lastTimestampr   r   r   
prevSeqNumseqNumnoncer   r   r+   rD   rB   numAttemptsr`   rA   zC failed to synchronize WebSocket feed with the snapshot for symbol z in z	 attempts)rq   rc   
orderbooksr   cacheparse_order_book
order_bookr   handle_optionsubscriptionsrb   delaywatch_order_book_snapshotr   rm   re   resetr   r   handle_order_book_message	Exceptionreject)rZ   r   r   subscriptionrg   rw   rm   r   r   r   messagesfirstMessagesnapshotr   sequencer   snapshotTimestampsnapshotLimitsnapshotOrderBookmaxAttemptsr   	delayTimer   es                           r\   handle_order_book_snapshotzhtx.handle_order_book_snapshot  sU   , !!,99&&|]CCgt,,)),HH)	*/I??7F33D H??8Q;;L,,T6::H??<88D((|<<H%%dH55E %HW $ 1 1'4 @ @,=L) --lGDDM $- H HNN,b111 eh&6&6"001A<QRSS"//mQOO,,"f&:::&*hh{A&>&>$(HHT=CT3T$U$U	6A]3<H,[9

9d.LfV]_klllll ;: 'tw1v'vy'  CI  (I  LO  P[  L\  L\  (\  _j  (j  k  k  k)))q#h--00 H HA2268A;GGGG"$	*3'y+66666 	* 	* 	*$[1'MM![)))))))))	*s    FJ$ :B(J$ $
K.&KKc           	        K   |                      |d          }|                      |d          }|                     |d          }|                     |d          }|                     |d          }|                     |dd          }	|                     |          }
|                     |
d         |
d	         d
d          }|                                 }||d}||||||	|| j        d}	 |                     |||||           d {V }|                                S # t          $ r(}|j
        |= |                    ||           Y d }~nd }~ww xY wd S )Nrw   rg   r   r   ru   r   r   rj   r<   FT)reqrm   )rm   rw   rg   r   ru   r   r   r   )rq   rc   r   ro   rs   rf   r   watchr   r   r   r   )rZ   r   r   r   rw   rg   r   r   ru   attemptsro   rx   r_   requestsnapshotSubscriptionr   r   s                    r\   r   zhtx.watch_order_book_snapshot  s     &&|]CC!!,99!!,88%%gt44	x88$$\=!DDV$$))&.&:JESWXXOO%%	
 
 &#&5	&
 	&
	*"jji)MabbbbbbbbI??$$$ 	* 	* 	*$[1MM![))))))))	* ts   +2D 
E(EEc                     |                      |d          }|                      |d          }|                    ||           d S )Nr   r`   )
safe_floatstore)rZ   booksidedeltapriceamounts        r\   handle_deltazhtx.handle_delta@  sB    q))**uf%%%%%r]   c                 ~    t          dt          |                    D ]}|                     |||                    d S )Nr   )r   r   r   )rZ   r   deltasr   s       r\   handle_deltaszhtx.handle_deltasE  sH    q#f++&& 	3 	3Ahq	2222	3 	3r]   c                 v   |                      |d          }|                    d          }|                     |d          }|                     |          }|d         }| j        |         }|                      |di           }	|                     |	d          }
|                     |	d          }|                     |	d          }|                     |	d	          }|                     |d
          }|dk    r1|                     |	||          }|                    |           ||d<   |R||d         k    rF|                     ddd          }|r-t          | j
        dz   |                     |          z             |d         o||d         k    }|d         o|dz
  |d         k    }|s|r|                      |	dg           }|                      |	dg           }|                     |d         |           |                     |d         |           |r|
n||d<   ||d<   |                     |          |d<   d S d S )Nr   r   r`   rg   r   r   r   eventversionr   r   r   r+   rE   T r>   contractasksbidsr   r   )r   r   rq   r   r   rc   r   r   r   r   rm   orderbook_checksum_messager   r   )rZ   r   r   r   r   rl   ro   rg   r   r   r   r   r   r   r   r   rE   spotConditonnonSpotConditionr   r  s                        r\   r   zhtx.handle_order_book_messageI  sh   F __Wd++##E1--!!(++!OF+	w33""422&&t\::
  w//##D)44%%gt44	J,,T69EEHOOH%%%!(Ig"
Yw5G(G(G))*:JMMH ]#DGcMD4S4STZ4[4[$[\\\f~L:79K+K!*-U7Q;)GBT3T 	<+ 	<??444D??444Dy0$777y0$777+7!DWIg%.Ik"$(LL$;$;Ij!!!	< 	<r]   c                    |                      |d          }|                     |d          }|                      |d          }|                      |d          }|                    d          }|                      |d          }|                     |          }	|	| j        vr_|                      |d          }
|
                    d          }|                     |d          }|                     i |          | j        |	<   | j        |	         }|$|d         |j                            |           d S | 	                    ||           |
                    ||           d S )	Nr   r   r   r   r`   rB   _r   )rq   rp   r   safe_symbolr   rc   r   r   r   r   r   )rZ   r   r   rw   r   r   r   r   rl   rg   size	sizePartsr   r   s                 r\   handle_order_bookzhtx.handle_order_book  sU   \ &&w55~~gv..  w//gt,,##E1--!!(++$/))##E1--D

3I%%i33E&*oob%&@&@DOF#OF+	M	' 2 :O""7+++++**67;;;NN9k22222r]   c                    |                      |d          }|                     |          }|                     |d          }|                     i |          | j        |<   |d         r|                     | j        |||           d S d S )Nrg   r   r>   )rq   ro   rc   r   r   spawnr   )rZ   r   r   r   rg   ro   r   s          r\   r   z"htx.handle_order_book_subscription  s    !!,99V$$!!,88"&//"e"<"<&> 	VJJt5vwUUUUU	V 	Vr]   c                   K   |                                   |                                  d{V  d}d}d}d}d}	d}
d}|:|                     |          }|d         }|d         }|d         rdnd}|d         }n|                     | j        dd	          }|                     |d|          }|                     | j        d
dd          }|                     |d
|          }|                     |dd
g          }|d	k    r\d}|J|                     | j        ddd          }|                     |d|          }|                     |d          }d|z   dz   |z   }|}	nL|                     ||||          }|                     |d          }	|                     |d          }|dz   dz   }|                     |	||||           d{V }
| j	        r|

                    ||          }|                     |
|||d          S )aI  
        watches information on multiple trades made by the user

        https://www.htx.com/en-us/opend/newApiPages/?id=7ec53dd5-7773-11ed-9966-0242ac110003

        :param str symbol: unified market symbol of the market trades were made in
        :param int [since]: the earliest time in ms to fetch trades for
        :param int [limit]: the maximum number of trade 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*rg   rj   r<   r=   lowercaseIddefaultTyper>   subTypedefaultSubTyper1   mode0ztrade.clearing##r   r`   :r   T)check_required_credentialsrn   ro   rq   rU   safe_string_2omit"get_order_channel_and_message_hashsubscribe_privater   r   filter_by_symbol_since_limit)rZ   rg   r   r   ru   rj   rl   ro   rw   r~   r   r  r  channelAndMessageHashorderMessageHashs                  r\   watch_my_tradeszhtx.watch_my_trades  s\      	'')))!!!!!!!!![[((FH%F&>D"("2Ahh	Gm,HH##DL-HHD##FFD99D((yBRT\]]G&&vy'BBGYYv	':;;F6>>D|))$,QTUU''==662208;cADHK!GG$($K$KDRY[aci$j$j!&&'<a@@G#//0EqII +S07:K--g{D'SYZZZZZZZZ? 	3OOFE22E00tTTTr]   c                 
   d }d }|                      | j        dd          }|                      |d|          }|                     |d          }||d                                         nd }||d         nd }	|}
|
}|dk    r<|                      |dd          }|dk    r|
dz   n|
}|}||d	|z   z  }|}nL|d	z   d
z   }nC|dk    r(|	|
d	z   |	                                z   }|}n|
d	z   d
z   }n||
d	z   |z   }|}n|
d	z   d
z   }||gS )N	orderTypeordersr  baseIdr<   margincross_crossr   r  r?   )rq   rU   r  lower)rZ   rj   r  ro   ru   rw   r~   r!  
marketCoder#  prefix
marginModemarginPrefixs                r\   r  z&htx.get_order_channel_and_message_hash)  so   $$T\;II	$$V[)DD	6;//7=7IVM*00222PT
&,&8!!th))&(GDDJ1;w1F1F6H,,VL&K%sZ//%&,s2X! 3,7% 3,, % 3,3% 3,,%%r]   c                   K   |                                   d{V  d}d}d}d}|:|                     |          }|d         }|d         }|d         }|d         rdnd}n|                     | j        dd	          }|                     |d|          }|                     | j        d
dd          }|                     |d
|          }|                     |dd
g          }d}	d}
|d	k    rd|z   }	|	}
nD|                     ||||          }|                     |d          }
|                     |d          }	|                     |
|	|||           d{V }| j        r|	                    ||          }| 
                    |||dd          S )aI  
        watches information on multiple orders made by the user

        https://www.htx.com/en-us/opend/newApiPages/?id=7ec53c8f-7773-11ed-9966-0242ac110003

        :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
        :returns dict[]: a list of `order structures <https://docs.ccxt.com/?id=order-structure>`
        Nr  rg   rj   r  r<   r=   r  r>   r  r  zorders#r   r`   r   T)rn   ro   rq   rU   r  r  r  r  r   r   r   )rZ   rg   r   r   ru   rj   r  ro   suffixrw   r~   r  r"  s                r\   watch_orderszhtx.watch_ordersM  s      !!!!!!!!![[((FH%F&>DM*F"("2Ahh	GG##DL-HHD##FFD99D((yBRT\]]G&&vy'BBGYYv	':;;F6>>(61K!GG$($K$KDRY[aci$j$j!&&'<a@@G**+@!DDK--g{D'SYZZZZZZZZ? 	3OOFE22E))&%TRRRr]   c                    |                      |dd          }|                     |d          }|                     |d          }||                     |d          }|                     |          }d }||                     |d          }|dk    r|                     ||          }	|                     |	d          }
|	g}|                     |                      |d	d
d                    }|                     |d          }|                     |d          }|
|||d         |                     |          |                     |          |                     |d          |                     |d          |d	}|}n|                     ||          }n|                     ||          }|                     |dg           }t          |          }|dk    r_|||d}|                     |d          |                     |d          |                     |d          d}| 
                    |||           | j        0|                     | j        dd          }t          |          | _        | j        }|                    |           |                    | j        |           |                    d|d         z   d          }|                     |d          }|                    d|z   d          }|                    | j        |           d S )Nr   rv   r   contract_coderg   	eventTyper   orderorderStatusstatusclosedexecAmt	remainAmt
orderPrice	orderSize)	rm   r   r4  rg   filled	remainingr   r   infor   )r   r   rg   rm   rj   side)r2  rj   r=  ordersLimitrA   r   r   r#  )r  r   rq   r   parse_order_tradeparse_order_statusparse_numbersafe_numberparse_ws_orderr   handle_my_trader"  rc   rU   r   r   r   replacesafe_string_lower)rZ   r   r   rw   r   rl   ro   parsedOrderr1  parsedTradeorderIdr   r4  r:  r;  r2  	rawTradestradesLengthtradesObjectextendTradeParamsr   cachedOrdersgenericMessageHashlowerCaseBaseIds                           r\   handle_orderzhtx.handle_orderx  s5   r (($@@w//##G_==''h77H!!(++(({;;IG## #44T6BB**;@@%001C1CD-Yack1l1lmm))$	:: ,,T;??	!$$$X."//77!%!2!29!=!=!--dLAA"..t[AA 
 
 $"11$?? --gv>>K"==Iy>>La'%&& & "--k4@@ ,,[&AA ,,[&AA+ +! $$V\;LMMM;%%dlM4HHE077DK{K(((t{K000 )00vm7L1LbQQ00BB/77o8MrRRt{$677777r]   c                    |                      |dd          }|                     |d          }|                     |dd          }|                     ||          }|                     ||          }|                     |dd          }|                     |                     |dd	                    }|                     |d
d          }	|                     |dd          }
|                     |dd          }|                     |d          }|                     |d          }|                     |d          }d }|.|                     |d          }||                     |          d}|                     |d          }|                     |d          }g }||	                    d          }| 
                    |d          }||                     |d          }| 
                    |d          }||                     |d          }|                     |d          }|                     i d|d|	d|
d|d |                     |          d!|d	|d|d|d"d d#d d$|d|d%|d&|d'd d(||||d)|          S )*NlastActTimer   orderCreateTimer0  rg   r9  volumer3  r4  rJ  order_idclientOrderIdclient_order_idr8  r   r6  rj   fee	fee_assetcostcurrencytrade_avg_pricer   -r`   order_price_typer   	direction
orderValuer<  rm   r   r   lastTradeTimestamptimeInForcepostOnlyr=  r   r:  r;  r]  )rZ  averager   )safe_integer_2rc   r  r   r  rA  rq   safe_currency_coder   r   rG  
safe_orderr   )rZ   r2  ro   rd  createdrl   rg   r   r4  rm   rX  r   r:  typeSidefeeCostrZ  feeCurrencyIdavgPricerK  typeSidePartsrj   r=  r]  s                          r\   rD  zhtx.parse_ws_order5  s@   d "00tLL##E+<==%%e_hGG!!(F33!!(F33##E;AA((););E=RZ)[)[\\y*==**5/CTUU""5,@@!!%33##E622""5%00 ,,UK@@M 33MBB C ##E+<==OOE733	$NN3//M%%mQ77<##E+=>>D%%mQ77<##E;77D|44  
E 
" 
 ] 
 	 

 W-- 
 !"4 
 f 
 f 
 D 
 4 
  
 D 
 U 
 f 
 f 
  ! 
" D# 
$ ) 
  
  
* +  	r]   c                 F   |                      d |          }|d         }|                     |d          }|                     |d          }|                     |d          }|                     |d          }|                     |d          }|                     |d          }	d }
|	%|	                    d          }|d	         }
|d
         }	|                     |d          }d }||rdnd}|                     |||                     |          ||||	||
||d d d|          S )Nrg   tradeId
tradePricetradeVolumerJ  	tradeTimerj   r`  r   r`   	aggressortakermakerr<  r   r   rg   rm   r2  rj   takerOrMakerr=  r   r   r]  rZ  )r   rq   rc   r   r   
safe_trader   )rZ   r   ro   rg   rr  r   r   r2  r   rj   r=  	typePartsrv  rz  s                 r\   r@  zhtx.parse_order_trade  sQ   * !!$//!""5)44  55!!%77  	22%%e[99	v..

3IQ<DQ<DOOE;77	 &/<77WL"Y//( 
  
   	r]   symbolsc                   K   |                                   d{V  d}d}|                     |          s-|                     |          }dd                    |          z   }d}d}||d         }|d         rdnd}n=|                     d||          \  }}|d	k    rd
}|                     |dd|          \  }}|                     |          }d}	|                     d|d          \  }	}|dk    }
|                     ||
d          }|	dz   |z   }|	dk    rdnd}| 	                    |||||           d{V }| j
        r|S |                     | j        |         |	         |||d          S )a  

        https://www.huobi.com/en-in/opend/newApiPages/?id=8cb7de1c-77b5-11ed-9966-0242ac110003
        https://www.huobi.com/en-in/opend/newApiPages/?id=8cb7df0f-77b5-11ed-9966-0242ac110003
        https://www.huobi.com/en-in/opend/newApiPages/?id=28c34a7d-77ae-11ed-9966-0242ac110003
        https://www.huobi.com/en-in/opend/newApiPages/?id=5d5156b5-77b6-11ed-9966-0242ac110003

        watch all open positions. Note: huobi has one channel for each marginMode and type
        :param str[]|None symbols: list of unified market symbols
 @param since
 @param limit
        :param dict params: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
        Nr?  ::,rj   r<   r=   watchPositionsr>   r?   r  r%  T
:positionszpositions_cross.*zpositions.*F)rn   is_emptyget_market_from_symbolsjoinhandle_market_type_and_paramshandle_option_and_paramsmarket_symbolshandle_margin_mode_and_paramsrs   r  r   filter_by_symbols_since_limit	positions)rZ   r}  r   r   ru   ro   rw   rj   r  r*  isLinearrx   r~   newPositionss                 r\   watch_positionszhtx.watch_positions  s      !!!!!!!!!}}W%% 	311'::F'!2!22K&>D"("2Ahh	GG==>NPVX^__LD&v~~";;FDTV_ahiiOGV%%g..
!??@PRXZabb
Fx'))$$?? </+=*4*?*?%%m!33G[$PWY_````````? 	 11$.2Ej2QSZ\achjopppr]   c                 R   |j         }|                     |dd          }|dk    rdnd}| j        i | _        |                     | j        |          }|
i | j        |<   |                     ||          }|t	                      | j        |         |<   | j        |         |         }|                     |dg           }	g }
|                     |d          }t          dt          |	                    D ]f}|	|         }|                     |          }||d	<   | 	                    |          |d
<   |

                    |           |
                    |           g|                     ||dz             }t          dt          |                    D ]}||         }|                    d          }|d         }|                    d          }|                     |
d|d          }|                     |          s|                    ||           |                    |
|dz              d S )Nrv   r?  positions_crossr%  isolatedr   r   r   r   r   z:positions::r  r`   r  rg   Fr  )rx   rq   r  r   r   rc   r   r   parse_positionr   r   find_message_hashesr   filter_by_arrayr  r   )rZ   r   r   rx   rv   r*  clientPositionsclientMarginModePositionsr   rawPositionsr  r   r   rawPositionpositionmessageHashesrw   r   symbolsStringr}  r  s                        r\   handle_positionszhtx.handle_positions?  s9   H j  '266!&*;!;!;WW*
>!DN//$.#>>""$DN3$(OOOZ$P$P!$,.F.H.HDN3
+s#J/w;;%%gt44	q#l++,, 	# 	#A&q/K**;77H$-H[!#'<<	#:#:HZ )))LL""""00n9TUUq#m,,-- 	7 	7A'*K%%d++E!!HM#))#..G,,\8WeTTI==++ 7y+666|Z,%>?????r]   c                 J  K   d}|                      dd|          \  }}d}|                     dd|d          \  }}|                     |ddd          }|                     |ddg          }|                                  d{V  d}d}d}|dk    r=|                     | j        ddd	          }|                     |d|          }d
|z   }|}n0|                     |d          }	|                     |d          }
|	|                     |	          nd}|
| 	                    |
          nd}|                     |dd          }|                     |g d          }d}|}|dk    r\|rd}|}|dz   dz   }n|dk    r|dz   n|}|}|dk    r|	|d|d         z   z  }|}nb|dz   dz   }nY||dz   |d         z   }|}nF|dz   dz   }n=|dk    r||d|d         z   z  }|}n$|dz   dz   }n||d|d         z   z  }|}n|dz   dz   }|||d}| 
                    ||||||           d{V S )a  
        watch balance and get the amount of funds available for trading or funds locked in orders

        https://www.htx.com/en-us/opend/newApiPages/?id=7ec52e28-7773-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=10000084-77b7-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=8cb7dcca-77b5-11ed-9966-0242ac110003
        https://www.htx.com/en-us/opend/newApiPages/?id=28c34995-77ae-11ed-9966-0242ac110003

        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `balance structure <https://docs.ccxt.com/?id=balance-structure>`
        Nr2   r<   isUnifiedAccountunifiedFr>   r  2zaccounts.update#rg   r^  r$  r%  )r^  rg   r$  accountsaccounts_unifyr   usdtr&  r  rm   r  r?   )rj   r  r$  )r  handle_sub_type_and_paramssafe_value_2r  rn   r  rU   rq   ro   r^  r  )rZ   ru   rj   r  r  rw   r~   r*  r  rg   r^  ro   currencyCoder)  subscriptionParamss                  r\   watch_balancezhtx.watch_balance  s      99.$PVWWf99.$PVX`aa,,V5GTYZZ6$6	#BCC!!!!!!!!!
6>>%%dlNFCPPD##FFD99D1D8K!GG%%fh77F''
;;H-3-?T[[(((dF7?7K4==222RVL))&(GDDJYYv'G'G'GHHFF K(""# 9-F"(K$slV3GG 4>3H3HVh..vF"(K!Z//!-'3+==K&1GG '-slS&8GG (3&,sl\$5G&GG*1KK '-slS&8GG!!+3d);#;;K)GG %slS0GG %3#55K)GG %slS0G $
 $
 ++G[$QWYklllllllllr]   c                 8   |                      |d          }|                     |dg           }|                     |d|                     |d                    }|| j        d<   |                     |          | j        d<   || j        d<   ||                      |d          }|                     |          }|                                 }|                      |d	          |d
<   |                      |d          |d<   || j        |<   |                     | j                  | _        |                    | j        |           d S t          |          }	|	dk    rd S |                     |di           }
|                      |d          }|
                    d          }|                      |d          }|                     |j        ||dz             }|L|                     |
dd          }|d|                                z   z  }|                     |j        |          }|                      |d          }|                      |d          }|dk    r|                      |
d          }|                     |          }|                      |
d          }|                                 }|                      |
d          |d
<   ||d<   || j        |<   |                     | j                  | _        |                    | j        d           n|dk    r,|                      |d          }|dk    rJ|dk    rdnd}|                     |
|g           }t          |          }|dk    rt          dt          |                    D ]}||         }|                     |dd           }|                     |          }|                      |d          }|                     |          }|                      |d!|d"                   }|s|                                 }|                     |d#d$          |d
<   |                      |d          |d<   i }|||<   |d         }|                     |          | j        |<   nt          dt          |                    D ]}||         }|                                 }|                      |d#d$          |d
<   |                      |d          |d<   |                     |dd          }|                     |          }|| j        |<   |                     | j                  | _        nt          dt          |                    D ]}||         }|                      |d          }|                     |          }|                                 }|                      |d$          |d
<   |                      |d          |d<   || j        |<   |                     | j                  | _        |                    | j        |           d S )%Nr   r   
changeTimer   r   r   r<  r^  	availablefreebalancetotalr   rv   r   z.*margin_assetrg   rj   r  r  margin_frozenwithdraw_availableusedr<   r$  r%  r?   futures_contract_detailcontract_detailr0  margin_accountsettlecodemargin_balancemargin_available)rq   r   rc   r  r   ri  accountsafe_balancer   r   r   r  r   r  r'  r   r   safe_currency) rZ   r   r   r~   r   r   
currencyIdr  r  
dataLengthfirstrv   
splitTopicrw   r   rj   r  marginAssetmarginFrozenunifiedAccountr$  	fieldNamebalancesbalancesLengthr   r  rl   ro   r^  accountsByCoderg   isolatedBalances                                    r\   handle_balancezhtx.handle_balance  s   f ""7D11w33%%dL$:K:KGUY:Z:Z[[	$-[!#'<<	#:#:Z #V))$
;;J**:66DllnnG"..t[AAGFO#//i@@GG!(DL,,T\::DLNN4<11111 TJQOOD!R00E$$Wg66ES))J**:q99K,,V-A;P[^bPbccL# "//~xPP
sZ%5%5%7%777#v/C[QQ##L&99D&&|Y??G((( #..unEE..{;;#//GG!%)-)9)9%AU)V)Vv&)5v&%3T"#00>>t|-=>>>>H$$)),AAW$$>Bh>N>N 9 9UfI#uiDDH%(]]N%))!&q#h--!8!8 Y YA&.qkG'+'9'9'?Td'e'eH%)%5%5h%?%?F)-)9)9'>)R)RJ'+'9'9*'E'EH#'#3#3FHhvFV#W#WD  $/*.,,..262D2DWN^`r2s2s262B2B7O2\2\797>t 4)/)97;7H7H7X7XV 4 #1c$ii00 G G*.q'"&,,..*.*:*:?L\^p*q*q*.*:*:?O*\*\%)%7%7Ya%b%b
#66zBB-4T*'+'8'8'F'FG q#d)),, C CA"1gG!%!1!1'8!D!DJ22:>>D"llnnG&*&6&6w@R&S&SGFO&*&6&6w&P&PGFO)0DL&#'#4#4T\#B#BDLLNN4<55555r]   c                 <   |                      |d          }|                     |j        d          }|                     ||          }|6|                     |d          }| ||||           ||j        v r|j        |= d|v r|                     ||           d S d S )Nrm   r   unsubbed)rq   index_byr   rp   r   handle_un_subscription)rZ   r   r   rm   subscriptionsByIdr   r   s          r\   handle_subscription_statuszhtx.handle_subscription_status  s    " gt,, MM&*>EE~~&7<<#__\8<<F!vw555 V)))(,  ''===== ! r]   r   c                    |                      |dg           }|                      |dg           }t          dt          |                    D ])}||         }||         }|                     |||           *|                     |           d S )Nr  subMessageHashesr   )	safe_listr   r   clean_unsubscriptionclean_cache)rZ   r   r   r  r  r   	unsubHashsubHashs           r\   r  zhtx.handle_un_subscription  s    |_bII>>,8JBOOq#m,,-- 	B 	BA%a(I&q)G%%fgyAAAA&&&&&r]   c                     |S N rZ   r   r   s      r\   handle_system_statuszhtx.handle_system_status  s	     r]   c                 "   |                      |dd          }|                    d          }|                     |d          }|dk    ri|                     |d          }| j        | j        | j        | j        | j        | j        | j        d}|                      ||          }| |||           d S |                    d          }	|                     |	dd          }
|
d	k    r|                     ||           d S |
                    d
          dk    r| 	                    ||           d S |
dk    r| 
                    ||           d S |                     |d          }|dk    r|                     |dd          }|                    d          dk    r| 
                    ||           |                    d          dk    r| 	                    ||           |                    d          dk    r|                     ||           d S d S d S )Nr   r?  r   r   ro      )rF   mbpdetailbbor{   r   kliner  ztrade.clearingzaccounts.updater"  opnotifyrv   r  r  )r   r   rq   r
  r   r   r   rE  findr  rR  r  )rZ   r   r   r   r   rj   
methodNamemethodsr   privatePartsprivateTyper  rv   s                r\   handle_subjectzhtx.handle_subject  s?   ^ __WdB//q))8))%33J/-,),+* G __Wj99F!vw'''xx}}&&|Q;;***  111F-..!33000F(""fg...Fgt,,>>$$Wgr::Ezz(##q((!!&'222zz)$$))##FG444zz+&&!++%%fg66666 > ,+r]   c                   K   	 |                      |d          }||                    d|i           d {V  d S |                     |d          }|dk    rN|                     |d          }|                      |d          }|                    dd|id           d {V  d S |                     |d          }|dk    r6|                      |d          }|                    d|d           d {V  d S d S # t          $ rM}t          | j        d	z   |                     |          z             }	|                    |	           Y d }~d S d }~ww xY w)
Npingpongactionr   r   )r  r   r  )r  r   z pong failed )	rc   sendrq   r   r   r   rm   exception_messager   )
rZ   r   r   r  r  r   pingTsr  r   errors
             r\   r  zhtx.pongj  s     	 $$Wf55Dkk64.111111111%%gx88Fw77**466kkVdF^"L"LMMMMMMMMM!!'400BV||**7D99kkv">">??????????? |  	  	  	  ?!:T=S=STU=V=V!VWWELL	 s%   5C9 A(C9 %AC9 9
EAEEc                 >    |                      | j        ||           d S r  )r  r  r  s      r\   handle_pingzhtx.handle_ping  s     

49fg.....r]   c                 J    |j         d         }|                    |           d S )Nauth)futuresr   )rZ   r   r   promises       r\   handle_authenticatezhtx.handle_authenticate  s(    * .(     r]   c                 l   |                      |d          }|dk    r)|                      |d          }|                     |j        d          }|                     ||          }||                      |d          }	 |                     | j        d         d         ||                     |                     t          |                     |                    # t          $ r]}|                      |d          }	|	                    ||	           |	                    ||           ||j        v r|j        |= Y d }~nd }~ww xY wdS | 
                    |d	d          }
|
|
d
k    r|
dk    r| j        dz   |                     |          z   }	 |                     | j        d         d         |
|           t          |          # t          $ rc}t          |t                    r/|	                    |d           d}||j        v r|j        |= Y d }~dS |	                    |           Y d }~nd }~ww xY wdS )Nr4  r  rm   zerr-coder!   rL   rw   Fr  200r  r   r  T)rq   r  r   r   throw_exactly_matched_exceptionrV   jsonr   r   r   r  rm   
isinstancer   )rZ   r   r   r4  rm   r  r   	errorCoder   rw   r  feedbackr   s                r\   handle_error_messagezhtx.handle_error_message  sp   @ !!'844W!!'400B $f.BD I I??+<bAAL' ,,WjAA	5889Nw9WYbdhdmdmnudvdvwww'		'(:(:;;;  5 5 5"&"2"2<"O"OKMM![111MM!R(((V111"045 5!!'6:>>$%--dckkw}tyy'9'99H%44T_T5J75SUY[cddd#H--- % % %a!455 %MM!V,,,#F!555"08 55555MM!$$$$$$$$% ts8   >AC 
E%AD==E7G 
H1>H,H,,H1c                    |                      ||          r`d|v r|                     ||           d S d|v rR|                     |d          }|dk    r|                     ||           d S |dk    r|                     ||           d S d|v r<|d         dk    r|                     ||           d S |                     ||           d S d|v r|                     |d          }|dk    r|                     ||           d S |dk    r|                     ||           d S |dk    r|                     ||           d S |dk    r|                     ||           d S d|v r|                     ||           d S d S d S )	Nrm   r  r  subr   r  r  r  )r   r  rq   r  r  r  )rZ   r   r   r  r  s        r\   handle_messagezhtx.handle_message  s   $$VW55 O	2Z w//@@@7""))'8<<V##$$VW555FU??33FGDDDFw4=F**,,VW===F ''888Fw%%gt44<<$$VW555F<<,,VW===F;;33FGDDDF>>''888F    11111_O	2 O	2\ ! r]   c                 (   | j         0|                     | j        dd          }t          |          | _         | j         }|                     |d          }||                     |d          }|a|                     |          }|                     |d          }	|	2|                    |           |                    | j         |           d S d S |                     |dg           }
|                     |d          }| 	                    |          }t          dt          |
                    D ]K}|
|         }|                     ||          }|                     ||          }|                    |           L|dz   d	z   }|                    | j         |           |                    d
|d         z   d          }|                     |d          }|                    d
|z   d          }|dz   d	z   }|                    | j         |           d S d S )NrJ   rA   r   r   rg   r   r   r  r   r   r  r?  r#  )myTradesrc   rU   r   rq   r   parse_ws_trader   r   ro   r   r   r   r   rF  rG  )rZ   r   r   extendParamsr   cachedTradesrw   r   r   rg   rK  rl   ro   r   r   rI  
tradesHashgenericOrderHashrQ  genericTradesHashs                       r\   rE  zhtx.handle_my_trade2  s)   h = %%dlM4HHE2599DM}&&w55"??7F33D,,T22))&(;;% ''///NN4=+>>>>> &% !OOGXrBB	??7H==X..q#i..11 5 5A%aLE"&"2"25&"A"AK"&++k<"H"HK ''4444 )3.8
t}j999 $/#6#6sVM=R7RTV#W#W "&"8"8"J"J#3#;#;C/<QSU#V#V $4s$:W$D!t}.?@@@@@C #"r]   c                 P   |                      |                     |d                    }|                     |dd          }|                     |d          }|                     |d          }|                     |d          }|                     |d          }|                     |d          }	|                     |          }|                     |d	          }
|                     |d
          }d }||rdnd}d }g }|
+|
                    d          }|                     |d          }d }|                     |                     |d                    }||                     |d          |d}|                     ||	| 	                    |	          ||||||||d |d|          S )Nrg   r=  	orderSiderr  rs  rt  rJ  ru  r!  rv  rw  rx  r`  r`   feeCurrencytransactFeer\  ry  )
r  rq   r  rc   ro   r   r   ri  r{  r   )rZ   r   ro   rg   r=  rr  r   r   r2  r   r!  rv  rz  rj   orderTypePartsrZ  r  s                    r\   r  zhtx.parse_ws_trade  s   2 !!$"2"25("C"CDD!!%==""5)44  55!!%77  	22%%e[99	V$$$$UK88	OOE;77	 &/<77WL &__S11N##NA66D--d.>.>um.T.TUU"((>>' C "Y//( 
  
   	r]   TFc                    |                      | j        dd          }d| j        i}d }d }|dk    r|r&| j        d         d         |         d         d         }nM|r&| j        d         d         |         d         d         }n%| j        d         d         |         d         d         }|                     ||          }nC| j        d         d         |         |         }	|r|	d         n|	d	         }
|r|
d         n|
d         }|S )
Nr8   hostnamer>   r!   r:   r;   r9   r<   r=   )rq   rU   r  rT   rr   )rZ   rj   r  	isPrivateisFeedr8   r  hostnameURLrx   baseUrl
subTypeUrls              r\   rs   zhtx.get_url_by_market_type  s   t|UE::$dm46>> P"i.t4S9&A)L P"&)E"24"8"=f"Ef"MKK"&)E"24"8"=f"Eh"OK%%k8<<CCi&t,S1$7G.6N**GI<NJ+4N*Y''*X:NC
r]   c                    K   |                                  }||d}||||d}|||d<   |                     |||                     ||          ||           d {V S )N)r  rm   )rm   rw   rg   ru   r   )rf   r   r   )	rZ   rx   rg   rw   r   ru   r_   r   r   s	            r\   rt   zhtx.subscribe_public  s      OO%%	
 

 &	
 
 %+L"ZZ[$++gv2N2NP[]ijjjjjjjjjr]   ro   r   rv   c                   K   |                                  }||d}d|z   }|dk    }|                     |d         |d         d|          }	d||g|g|d         g|d	}
|                     |d
          }|||
d
<   |                     |d
          }|                     |	||                     ||          ||
           d {V S )N)unsubrm   zunsubscribe::r   rj   r<   FTrg   )unsubscriberm   r  r  r}  rv   r   )rf   rs   r  r  r   r   )rZ   ro   r   rv   ru   r_   r   rw   r  rx   r   r   s               r\   r|   zhtx.unsubscribe_public  s     OO%%	#
 
 &6;&))&.&:JESYZZ!/ 0)]x()
 
  $~~f6LMM+3GL/0YYv'=>>FZZ[$++gv2N2NP[]ijjjjjjjjjr]   c                   K   |                                  }|||d}|                     ||          }	d }
|dk    rd|d}
nd||d}
|dk    }|                     ||d          }|dk    r| j        d         d         n| j        d         d	         }|||d
}|                     |           d {V  |                     |||                     |
|          ||	           d {V S )Nrm   rw   ru   r>   r  )r  r   )r  rv   cidr<   T	hostnamesr   )rj   rx   r  )rf   r   rs   rT   authenticater   )rZ   r~   rw   rj   subtyperu   r  r_   r   extendedSubsriptionr   r  rx   r  
authParamss                  r\   r  zhtx.subscribe_private	  sB     OO%%	&
 

 #kk,8JKK6>> GG    G
 h&))$$??6:fnn49[)&1149U`KablKm 
 


 
+++++++++ZZ[$++gv2N2NPWYlmmmmmmmmmr]   c                 4  K   |                      |d          }|                      |d          }|                      |d          }|||t          | j        dz             |                                  d}|                    d|z   d          }|                     |          }|                    |          }|                     |j        |          }	|	9| 	                    | 
                                d          }
d }|d	k    r| j        d
d|
d}n| j        d
d|
d}|                     |          }|                     |d          }d                    d|||g          }|                     |                     |          |                     | j                  t$          j        d          }d }|d	k    rd| j        d
d|
|d}|ddd}ndd| j        d
d|
|d}|                                 }|||d}|                     |||||           | d {V S )Nrx   r  rj   z8 authenticate requires a url, hostname and type argumentr  zwss://r?  Tr>   
HmacSHA256z2.1)	accessKeysignatureMethodsignatureVersionr   r  )AccessKeyIdSignatureMethodSignatureVersion	TimestampT
GETbase64r8   )authTyper'  r(  r)  r   	signaturer   )ru   r  r   )r  rj   r*  r+  r,  r-  	Signaturer  )rq   r   rm   r  rF  r   reusableFuturer   r   ymdhmsmillisecondsapiKeykeysort	urlencoder  hmacencodesecrethashlibsha256rf   r   )rZ   ru   rx   r  rj   rw   relativePathr   r?   authenticatedr   signatureParamsr  payloadr2  r   	newParamsr_   r   s                      r\   r   zhtx.authenticate*	  ss     vu--##FJ77//;(*dl#DG.h$hiii''))){{8h#6;;S!!&&{33(<kJJ D$5$5$7$7==I"Ov~~!%'3(-!*	# # $(;'3(+!*	# # #ll?;;O>>/488Dii, EFFG		$++g"6"6DK8P8PRYR`bjkkIGv~~ %!%'3(-!*!*# #	 (#   !!#';'3(+!*!*  ))I* " "L
 JJsK+|LLL||||||r]   r  )TFF)C__name__
__module____qualname__r   rY   rf   re   r   ry   r   r   r   r
   r   r   r   r   r   listr   r   r   r   r   r   r   r   r   r   r   r
  r   r   r  r  r   r.  rR  rD  r@  r   r   r  r  r   r  r  r  dictr  r  r  r  r  r  r	   r   r  rE  r  rs   rt   r   r|   r  r   __classcell__)r[   s   @r\   r   r      s3       u# u u u u u un   68 S S SF S S S S, 9; T TC Ts T T T T*-F - - - -^ <@d[] S S SS S Sbfglbm S S S S0 9; T TC Ts T T T T(%F % % % %N ?CQUdhqs H H H H3 H^a Hx|  ~B  yC H H H H4 BFb T T3 T3 TUX T T T T,!#6 !# !# !# !#F @DB &! &!S &! &!S\ &! &! &! &!P =? T T T3 T T T T6C* C* C* C* C*J     D& & &
3 3 3`< `< `< `< `<D?3 ?3 ?3 ?3 ?3BVV V V V V 37TX\eg 3U 3UC 3Us 3URU 3Ulpqvlw 3U 3U 3U 3Uj HLTV "& "& "& "&H 04$UYbd )S )S )SC )Ss )Simnsit )S )S )S )SV{86 {8 {8 {8 {8zg g g gR4 4 4 4l 8<$]ajl )q )qW )qC )qWZ )qquv~q )q )q )q )qVC@ C@ C@J *, Wm Wm Wm Wm Wm Wmr^6V ^6 ^6 ^6 ^6@> > > > >>'V '4 ' ' ' '6    v7V v7 v7 v7 v7p     2/& / / / /!& ! ! ! !0@6 @t @ @ @ @DP2V P2 P2 P2 P2d EG ZA ZAf ZA ZA ZA ZAx@ @ @ @D   ( GKSU k k k k  `b k kv ks kSV k k k k. SUik n n n n> )+ A A A A A A A Ar]   r   )$ccxt.async_supportccxt ccxt.async_support.base.ws.cacher   r   r   r   r=  ccxt.base.typesr   r   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   r   async_supportr   r  r]   r\   <module>rR     s       A  A  A  A  A  A  A  A  A  A  A  A  u u u u u u u u u u u u u u u u u u u u u u u u u u u u 4 4 4 4 4 4       * * * * * * 0 0 0 0 0 0 . . . . . . ' ' ' ' ' ' & & & & & & ) ) ) ) ) ) ) ) ) ) ) ) * * * * * *U% U% U% U% U%$

  U% U% U% U% U%r]   