
    E#iM                         S SK rS SKJrJrJr  S SKrS SKJrJ	r	J
r
JrJrJrJrJrJrJrJrJrJrJrJrJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr   " S	 S
\R@                  RB                  5      r!g)    N)
ArrayCacheArrayCacheBySymbolByIdArrayCacheByTimestamp)AnyBalancesBool
CurrenciesIntNumOrder	OrderBook	OrderSide	OrderTypeStrStringsTickerTickersTradeTradingFees)Client)List)ExchangeError)AuthenticationError)ArgumentsRequiredc                   6  ^  \ rS rSrS\4U 4S jjr0 4S jr0 4S\4S jjr0 4S\S\	4S jjr
S	0 4S
\S\4S jjrS\4S jrS	0 4S
\S\4S jjrS\4S jrSTS jrS	S	0 4S\S\S\S\\   4S jjrS\4S jrSS	S	0 4S\S\S\S\S\\   4
S jjrS\4S jrS\4S jrS	0 4S\S\S\4S jjrS rS rS\4S jr S\4S jr!S r"S\4S  jr#S\4S! jr$S\4S" jr%S	S	S	0 4S\&S\S\S\\'   4S# jjr(S	S	S	0 4S\&S\S\S\\   4S$ jjr)S	0 4S\S%\*S&\+S'\,S(\-S\'4S) jjr.S	S	0 4S*\S\S%\*S&\+S'\-S(\-S\'4S+ jjr/S	0 4S*\S\&4S, jjr0S	0 4S\&4S- jjr1S\4S. jr2S	0 4S*\S\&S\'4S/ jjr3S	S	S	0 4S\&S\S\S\\'   4S0 jjr4S1 r5S2 r6S	S	S	0 4S\&S\S\S\\'   4S3 jjr7S	S	S	0 4S\&S\S\S\\   4S4 jjr8S\4S5 jr9S	0 4S6\S'\,S7\S8\&4S9 jjr:S\4S: jr;S	S	S	0 4S6\&S\S\4S; jjr<S\4S< jr=SS	S	0 4S\S\S\S\S\\   4
S= jjr>S	S	S	0 4S6\&S\S\4S> jjr?S\4S? jr@0 4S\A4S@ jjrB0 4SA jrC0 4S\D4SB jjrES\4SC jrFSD rG0 4S\H4SE jjrIS\4SF jrJS\4SG jrKS\4SH jrL0 4SI jrM0 4SJ jrN0 4SK jrOS\4SL jrPS\4SM jrQS\4SN jrR0 4SO jrSS\4SP jrTS\S\U4SQ jrVS\4SR jrWSSrXU =rY$ )Ubitvavo   returnc           
      :  > U R                  [        [        U ]  5       0 SS_SS_SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_0 SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S_S!S_S"S_S#S_S$S_ES%S0ES&SS'00SS(S(S(S).S*.5      $ )+NwsTcancelOrdersWsFfetchTradesWswatchOrderBookwatchTradeswatchTickerwatchTickerswatchBidsAsks
watchOHLCVwatchOrderswatchMyTradescancelAllOrdersWscancelOrderWscreateOrderWscreateStopLimitOrderWscreateStopMarketOrderWscreateStopOrderWseditOrderWsfetchBalanceWsfetchCurrenciesWSfetchDepositAddressWsfetchDepositsWsfetchDepositWithdrawFeesWsfetchMyTradesWsfetchOHLCVWsfetchOpenOrdersWsfetchOrderWsfetchOrderBookWsfetchOrdersWsfetchTickerWsfetchTickersWsfetchTimeWsfetchTradingFeesWsfetchWithdrawalsWs
withdrawWsapizwss://ws.bitvavo.com/v2  )supressMultipleWsRequestsErrortradesLimitordersLimit
OHLCVLimit)hasurlsoptions)deep_extendsuperr   describe)self	__class__s    J/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/pro/bitvavo.pyrN   bitvavo.describe   s   gt = ?$d$ %$  $ !$	$
 t$ t$ $  $ d$ t$  $ $T$  $  $ )$$  *4!$" $T#$$ t%$& !$'$( $T)$* (+$, "4-$. -e/$0 "41$2 3$4 $T5$6 7$8 #E9$:  ;$<  =$> !%?$@ uA$B %dC$D %dE$F dG$L 3 38##"	W1B
 1 1	    c                   #    U R                  5       I S h  vN   U R                  U5      nUS-   US   -   nU R                  S   S   nSUUS   /S./S.nU R                  Xs5      nU R	                  XeX5      I S h  vN $  Nj N7f)N@idrC   r    	subscribenamemarketsactionchannels)load_marketsmarketrJ   extendwatch)	rO   rY   symbolparamsr_   messageHashurlrequestmessages	            rQ   watch_publicbitvavo.watch_publicG   s     !!!V$Sj6$</iit$! !t 

 ++g.ZZ'GGG! 	"  Hs"   BBA%B<B=BBchannelNamec                   #    U R                  5       I S h  vN   U R                  U5      nU/n/ n[        S[        U5      5       H*  nU R	                  X7   5      nUR                  US   5        M,     U R                  S   S   n	SUUS./S.n
U R                  X5      nU R                  XX5      I S h  vN $  N N7f)Nr   rV   rC   r    rW   rX   r[   )	r^   market_symbolsrangelenr_   appendrJ   r`   watch_multiple)rO   
methodNamerj   symbolsrc   messageHashesargsir_   re   rf   rg   s               rQ   watch_public_multiplebitvavo.watch_public_multipleZ   s     !!!%%g.#q#g,'A[[,FKKt% ( iit$! (#
 ++g.((WTTT% 	"$ Us"   B>B:BB>5B<6B><B>rb   c                 B   #    U R                  SX5      I Sh  vN $  N7f)a  
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

https://docs.bitvavo.com/#tag/Market-data-subscription-WebSocket/paths/~1subscribeTicker24h/post

:param str symbol: unified symbol of the market to fetch the ticker for
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
	ticker24hN)rh   )rO   rb   rc   s      rQ   watch_tickerbitvavo.watch_tickero   s       &&{FCCCC   Nrr   c                    #    U R                  5       I Sh  vN   U R                  USS5      nSnU R                  X3X5      I Sh  vN nU R                  USU5      $  NF N7f)a  
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list

https://docs.bitvavo.com/#tag/Market-data-subscription-WebSocket/paths/~1subscribeTicker24h/post

: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>`
NFry   rb   r^   rl   rv   filter_by_arrayrO   rr   rc   channeltickerss        rQ   watch_tickersbitvavo.watch_tickers{   sg      !!!%%gtU;227WUU##GXw??	 	" Vs!   A!A.A!AA!A!clientc                    U R                  X5        U R                  US5      nU R                  US/ 5      n/ n[        S[	        U5      5       Hz  nXF   nU R                  US5      nU R                  US S5      n	US-   U-   n
U R                  Xy5      nUS   nXR                  U'   UR                  U5        UR                  X5        M|     UR                  XS5        g )Neventdatar   r_   -rU   rb   )
handle_bid_asksafe_string
safe_valuerm   rn   safe_marketparse_tickerr   ro   resolve)rO   r   rg   r   r   resultru   r   marketIdr_   rd   tickerrb   s                rQ   handle_tickerbitvavo.handle_ticker   s    , 	F,  '2//'626q#g,'A:D''h7H%%hc:F#+0K&&t4FH%F#)LL MM&!NN6/ ( 	v%rS   c                    #    U R                  5       I Sh  vN   U R                  USS5      nSnU R                  SX1U5      I Sh  vN nU R                  USU5      $  NG N7f)ar  
watches best bid & ask for symbols

https://docs.bitvavo.com/#tag/Market-data-subscription-WebSocket/paths/~1subscribeTicker24h/post

: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>`
NFry   bidaskrb   r~   r   s        rQ   watch_bids_asksbitvavo.watch_bids_asks   si      !!!%%gtU;228WvVV##GXw??	 	" Ws!   A"A/A"A A" A"c                 0   SnU R                  US/ 5      n/ n[        S[        U5      5       HU  nXF   nU R                  U5      nUS   n	XR                  U	'   UR                  U5        US-   U	-   n
UR                  X5        MW     UR                  XS5        g )Nr   r   r   rb   :)r   rm   rn   parse_ws_bid_askbidsasksro   r   )rO   r   rg   r   r   r   ru   r   r   rb   rd   s              rQ   r   bitvavo.handle_bid_ask   s    //'626q#g,'A:D**40FH%F$*MM&!MM&!#+.KNN6/ ( 	v%rS   c                 h   U R                  US5      nU R                  US S5      nU R                  US5      nU R                  US5      nU R                  UUU R	                  U5      U R                  US5      U R                  US5      U R                  US5      U R                  US5      US	.U5      $ )
Nr_   r   rb   	timestampaskaskSizebidbidSize)rb   r   datetimer   	askVolumer   	bidVolumeinfo)r   r   safe_integersafe_tickeriso8601safe_number)rO   r   r_   r   rb   r   s         rQ   r   bitvavo.parse_ws_bid_ask   s    ##FH5!!(D#6!!&(3%%fk:	"Y/##FE2))&)<##FE2))&)<	!
 	 		rS   sincelimitc                   #    U R                  5       I Sh  vN   U R                  U5      nU R                  SX5      I Sh  vN nU R                  (       a  UR	                  X5      nU R                  XRUSS5      $  Ne N<7f)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tradesr   T)r^   rb   rh   
newUpdatesgetLimitfilter_by_since_limit)rO   rb   r   r   rc   r   s         rQ   watch_tradesbitvavo.watch_trades   sp      !!!V$((6BB??OOF2E))&TRR 	"Bs!   B A<*B A>;B >B c                 |   U R                  US5      nU R                  US S5      nUS   nSnUS-   U-   nU R                  X$5      nU R                  U R                  U5      n	U	c(  U R                  U R                  SS5      n
[        U
5      n	U	R                  U5        XR                  U'   UR                  X5        g )Nr_   r   rb   r   rU   rF   rD   )
r   r   parse_trader   r   r   rK   r   ro   r   )rO   r   rg   r   r_   rb   rY   rd   tradetradesArrayr   s              rQ   handle_tradebitvavo.handle_trade   s     ##GX6!!(D#6!Sj8+  1oodkk6:%%dllM4HE$U+K5!)F{0rS   1m	timeframec                   #    U R                  5       I Sh  vN   U R                  U5      nUS   nSnUS   nU R                  U R                  X"5      n	US-   U-   S-   U	-   n
U R                  S   S   nS	SU	/U/S
./S.nU R                  X5      nU R                  XX5      I Sh  vN nU R                  (       a  UR                  X5      nU R                  XUSS5      $  N N<7f)a  
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
Nrb   candlesrV   rU   _rC   r    rW   )rY   intervalrZ   r[   r   T)
r^   r_   r   
timeframesrJ   r`   ra   r   r   r   )rO   rb   r   r   r   rc   r_   rY   r   r   rd   re   rf   rg   ohlcvs                  rQ   watch_ohlcvbitvavo.watch_ohlcv	  s      !!!V$!$<##DOOYJSj8+c1H<iit$! &!)
 (z	
 ++g.jj7HH??NN61E))%q$GG- 	"& Is"   C%C!BC%&C#';C%#C%c                     U R                  US5      nU R                  US S S 5      nU R                  US5      nUR                  XE5        g Nresponse	requestId)r   parse_ohlcvsr   r   )rO   r   rg   r   r   rd   s         rQ   handle_fetch_ohlcvbitvavo.handle_fetch_ohlcv+  sH     ??7J7!!(D$=&&w<u*rS   c                    SnU R                  US5      nU R                  US S5      nUS   nU R                  US5      nU R                  U5      nUS-   U-   S-   U-   n	U R                  US5      n
U R                  U R                  U0 5      U R                  U'   U R                  U R                  U   U5      nUc9  U R                  U R                  S	S
5      n[        U5      nXR                  U   U'   [        S[        U
5      5       H)  nX   nU R                  X5      nUR                  U5        M+     UR                  X5        g )Nr   r_   r   rb   r   rU   r   candlerH   rD   r   )r   r   find_timeframer   ohlcvsr   rK   r   rm   rn   parse_ohlcvro   r   )rO   r   rg   rY   r   r_   rb   r   r   rd   r   storedr   ru   r   parseds                   rQ   handle_ohlcvbitvavo.handle_ohlcv:  s9   $ ##GX6!!(D#6!##GZ8''1	Sj8+c1H<//'84"oodkk62FFV!4i@>%%dllL$GE*51F-3KK	*q#g,'AZF%%f5FMM&! ( 	v+rS   c                 l  #    U R                  5       I Sh  vN   U R                  U5      nUS   nSnUS-   US   -   nU R                  S   S   nSUUS   /S	./S
.nUUUUS   U R                  UUS.n	U R	                  X5      n
U R                  XvXU	5      I Sh  vN nUR                  5       $  N N7f)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
Nrb   bookrU   rV   rC   r    rW   rX   r[   )rd   rY   rb   r   methodr   rc   )r^   r_   rJ   handle_order_book_subscriptionr`   ra   r   )rO   rb   r   rc   r_   rY   rd   re   rf   subscriptionrg   	orderbooks               rQ   watch_order_bookbitvavo.watch_order_booka  s      !!!V$!Sj6$</iit$! !t 

 't99
 ++g.**Sw\ZZ	  9 	"6 [s"   B4B0BB4B2B42B4c                 n    U R                  US5      nU R                  US5      nUR                  X45        g )Nr      )
safe_floatstore)rO   booksidedeltapriceamounts        rQ   handle_deltabitvavo.handle_delta  s.    q)*u%rS   c                 d    [        S[        U5      5       H  nU R                  XU   5        M     g )Nr   )rm   rn   r   )rO   r   deltasru   s       rQ   handle_deltasbitvavo.handle_deltas  s)    q#f+&Ahq	2 'rS   c                     U R                  US5      nXCS   :  aP  U R                  US   U R                  US/ 5      5        U R                  US   U R                  US/ 5      5        XCS'   U$ )Nnonceasksbids)r   r   r   )rO   r   rg   r   r   s        rQ   handle_order_book_message!bitvavo.handle_order_book_message  su     !!'73W%%y0$//'6SU2VWy0$//'6SU2VW!&grS   c                    U R                  US5      nU R                  US5      nU R                  US S5      nUS   nUS-   US   -   nU R                  U R                  U5      nUc  g US   c  U R                  UR                  U0 5      n	U R                  U	S5      n
U
cj  S	U	S'   XR                  U'   U R                  U R
                  S
0 5      nU R                  USU R                  5      nU R                  XR                  XU	5        UR                  R                  U5        g U R                  XU5        UR                  X5        g )Nr   r_   r   rb   rU   rV   r   watchingOrderBookSnapshotTwatchOrderBookSnapshotdelay)r   r   r   
orderbookssubscriptionsrK   r   	rateLimitr   watch_order_book_snapshotcachero   r   r   )rO   r   rg   r   r   r_   rb   rd   r   r   r   rK   r   s                rQ   handle_order_bookbitvavo.handle_order_book  s>      '2##GX6!!(D#6!ckF4L0OODOOV<	W%??6+?+?bQL(,Fa(b%(0<@894@$$[1//$,,8PRTU))'7DNNK

5"@"@&S_`OO""7+**6IFNN92rS   c                   #    U R                  US5      nU R                  US5      nSnUS-   U-   nU R                  S   S   nUUS.n	U R                  XU R	                  X5      Xs5      I S h  vN n
U
R                  5       $  N7f)Nrc   r   getBookrU   rC   r    )r\   r_   )r   r   rJ   ra   r`   r   )rO   r   rg   r   rc   r   rY   rd   re   rf   r   s              rQ   r   !bitvavo.watch_order_book_snapshot  s     x8##L*=Sj8+iit$
 **St{{77SU`oo	   ps   A+B-B.Bc                    U R                  US5      nUc  g U R                  US5      nU R                  US S5      nSnUS-   U-   nU R                  U   nU R	                  X55      n	U R                  US5      U	S'   UR                  U	5        UR                  n
[        S[        U
5      5       H  nX   nU R                  XU5        M     XR                  U'   UR                  X5        g )Nr   r_   r   r   rU   r   r   )r   r   safe_symbolr   parse_order_bookr   resetr   rm   rn   r   r   )rO   r   rg   r   r   rb   rY   rd   r   snapshotmessagesru   messageItems                rQ   handle_order_book_snapshot"bitvavo.handle_order_book_snapshot  s    ( ??7J7##Hh7!!(D#6Sj8+OOF+	((: --h@!??q#h-(A"+K**6	J ) #,y.rS   c                     U R                  US5      nU R                  US5      nX@R                  ;   a  U R                  U	 U R                  0 U5      U R                  U'   g )Nrb   r   )r   r   r   
order_book)rO   r   rg   r   rb   r   s         rQ   r   &bitvavo.handle_order_book_subscription  sU    !!,9!!,8__$'"&//"e"<rS   c                 2   Sn[        S[        U5      5       H|  nU R                  X55      nU R                  US S5      nUS-   U-   nXpR                  ;  d  M@  U R                  UR                  U5      n	U R                  U	S5      n
U
c  Ms  U
" XU	5        M~     g )Nr   r   r   rU   r   )rm   rn   r   r  r   r   r   )rO   r   rg   	marketIdsrY   ru   r   rb   rd   r   r   s              rQ   handle_order_book_subscriptions'bitvavo.handle_order_book_subscriptions  s    q#i.)A''	5H%%hc:F*x/Koo-#v/C/C[Qx@%6L9 *rS   c                   #    Uc  [        U R                  S-   5      eU R                  5       I Sh  vN   U R                  5       I Sh  vN   U R	                  U5      nUS   nUS   nU R
                  S   S   nSnSU-   n	S	UU/S
./S.n
U R                  XyX5      I Sh  vN nU R                  (       a  UR                  X5      nU R                  XX#S5      $  N N N=7f)a  
watches information on multiple orders 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
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
Nz) watchOrders() requires a symbol argumentrb   rV   rC   r    accountorder:rW   rX   r[   T
r   rV   r^   authenticater_   rJ   ra   r   r   filter_by_symbol_since_limit)rO   rb   r   r   rc   r_   r   re   rY   rd   rf   orderss               rQ   watch_ordersbitvavo.watch_orders  s      >#DGG.Y$YZZ!!!!!!V$!$<iit$'! ! (z
 zz#GII??OOF2E00tTT) 	"!  J4   /C!CC!	C
AC!!C":C!C!C!c                   #    Uc  [        U R                  S-   5      eU R                  5       I Sh  vN   U R                  5       I Sh  vN   U R	                  U5      nUS   nUS   nU R
                  S   S   nSnSU-   n	S	UU/S
./S.n
U R                  XyX5      I Sh  vN nU R                  (       a  UR                  X5      nU R                  XX#S5      $  N N N=7f)a  
watches information on multiple trades made by the user
:param str symbol: unified market symbol of the market trades were made in
:param int [since]: the earliest time in ms to fetch trades for
:param int [limit]: the maximum number of trade structures to retrieve
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
Nz+ watchMyTrades() requires a symbol argumentrb   rV   rC   r    r  	myTrades:rW   rX   r[   Tr  )rO   rb   r   r   rc   r_   r   re   rY   rd   rf   r   s               rQ   watch_my_tradesbitvavo.watch_my_trades2  s      >#DGG.[$[\\!!!!!!V$!$<iit$!F*! ! (z
 zz#GII??OOF2E00tTT) 	"!  Jr  typesider   r   c                    #    U R                  5       I Sh  vN   U R                  5       I Sh  vN   U R                  XX4XV5      nU R                  SU5      I Sh  vN $  NI N3 N7f)a  
create a trade order

https://docs.bitvavo.com/#tag/Orders/paths/~1order/post

: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 price: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
:param dict [params]: extra parameters specific to the bitvavo api endpoint
:param str [params.timeInForce]: "GTC", "IOC", or "PO"
:param float [params.stopPrice]: The price at which a trigger order is triggered at
:param float [params.triggerPrice]: The price at which a trigger order is triggered at
:param bool [params.postOnly]: If True, the order will only be posted to the order book and not executed immediately
:param float [params.stopLossPrice]: The price at which a stop loss order is triggered at
:param float [params.takeProfitPrice]: The price at which a take profit order is triggered at
:param str [params.triggerType]: "price"
:param str [params.triggerReference]: "lastTrade", "bestBid", "bestAsk", "midPrice" Only for stop orders: Use self to determine which parameter will trigger the order
:param str [params.selfTradePrevention]: "decrementAndCancel", "cancelOldest", "cancelNewest", "cancelBoth"
:param bool [params.disableMarketProtection]: don't cancel if the next fill price is 10% worse than the best fill price
:param bool [params.responseRequired]: Set self to 'false' when only an acknowledgement of success or failure is required, self is faster.
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
NprivateCreateOrder)r^   r  create_order_requestwatch_request)rO   rb   r  r  r   r   rc   rf   s           rQ   create_order_wsbitvavo.create_order_wsS  sa     2 !!!!!!++F$V''(<gFFF 	"!Fs1   A&A A&A",A&A$A&"A&$A&rV   c           	         #    U R                  5       I Sh  vN   U R                  5       I Sh  vN   U R                  XX4XVU5      nU R                  SU5      I Sh  vN $  NJ N4 N7f)an  
edit a trade order

https://docs.bitvavo.com/#tag/Orders/paths/~1order/put

:param str id: cancel 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 currency you want to trade in units of base currency
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
:param dict [params]: extra parameters specific to the bitvavo api endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
NprivateUpdateOrder)r^   r  edit_order_requestr#  )	rO   rV   rb   r  r  r   r   rc   rf   s	            rQ   edit_order_wsbitvavo.edit_order_wsq  sd      !!!!!!))"d&QWX''(<gFFF 	"!Fs1   A'A!A'A#-A'A%A'#A'%A'c                    #    U R                  5       I Sh  vN   U R                  5       I Sh  vN   U R                  XU5      nU R                  SU5      I Sh  vN $  NH N2 N7f)aO  

https://docs.bitvavo.com/#tag/Orders/paths/~1order/delete

cancels an open order
:param str id: order id
:param str symbol: unified symbol of the market the order was made in
:param dict [params]: extra parameters specific to the bitvavo api endpoint
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
NprivateCancelOrder)r^   r  cancel_order_requestr#  )rO   rV   rb   rc   rf   s        rQ   cancel_order_wsbitvavo.cancel_order_ws  s_      !!!!!!++B?''(<gFFF 	"!Fs1   A%AA%A!+A%A#A%!A%#A%c                   #    U R                  5       I Sh  vN   U R                  5       I Sh  vN   0 nSnUb  U R                  U5      nUS   US'   U R                  SU R	                  X25      5      I Sh  vN $  Ne NO N7f)av  

https://docs.bitvavo.com/#tag/Orders/paths/~1orders/delete

cancel all open orders
:param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
:param dict [params]: extra parameters specific to the bitvavo api endpoint
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
NrV   r_   privateCancelOrders)r^   r  r_   r#  r`   )rO   rb   rc   rf   r_   s        rQ   cancel_all_orders_wsbitvavo.cancel_all_orders_ws  s      !!!!!![[(F &tGH''(=t{{7?[\\\ 	"! ]s2   BA<BA>AB7B 8B>B Bc                     U R                  US5      nU R                  U5      nU R                  US5      nUR                  XE5        g r   )	safe_listparse_ordersr   r   )rO   r   rg   r   r  rd   s         rQ   handle_multiple_ordersbitvavo.handle_multiple_orders  sF     >>':6 ""8, &&w<v+rS   c                 0  #    Uc  [        U R                  S-   5      eU R                  5       I Sh  vN   U R                  5       I Sh  vN   U R	                  U5      nUUS   S.nU R                  SU R                  XS5      5      I Sh  vN $  N^ NH N7f)am  

https://docs.bitvavo.com/#tag/General/paths/~1assets/get

fetches information on an order made by the user
:param str id: the order id
:param str symbol: unified symbol of the market the order was made in
:param dict [params]: extra parameters specific to the bitvavo api endpoint
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
Nz( fetchOrder() requires a symbol argumentrV   )orderIdr_   privateGetOrder)r   rV   r^   r  r_   r#  r`   )rO   rV   rb   rc   r_   rf   s         rQ   fetch_order_wsbitvavo.fetch_order_ws  s      >#DGG.X$XYY!!!!!!V$Tl
 ''(94;;w;WXXX 	"! Ys4   /BBB	B
ABBBBBc                 (  #    Uc  [        U R                  S-   5      eU R                  5       I Sh  vN   U R                  5       I Sh  vN   U R	                  XX45      nU R                  SU5      I Sh  vN nU R                  XaX#5      $  NZ ND N7f)a  

https://docs.bitvavo.com/#tag/Orders/paths/~1orders/get

fetches information on multiple orders 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  orde structures to retrieve
:param dict [params]: extra parameters specific to the bitvavo api endpoint
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
Nz+ fetchOrdersWs() requires a symbol argumentprivateGetOrders)r   rV   r^   r  fetchOrdersRequestr#  r  )rO   rb   r   r   rc   rf   r  s          rQ   fetch_orders_wsbitvavo.fetch_orders_ws  s      >#DGG.[$[\\!!!!!!))&G))*<gFF00NN	 	"!F3   /BBB	B
+B5B6BBBc                     [        U R                  5       5      nU R                  S5      n[        U5      n[        X-   5      $ )N   )strmillisecondsrand_numberint)rO   tsrandomNumber
randomParts       rQ   
request_idbitvavo.request_id  s<    ""$%''*&
2?##rS   c                    #    U R                  5       n[        U5      nXS'   X2S'   U R                  S   S   nU R                  XTX$5      I S h  vN $  N7f)Nr\   r   rC   r    )rM  rF  rJ   ra   )rO   r\   rf   rd   messageHashStrre   s         rQ   r#  bitvavo.watch_request  sU     oo'[)"*iit$ZZWMMMMs   AAAAc                 ,  #    U R                  5       I Sh  vN   U R                  5       I Sh  vN   0 nSnUb  U R                  U5      nUS   US'   U R                  SU R	                  XT5      5      I Sh  vN nU R                  XqX#5      $  Nw Na N7f)a  
fetch all unfilled currently open 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 bitvavo api endpoint
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
NrV   r_   privateGetOrdersOpen)r^   r  r_   r#  r`   r  )rO   rb   r   r   rc   rf   r_   r  s           rQ   fetch_open_orders_wsbitvavo.fetch_open_orders_ws  s      !!!!!!
 [[(F &tGH))*@$++gB^__00NN 	"! `s2   BBBBAB7B8BBBc                 (  #    Uc  [        U R                  S-   5      eU R                  5       I Sh  vN   U R                  5       I Sh  vN   U R	                  XX45      nU R                  SU5      I Sh  vN nU R                  XaX#5      $  NZ ND N7f)a  

https://docs.bitvavo.com/#tag/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
:param dict [params]: extra parameters specific to the bitvavo api endpoint
:returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
Nz- fetchMyTradesWs() requires a symbol argumentprivateGetTrades)r   rV   r^   r  fetchMyTradesRequestr#  r  )rO   rb   r   r   rc   rf   myTradess          rQ   fetch_my_trades_wsbitvavo.fetch_my_trades_ws	  s      >#DGG.]$]^^!!!!!!++F5I++,>HH005PP	 	"!HrC  c                     U R                  US5      nU R                  US S S 5      nU R                  US5      nUR                  XE5        g r   )r5  parse_tradesr   r   )rO   r   rg   r   r   rd   s         rQ   handle_my_tradesbitvavo.handle_my_trades  sH    . >>':6""8T4>&&w<v+rS   codeaddresstagc                   #    U R                  XE5      u  pEU R                  U5        U R                  5       I Sh  vN   U R                  5       I Sh  vN   U R	                  XX4U5      nU R                  SU5      I Sh  vN $  NI N3 N7f)aN  
make a withdrawal
:param str code: unified currency code
:param float amount: the amount to withdraw
:param str address: the address to withdraw to
:param str tag:
:param dict [params]: extra parameters specific to the bitvavo api endpoint
:returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
NprivateWithdrawAssets)handle_withdraw_tag_and_paramscheck_addressr^   r  withdrawRequestr#  )rO   r`  r   ra  rb  rc   rf   s          rQ   withdraw_wsbitvavo.withdraw_ws;  s      99#F7#!!!!!!&&tW6J''(?III 	"!Is3   8B
BB
B,B
?B B
B
B
c                     U R                  US5      nU R                  US5      nU R                  U5      nUR                  XS5        g Nr   r   )r   r   parse_transactionr   )rO   r   rg   rd   r   withdraws         rQ   handle_withdrawbitvavo.handle_withdrawL  sB     &&w<??7J7))(3x-rS   c                    #    U R                  5       I Sh  vN   U R                  5       I Sh  vN   U R                  XX45      nU R                  SU5      I Sh  vN nU R	                  XaX#5      $  NZ ND N7f)a  

https://docs.bitvavo.com/#tag/Account/paths/~1withdrawalHistory/get

fetch all withdrawals made from an account
:param str code: unified currency code
:param int [since]: the earliest time in ms to fetch withdrawals for
:param int [limit]: the maximum number of withdrawals structures to retrieve
:param dict [params]: extra parameters specific to the bitvavo api endpoint
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
NprivateGetWithdrawalHistory)r^   r  fetchWithdrawalsRequestr#  filter_by_currency_since_limit)rO   r`  r   r   rc   rf   	withdrawss          rQ   fetch_withdrawals_wsbitvavo.fetch_withdrawals_ws^  sq      !!!!!!..tEJ,,-JGTT	229EQQ	 	"!T1   A7A1A7A3+A7A5A73A75A7c                     U R                  US5      nU R                  US5      nU R                  US S S SS05      nUR                  XT5        g )Nr   r   r  
withdrawal)r5  r   parse_transactionsr   )rO   r   rg   r   rd   withdrawalss         rQ   handle_withdrawsbitvavo.handle_withdrawsp  sP    $ >>':6&&w<--hdD6S_J`a{0rS   c                    #    U R                  5       I Sh  vN   U R                  XX4U5      nSnU R                  Xv5      I Sh  vN nU R                  XUSS5      $  NF N7f)aZ  

https://docs.bitvavo.com/#tag/Market-Data/paths/~1{market}~1candles/get

fetches 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 bitvavo api endpoint
:returns int[][]: A list of candles ordered, open, high, low, close, volume
N
getCandlesr   T)r^   fetchOHLCVRequestr#  r   )	rO   rb   r   r   r   rc   rf   r\   r   s	            rQ   fetch_ohlcv_wsbitvavo.fetch_ohlcv_ws  sf      !!!((E&Q((99))%q$GG	 	" :s!   A!A-A!AA!A!c                    #    U R                  5       I Sh  vN   U R                  5       I Sh  vN   U R                  XX45      nU R                  SU5      I Sh  vN nU R	                  XaX#5      $  NZ ND N7f)a  

https://docs.bitvavo.com/#tag/Account/paths/~1depositHistory/get

fetch all deposits made to an account
:param str code: unified currency code
:param int [since]: the earliest time in ms to fetch deposits for
:param int [limit]: the maximum number of deposits structures to retrieve
:param dict [params]: extra parameters specific to the bitvavo api endpoint
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
NprivateGetDepositHistory)r^   r  fetchDepositsRequestr#  rs  )rO   r`  r   r   rc   rf   depositss          rQ   fetch_deposits_wsbitvavo.fetch_deposits_ws  sq      !!!!!!++DG++,FPP2285PP	 	"!Prw  c                     U R                  US5      nU R                  US S S SS05      nU R                  US5      nUR                  XE5        g )Nr   r  depositr   )r   rz  r   r   )rO   r   rg   r   r  rd   s         rQ   handle_depositsbitvavo.handle_deposits  sP      ??7J7**8T4PYGZ[&&w<x-rS   c                    #    U R                  5       I Sh  vN   U R                  5       I Sh  vN   U R                  SU5      I Sh  vN $  N6 N  N7f)a+  

https://docs.bitvavo.com/#tag/Account/paths/~1account/get

fetch the trading fees for multiple markets
:param dict [params]: extra parameters specific to the bitvavo api endpoint
:returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
NprivateGetAccountr^   r  r#  rO   rc   s     rQ   fetch_trading_fees_wsbitvavo.fetch_trading_fees_ws  M      !!!!!!''(;VDDD 	"!D1   AAAAAA	AAAc                 B   #    U R                  SU5      I Sh  vN $  N7f)z

https://docs.bitvavo.com/#tag/General/paths/~1markets/get

retrieves data on all markets for bitvavo
:param dict [params]: extra parameters specific to the exchange api endpoint
:returns dict[]: an array of objects representing market data

getMarketsN)r#  r  s     rQ   fetch_markets_wsbitvavo.fetch_markets_ws  s       ''f====r|   c                 v   #    U R                  5       I Sh  vN   U R                  SU5      I Sh  vN $  N N7f)z

https://docs.bitvavo.com/#tag/General/paths/~1assets/get

fetches all available currencies on an exchange
:param dict [params]: extra parameters specific to the bitvavo api endpoint
:returns dict: an associative dictionary of currencies
N	getAssets)r^   r#  r  s     rQ   fetch_currencies_wsbitvavo.fetch_currencies_ws  s7      !!!''V<<< 	"<s   959799c                     U R                  US5      nU R                  US5      nU R                  U5      nUR                  XS5        g rk  )r   r   parse_currenciesr   )rO   r   rg   rd   r   
currenciess         rQ   handle_fetch_currenciesbitvavo.handle_fetch_currencies  sB    * &&w<??7J7**84
z/rS   c                     U R                  US5      nU R                  US5      nU R                  U5      nUR                  XS5        g rk  )r   r   parse_trading_feesr   )rO   r   rg   rd   r   feess         rQ   handle_trading_feesbitvavo.handle_trading_fees  sB     &&w<??7J7&&x0t)rS   c                    #    U R                  5       I Sh  vN   U R                  5       I Sh  vN   U R                  SU5      I Sh  vN $  N6 N  N7f)aM  

https://docs.bitvavo.com/#tag/Account/paths/~1balance/get

query for balance and get the amount of funds available for trading or funds locked in orders
:param dict [params]: extra parameters specific to the bitvavo api endpoint
:returns dict: a `balance structure <https://docs.ccxt.com/en/latest/manual.html?#balance-structure>`
NprivateGetBalancer  r  s     rQ   fetch_balance_wsbitvavo.fetch_balance_ws  r  r  c                     U R                  US5      nU R                  US/ 5      nU R                  U5      nUR                  XS5        g rk  )r   r   parse_balancer   )rO   r   rg   rd   r   balances         rQ   handle_fetch_balancebitvavo.handle_fetch_balance  sD     &&w<??7J;$$X.w,rS   c                     U R                  US0 5      nU R                  U5      nU R                  US5      nUR                  XE5        g r   )r   parse_orderr   r   )rO   r   rg   r   orderrd   s         rQ   handle_single_orderbitvavo.handle_single_order0  sD    : ??7J;  *&&w<u*rS   c                     U R                  US0 5      nU R                  U5      nU R                  US5      nUR                  XE5        g r   )r   parse_marketsr   r   )rO   r   rg   r   rZ   rd   s         rQ   handle_marketsbitvavo.handle_marketsR  sD    ( ??7J;$$X.&&w<w,rS   c                     U R                   U R                  U R                  U R                  U R                   S.nU R                  X15      nUnUb  U" X5      nU$ )N)r!  r'  r,  r;  rW  )action_and_market_message_hash action_and_order_id_message_hashr   )rO   r\   rc   methodsr   rd   s         rQ   build_message_hashbitvavo.build_message_hashk  sa    "&"E"E"&"G"G"&"G"G#DD $ C C
 1 0KrS   c                 0    U R                  USS5      nX-   $ )Nr_    )r   )rO   r\   rc   rb   s       rQ   r  &bitvavo.action_and_market_message_hashy  s    !!&(B7rS   c                 d    U R                  US5      nUc  [        U R                  S-   5      eX-   $ )Nr:  z; privateUpdateOrderMessageHash requires a orderId parameter)r   r   rV   )rO   r\   rc   r:  s       rQ   r  (bitvavo.action_and_order_id_message_hash}  s7    ""695?*g ghhrS   c                 j   U R                  US5      nU R                  US S5      nUS   nSU-   nU R                  X$5      nU R                  c-  U R	                  U R
                  SS5      n[        U5      U l        U R                  n	U	R                  U5        UR                  U R                  U5        g )Nr_   r   rb   r  rG   rD   )	r   r   r  r  r   rK   r   ro   r   )
rO   r   rg   r   r_   rb   rd   r  r   r  s
             rQ   handle_orderbitvavo.handle_order  s    , ##GX6!!(D#6!'  1;;%%dllM4HE07DKet{{K0rS   c                 T   U R                  US5      nU R                  US S5      nUS   nSU-   nU R                  X$5      nU R                  c-  U R	                  U R
                  SS5      n[        U5      U l        U R                  n	U	R                  U5        UR                  X5        g )Nr_   r   rb   r  rF   rD   )	r   r   r   rY  r   rK   r   ro   r   )
rO   r   rg   r   r_   rb   rd   r   r   r   s
             rQ   handle_my_tradebitvavo.handle_my_trade  s      ##GX6!!(D#6!!F*  1== %%dllM4HE&u-DMmm5!{0rS   c                    U R                  US0 5      nSU R                  0n[        UR                  5       5      n[	        S[        U5      5       H7  nXV   nU R                  XG5      nUc  M  U R                  X75      n	U" XU	5        M9     U$ )Nr   r   r   )r   r  listkeysrm   rn   )
rO   r   rg   r   r  namesru   rY   r   r   s
             rQ   handle_subscription_status"bitvavo.handle_subscription_status  s     "ED88
 ]'')*q#e*%A8D__W3F!#}Cv5 & rS   c                 $  #    U R                   S   S   nU R                  U5      nSnU R                  UR                  U5      nUc  U R	                  5       n[        U5      nUS-   U R                  -   S-   nU R                  U R                  U5      U R                  U R                  5      [        R                  5      n	Sn
U
U R                  U	US.nU R                  X5      nU R                  X$X5      I S h  vN nXSR                  U'   U$  N7f)NrC   r    authenticatedzGET/z
/websocketr  )r\   key	signaturer   )rJ   r   r   r   rG  rF  versionhmacencodesecrethashlibsha256apiKeyr`   ra   )rO   rc   re   r   rd   futurer   stringTimestampauthr  r\   rf   rg   s                rQ   r  bitvavo.authenticate  s     iit$S!%!5!5{C>))+I!)nO"V+dll:\ID		$++d"3T[[5Mw~~^I#F {{&&	G kk'2G::cMMF06  - Ns   C7D9D:Dc                     SnU R                  USS5      nU(       a  UR                  X#5        g [        U R                  U5      5      nUR	                  XS5        X1R
                  ;   a  UR
                  U	 g g )Nr  F)	safe_boolr   r   jsonrejectr   )rO   r   rg   rd   r  errors         rQ   handle_authentication_message%bitvavo.handle_authentication_message  sh     &wGNN70'		'(:;EMM%-222((5 3rS   c                    U R                  US5      nU R                  US5      nU R                  US5      nU R                  XR5      nU R                  USU5      nSn U R                  XCUR                  S0 X20 0 5	        U(       d  UR                  X'5        gg ! [
         a  n	SnUR                  X5         S n	A	N<S n	A	ff = f)Nr  	errorCoder\   r   Fr  T)r   r   r  handle_errorsre   	Exceptionr  )
rO   r   rg   r  r`  r\   buildMessagerd   rejectedes
             rQ   handle_error_messagebitvavo.handle_error_message   s        '2  4!!'84..v?&&w\J	*tFJJBPRTVW MM'/  	*HMM!))	*s   !B 
C #B;;C c           
         U R                  US5      nUb  U R                  X5        0 SU R                  _SU R                  _SU R                  _SU R
                  _SU R                  _SU R                  _SU R                  _S	U R                  _S
U R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _SU R                  _U R                  U R                  U R                   U R"                  U R$                  U R&                  U R(                  U R*                  S.EnU R                  US5      nU R-                  XE5      nUc0  U R                  US5      nU R-                  XG5      nUb	  U" X5        g g U" X5        g )Nr  
subscribedr   r   r   r   ry   r  r  fillr!  r'  r  r1  r?  r;  r,  rS  )r  r  rq  rd  rW  r  r  r  r   r\   )r   r  r  r   r  r   r   r   r  r  r  r  r  r7  r  r  r|  rn  r^  r  r   r  r   )rO   r   rg   r  r  r   r   r\   s           rQ   handle_messagebitvavo.handle_message   s   X   '2%%f6
$99
D**
 t66
 T&&	

 d''
 ++
 D>>
 T&&
 D((
 !$":":
 !$":":
  !:!:
 "4#>#>
  ; ;
 t77
  !$":":!
" #D$?$?#
$ "&!9!9(,(<(<+/+@+@%)%9%9 $ 5 55511--3
6   '20>%%gx8F__W5F!v' " 6#rS   )rY  r  )N)Z__name__
__module____qualname____firstlineno__r   rN   rh   rF  rv   r   rz   r   r   r   r   r   r   r   r   r
   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r  r   r  r   r   r  r  r   r   floatr   r$  r)  r.  r2  r7  r<  rA  rM  r#  rT  rZ  r^  rh  rn  ru  r|  r  r  r  r   r  r  r	   r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  __static_attributes____classcell__)rP   s   @rQ   r   r      s   2# 2h 79 H& Y[ U3 U* 68 
D 
DF 
D 6:" @7 @ @ $&F $&L 8<B @W @7 @ &V &  <@d[] S SS S Sbfglbm S 16 14 ?CQUdhqs  H  H  H3  H^a  Hx|  ~B  yC  HD+ +%,6 %,N @DB $!S $! $!S\ $!L&
3 *#3 #3J!%/ %/N=V =
:f 
: 04$UYbd U UC Us Uimnsit UB 37TX\eg UC Us URU Ulpqvlw UB pt|~ GC Gy G	 G[` Gil G  DI G< im{  IK Gc G3 Gi Gy Gbe Gux G  PU G( <@ G GS G  8<B ] ]&,V ,( ;?r Ys YC Ye Y, 37TX\eg OC Os ORU Olpqvlw O($N 8<$]ajl O OC OWZ Oquv{q| O* 6:[_hj Qs Q# QUX Qostyoz Q(,v ,< TX`b Jc J5 J3 JS J".f .$ 6:[_hj Rs R# RUX R$1v 1. BFTXgktv H3 H3 Hc Had H{  AE  |F H& 37TX\eg QC Qs QRU Q$.f .* 24 E E -/ 	> 02 
=j 
=0f 04*$ -/ E8 E-6 -$ +&  +D-V -2 13  =?  ?A   16  1D1f 18 , )+ ,6F 6&6 t @R$V R$ R$rS   r   )"ccxt.async_supportccxt ccxt.async_support.base.ws.cacher   r   r   r  ccxt.base.typesr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   !ccxt.async_support.base.ws.clientr   typingr   ccxt.base.errorsr   r   r   async_supportr    rS   rQ   <module>r     sZ     f f  a  a  a  a  a 4  * 0 .a$d  (( a$rS   