
    i                        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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)BalancesIntNumOrder	OrderBook	OrderSide	OrderTypePositionStrStringsTickerTickersTrade)Client)List)ArgumentsRequired)
BadRequest)NotSupported)InvalidNonce)Precisec                   X    e Zd Z fdZd ZdVdZdi fdededefd	Z	di fd
e
e         de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efdZddi fd
e
e         dedede
e         fdZddi fdededede
e         fdZdWd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e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i fdedefdZdi fd
e de!fdZ"di fd
e de!fd Z#di fd!ed
e fd"Z$d# Z%defd$Z&defd%Z'defd&Z(d!ede)d'e*fd(Z+i fd)Z,i fd*Z-i fd+Z.dXdefd-Z/d. Z0i fde1fd/Z2defd0Z3i fde1fd1Z4defd2Z5i fd3edefd4Z6di fded5e7d6e8d7e9d8e:de;fd9Z<defd:Z=defd;Z>di fd<eded5e7d6e8d7e9d8e:de;fd=Z?defd>Z@di fd<ede)de;fd?ZAdi fde)fd@ZBdi fd<ede)de;fdAZCdddi fde)dedede
e;         fdBZDdddi fde)dedede
e;         fdCZEdddi fde)dedede
e;         fdDZFdddi fde)dedede
e;         fdEZGdWdFZHdefdGZIdddi fd
e dedede
eJ         fdHZKdYded
e fdIZLdJ ZMdK ZNdWdLZOdddi fde)dedede
e         fdMZPdddi fde)dedede
e         fdNZQdefdOZRdddi fde)dedede
e         fdPZSdefdQZTdefdRZUdS ZVdefdTZWdefdUZX xZYS )Zbinancec                 <   |                      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iddddddddid d!d"ii d#dd$d%d%d%d%d&d'd(d(d(d(d&d)|                                 d*d+d,d-d.d/d0d/d1d/d2|                                 d3d/dd4d5idd4d6idd4d6idd4d7id	d8d9idddd:ddd;d<d=d>d?id6d@dAdBdCdDdEdFdG          S )HNwsTwatchBalancewatchBidsAskswatchMyTrades
watchOHLCVwatchOHLCVForSymbolsFwatchOrderBookwatchOrderBookForSymbolswatchOrderswatchOrdersForSymbolswatchPositionswatchTickerwatchTickerswatchTradeswatchTradesForSymbolscreateOrderWseditOrderWs)cancelOrderWscancelOrdersWscancelAllOrdersWsfetchBalanceWsfetchDepositsWsfetchMarketsWsfetchMyTradesWsfetchOHLCVWsfetchOpenOrdersWsfetchOrderWsfetchOrdersWsfetchTradesWsfetchTradingFeesWsfetchWithdrawalsWszwss://testnet.binance.vision/wsz"wss://fstream.binancefuture.com/wsz"wss://dstream.binancefuture.com/wsz&wss://testnet.binance.vision/ws-api/v3)spotmarginfuturedeliveryr   z wss://stream.binance.com:9443/wszwss://fstream.binance.com/wszwss://dstream.binance.com/wsz&wss://ws-api.binance.com:443/ws-api/v3zwss://fstream.binance.com/pm/ws)r=   r>   r?   r@   r   papi)testapi	keepAlivei  returnRateLimitsstreamLimits2   )r=   r>   r?   r@   subscriptionLimitByStream   streamBySubscriptionsHashstreamIndexwatchOrderBookRated   tradesLimit  ordersLimit
OHLCVLimit	requestIdwatchOrderBookLimitnametradetickerkline
maxRetries   )fetchBalanceSnapshotawaitBalanceSnapshot)fetchPositionsSnapshotawaitPositionsSnapshotwbO cost   
miniTicker	ticker_1h	ticker_4h	ticker_1d
bookTicker)
24hrTicker24hrMiniTicker1hTicker4hTicker1dTickerrg   )r(   walletlistenKeyRefreshRater   tickerChannelsMap)hasurls	streamingoptions)deep_extendsuperr   describecreate_safe_dictionary)self	__class__s    V/var/www/html/crypto-bot/backend/venv/lib/python3.11/site-packages/ccxt/pro/binance.pyrv   zbinance.describe   sI   gt 4 4 = = ? ? d       	 
 d  '  !$  +D  t  (  !$  t    t  (    ! " t# $ "&"'%)"&#("'#' $%) $!%!%&+&+?     F  A"C"F$HF   B"D"@$BF A 	 , V="E=   "	! != ,!! #	. .= ,T-H-H-J-J= r=$ %c%=& t'=( t)=* d+=, T88::-=. &t/=0 G 1=6 H 7=< H!==B GC=H ! !#I=N ,1,0! !O=X /3.2# # (/A #+&2 + + +".& &i= = =uxB
 xB
 x x x	    c                     |                      | j        d|                                           }|                     ||d          }|                     |d          }|| j        d         |<   |S )NrS   r      )	safe_dictrs   rw   safe_integersum)rx   urlrs   previousValuenewValues        rz   
request_idzbinance.request_id   se    ..{D<W<W<Y<YZZ))'3::88M1--)1[!#&r{   r}   c                    |                      | j        d|                                           }|                     ||          }|8|                     | j        dd          }|                     | j        d          }|                     ||          }|dz   }||z  }	|| j        d<   |                     |	          }|| j        d         |<   |                     | j        d          }
|
|                                 | j        d<   |                     | j        d         |d          }||z   }|                     | j        d         |d	          }||k    rt          | j        d
z             ||z   | j        d         |<   |S )NrJ   rK   rL   rF   r}   numSubscriptionsByStreamr   rH   rI   z reached the limit of subscriptions by stream. Increase the number of streams, or increase the stream limit or subscription limit by stream if the exchange allows.)	r~   rs   rw   safe_stringr   
safe_valuenumber_to_stringr   id)rx   typesubscriptionHashnumSubscriptionsrJ   streamrK   rF   streamLimitnormalizedIndexsubscriptionsByStreamssubscriptionsByStreamnewNumSubscriptionsrH   s                 rz   r   zbinance.stream   s   $(NN4<A\^b^y^y^{^{$|$|!!!";=MNN>++DL-LLK??4<HHL++L$??K%/K)K7O*5DL'**?;;FJPDL456FG%)__T\C]%^%^"%-;?;V;V;X;X78$($5$5dlC]6^`fhi$j$j!"7:J"J(,(9(9$,Gb:ceikn(o(o%"%>>>   ,Q  "Q  R  R  R?TWg?gDL34V<r{   Nsymbollimitreturnc                 B   K   |                      |g||           d{V S )a  
        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
        N)watch_order_book_for_symbols)rx   r   r   paramss       rz   watch_order_bookzbinance.watch_order_book   s5      Z 66xOOOOOOOOOr{   symbolsc                 :  K   |                                   d{V  |                     |dddd          }|                     |d                   }|d         }|d         r|d         rdnd	}d
}d}|Gt          |          }|dk    rt	          | j        dz             |dd                    |          z   z  }|                     | j        dd          }	g }
g }t          dt          |                    D ]b}||         }|                     |          }|d         dz   |z   }|
                    |           |dz   |	z   dz   }|

                    |           ct          |          }| j        d         d         |         dz   |                     |||          z   }|                     |          }d|
|d}t          |          ||| j        |||d}|                     ||          }|                     |||||           d{V }|                                S )a  
        watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
        :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
        NFTr   r   contractlinearr?   r@   depthmultipleOrderbookrI   z} watchOrderBookForSymbols() accepts 200 symbols at most. To watch more symbols call watchOrderBookForSymbols() multiple times::,rM   100lowercaseId@msrC   r   /	SUBSCRIBEmethodr   r   )r   rU   r   r   r   r   r   )load_marketsmarket_symbolsmarketlenr   r   joinr   rs   rangeappendrq   r   r   strhandle_order_book_subscriptionextendwatch_multipler   )rx   r   r   r   firstMarketr   rU   
streamHashsymbolsLengthrM   	subParamsmessageHashesir   r   messageHash
symbolHashmessageHashesLengthr   rS   requestsubscriptionmessage	orderbooks                           rz   r   z$binance.watch_order_book_for_symbols   s      !!!!!!!!!%%gtUD$GGkk'!*--6"z" 	E*84D88*D(
LLMs""   ,k  "k  l  l  l$'!2!222J!--dl<PRWXX	q#g,,'' 	) 	)AQZF[[((F /#5<K  ---$s*-??$FJZ((((!-00it$T*S04;;tZQd3e3eeOOC((	!
 
 i..9
 
 ++gv..--c='=Zfgggggggg	   r{   c                   K   |                      |d          }|                      |d          }|                     |          }|d         dz   |z   }	 |                     | j        dd          }|                     |d          }	|                     |d|          }
|                     |d	          }|                     ||
|           d {V }|                     | j        |          }|d S |                    |           |j        }t          d
t          |                    D ]}||         }|                     |d          }|                     |d          }|                     |d          }|	dk    rI||d         k     r_||d         k    r||d         k    s||d         k    r|                     |||           ||d         k    r|dz
  |d         k    r&|dz
  |d         k    r|                     |||           || j        |<   |                    ||           d S # t          $ r)}|j        |= |                    ||           Y d }~d S d }~ww xY w)NrU   r   r   r   rT   rP   r   r   r   r   Uupur?   noncer}   )r   r   r   rs   r   fetch_rest_order_book_safe
orderbooksresetcacher   r   handle_order_book_messageresolve	Exceptionsubscriptionsreject)rx   clientr   r   rU   r   r   r   defaultLimitr   r   r   snapshotr   messagesr   messageItemr   r   r   es                        rz   fetch_order_book_snapshotz!binance.fetch_order_book_snapshot  s     f55!!,99V$$]+c1D8'	*,,T\;PRVWWL??<88D%%lG\JJE__\8<<F "<<VUFSSSSSSSSH@@I OOH%%% H1c(mm,, W W&qk%%k377%%k377&&{D998##9W--- Yw///a9W;M6M6MSUYbcjYkSkSk66v{IVVV Ig... Q9W#555QUyQXGY<Y<Y66v{IVVV&/DOF#NN9k22222 	* 	* 	*$[1MM![)))))))))	*s    BH' .D7H' '
I1IIc                     |                      |d          }|                      |d          }|                    ||           d S )Nr   r}   )
safe_floatstore)rx   booksidedeltapriceamounts        rz   handle_deltazbinance.handle_delta?  sB    q))**uf%%%%%r{   c                 ~    t          dt          |                    D ]}|                     |||                    d S )Nr   )r   r   r   )rx   r   deltasr   s       rz   handle_deltaszbinance.handle_deltasD  sH    q#f++&& 	3 	3Ahq	2222	3 	3r{   r   c                 f   |                      |d          }|                     |d         |                     |dg                      |                     |d         |                     |dg                      ||d<   |                      |d          }||d<   |                     |          |d	<   |S )
Nr   asksabidsbr   E	timestampdatetime)r   r   r   iso8601)rx   r   r   r   r   r   s         rz   r   z!binance.handle_order_book_messageH  s    gs++9V,doogsB.O.OPPP9V,doogsB.O.OPPP	'%%gs33	!*	+ $Y 7 7	*r{   c                    |j                             d          dk    }|j                             d          dk    }|p|}|rdnd}|                     |d          }|                     |d d |          }|d         }	d}
|d	         d
z   |
z   }|                     | j        |	          }|d S |                     |d          }||j                            |           d S 	 |                     |d          }|                     |d          }|                     |d          }|||d         k    r|                     |d          }d }||dz
  |d         k    o|dz
  |d         k    }n|dz
  |d         k    }|r=| 	                    |||           ||d         k     r|
                    ||           d S d S |                     | j        dd          }|rt          | j        dz             d S d S ||d         k    r||d         k    s||d         k    r=| 	                    |||           ||d         k    r|
                    ||           d S d S |                     | j        dd          }|rt          | j        dz             d S d S # t          $ r1}| j        |	= |j        |= |                    ||           Y d }~d S d }~ww xY w)Ntestnetr   z/stream.binance.r=   r   sr   r   r   r   r   r   r   r   r   r}   checksumTz/ handleOrderBook received an out-of-order nonce)r   findr   safe_marketr   r   r   r   r   r   r   	safe_boolrs   r   r   r   r   r   )rx   r   r   isTestnetSpotisSpotMainNetisSpot
marketTypemarketIdr   r   rU   r   r   r   r   r   r   r   conditionalr   r   s                        rz   handle_order_bookzbinance.handle_order_bookR  sy   & 
	22Q6
(:;;a?/-%5VV:
##GS11!!(D$
CC!]+c1D8OODOV<<	 F!!)W55=O""7++++++.%%gs33%%gs33&&w55: 9W---$($5$5i$M$M	&*$,,-Ei6H+H*mPQTUPUZcdkZlOlKK -.Ei6H+HK& p ::67IVVV$y'999 &y+ F F F F F  :9 (,~~dlJPT'U'UH' p&247=n3n&o&o o# .-p p Ig... 7!333y?Q9Q9Q ::67IVVV$	'(::: &y+ F F F F F  ;: (,~~dlJPT'U'UH' p&247=n3n&o&o o /.p p  . . .OF+(5a---------.s,   !CJ 85J 1AJ 5J 
K&KKc                    |                      | j        dd          }|                     |d          }|                     |d|g          }|                      |d|          }t	          dt          |                    D ]n}||         }	|	| j        v r| j        |	= |                     i |          | j        |	<   |                     |d|	i          }| 	                    | j
        |||           od S )NrT   rP   r   r   r   r   )r   rs   r   r   r   r   r   
order_bookr   spawnr   )
rx   r   r   r   r   symbolOfSubscriptionr   r   r   r   s
             rz   r   z&binance.handle_order_book_subscription  s    ((7LdSS#//hGG//,	<P;QRR!!,FFq#g,,'' 	V 	VAQZF((OF+&*oob%&@&@DOF#;;|h5GHHLJJt5vwUUUU	V 	Vr{   c                     |                      |d          }|                     |j        d          }|                     ||i           }|                     |d          }| ||||           |S )Nr   r   )r   index_byr   r   )rx   r   r   r   subscriptionsByIdr   r   s          rz   handle_subscription_statusz"binance.handle_subscription_status  sx     gt,, MM&*>EE'8"bAAx88F67L111r{   sincec                   K   |                                   d{V  |                     |dddd          }d}|Gt          |          }|dk    rt          | j        dz             |dd                    |          z   z  }|                     | j        d	i           }|                     |d
d          }| 	                    |d                   }	|	d         }
|	d         r|	d         rdnd}
g }t          dt          |                    D ]B}||         }| 	                    |          }|d         dz   |z   }|                    |           C|                     |d          }t          |          }| j        d         d         |
         dz   |                     |
||          z   }|                     |          }d||d}d|i}|                     |||                     ||          ||           d{V }| j        rB|                     |d          }|                     |d          }|                    ||          }|                     |||dd          S )a  
        get the list of most recent trades for a list of symbols
        :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>`
        NFTmultipleTradesrI   zw watchTradesForSymbols() accepts 200 symbols at most. To watch more symbols call watchTradesForSymbols() multiple timesr   r   r,   rU   rV   r   r   r   r   r?   r@   r   r   rC   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   rs   r   r   r   r   omitrq   r   r   r   r   
newUpdatesgetLimitfilter_by_since_limit)rx   r   r  r   r   r   r   rs   rU   r   r   r   r   r   r   currentMessageHashquerysubParamsLengthr   rS   r   	subscribetradesfirsttradeSymbols                            rz   watch_trades_for_symbolsz binance.watch_trades_for_symbols  s      !!!!!!!!!%%gtUD$GG%
LLMs""   ,e  "e  f  f  f$'!2!222J//$,0GLL99kk'!*--6"z" 	E*84D88*D	q#g,,'' 	1 	1AQZF[[((F!'!6!<t!C/0000		&&))i..it$T*S04;;tZQ`3a3aaOOC((	!
 
 )
	 **3	4;;wPU;V;VXaclmmmmmmmm? 	8OOFA..E**5(;;KOOK77E))&%TRRRr{   c                 D   K   |                      |g|||           d{V S )a  
        get the list of most recent trades for a particular symbol
        :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)r  )rx   r   r  r   r   s        rz   watch_tradeszbinance.watch_trades  s6       22F8UE6RRRRRRRRRr{   c                    |                      |d          }|dk    }|s|                     ||          S |                     |dd          }|                     |d          }|                     |dd          }|                      |d          }|r|                      |d	|          }|                      |d
          }	|	||t	          j        ||          }	|                      |d          }
d|v rdnd}|                     |
d d |          }|                     |d          }d }|                      |d          }d|v r||d         rdnd}|d         rdnd}d }|                      |d          }|0|                      |d          }|                     |          }||d}|                     |d          }| 	                    ||| 
                    |          |||||||||	|d          S )NxTRADEtr   TLpqlYr   psr   r=   Sr   msellbuymakertakernNra   currencyo)infor   r   r   r   orderr   takerOrMakersider   r   ra   fee)r   parse_tradesafe_string_2r   r   
string_mulsafe_symbolsafe_string_lowersafe_currency_code
safe_trader   )rx   rV   r   executionTypeisTradeExecutionr   r   r   r   ra   r   r   r   r,  r+  orderIdr-  feeCostfeeCurrencyIdfeeCurrencyCoder   s                        rz   parse_ws_tradezbinance.parse_ws_trade  sU   R ((44)W4 	3##E6222sC00%%eS11	""5#s33!!%-- 	:%%eS&99Fs++<!(:)%88##E3//$(EMMZZ
!!(D$
CC%%eS11""5#..%<<|!&s6vv&+Cj=77gL""5#.. ,,UC88M"55mDDO+ C %%eS11"Y//( 
  
   	r{   c                    |j                             d          dk    p|j                             d          dk    }|rdnd}|                     |d          }|                     |d d |          }|d         }|                     |d          }|                     |d          }	|d	z   |	z   }
|                     ||          }|                     | j        |          }|+|                     | j	        d
d          }t          |          }|                    |           || j        |<   |                    ||
           d S )Nzwss://stream.binance.comrL   /testnet.binancer=   r   r   r   r   r   rO   rP   )r   r   r   r   r2  r;  r   r  r   rs   r   r   r   )rx   r   r   r   r   r   r   r   lowerCaseIdeventr   rV   tradesArrayr   s                 rz   handle_tradezbinance.handle_trade  sF    :??#=>>CrYkIlIloqIq &7VVZ
##GS11!!(D$
CC!,,Wc::  #..!C'%/##GV44oodk6::%%dlM4HHE$U++K5!!!)F{K00000r{   1mc                 p  K   |                                   d{V  |                     |          }|d         }|                     | j        ||          }|                     | j        di           }	|                     |	dd          }
|                     |d|
          }|dk    r|                    dd          }|                     |d          }|d	z   |z   d
z   |z   }|d         }|d         r|d         rdnd}| j        d         d         |         dz   | 	                    ||          z   }| 
                    |          }d|g|d}d|i}|                     |||                     ||          ||           d{V }| j        r|                    ||          }|                     |||dd          S )aQ  
        watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
        :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
        Nr   r"   rU   rX   indexPriceKline_perp r   _r   r   r   r?   r@   rC   r   r   r   r   r   r   T)r   r   r   
timeframesr   rs   replacer  rq   r   r   watchr   r  r  r  )rx   r   	timeframer  r   r   r   r   intervalrs   
nameOptionrU   r   r   r   rS   r   r  ohlcvs                      rz   watch_ohlcvzbinance.watch_ohlcv  s      !!!!!!!!!V$$-(##DOY	JJ//$,bAA%%gvw??

;;$$$''44H66**nt+c1H<f~* 	@%h/?88ZDit$T*S04;;t[3Q3QQOOC((	! 
 
 )
	 jjk4;;w3O3OQ\^ghhhhhhhh? 	2NN6511E))%q$GGGr{   c           	         |                      |d          }ddd}|                      |||          }|                     |d          }|                     |dd          }|dk    r|                      |d          }|                                }|                      |d          }|                     |          }	|d	z   |z   d
z   |z   }
|                     |d          |                     |d          |                     |d          |                     |d          |                     |d          |                     |d          g}|j                            d          dk    p|j                            d          dk    }|rdnd}| 	                    |d d |          }|                     | j
        |i           | j
        |<   |                     | j
        |         |	          }|;|                     | j        dd          }t          |          }|| j
        |         |	<   |                    |           |                    ||
           d S )Nr   rD  markPriceKline)indexPrice_klinemarkPrice_klinekr   r  r   r   rG  r  r(  hr  cv/streamrL   r=  r=   r   rR   rP   )r   r   r/  lowerfind_timeframer   r   r   r   r1  ohlcvsrs   r   r   r   )rx   r   r   r?  eventMaprX   r   lowercaseMarketIdrL  rK  r   parsedr   r   r   storedr   s                    rz   handle_ohlcvzbinance.handle_ohlcv  sJ   6   #.. 1/
 
   5%88--%%eS$77%%%''66H$NN,,##E3//''11	'#-5;hFeS))OOE3''OOE3''OOE3''OOE3''OOE3''
 :??9--2a
HZ8[8[^`8` &7VVZ
!!(D$
CC"oodk62FFFV!4i@@>%%dlL$GGE*511F-3DK	*fv{+++++r{   c                 j  K   |                                   d{V  |                     d||           | j        d         d         d         }|                     |          }t	          |          }d}	|                     |ddd          \  }	}|                     |          |	| j        |         d}
|                     |d          }| 	                    |d          }|||
d	<   |||
d
<   |||
d<   |d| 
                    |
|          d}d| j        i}|                     |||||           d{V S )aT  
        :see: https://binance-docs.github.io/apidocs/websocket_api/en/#klines
        query historical candlestick data containing the open, high, low, and close price, and the volume of a market
        :param str symbol: unified symbol of the market to query 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
        :param int params['until']: timestamp in ms of the earliest candle to fetch
         *
         * EXCHANGE SPECIFIC PARAMETERS
        :param str params['timeZone']: default=0(UTC)
        :returns int[][]: A list of candles ordered, open, high, low, close, volume
        Nr6   rC   r   FrE   )r   rE   rL  until	startTimer   endTimeklinesr   r   r   r   )r   check_is_spotrq   r   r   handle_option_and_params	market_idrH  r   r  r   handle_fetch_ohlcvrJ  )rx   r   rK  r  r   r   r   rS   r   rE   payloadrb  r   r   s                 rz   fetch_ohlcv_wszbinance.fetch_ohlcv_ws  s      !!!!!!!!!>66:::it$T*OOC((	)nn #'#@#@Ykmr#s#s &nnV,, 0	2
 

 !!&'2267++#(GK $GG!&GIkk'622
 
 d-
 ZZ[';UUUUUUUUUr{   c                     |                      |d          }|                     |          }|                     |d          }|                    ||           d S )Nresultr   )	safe_listparse_ohlcvsr   r   )rx   r   r   rn  r^  r   s         rz   rj  zbinance.handle_fetch_ohlcvJ  sZ    @ 22""6**&&w55v{+++++r{   c                    K   |                                   d{V  |                     |          }|                     |g|                     |ddi                     d{V }||         S )a  
        watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
        :param str symbol: unified symbol of the market to fetch the ticker for
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param str [params.name]: stream to use can be ticker or miniTicker
        :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
        NcallerMethodNamer)   )r   r   watch_tickersr   )rx   r   r   tickerss       rz   watch_tickerzbinance.watch_tickerp  s       !!!!!!!!!V$$**F8T[[J\^kIl5m5mnnnnnnnnvr{   c                    K   d}|                      |ddd          \  }}|dk    rt          | j        dz             |                     d|||           d{V }| j        r|S |                     | j        d|          S )a  
        watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
        :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>`
        Nr*   rU   rW   rg   zV deprecation notice - to subscribe for bids-asks, use watch_bids_asks() method insteadr   )rh  r   r   watch_multi_ticker_helperr  filter_by_arrayrt  )rx   r   r   channelName
newTickerss        rz   rs  zbinance.watch_tickers}  s       ";;FNTZ\deeV,&&TW'  A  A  A99.+W^`fgggggggg
? 	##DL(GDDDr{   c                    K   |                      dd||           d{V }| j        r|S |                     | j        d|          S )aN  
        :see: https://binance-docs.github.io/apidocs/spot/en/#individual-symbol-book-ticker-streams
        :see: https://binance-docs.github.io/apidocs/futures/en/#all-book-tickers-stream
        :see: https://binance-docs.github.io/apidocs/delivery/en/#all-book-tickers-stream
        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>`
        r    rg   Nr   )rw  r  rx  rt  )rx   r   r   rn  s       rz   watch_bids_askszbinance.watch_bids_asks  s^       55o|U\^deeeeeeee? 	M##DL(GDDDr{   ry  c                   K   |                                   d {V  |                     |d ddd          }d }d }|d u}|r|                     |d                   }|                     |||          \  }}d }|                     |||          \  }}d }	|                     ||          rd}	n?|                     ||          rd}	n&|dk    r|}	nt          | j        dz   |z   dz             |d	k    }
g }g }|rt          dt          |                    D ]p}||         }|                     |          }|                    |d
         dz   |z              |                    |                     ||d         |
                     qn|
r<|dk    rt          | j        dz   |z   dz             |                    d|z              n|                    d|z   dz              |                    |                     |d |
                     |}|r|dz   d                    |          z   }| j        d         d         |	         dz   |                     |	|          z   }|                     |          }d||d}d|i}|                     |||                     ||          ||           d {V }|s|S i }|||d         <   |S )NTFr   r?   r@   r=    z#() does not support options marketsrg   r   r   r   z5() requires symbols for self channel for spot markets!@arrr   r   rC   r   r   r   r   r   )r   r   r   handle_market_type_and_paramshandle_sub_type_and_paramsisLinear	isInverser   r   r   r   r   get_message_hashr   r   rq   r   r   r   rt   )rx   
methodNamery  r   r   r   r   symbolsDefinedsubTyperawMarketTypeisBidAsksubscriptionArgsr   r   r   r   r   r   rS   r   r  rn  newDicts                          rz   rw  z!binance.watch_multi_ticker_helper  ss     !!!!!!!!!%%gtT5$GG
!- 	2++gaj11K!??
KY_``
F99*kSYZZ==W-- 	c$MM^^J00 	c&MM6!!&MMtw}z9<aabbb</ 	U1c'll++ e e V,, ''}(=(Ck(QRRR$$T%:%:;xHXZb%c%cdddd	e  D''+DGcMJ,F  JA  -A  B  B  B ''k(9:::: ''k(9F(BCCC  !6!6{D(!S!STTT 
 	@$t+chhw.?.??Jit$]3c9DKKWa<b<bbOOC((	!&
 
 )
	 **3t?O?OPWY_?`?`brt}~~~~~~~~  	MG(.GF8$%Nr{   c                 0   |                      |dd          }|dk    rd}d }|dk    r|                     |d          }n|                     |dd          }|                      |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|d|                      |d          d |                      |d!          d"|                      |d#          d$d |                      |d%          |                      |d&          |d'|          S )(Nr   rg   rh   rW   r   Cr   rV  r   r   r   highrU  lowr  bidr   	bidVolumeBaskr   	askVolumeAvwapwopenr(  closelastpreviousCloser  changer  
percentagePaveragerW  r  )
baseVolumequoteVolumer)  )r   r   safe_integer_2r1  r   safe_tickerr   )	rx   r   r   r?  r   r   r   r   r  s	            rz   parse_ws_tickerzbinance.parse_ws_ticker  s   T   #|<<L  E	L  ))'377II ++GS#>>I##GS11!!(D$
CC!!(D$
CC-- !
f!
!
 Y//!
 D$$Wc22	!

 4##GS11!
 4##GS11!
 ))'377!
 4##GS11!
 ))'377!
 D$$Wc22!
 D$$Wc22!
 T!
 D!
 T--gs;;!
 d&&w44!
  $**7C88!!
" t#!
$ **7C88++GS99)!
 !
 !
* +  	r{   c                 4    |                      ||d           d S )Nbidaskshandle_tickers_and_bids_asksrx   r   r   s      rz   handle_bids_askszbinance.handle_bids_asks'  s"     	))&'9EEEEEr{   c                 4    |                      ||d           d S )Nrt  r  r  s      rz   handle_tickerszbinance.handle_tickers6  s"    < 	))&'9EEEEEr{   c                 N   |j                             d          dk    p|j                             d          dk    }|rdnd}|dk    }d }g }g }	i }
t          |t                    r|}	n|	                    |           t          dt          |	                    D ]}|	|         }|                     |d          }|rd	}|                     | j        d
         ||          }|I| 	                    ||          }|d         }||
|<   |r|| j
        |<   n
|| j        |<   |                     |||          }|                    |           |                    ||           t          |          }|dk    r/|                     |d |          }|                    |
|           d S d S )NrX  rL   r=  r=   r   r  r   r   rg   ro   r   )r   r   
isinstancelistr   r   r   r   rs   r  bidsasksrt  r  r   )rx   r   r   
methodTyper   r   r  ry  resolvedMessageHashes
rawTickersrz  r   rW   r?  parsedTickerr   r   lengthbatchMessageHashs                      rz   r  z$binance.handle_tickers_and_bids_asksV  s   :??9--2a
HZ8[8[^`8` &7VVZ
)+ "

gt$$ 	' JJg&&&q#j//** 	6 	6A]F$$VS11E %$**4<8K+LeUZ[[K"//
CCL!(+F!-Jv 4(4f%%'3V$//VXNNK!((555NN<5555*++A::#44[$QQNN:'788888 :r{   r  c                 D    |rdnd}||dz   |z   dz   |z   S |dz   dz   |z   S )NbidaskrW   :r   r    )rx   ry  r   r  prefixs        rz   r  zbinance.get_message_hashz  sC    %38C<+-3f<<C<#%33r{   c                    |                                   |                     |                                 | j        d|          }|                     | j        d          }|||d<   |                     |d          }|||d<   |                     |          }|                     |          }d }| j        	                    d          dk    ret          | j                  dk    r|                     || j        d          }n||                     |                     |          | j        d          }nL|                     |                     |          |                     | j                  t          j                  }||d<   |S )	N)r   apiKey
recvWindowzPRIVATE KEYrL   x   sha256ed25519	signature)check_required_credentialsr   r   r  r   rs   keysort	urlencodesecretr   r   rsaeddsaencodehmachashlibr  )rx   r   extendedParamsdefaultRecvWindowr  r
  r  s          rz   sign_paramszbinance.sign_params  sm   '')))k&
 &
   !--dlLII(#4F< &&v|<<
!#-F< n55~..	;M**R//4;#%% HHUDKBB		 JJt{{5'9'94;	RR				$++e"4"4dkk$+6N6NPWP^__I&/{#r{   c                   K   |                                  }d }|                     dd |          \  }}d }|                     dd |          \  }}d }|                     |dddd          \  }}|                     ||          rd}n|                     ||          rd}d }|                     d|          \  }}|dk    }|dk    p|d u }|                     |d	          }	|                     |d	          }| 	                    | j
        |i           }
|                     |
d
d          }|                     | j
        dd          }|                     |d          }||z
  |k    rZd }|r|                     |           d {V }n|dk    r|                     |           d {V }n|dk    r|                     |           d {V }n|dk    r|r|                     |           d {V }n|rb|	t#          | j        dz             |                     |	          }|                     |d	|i          }|                     |           d {V }n|                     |           d {V }|                     |
|                     |d          |d          | j
        |<   |                     || j        |           d S d S )NauthenticaterA   portfolioMarginFr?   r@   isolatedcrossr   lastAuthenticatedTimer   rn   r`   i'  r>   zC authenticate() requires a symbol argument for isolated margin mode	listenKeyr  r  )millisecondsr  r  handle_option_and_params_2r  r  handle_margin_mode_and_paramsr   r  r   rs   r   r   papiPostListenKeyfapiPrivatePostListenKeydapiPrivatePostListenKeysapiPostUserDataStreamr   r   ri  r   sapiPostUserDataStreamIsolatedpublicPostUserDataStreamdelaykeep_alive_listen_key)rx   r   timer   r  isPortfolioMargin
marginModeisIsolatedMarginisCrossMarginr   rs   r  rn   r  responser   s                   rz   r  zbinance.authenticate  sc       ""99.$PVWWf99.$PVWW $($C$CFN\bduw|$}$}!6==w'' 	DD^^D'** 	D
!??PVWW
F&*4#w.GJ$4F!!&(3368,,//$,b99 $ 1 1';RTU V V#00?UW^__-u55''%//H  G!%!7!7!?!???????!!!%!>!>v!F!FFFFFFF##!%!>!>v!F!FFFFFFF!!m!!%!<!<V!D!DDDDDDD! G>+DG6{,{|||>>&11Vh-ABB!%!D!DV!L!LLLLLLL!%!>!>v!F!FFFFFFF!%W!--hDD)-7 7 " "DL JJ+T-GPPPPP- 0/r{   c                 .  K   |                      | j        ddd          }|                     |d|          }d }|                     |dddd          \  }}|                     dd |          }|d	         }|                     ||          rd
}n|                     ||          rd}|                     | j        |i           }|                     |d          }|d S i }|                     |d          }	|                     |ddg          }| 	                                }
	 |r0| 
                    |                     ||                     d {V  n|d
k    r0|                     |                     ||                     d {V  n|dk    r0|                     |                     ||                     d {V  no||d<   |dk    r5|	|d<   |                     |                     ||                     d {V  n/|                     |                     ||                     d {V  n# t           $ r}|}|rd}| j        d         d         |         dz   | j        |         d         z   }|                     |          }t'          |j                                                  }t-          d	t/          |                    D ] }||         }|                    ||           !|                     |d d	d          | j        |<   Y d }~d S d }~ww xY w|                     |||
d          | j        |<   t'          | j                                                  }|                     | j        dd          }t-          d	t/          |                    D ]~}||         }t'          |j                                                  }t-          d	t/          |                    D ]0}||         }||k    r |                     || j        |             d S 1d S )NdefaultTyper  r=   r   keepAliveListenKeyrA   r  Fr   r?   r@   r  r   r>   rC   r   r   r  rn   r`   )r/  rs   r   r  r  r  r  r   r  r  papiPutListenKeyr   fapiPrivatePutListenKeydapiPrivatePutListenKeysapiPutUserDataStreampublicPutUserDataStreamr   rq   r   r  futureskeysr   r   r   clientsvaluesr   r   r  r  )rx   r   r   r  subTypeInfor  rs   r  r   r   r  errorurlTyper   r   r   r   r   r  rn   subscriptionKeysjsubscribeTypes                          rz   r  zbinance.keep_alive_listen_key  s     !!$,~vVV55 $($C$CFL`bhj{  ~C  %D  %D!6556JDRXYYa.==w'' 	DD^^D'** 	D//$,b99$$Wk::	F!!&(336FH#566  ""	  U++DKK,H,HIIIIIIIIII!!224;;w3O3OPPPPPPPPPP##224;;w3O3OPPPPPPPPPP'0$8##(.GH%44T[[&5Q5QRRRRRRRRRR66t{{7F7S7STTTTTTTTT 	 	 	G  ! )E"4(1C7$,t:L[:YYC[[%%F !4!4!6!677M1c-0011 2 2+A.e[1111!%W!)*7 7 " "DL FFFFF	 "[["%)3
 3
  T
 t|**,,--#00?UW^__q#g,,'' 	 	AQZF#F$8$=$=$?$?@@1c"23344   0 3 D((JJ3T5OQWXXXFFF )	 	s    DH. .
L8CLLFc                 "   ||j         v rd S |                     | j        d          }|                     |dd          }|rE|dz   }||j        vr5|                    |           |                     | j        ||||           d S d S i | j        |<   d S )Nr   r[   F:fetchBalanceSnapshot)	r   r   rs   r   r  r?   r   load_balance_snapshotbalance)rx   r   r   r  rs   r[   r   s          rz   set_balance_cachezbinance.set_balance_cache
  s    6'''F//$,??#~~g7MuUU 	$!88K6>11k***

45v{DRcddddd 21 "$DLr{   c                 P  K   d|i}|rd|d<   |                      |           d {V }|                     ||                     | j        |i                     | j        |<   |j        |         }|                                 |                    | j        |         |dz              d S )Nr   Tr  :balance)fetch_balancer   r   r  r  r   )rx   r   r   r   r  r   r  r?   s           rz   r  zbinance.load_balance_snapshot  s      D
  	-(,F$%++F33333333![[4??4<QUWY3Z3Z[[T,t|D)4*+<=====r{   c                   K   |                                   d{V  | j        d         d         d         }|                     |          }t          |          }d}|                     |ddd          \  }}d|i}|d|                     |                     ||                    d}d	| j        i}|                     |||||           d{V S )
a  
        fetch balance and get the amount of funds available for trading or funds locked in orders
        :see: https://binance-docs.github.io/apidocs/websocket_api/en/#account-information-user_data
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param str|None [params.type]: 'future', 'delivery', 'savings', 'funding', or 'spot'
        :param str|None [params.marginMode]: 'cross' or 'isolated', for margin trading, uses self.options.defaultMarginMode if not passed, defaults to None/None/None
        :param str[]|None [params.symbols]: unified market symbols, only used in isolated margin mode
        :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
        NrC   r   Fr-   rE   zaccount.statusrf  r   )	r   rq   r   r   rh  r  r   handle_balance_wsrJ  )	rx   r   r   rS   r   rE   rk  r   r   s	            rz   fetch_balance_wszbinance.fetch_balance_ws$  s      !!!!!!!!!it$T*OOC((	)nn #'#@#@Zlns#t#t & 0
 &&&t{{7F'C'CDD
 
 d,
 ZZ[';UUUUUUUUUr{   c                     |                      |d          }|                     |di           }|                     |          }|                    ||           d S Nr   rn  )r   r   parse_balancer   )rx   r   r   r   rn  parsedBalancess         rz   r  zbinance.handle_balance_wsA  s\    Z &&w55(B77++F33~{33333r{   c                   K   |                                   d{V  |                     |           d{V  |                     | j        dd          }|                     |d|          }d}|                     dd|          \  }}d}|                     |dddd          \  }}|}|rd}|                     ||          rd	}n|                     ||          rd
}| j        d         d         |         dz   | j        |         d         z   }| 	                    |          }| 
                    |||           |                     ||d|           |                     | j        d          }	|                     |	dd          }
|                     |	dd          }|
r |r|                    |dz              d{V  |dz   }d}|                     ||||           d{V S )a  
        watch balance and get the amount of funds available for trading or funds locked in orders
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param boolean [params.portfolioMargin]: set to True if you would like to watch the balance of a portfolio margin account
        :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
        Nr  r=   r   r   rA   r  Fr?   r@   rC   r   r   r  r[   r\   Tr  r  )r   r  r   rs   r  r  r  r  rq   r   r  set_positions_cacher   r   r?   rJ  )rx   r   r  r   r  r  r  r   r   rs   r[   r\   r   r   s                 rz   watch_balancezbinance.watch_balances  s@      !!!!!!!!!'''''''''&&t|]FKK<<99.$PVWW $($C$CFN\bduw|$}$}!6 	G==w'' 	DD^^D'** 	Dit$W-3dl46H6UUS!!vt->???  t5FGGG//$,??#~~g7MuUU#~~g7MtTT 	@$8 	@--'> >?????????Z'ZZ['4@@@@@@@@@r{   c                    |                      | j        dd          }t          |j                                                  }|d         }|dz   }| j        |         
i | j        |<   || j        |         d<   |                     |d          }|dk    r|                     |d          }|                     |          }	|                                 }
|                     |d	          }|	| j        |         v r\| j        |         |	         d
         }t          |t                    s|                     |          }t          j        ||          |
d
<   n||
d
<   |
| j        |         |	<   n|                      |d|          }|                      |d          }t          dt          |                    D ]}||         }|                     |d          }|                     |          }	|                                 }
|                     |d          |
d
<   |                     |d          |
d<   |                     ||          |
d<   |
| j        |         |	<   |                     |d          }|| j        |         d<   |                     |          | j        |         d<   |                     | j        |                   | j        |<   |                    | j        |         |           d S )Nrm   r_   r   r  r)  r   balanceUpdater   dfreer  fr  usedtotalr   r   r   )r   rs   r  r   r  r  r   r3  accountr  r   r   r   
string_addr   r   r   r   safe_balancer   )rx   r   r   rm   r   accountTyper   r?  
currencyIdcoder  r   r   r  r   entryr   s                    rz   handle_balancezbinance.handle_balance  s   t x>> V1668899#A&!J.<$,(*DL%,3[!&)  #..O##))'377J**:66DllnnG$$Wc22Et|K000 $[ 9$ ? G!-55 I$($9$9-$H$HM")"4]E"J"J"'.5DL%d++oogsG<<G--A1c!ff%% : :!!--eS99
..z::,,.."&"2"25#">">"&"2"25#">">#'#3#3E6#B#B 29[)$//%%gs33	1:[!+.04Y0G0G[!*-$($5$5dl;6O$P$P[!t|K0+>>>>>r{   r   c                 .   |X|                      |dd          }|                      | j        d|          }|dk    rdS t          | j        dz   |z   dz             |                     |          }|d         st          | j        dz   |z   dz             dS )z
         * @ignore
        checks if symbols is a spot market if not throws an error
        :param str method: name of the method to be checked
        :param str symbol: symbol or marketId of the market to be checked
        Nr   r=   r  r~  z only supports spot markets)r   rs   r   r   r   )rx   r   r   r   r   r  r   s          rz   rg  zbinance.check_is_spot  s     >##FFF;;D**4<MMKf$$TWs]V36SSTTTV$$f~ 	UTWs]V36SSTTT	U 	Ur{   r   r,  r   r   c                   K   |                                   d{V  |                     d||           | j        d         d         d         }|                     |          }t	          |          }	|                     |ddd          }
|                     |dd          }|                     ||||||          }d}|                     |ddd          \  }}||d<   | 	                    |d	d          }|                     |d	          }|	d
| 
                    |                     ||                    d}|r|
rd|d<   nd|d<   d| j        i}|                     ||	||	|           d{V S )a  
        :see: https://binance-docs.github.io/apidocs/websocket_api/en/#place-new-order-trade
        create a trade order
        :param str symbol: unified symbol of the market to create an order in
        :param str type: 'market' or 'limit'
        :param str side: 'buy' or 'sell'
        :param float amount: how much of currency you want to trade in units of base currency
        :param float|None [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param boolean params['test']: test order, default False
        :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
        Nr-   rC   r   sorSORFrE   rB   zorder.placerf  zsor.order.testr   z
order.test)r   rg  rq   r   r   safe_value_2r  create_order_requestrh  r   r  r   handle_order_wsrJ  )rx   r   r   r,  r   r   r   r   rS   r   r  rk  rE   rB   r   r   s                   rz   create_order_wszbinance.create_order_ws
  s      !!!!!!!!!?FF;;;it$T*OOC((	)nnue<<65%00++FD$vVV #'#@#@Zlns#t#t &&6"#~~ffe4466**#&&t{{7F'C'CDD
 

  	1 1$4!!$0!d*
 ZZ[';UUUUUUUUUr{   c                     |                      |d          }|                     |di           }|                     |          }|                    ||           d S r  r   r   parse_orderr   )rx   r   r   r   rn  r*  s         rz   r"  zbinance.handle_order_ws3  s\    ` &&w55(B77  ((uk*****r{   c                     |                      |d          }|                     |dg           }|                     |          }|                    ||           d S r  )r   r   parse_ordersr   )rx   r   r   r   rn  orderss         rz   handle_orders_wszbinance.handle_orders_wsh  s\    L &&w55(B77""6**v{+++++r{   r   c           	        K   |                                   d{V  |                     d||           | j        d         d         d         }|                     |          }	t	          |	          }
|                     |||||||          }d}|                     |ddd          \  }}||d<   |
d|                     |                     ||                    d}d	| j	        i}| 
                    ||
||
|           d{V S )
a  
        edit a trade order
        :see: https://binance-docs.github.io/apidocs/websocket_api/en/#cancel-and-replace-order-trade
        :param str id: order id
        :param str symbol: unified symbol of the market to create an order in
        :param str type: 'market' or 'limit'
        :param str side: 'buy' or 'sell'
        :param float amount: how much of the currency you want to trade in units of the base currency
        :param float|None [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
        Nr.   rC   r   FrE   zorder.cancelReplacerf  r   )r   rg  rq   r   r   editSpotOrderRequestrh  r  r   handle_edit_order_wsrJ  )rx   r   r   r   r,  r   r   r   r   rS   r   rk  rE   r   r   s                  rz   edit_order_wszbinance.edit_order_ws  s8      !!!!!!!!!=&&999it$T*OOC((	)nn++BdFESYZZ #'#@#@Xjlq#r#r &&6"#+&&t{{7F'C'CDD
 
 d/
 ZZ[';UUUUUUUUUr{   c                     |                      |d          }|                     |di           }|                     |di           }|                     |          }|                    ||           d S )Nr   rn  newOrderResponser%  )rx   r   r   r   rn  rawOrderr*  s          rz   r-  zbinance.handle_edit_order_ws  sr    F &&w55(B77??6+=rBB  **uk*****r{   c                   K   |                                   d{V  |t          | j        dz             |                     d||           | j        d         d         d         }|                     |          }t          |          }d}|                     |ddd          \  }}|                     |          |d}| 	                    |d	d
          }	|	|	|d	<   n| 
                    |          |d<   |                     |d	d
g          }|d|                     |                     ||                    d}
d| j        i}|                     |||
||           d{V S )ao  
        :see: https://binance-docs.github.io/apidocs/websocket_api/en/#cancel-order-trade
        cancel multiple orders
        :param str id: order id
        :param str symbol: unified market symbol, default is None
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param str|None [params.cancelRestrictions]: Supported values: ONLY_NEW - Cancel will succeed if the order status is NEW. ONLY_PARTIALLY_FILLED - Cancel will succeed if order status is PARTIALLY_FILLED.
        :returns dict: an list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
        N  cancelOrderWs requires a symbolr/   rC   r   FrE   r   rE   origClientOrderIdclientOrderIdr7  order.cancelrf  r   )r   r   r   rg  rq   r   r   rh  ri  r   parse_to_intr  r  r   r"  rJ  rx   r   r   r   r   rS   r   rE   rk  r6  r   r   s               rz   cancel_order_wszbinance.cancel_order_ws  s      !!!!!!!!!>TW'IIJJJ?FF;;;it$T*OOC((	)nn #'#@#@Zlns#t#t &nnV,, 0
 
 ))&2EWW$+8G'((!%!2!22!6!6GI6$7#IJJ$&&t{{7F'C'CDD
 
 d*
 ZZ[';UUUUUUUUUr{   c                   K   |                                   d{V  | j        d         d         d         }|                     |          }t          |          }d}|                     |ddd          \  }}|                     |          |d}|d|                     |                     ||                    d	}d
| j        i}	| 	                    |||||	           d{V S )a  
        :see: https://binance-docs.github.io/apidocs/websocket_api/en/#current-open-orders-user_data
        cancel all open orders in a market
        :param str symbol: unified market symbol of the market to cancel orders in
        :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>`
        NrC   r   Fr1   rE   r4  r7  rf  r   )
r   rq   r   r   rh  ri  r  r   r*  rJ  )
rx   r   r   r   rS   r   rE   rk  r   r   s
             rz   cancel_all_orders_wszbinance.cancel_all_orders_ws#  s      !!!!!!!!!it$T*OOC((	)nn #'#@#@I\^prw#x#x &nnV,, 0
 

 $&&t{{7F'C'CDD
 
 d+
 ZZ[';UUUUUUUUUr{   c                   K   |                                   d{V  |t          | j        dz             |                     d||           | j        d         d         d         }|                     |          }t          |          }d}|                     |ddd          \  }}|                     |          |d}| 	                    |d	d
          }	|	|	|d	<   n| 
                    |          |d<   |d|                     |                     ||                    d}
d| j        i}|                     |||
||           d{V S )a  
        :see: https://binance-docs.github.io/apidocs/websocket_api/en/#query-order-user_data
        fetches information on an order made by the user
        :param str symbol: unified symbol of the market the order was made in
        :param dict params: extra parameters specific to the exchange API endpoint
        :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
        Nr3  r8   rC   r   FrE   r4  r5  r6  r7  zorder.statusrf  r   )r   r   r   rg  rq   r   r   rh  ri  r   r8  r  r   r"  rJ  r9  s               rz   fetch_order_wszbinance.fetch_order_ws?  s      !!!!!!!!!>TW'IIJJJ>66:::it$T*OOC((	)nn #'#@#@Ykmr#s#s &nnV,, 0
 
 ))&2EWW$+8G'((!%!2!22!6!6GI$&&t{{7F'C'CDD
 
 d*
 ZZ[';UUUUUUUUUr{   c                 X  K   |                                   d{V  |t          | j        dz             |                     d||           | j        d         d         d         }|                     |          }t          |          }d}|                     |ddd          \  }}|                     |          |d	}	|d
| 	                    | 
                    |	|                    d}
d| j        i}|                     |||
||           d{V }|                     ||||          S )a  
        :see: https://binance-docs.github.io/apidocs/websocket_api/en/#account-order-history-user_data
        fetches information on multiple orders made by the user
        :param str symbol: unified market symbol of the market orders were made in
        :param int|None [since]: the earliest time in ms to fetch orders for
        :param int|None [limit]: the maximum number of order structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param int [params.orderId]: order id to begin at
        :param int [params.startTime]: earliest time in ms to retrieve orders for
        :param int [params.endTime]: latest time in ms to retrieve orders for
        :param int [params.limit]: the maximum number of order structures to retrieve
        :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
        Nz  fetchOrdersWs requires a symbolr9   rC   r   Fr8   rE   r4  	allOrdersrf  r   )r   r   r   rg  rq   r   r   rh  ri  r  r   r*  rJ  filter_by_symbol_since_limitrx   r   r  r   r   r   rS   r   rE   rk  r   r   r)  s                rz   fetch_orders_wszbinance.fetch_orders_wsc  sa      !!!!!!!!!>TW'IIJJJ?FF;;;it$T*OOC((	)nn #'#@#@Ykmr#s#s &nnV,, 0
 

 !&&t{{7F'C'CDD
 
 d+
 zz#{G[,WWWWWWWW00NNNr{   c                    K   |                      ||||           d{V }g }t          dt          |                    D ]+}||         }|d         dk    r|                    |           ,|S )a  
        :see: https://binance-docs.github.io/apidocs/websocket_api/en/#account-order-history-user_data
        fetch closed orders
        :param str symbol: unified market symbol
        :param int [since]: the earliest time in ms to fetch open orders for
        :param int [limit]: the maximum number of open orders 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   statusclosed)rC  r   r   r   )	rx   r   r  r   r   r)  closedOrdersr   r*  s	            rz   fetch_closed_orders_wszbinance.fetch_closed_orders_ws  s       ++FE5&IIIIIIIIq#f++&& 	+ 	+A1IEX(**##E***r{   c                 0  K   |                                   d{V  |                     d|           | j        d         d         d         }|                     |          }t	          |          }d}|                     |ddd          \  }}d|i}	||                     |          |	d<   |d	|                     |                     |	|                    d
}
d| j	        i}| 
                    |||
||           d{V }|                     ||||          S )a5  
        :see: https://binance-docs.github.io/apidocs/websocket_api/en/#current-open-orders-user_data
        fetch all unfilled currently open orders
        :param str symbol: unified market symbol
        :param int|None [since]: the earliest time in ms to fetch open orders for
        :param int|None [limit]: the maximum number of open orders 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>`
        Nr7   rC   r   Fr8   rE   r   zopenOrders.statusrf  r   )r   rg  rq   r   r   rh  ri  r  r   r*  rJ  rA  rB  s                rz   fetch_open_orders_wszbinance.fetch_open_orders_ws  sP      !!!!!!!!!.777it$T*OOC((	)nn #'#@#@Ykmr#s#s & 0
  $v 6 6GH)&&t{{7F'C'CDD
 
 d+
 zz#{G[,WWWWWWWW00NNNr{   c                   K   |                                   d{V  d}d}|%|                     |          }|d         }|d|z   z  }d}|                     d||          \  }}d}|                     d||          \  }}|                     ||          rd}n|                     ||          rd}|                     |||d          }|                     |           d{V  d}	|                     d|          \  }	}|}
|d	k    s|d
k    r|	d
}
d}| 	                    |dddd          \  }}|rd}
| j
        d         d         |
         dz   | j        |         d         z   }|                     |          }|                     |||           |                     ||d|           d}|                     ||||           d{V }| j        r|                    ||          }|                     ||||d          S )a  
        watches information on multiple orders made by the user
        :see: https://binance-docs.github.io/apidocs/spot/en/#payload-order-update
        :see: https://binance-docs.github.io/apidocs/pm/en/#event-futures-order-update
        :see: https://binance-docs.github.io/apidocs/pm/en/#event-margin-order-update
        :param str symbol: unified market symbol of the market the 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 str|None [params.marginMode]: 'cross' or 'isolated', for spot margin
        :param boolean [params.portfolioMargin]: set to True if you would like to watch portfolio margin account orders
        :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
        Nr)  r   r  r&   r?   r@   r   r   r>   r=   rA   r  FrC   r   r   r  T)r   r   r  r  r  r  r   r  r  r  rq   rs   r   r  r  rJ  r  r  rA  )rx   r   r  r   r   r   r   r   r  r  r  r  r   r   r   r)  s                   rz   watch_orderszbinance.watch_orders  sp      !!!!!!!!![[((FH%F3<'K99-QWXXf99-QWXX==w'' 	DD^^D'** 	DVdf%E%EFF'''''''''
!??vVV
FH46>>
8NG $($C$CFM[actv{$|$|!6 	Git$W-3dl46H6UUS!!vt->???  t5FGGGzz#{GTBBBBBBBB? 	3OOFE22E00tTTTr{   c                    |                      |d          }|                      |d          }|                      |d          }d|v rdnd}|                     |d d |          }|                     |d          }|                     |d          }	d }
|d	k    s|d
k    s|dk    r||	}n|dk    r|	}
|	}d }|                      |d          }|Et          j        |d          r0|                      |d          }|                     |          }||d}|                      |d          }|                      |d          }|                     |d          }|                     |d          }|                      |d          }|                      |d          }|                      |d          }|                      |d          }|                     |          }d }|                      |d          }|t          |          dk    r|                      |d          }| 	                    |dd          }|                      |d          }|dk    rd }| 
                    i d!|d"|d#|d$|d%|d&|                     |          d'|
d(|d)|d*|d+d d,|                     |d-          d.|d/|d0|d1|d2||||d |||d3          S )4Nr  r   r   r  r   r=   Or  NEW	AMENDMENTCANCELEDr  r$  0r%  r&  r  r  r  r(  zZapXr  r   rV  r  spr  GTXPOr)  r   r   r6  r   r   lastTradeTimestamplastUpdateTimestampr   timeInForcepostOnly
reduceOnlyRr,  r   	stopPricetriggerPricer   )ra   r  filled	remainingrE  r-  r  )r   r1  r   r   	string_gtr3  r2  parse_order_statusr   r/  
safe_orderr   r   )rx   r*  r   r5  r7  r   r   r   r   r  r[  r\  r-  r8  r9  feeCurrencyr   r   r,  r   rc  ra   r  	rawStatusrE  r  r6  ra  r]  s                                rz   parse_ws_orderzbinance.parse_ws_order  s   Z ((44""5#..##E3//$(EMMZZ
!!(D$
CC%%eS11	eS))!E!!]k%A%A]V`E`E` 	g%%!"""5#..g&7&E&E ,,UC88M11-@@K' C   ,,!!%--%%eS11%%eS11!!%--s++""5$//$$UC00	((33((44!s='9'9Q'>'> ,,UC88M&&uc488	&&uc22%K  
E 
f 
 ' 
 ]	 

  
 Y// 
 !"4 
 "#6 
 D 
 ; 
  
 $//%55 
 D 
 U 
  
  I! 
" f# 
$ 1 
  
  
   	r{   c                     |                      |d          }|dk    r|                     |d|          }|                     ||           |                     ||           d S )Nr   ORDER_TRADE_UPDATEr(  )r   r   handle_my_tradehandle_order)rx   r   r   r   s       rz   handle_order_updatezbinance.handle_order_update  sm    d Wc**$$$oogsG<<GVW---&'*****r{   c                 <  K   |                                   d{V  d}d}|                     |          }|                     |          s-|                     |          }dd                    |          z   }i }||d         |d<   |d         |d<   |                     |                     ||                     d{V  d}|                     d||          \  }}|dk    s|d	k    rd
}d}	|                     d||          \  }	}| 	                    ||	          rd
}n| 
                    ||	          rd}|dz   |z   }d}
|                     |dddd          \  }
}|}|
rd}| j        d         d         |         dz   | j        |         d         z   }|                     |          }|                     |||
           |                     ||||
           |                     ddd          }|                     ddd          }|                     | j        |          }|r;|r9|7|                    |dz              d{V }|                     ||||d          S |                     ||d|           d{V }| j        r|S |                     ||||d          S )a  
        watch all open positions
        :param str[]|None symbols: list of unified market symbols
        :param dict params: extra parameters specific to the exchange API endpoint
        :param boolean [params.portfolioMargin]: set to True if you would like to watch positions in a portfolio margin account
        :returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
        NrF  r   r   r   r  r(   r=   r>   r?   r@   
:positionsrA   r  FrC   r   r   r  r]   Tr^   :fetchPositionsSnapshot)r   r   is_emptyget_market_from_symbolsr   r  r   r  r  r  r  r  rq   rs   r   r  r  handle_optionr   r   	positionsr?   filter_by_symbols_since_limitrJ  r  )rx   r   r  r   r   r   r   marketTypeObjectr   r  r  r  r   r   r]   r^   r   r   newPositionss                      rz   watch_positionszbinance.watch_positions  s3      !!!!!!!!!%%g..}}W%% 	311'::F'!2!22K'-f~V$*0*;Y',<f E EFFFFFFFFF99:JFTZ[[f6>>TX--D99:JFTZ[[==w'' 	DD^^D'** 	D\)K7 $($C$CFL\^dfwy~$$!6 	Git$W-3dl46H6UUS!!vt->???  w8IJJJ!%!3!34DF^`d!e!e!%0@BZ\`!a!a55! 	]&< 	]#]]42K+KLLLLLLLLH55hPUW[\\\!ZZ[$EEEEEEEE? 	 11%%PTUUUr{   c                 0   |dk    rd S | j         i | _         || j         v rd S |                     ddd          }|rE|dz   }||j        vr5|                    |           |                     | j        ||||           d S d S t                      | j         |<   d S )Nr=   r(   r]   Frr  )rv  ru  r  r?   r   load_positions_snapshotr   )rx   r   r   r   r  r]   r   s          rz   r  zbinance.set_positions_cache
	  s    6>>F>!DN4>!!F!%!3!34DF^`e!f!f! 	>!::K6>11k***

47dTefffff 21 $<#=#=DN4   r{   c                   K   d|i}|rd|d<   |                      d |           d {V }t                      | j        |<   | j        |         }t          dt	          |                    D ]<}||         }	|                     |	dd          }
|
dk    r|                    |	           =|j        |         }|                    |           |                    ||dz              d S )Nr   Tr  r   	contractsz	:position)	fetch_positionsr   rv  r   r   safe_numberr   r  r   )rx   r   r   r   r  r   rv  r   r   positionr~  r?   s               rz   r|  zbinance.load_positions_snapshot	  s     D
  	-(,F$%..tV<<<<<<<<	799tt$q#i..)) 	' 	'A |H((;BBI1}}X&&&,uud[011111r{   c                    t          |j                                                  }|d         }| j        i | _        || j        vrt	                      | j        |<   | j        |         }|                     |di           }|                     |dg           }g }t          dt          |                    D ]|}	||	         }
|                     |
          }| 	                    |d          }||d<   | 
                    |          |d<   |                    |           |                    |           }|                     ||dz             }t          dt          |                    D ]}	||	         }|                    d          }|d	         }|                    d
          }|                     |d|d          }|                     |          s|                    ||           |                    ||dz              d S )Nr   r   r  r   r   r   z:positions::r   r}   r   r   Frq  )r  r   r  rv  r   r   r   r   parse_ws_positionr   r   r   find_message_hashessplitrx  rs  r   )rx   r   r   r   r  r   datarawPositionsry  r   rawPositionr  r   r   r   partssymbolsStringr   rv  s                      rz   handle_positionszbinance.handle_positions-	  s   < V1668899#A&>!DNt~--*B*D*DDN;'{+wR00tS"55q#l++,, 	# 	#A&q/K--k::H))'377I$-H[!#'<<	#:#:HZ )))LL""""00~9UVVq#m,,-- 	7 	7A'*K%%d++E!!HM#))#..G,,\8WeTTI==++ 7y+666|[<%?@@@@@r{   c           
         |                      |d          }|                      |d          }t          j        |                      |d                    }|                     |d          }d}|dk    r1d}t          j        |d          st          j        |d          rd}nd	}|                     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          S ) Nr   par  TbothFrS  shortlongr)  r   r   r   notionalr  mtliquidationPrice
entryPriceepunrealizedPnlupr  r~  contractSize	markPricer,  hedgedr   r   maintenanceMargin)maintenanceMarginPercentage
collateralinitialMargininitialMarginPercentageleveragemarginRatio)
r   r   
string_absr2  	string_eq	string_ltsafe_positionr1  r  parse_number)rx   r  r   r   r~  contractsAbspositionSider  s           rz   r  zbinance.parse_ws_positionh	  s    ##Hc22$$Xt44	)$*:*:8T*J*JKK--h==6!!F$Y44 *$Y44 *#*LL#)L!! #
H#
$#
 d&&xtZHH#
 	#

 $**8T::#
 #
 $**8T::#
 T--h==#
 $#
 **<88#
 D#
 #
 L#
 f#
 #
  !#
"  ##
$ ,0!'+/#
 #
 #
   	r{   c                   K   |                                   d{V  |t          | j        dz             |                     d||           | j        d         d         d         }|                     |          }t          |          }d}|                     |ddd          \  }}|                     |          |d}	|||	d	<   |||	d
<   | 	                    |d          }
|
|t          | j        dz             |d| 
                    |                     |	|                    d}d| j        i}|                     |||||           d{V }|                     ||||          S )a  
        :see: https://binance-docs.github.io/apidocs/websocket_api/en/#account-trade-history-user_data
        fetch all trades made by the user
        :param str symbol: unified market symbol
        :param int|None [since]: the earliest time in ms to fetch trades for
        :param int|None [limit]: the maximum number of trades structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param int [params.endTime]: the latest time in ms to fetch trades for
        :param int [params.fromId]: first trade Id to fetch
        :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
        Nz" fetchMyTradesWs requires a symbolr5   rC   r   FrE   r4  rc  r   fromIdz^fetchMyTradesWs does not support fetching by both fromId and since parameters at the same timemyTradesrf  r   )r   r   r   rg  rq   r   r   rh  ri  r   r  r   handle_trades_wsrJ  rA  )rx   r   r  r   r   r   rS   r   rE   rk  r  r   r   r  s                 rz   fetch_my_trades_wszbinance.fetch_my_trades_ws	  s      !!!!!!!!!>TW'KKLLL,ff===it$T*OOC((	)nn #'#@#@IZ\npu#v#v &nnV,, 0
 
 #(GK $GG""6844%"3TW  (H  H  I  I  I &&t{{7F'C'CDD
 
 d+
 zz#{G[,WWWWWWWW00NNNr{   c                 >  K   |                                   d{V  |t          | j        dz             |                     d||           | j        d         d         d         }|                     |          }t          |          }d}|                     |ddd          \  }}|                     |          |d}	|||	d	<   |d
| 	                    |	|          d}
d| j
        i}|                     |||
||           d{V }|                     |||          S )a  
        :see: https://binance-docs.github.io/apidocs/websocket_api/en/#recent-trades
        fetch all trades made by the user
        :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, default=500, max=1000
        :param dict [params]: extra parameters specific to the exchange API endpoint
         *
         * EXCHANGE SPECIFIC PARAMETERS
        :param int [params.fromId]: trade ID to begin at
        :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
        Nz+ fetchTradesWs() requires a symbol argumentr:   rC   r   FrE   r4  r   ztrades.historicalrf  r   )r   r   r   rg  rq   r   r   rh  ri  r   r  rJ  r  )rx   r   r  r   r   r   rS   r   rE   rk  r   r   r  s                rz   fetch_trades_wszbinance.fetch_trades_ws	  sa      !!!!!!!!!>TW'TTUUU?FF;;;it$T*OOC((	)nn #'#@#@Zlns#t#t &nnV,, 0
 
 $GG)kk'622
 
 d+
 zz#{G[,WWWWWWWW))&%???r{   c                     |                      |d          }|                     |dg           }|                     |          }|                    ||           d S r  )r   r   parse_tradesr   )rx   r   r   r   rn  r  s         rz   r  zbinance.handle_trades_ws	  s\    \ &&w55(B77""6**v{+++++r{   c                   K   |                                   d{V  d}d}||                     |          }|d         }|                     d||          \  }}d}|                     d||          \  }}|                     ||          rd}n|                     ||          rd}d}|<|                     |          }|d|z   z  }|                     ||d         |d	          }|                     |           d{V  |}	|d
k    rd}	d}
| 	                    |dddd          \  }
}|
rd}	| j
        d         d         |	         dz   | j        |         d         z   }|                     |          }|                     |||
           |                     ||d|
           d}|                     ||||           d{V }| j        r|                    ||          }|                     ||||d          S )am  
        watches information on multiple trades made by the user
        :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.portfolioMargin]: set to True if you would like to watch trades in a portfolio margin account
        :returns dict[]: a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure
        Nr   r!   r?   r@   r  r  r   rL  r>   r=   rA   r  FrC   r   r   r  T)r   r   r  r  r  r  r   r   r  r  rq   rs   r   r  r  rJ  r  r  rA  )rx   r   r  r   r   r   r   r  r   r  r  r   r   r   r  s                  rz   watch_my_tradeszbinance.watch_my_trades 
  s_      !!!!!!!!![[((FH%F99/6SYZZf99/6SYZZ==w'' 	DD^^D'** 	D [[((F3<'K[[&.F)S)STTF'''''''''8G $($C$CFO]cevx}$~$~!6 	Git$W-3dl46H6UUS!!vt->???  t5FGGGzz#{GTBBBBBBBB? 	3OOFE22E00tTTTr{   c                 <   d}|                      |d          }|dk    r|                     |          }|                      |d          }|                     |di           }|                     i |          }|                      |d          }|||| j        }	|	|                     |	j        |i           }
|                     |
|          }||                     |d          }|                     |d          }|                     |          sd}t          d	t          |                    D ]z}||         }|d
         |d
         k    r^| 	                    |d         |d                   }t          |                     |d
         |                    |d         |         d<   d} n{|r|d                             |           n||d
         |d
         k    rU| 	                    |d         |d                   }t          |                     |d
         |                    |d         d<   n |d
         ||d<   n||g|d<   d |d<   n||d<   |                     |dg           }|                    |           ||d<   | j        0|                     | j        dd          }t!          |          | _        | j        }|                    |           |                    | j        |           |dz   |z   }|                    | j        |           d S d S )Nr  r  r  r*  r-  r   feesTr   r'  ra   Fr  rO   rP   r  )r   r;  r   r   r)  hashmaprs  r   r   r   floatcurrency_to_precisionr   r  r   rs   r   r   )rx   r   r   r   r5  rV   r7  tradeFeer   cachedOrdersr)  r*  r  r-  insertNewFeeCurrencyr   orderFeer8  orderTradesr   r  messageHashSymbols                         rz   rm  zbinance.handle_my_tradeN
  sA    ((#66G##''00E&&ug66GueR88H{{2x00H%%eX66F"x';@R#{+!__\-A62NNF OOFG<<E(#uf=="ooeU;;#}}T22 4370%*1c$ii%8%8 * *+/7#+J#78J;O#O#O.2hhx7GRXIY.Z.ZG?DTE_E_`his`tv}E~E~??E&M!$4V$<;@$8$)E	 $P
  4 ? %f 4 4X > > > _":(:2FFF*.((3v;@P*Q*Q7<T=W=WX`akXlnu=v=v7w7weV 4 4!$Z!8/7e14hf/3e+3E%L&*ooeXr&J&J#**5111*5h }$))$,tLL 6u = =}HOOE"""NN4=+666 +c 1F :NN4=*;<<<<<e $#r{   c                 @   |                      |          }|                     |d          }|                     |d          }|Y| j        0|                     | j        dd          }t          |          | _        | j        }|                     |j        |i           }|                     ||          }	|	|                     |	d          }
|
|
|d<   |                     |	d          }|||d<   |                     |	d          |d<   |                     |d          }|2|                     |	d          |d<   |                     |	d	          |d	<   |                    |           d
}d|z   }|	                    ||           |	                    ||           d S d S )Nr   r   rQ   rP   r-  r  r  r   r   r)  zorders:)
rj  r   r)  r   rs   r   r   r  r   r   )rx   r   r   r^  r   r7  r   r  r)  r*  r-  r  r   r   symbolSpecificMessageHashs                  rz   rn  zbinance.handle_order
  s   $$W--!!&(33""6400{"))$,tLL4U;;;L__\%962FFFOOFG44E ooeU33?$'F5Muf55#%)F6N#'??5(#C#Cx  --fkBB	$*.*;*;E;*O*OF;')-)9)9%)L)LF:&'''"K(1F(:%NN<555NN<)BCCCCC/ r{   c                 ^    |                      ||           |                     ||           d S N)r  r  r  s      rz   handle_acount_updatezbinance.handle_acount_update
  s4    FG,,,fg.....r{   c                 0   |                      |d          }d}|                     |di           }|                     |d          }|                      |d          }	 |                     |||j        d d |                     |          |d d 	  	         n# t          $ r}d}|                    ||           t          |j	        
                                          }	t          dt          |	                    D ]G}
|	|
         }|                      |j	        |         d          }||k    r|                    ||           HY d }~nd }~ww xY w|s|                    ||           |                      |d          dk    r|                    |           d S d S )	Nr   Fr  r  msgTr   5)r   r   r   handle_errorsr   jsonr   r   r  r   r  r   r   r   )rx   r   r   r   rejectedr  r  r  r   r  r   r   subscriptionIds                rz   handle_ws_errorzbinance.handle_ws_error
  s    gt,,"55  //ue,,	7tS&*dD$))EBRBRTY[_aeffff 
	7 
	7 
	7HMM!R   #F$8$=$=$?$?@@1c"23344 7 7#3A#6 !%!1!1&2FGW2XZ^!_!_''MM!%5666	7 7 7 7 7
	7  	'MM'2&&&D!$$++LL!!!!! ,+s   5B 
E
B#EE
c                 6   |                      |d          }|                     |d          }|||dk    r|                     ||           d S |                      |d          }|                     |j        |          }|                     |d          }| |||           d S i d| j        d| j        d| j        d	| j        d
| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        | j	        | j	        | j
        | j        | j        d}|                      |d          }	t          |t                    r!|d         }
|                      |
d          dz   }	|                     ||	          }|X|                      |d          }||                     ||           d S |	 d|v rd|v r|                     ||           d S d S d S d S  |||           d S )NrE  r  200r   r   depthUpdaterV   aggTraderX   rS  rR  z1hTicker@arrz4hTicker@arrz1dTicker@arrz24hrTicker@arrz24hrMiniTicker@arrrj   rk   rl   rh   ri   rg   )outboundAccountPositionr  ACCOUNT_UPDATEexecutionReportrl  r   r   r  r   r   )r   r   r  r   r   rA  r`  r  r  r  r  ro  r  r  r  )rx   r   r   rE  r  r   r   r   methodsr?  r  rS   s               rz   handle_messagezbinance.handle_message
  s   !!'844116#5&E//  111Fgt,,(<bAA99F67###F
41
T&
 )
 T&	

 t0
  1
 D/
 D/
 D/
 d1
 !$"5
 +
 +
 +
 $-
  d1!
" $/#
$ (,':!0"7#7"&":-
 
 
0   #..gt$$ 	91:D$$T3//&8E%00>(($77I$//@@@ }#..sg~~%%fg66666 }..~~ F67#####r{   )r}   r  )F)NF)Z__name__
__module____qualname__rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r  r;  rA  r  rO  r`  rl  rj  r   ru  r   r   rs  r|  rw  r  r  r  r  r   boolr  r  r  r  r  r  r   r  r  r  r  rg  r   r   r  r	   r
   r#  r"  r*  r.  r-  r:  r<  r>  rC  rH  rJ  rM  rj  ro  r   rz  r  r|  r  r  r  r  r  r  rm  rn  r  r  r  __classcell__)ry   s   @rz   r   r      s       y y y y yv     . @DB -P -PS -P -PS\ -P -P -P -P^ SW_a 2! 2!$s) 2!C 2!fo 2! 2! 2! 2!h,* ,* ,*\& & &
3 3 3    W. W. W. W. W.rVV V V V V      OSaenp .S .Sd3i .S .S[^ .Suyz  vA .S .S .S .S` <@d[] 	S 	S 	SS 	S 	Sbfglbm 	S 	S 	S 	SY YE Y Y Y Yv16 1 1 1 1( 8<$]ajl (H (H (HC (HWZ (Hquvzq{ (H (H (H (HT=,6 =, =, =, =,~ ;?T`dmo +V +V3 +Vs +VZ] +Vtxy}t~ +V +V +V +VZ$, $, $, $, $,L 68   F     6:" E E7 E E E E E  8<B E EW E7 E E E E `dln : :s :U\ : : : :xM M M^Fv F F F FFV F F F F@"96 "9 "9 "9 "9H4C 4 4 4 4 4 4 "$    2 )+ ,Q ,Q ,Q ,Q\ 24 @ @ @ @D$ $ $ $ $ $> > > -/ V V8 V V V V:04 04 04 04 04d *, !A !A !A !A !A !AFa?V a? a? a? a?F >@ U UC U U U U U" pt|~ 'V 'VC 'Vy 'V	 'V[` 'Vil 'V  DI 'V 'V 'V 'VR3+f 3+ 3+ 3+ 3+j),v ), ), ), ),V w{  DF V Vc V3 Vi Vy Vbg Vps V  KP V V V V@G+6 G+ G+ G+ G+R <@ %V %V %VS %Vu %V %V %V %VN 8<B V V V V V V8 ;?r "V "Vs "VC "Ve "V "V "V "VH 37TX\eg $O $OC $Os $ORU $Olpqvlw $O $O $O $OL :>D_cln  3 c Y\ swx}s~    $ 8<$]ajl O O OC OWZ Oquv{q| O O O OB 04$UYbd 0U 0U 0UC 0Us 0Uimnsit 0U 0U 0U 0UdO O O ObV+& V+ V+ V+ V+p 8<$]ajl 1V 1VW 1VC 1VWZ 1Vquv~q 1V 1V 1V 1Vf> >& > > > > > 2 2 2&9A 9A 9Av1 1 1 1f 6:[_hj )O )Os )O# )OUX )Oostyoz )O )O )O )OV 37TX\eg %@ %@C %@s %@RU %@lpqvlw %@ %@ %@ %@N1,v 1, 1, 1, 1,f 37TX\eg ,U ,UC ,Us ,URU ,Ulpqvlw ,U ,U ,U ,U\5=f 5= 5= 5= 5=nD6 D D D D:/ / / "f  "  "  "  "D>$V >$ >$ >$ >$ >$ >$ >$ >$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   r   !ccxt.async_support.base.ws.clientr   typingr   ccxt.base.errorsr   r   r   r   ccxt.base.preciser   async_supportr   r  r{   rz   <module>r     s       A  A  A  A  A  A  A  A  A  A  A  A  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G 4 4 4 4 4 4       . . . . . . ' ' ' ' ' ' ) ) ) ) ) ) ) ) ) ) ) ) % % % % % %s+$ s+$ s+$ s+$ s+$d ( s+$ s+$ s+$ s+$ s+$r{   