
    i                    l   d dl mZ d dl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mZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlm Z  d dlm!Z! d dlm"Z" d dlm#Z# d dlm$Z$ d dlm%Z% d dlm&Z& d dlm'Z' d dlm(Z( d dlm)Z) d dl*m+Z+ d dl,m-Z-  G d dee          Z.dS )    )Exchange)ImplicitAPIN)BalancesCurrencyIntLeverage	LeveragesMarketNumOrder	OrderBookOrderRequest	OrderSide	OrderTypeStrStringsTickerTickersTradeTransferEntry)List)ExchangeError)AuthenticationError)ArgumentsRequired)
BadRequest)InsufficientFunds)InvalidOrder)OrderNotFound)OrderImmediatelyFillable)OrderNotFillable)DuplicateOrderId)ContractUnavailable)DDoSProtection)RateLimitExceeded)ExchangeNotAvailable)InvalidNonce)	TICK_SIZE)Precisec                       e Zd Z fdZi fdee         fdZdi fdedede	fdZ
di fdedefd	ZdCd
edefdZdddi fdedededee         fdZdCd
edefdZddi fdedededee         fdZdCd
edefdZdi fdededededef
dZdi fdededededef
dZi fdee         fdZddi fdedededededefdZdi fdedefdZ di fdee         defdZ!di fdefdZ"dddi fdedededee#         fd Z$dddi fdedededee#         fd!Z%dddi fdedededee#         fd"Z&d# Z'g fd$Z(d% Z)dCd
ede#fd&Z*dddi fdededefd'Z+i fde,fd(Z-de,fd)Z.di fdefd*Z/dCd
efd+Z0dddi fdededefd,Z1di fdefd-Z2di fdefd.Z3dCd
efd/Z4di fdefd0Z5dCd
efd1Z6dCd2e7fd3Z8d4 Z9i fd5efd6Z:i fd5eded7ed8ede;f
d9Z<di fd:edefd;Z=di fdee         de>fd<Z?i fdede@fd=ZAdCde@fd>ZBd? ZCd@dAi ddfdBZD xZES )Dkrakenfuturesc                 4	   |                      t          t          |                                           dddg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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d*d dddddd	dd	dd	dddd	dd+d,d,d-d.d/d0d1d2d3d4d4d5d6d7gd8d d9d:g d;ig d<g d=d>d?gd@d:dAgid:g dBidCdDdd|                     dE          |                     dF          |                     dG          |                     dE          g|                     dH          |                     dI          g|                     dJ          |                     dK          g|                     dL          |                     dM          g|                     dN          |                     dF          g|                     dO          |                     dP          g|                     dQ          |                     dR          g|                     dS          |                     dT          gg|                     dG          |                     dF          g|                     dH          |                     dU          g|                     dJ          |                     dR          g|                     dL          |                     dT          g|                     dN          |                     dV          g|                     dO          |                     dW          g|                     dQ          |                     dX          g|                     dS          |                     dG          ggdYdZii d[t
          d\t          d]t          d^t          d_t          d`t          dat          dbt          dct          ddt          det          dft          dgt          dht          dit          djt          dkt          dlt          it          t          t          dmdnt          dodpdqdqdqdqdriidsg dtidudvgd	dwdpdxdyiidpdAdziidpd{d{d{d{drid|d}d~iddddddddddd	d          S )Nr*   zKraken FuturesUSv3iX  TCORSspotFmarginswapfutureoptioncancelAllOrderscancelOrdercancelOrderscreateMarketOrdercreateOrder	editOrderfetchBalancefetchBorrowRateHistoriesfetchBorrowRateHistoryfetchCanceledOrdersfetchClosedOrdersfetchCrossBorrowRatefetchCrossBorrowRatesfetchDepositAddressfetchDepositAddressesfetchDepositAddressesByNetworkfetchFundingHistoryfetchFundingRateemulatedfetchFundingRateHistoryfetchFundingRatesfetchIndexOHLCVfetchIsolatedBorrowRatefetchIsolatedBorrowRatesfetchIsolatedPositionsfetchLeveragefetchLeveragesfetchLeverageTiersfetchMarketLeverageTiers)fetchMarketsfetchMarkOHLCVfetchMyTrades
fetchOHLCVfetchOpenOrders
fetchOrderfetchOrderBookfetchOrdersfetchPositionsfetchPremiumIndexOHLCVfetchTickersfetchTradessetLeveragesetMarginModetransferz0https://demo-futures.kraken.com/derivatives/api/z+https://demo-futures.kraken.com/api/charts/zhttps://demo-futures.kraken.com)publicprivatechartswwwzdhttps://user-images.githubusercontent.com/24300605/81436764-b22fd580-9172-11ea-9703-742783e6376d.jpgz&https://futures.kraken.com/api/charts/z'https://futures.kraken.com/api/history/z,https://futures.kraken.com/api/feeschedules/z+https://futures.kraken.com/derivatives/api/)rb   historyfeeschedulesr`   ra   zhttps://futures.kraken.com/z-https://docs.futures.kraken.com/#introductionzihttps://support.kraken.com/hc/en-us/articles/360022835771-Transaction-fees-and-rebates-for-Kraken-Futures)testlogoapirc   docfeesreferralget)re   instruments	orderbooktickersrd   historicalfundingrates)
zfeeschedules/volumesopenpositionsnotificationsaccounts
openordersrecentordersfills	transfersleveragepreferencespnlpreferences)	sendorder	editordercancelorderr_   
batchordercancelallorderscancelallordersafter
withdrawalrx   ry   )rl   postputz {price_type}/{symbol}/{interval})orders
executionstriggersaccountlogcsvzaccount-logzmarket/{symbol}/orderszmarket/{symbol}/executions)r`   ra   rb   rd   tradingz0.0005z0.00020100000z0.00041000000z0.00035000000z0.000251000000020000000z0.0001550000000z0.000125	100000000z0.0001z0.0015z0.000075z0.00005z0.000025)takermaker)	tierBased
percentager   r   tiersapiLimitExceededmarketUnavailablerequiredArgumentMissingunavailableauthenticationErroraccountInactiveinvalidAccountinvalidAmountinsufficientFundszBad RequestUnavailableinvalidUnitzJson Parse ErrornonceBelowThresholdnonceDuplicatenotFoundzServer ErrorunknownError)invalidArgumentr   r   )exactbroadrd   GETra   )r   r   r   r   flex)USDTBTCUSDGBPEURUSDCr   XBT)quoteIdsreversedrp   v4v1v2)r`   rb   rd   method historyGetMarketSymbolExecutions)accesssettlementCurrenciessymbolversionsr\   1m5m15m30m1h4h12h1d1w)	r   r   r   r   r   r   r   r   r   )idname	countriesversion	userAgent	rateLimitprohasurlsrh   rj   
exceptionsprecisionModeoptions
timeframes)deep_extendsuperr*   describeparse_numberr$   r"   r   r%   r   r   r   r&   r'   )self	__class__s    f/var/www/html/crypto-bot/backend/venv/lib/python3.11/site-packages/ccxt/async_support/krakenfutures.pyr   zkrakenfutures.describe    s   mT : : C C E E!$222 %2 	2
 $2 %2 "42 t2 2 $U2 t2 T2 2 +E2 )%2  &t!2" $T#2 2$ '%2& ('2( &u)2* (+2, 1%-2. &t/20 #J122 *4324 $T526 "5728 *592: +E;2< )%=2>  ?2@ !$A2B %dC2D +JE2 2F !%"&!%"#'#"&$"&*/ $##!& c2 2 2j QQK<	  FH$RKL  5C D ) 0    	  	 	 	 .(/ : :    
Y7 7r !%"&!..x88!..x88 "..s33T5F5Fx5P5PQ!..x88$:K:KH:U:UV!..y994;L;LX;V;VW!..y994;L;LY;W;WX!..z::D<M<Mh<W<WX!..z::D<M<Mi<X<XY!..z::D<M<Mj<Y<YZ!..{;;T=N=Nx=X=XY	" "..s33T5F5Fx5P5PQ!..x88$:K:KH:U:UV!..y994;L;LZ;X;XY!..y994;L;LX;V;VW!..z::D<M<Mj<Y<YZ!..z::D<M<Mi<X<XY!..z::D<M<Mj<Y<YZ!..{;;T=N=Ns=S=ST	"  >&(9')< .z "#7	
 *+> &} %j $Z (): ": "#4 ": ' *< %l  
!" #M#$ #M% * (2+7&2 + 6 ' &/*3(1-6	    	 HHH) "' %  4d  >  &**.(,-1	     * @ M) )V 
 
[xH
 xH
 x x x	    returnc                   K   |                      |           d{V }|                     |dg           }g }t          dt          |                    D ]}||         }|                     |d          }|                     |d          }d}	|                    d          dk    }
d}d}d}|
sN|                    d          dk    }| }|                     |d          }|d	nd
}	|                     |          }nd}	|	d	k    }|	d
k    }|}|                    d          }|                     |d          }|dt          |          dz
           }d}|                     |          }|                     |          }d}d}|                     |d          }| 	                    | 
                    |                    }|                     |d          }|p|p|
}|p|}|rW|                     |d          }|dk    r|}|}d}n|}|}d}| }|dz   |z   dz   |z   }|r|dz   |                     |          z   }|                    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)           | j        d*         d+         } g }!t          dt          |                     D ]6}| |         }"|!                    |"                                d|"dd,           7|                     |!| j                  | _        |S )-at  
        Fetches the available trading markets from the exchange, Multi-collateral markets are returned markets, but can be settled in multiple currencies
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-instrument-details-get-instruments
        :param dict [params]: exchange specific params
        :returns: An array of market structures
        Nrm   r   r   typez index_vanillalastTradingTimer1   r2   index_      usdcontractValueTradePrecisiontickSizefutures_inverseTF/:-r   basequotesettlebaseIdquoteIdsettleIdr/   r0   r3   activecontractcontractSize)amountprice)minmax)leverager   r   costopeningDate)linearinverser   maintenanceMarginRateexpiryexpiryDatetimestrike
optionType	precisionlimitscreatedinfor   r   )r   	numericIdcoder   )publicGetInstruments
safe_valuerangelensafe_stringfind	parse8601splitsafe_currency_coder   integer_precision_to_amountsafe_numberyymmddappendiso8601r   lowerr   
currencies)#r   paramsresponserm   resultimarketr   
marketTyper   r   r   r   r   
settleTimer1   r2   r   r  splitMarketr   r   r   r   r   r   cvtpamountPrecisionpricePrecisionr   swapOrFuturesexchangeTyper   r  r  s#                                      r   fetch_marketszkrakenfutures.fetch_markets  s      226::::::::Z oohrBBq#k**++ b	 b	A ^F!!&(33B))&&99JD__X..!3EFGF $//*55:$*!--f6GHH
","4vv8
33FNDh&FFHHSMME**5!44K 3{#3#3a#7!78FG**622D++G44EFH##F,IJJD"//0P0PQU0V0VWWO!--fjAAN//%H!^VM @#//??#444!F%H"GG"F&H#G$e+c1F: @#c\DKK,?,??FMM 2b2&2 2 	2
 &2 &2 72 H2 2 2 %2 2 &2 %2 2  $!2" H#2$ !" $ 0 0 H H)- "&,,v"6"6"-+   $#! !
  $# 
  $# 
  $#  $  >>$*:*:6=*Q*QRRc2 2 2 2 2 2 2f  $|,BCFK
q#23344 	 	A'*Djjll!!	      **:tGGr   Nr   limitc                 F  K   |                                   d{V  |                     |          }d|d         i}|                     |                     ||                     d{V }|                     |d                   }|                     |d         ||          S )a  
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-market-data-get-orderbook
        Fetches a list of open orders in a market
        :param str symbol: Unified market symbol
        :param int [limit]: Not used by krakenfutures
        :param dict [params]: exchange specific params
        :returns: An `order book structure <https://docs.ccxt.com/#/?id=order-book-structure>`
        Nr   r   
serverTime	orderBook)load_marketsr  publicGetOrderbookextendr  parse_order_book)r   r   r$  r  r  requestr  	timestamps           r   fetch_order_bookzkrakenfutures.fetch_order_book  s       !!!!!!!!!V$$fTl
 00Wf1M1MNNNNNNNN> NN8L#9::	$$Xk%:FINNNr   symbolsc                    K   |                                   d{V  |                     |           d{V }|                     |d          }|                     ||          S )a'  
        fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-market-data-get-tickers
        :param str[] symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: an array of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
        Nro   )r(  publicGetTickers	safe_listparse_tickers)r   r/  r  r  ro   s        r   fetch_tickerszkrakenfutures.fetch_tickers  s}       !!!!!!!!!..v66666666B ..955!!'7333r   r  c                    |                      |d          }|                     ||          }|d         }|                     |                      |d                    }|                      |d          }|                      |d          }t          j        ||          }t          j        t          j        ||          d          }	t          j        t          j        ||          d          }
|                      |d          }d }d }|                     |dd	          }|s|d
         r|}n
|d         r|}| 	                    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          S )Nr   lastTimeopen24hlast1002vol24hr   Fr   r   r-  datetimehighlowbid	bidVolumebidSizeask	askVolumeaskSizevwapopenclosepreviousClosechanger   average)
baseVolumequoteVolumer  )r
  safe_marketr  r(   
string_sub
string_mul
string_div
string_add	safe_boolsafe_tickerr  )r   tickerr  marketIdr   r-  rF  r8  rI  r   rJ  volumerK  rL  isIndexs                  r   parse_tickerzkrakenfutures.parse_ticker  s   6 ##FH55!!(F33!NN4#3#3FJ#G#GHH		22//#D$//'(:64(H(H%PP
$W%7d%C%CSII!!&(33
..%88 	%h %#

	" %$ !
f!
!
 Y//!
 D	!

 4!
 4##FE22!
 ))&)<<!
 4##FE22!
 ))&)<<!
 D!
 D!
 T!
 D!
 T!
 f!
  *!!
" w#!
$ %&)!
 !
 !
   	r   r   sincec           	        K   |                                   d{V  |                     |          }d}|                     |dd          \  }}|r!|                     d|||||d           d{V S |d         |                     |dd          | j        |         d	}|                     |d          }||                     |          }	|                     |d
z            |d<   |d}t          |d          }| 
                    |d         ||	z  dz
            }
|                                 }t          |
|          |d<   nb|`t          |d          }|                     |          }	|                                 |d<   |                     |d         |	|z  z
            |d<   |                     |                     ||                     d{V }|                     |d          }|                     |||||          S )a  
        :see: https://docs.futures.kraken.com/#http-api-charts-candles
        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 exchange API endpoint
        :param boolean [params.paginate]: default False, when True will automatically paginate by calling self endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
        :returns int[][]: A list of candles ordered, open, high, low, close, volume
        NFrT   paginatei  r   r   trade)r   
price_typeintervali  fromr   tocandles)r(  r  handle_option_and_params"fetch_paginated_call_deterministicr
  r   omitparse_timeframeparse_to_intr   sumseconds chartsGetPriceTypeSymbolIntervalr*  r2  parse_ohlcvs)r   r   	timeframerY  r$  r  r  r[  r,  durationtoTimestampcurrentTimestampr  ra  s                 r   fetch_ohlcvzkrakenfutures.fetch_ohlcvb  s:      !!!!!!!!!V$$88zZZ& 	~@@vW\^cenpvx|}}}}}}}}}Tl**67GDD	2
 

 67++++I66H"//==GFO}t$$E((76?EH4Dq4HIIK#||~~-=>>GDMMt$$E++I66H LLNNGDM"//EAQ0RSSGFO>>t{{7TZ?[?[\\\\\\\\  ..955  &)UEJJJr   c           	         |                      |d          |                     |d          |                     |d          |                     |d          |                     |d          |                     |d          gS )NtimerF  r=  r>  rG  rV  )safe_integerr  )r   ohlcvr  s      r   parse_ohlcvzkrakenfutures.parse_ohlcv  s     eV,,UF++UF++UE**UG,,UH--
 	
r   c                 6  K   |                                   d{V  d}|                     |dd          \  }}|r|                     d||||           d{V S |                     |          }d|d         i}d}|                     |ddd          \  }}d}	|dk    }
|
r|                     d	||          \  }}|
||d
<   d|d<   |||d<   |                     |                     ||                     d{V }|                     |dg           }g }	t          |          }t          d|          D ]l}|dz
  |z
  }||         }| 
                    |di           }| 
                    |di           }| 
                    |di           }|	                    |           mn`|                     d||          \  }}|                     |                     ||                     d{V }|                     |dg           }	|                     |	|||          S )a  
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-market-data-get-trade-history
        :see: https://docs.futures.kraken.com/#http-api-history-market-history-get-public-execution-events
        Fetch a history of filled trades that self account has made
        :param str symbol: Unified CCXT market symbol
        :param int [since]: Timestamp in ms of earliest trade. Not used by krakenfutures except in combination with params.until
        :param int [limit]: Total number of trades, cannot exceed 100
        :param dict [params]: Exchange specific params
        :param int [params.until]: Timestamp in ms of latest trade
        :param boolean [params.paginate]: default False, when True will automatically paginate by calling self endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
        :param str [params.method]: The method to use to fetch trades. Can be 'historyGetMarketSymbolExecutions' or 'publicGetHistory' default is 'historyGetMarketSymbolExecutions'
        :returns: An array of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
        NFr\   r[  r   r   r   r   beforerY  ascsortcountelementsr   r   event	Execution	executionr6  rd   )r(  rb  fetch_paginated_call_dynamicr  handle_until_optionr   r*  r2  r	  r  	safe_dictr  publicGetHistoryparse_trades)r   r   rY  r$  r  r[  r  r,  r   	rawTradesisFullHistoryEndpointr  rz  lengthr  r   elementr{  executionContainerrawTrades                       r   fetch_tradeszkrakenfutures.fetch_trades  s      !!!!!!!!!88PZ[[& 	h::=&RWY^`fgggggggggV$$fTl
 66v}hXz{{	!'+M!M  Y	@"66x&QQOGV #( "' #( !BB4;;wX^C_C_````````Hd ~~h
B??HI]]F1f%% + +
Q"5/w<<%)^^E;%K%K">>*<k2NN  ****+ #66z7FSSOGV!224;;w3O3OPPPPPPPPH& xB??I  FE5AAAr   c                 z   |                      |                     |dd                    }|                     |d          }|                     |g dd          }|                     |dd          }||                     |d          }|                     |d	          }|                     |d
          }|                     |d          }	d }
|                     |d          }|                     |d          }|Y|                     |d          }|                     |d
          }|                     |d          }	|                     |d          }
nZ|X|                     |d          }|                     |d
          }|                     |d          }	|                     |d          }
|
|                     |
          }
|                     ||          }d }|                     |d          }|\|Z|X|rt          j	        ||          }nt          j
        ||          }|                     |d          }t          j	        ||          }d }|                     |d          }|7|                    d          dk    rd}n|                    d          dk    rd}d|v }|rG|                     |d          }|                     |di           }||                     |d          }	d}|                     |||                     |d
          ||                     |          ||
|	|||r|nd |d d          S )Nrq  fillTimer   )sizer   quantity0.0uidfill_idexecutionIdorder_idr   sideorderPriorEditorderPriorExecutionorderIdr   r   r   fillTyper   r   r   
takerOrderr-  	direction)r  r   r   r-  r<  orderr   r  takerOrMakerr   r   r   fee)r  safe_string_2r
  safe_string_nr  parse_order_typerM  rR  r(   rO  rP  r  rr  r  safe_string_lower
safe_trader  )r   r\  r  r-  r   r   r   r  rU  r  r   	priorEditpriorExecutionr   r   r   r  r  isHistoricalExecutionr   s                       r   parse_tradezkrakenfutures.parse_trade&  s|   D NN4#5#5eVZ#P#PQQ	  00##E+I+I+I5QQui88:!!%77B  
33##E844v..OOE+;<<	0EFF%$$^Y??E''AAH##NF;;D##NF;;DD"$$Y	::E''	8<<H##Iv66D##Iv66D((..D!!(F3311U%6V=O 9)&%88)&%88++FNCCL%dL99D##E:66}}W%%**&w''1,,&!-!6  	'))%==INN5,;;E --e[AA&&&vx88"Y//( &0ffD 
  
   	r   r   r  r   r   c                    |                      |          }|d         }|                     |d|          }|                     |d          }d}	|                     |dk    |dk    |          \  }	}|	rd}n|dk    rd}n|dk    rd	}n|dk    rd
}|d         ||                     ||          d}
|                     |dd          }|||
d<   |                     |dd          }|d u}|                     |d          }|                     |d          }|d u}|d u}|p|}|                     |dd          }|                     |d          }|s|r||
d<   |rd}|                     ||          |
d<   n?|r=d}|rd}|                     ||          |
d<   n|rd}|                     ||          |
d<   |rd|
d<   ||
d<   ||                     ||          |
d<   |                     |g d          }|                     |
|          S )Nr   	orderTypetimeInForceFr  r   iocr$  lmtmktr   )r   r  r  clientOrderIdcliOrdIdtriggerPrice	stopPricestopLossPricetakeProfitPricetriggerSignalr8  
reduceOnlystpTtake_profit
limitPrice)r  r  r  r  r  )	r  r
  handle_post_onlyamount_to_precisionr  r  price_to_precisionrd  r*  )r   r   r   r  r   r   r  r  r  postOnlyr,  r  r  isTriggerOrderstopLossTriggerPricetakeProfitTriggerPriceisStopLossTriggerOrderisTakeProfitTriggerOrderisStopLossOrTakeProfitTriggerr  r  s                        r   create_order_requestz"krakenfutures.create_order_request  s   V$$!T::&&v}==001A46>SYZZ& 	DDE!!DDW__DDXDTl,,VV<<
 

 **6?JOO$"/GJ))&.+NN%T1#//HH!%!1!1&:K!L!L!5T!A#9#E (>(ZBZ%((&II__V\::
( 	5N 	5'4GO$ 
	_D#'#:#:6<#P#PGK  * 	_J% _'+'>'>vG['\'\$$) _$'+'>'>vG]'^'^$ 	)$(GL!#$($;$;FE$J$JGL!6#w#w#wxx{{7F+++r   c                   K   |                                   d{V  |                     |          }|                     ||||||          }|                     |           d{V }	|                     |	d          }
|                     |
d          }|                     |ddg           |                     |
|          S )a  
        Create an order on the exchange
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-order-management-send-order
        :param str symbol: unified market symbol
        :param str type: 'limit' or 'market'
        :param str side: 'buy' or 'sell'
        :param float amount: number of contracts
        :param float [price]: limit order price
        :param bool [params.reduceOnly]: set if you wish the order to only reduce an existing position, any order which increases an existing position will be rejected, default is False
        :param bool [params.postOnly]: set if you wish to make a postOnly order, default is False
        :param str [params.clientOrderId]: UUID The order identity that is specified from the user, It must be globally unique
        :param float [params.triggerPrice]: the price that a stop order is triggered at
        :param float [params.stopLossPrice]: the price that a stop loss order is triggered at
        :param float [params.takeProfitPrice]: the price that a take profit order is triggered at
        :param str [params.triggerSignal]: for triggerPrice, stopLossPrice and takeProfitPrice orders, the trigger price type, 'last', 'mark' or 'index', default is 'last'
        N
sendStatusstatusr8   filled)r(  r  r  privatePostSendorderr  r
  verify_order_action_successparse_order)r   r   r   r  r   r   r  r  orderRequestr  r  r  s               r   create_orderzkrakenfutures.create_order  s      " !!!!!!!!!V$$00tVUTZ[[22<@@@@@@@@> __X|<<
!!*h77((
KKK
F333r   r   c           	      B  K   |                                   d{V  g }t          dt          |                    D ]}||         }|                     |d          }|                     |d          }|                     |d          }|                     |d          }	|                     |d          }
|                     |di           }|                     ||          }d	|vr&|                     |t          d
                    |d	<   d|d<   |                     ||||	|
|          }|	                    |           d|i}| 
                    |                     ||                     d{V }|                     |dg           }|                     |          S )a  
        create a list of trade orders
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-order-management-batch-order-management
        :param Array orders: list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
        :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
        Nr   r   r   r  r   r   r  	order_tagr   sendr  
batchOrderbatchStatus)r(  r  r	  r
  r  r*  rg  strr  r  privatePostBatchorderr2  parse_orders)r   r   r  ordersRequestsr  rawOrderrU  r   r  r   r   orderParamsextendedParamsr  r,  r  datas                    r   create_orderszkrakenfutures.create_orders  s      !!!!!!!!!q#f++&& 	0 	0AayH''(;;H##Hf55D##Hf55D__Xx88FOOHg66E//(HbAAK![[f==N>11.2hhq#a&&.A.A{+&,N7#44XtT6SXZhiiL!!,////.
 33DKK4P4PQQQQQQQQ" ~~hr::  &&&r   r   c                 h  K   |                                   d{V  d|i}|||d<   |||d<   |                     |                     ||                     d{V }	|                     |	d         d          }
|                     |
ddg           |                     |	d                   }|	|d	<   |S )
a;  
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-order-management-edit-order
        Edit an open order on the exchange
        :param str id: order id
        :param str symbol: Not used by Krakenfutures
        :param str type: Not used by Krakenfutures
        :param str side: Not used by Krakenfutures
        :param float amount: Order size
        :param float [price]: Price to fill order at
        :param dict [params]: Exchange specific params
        :returns: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
        Nr  r  r  
editStatusr  r9   r  r  )r(  privatePostEditorderr*  r
  r  r  )r   r   r   r   r  r   r   r  r,  r  r  r  s               r   
edit_orderzkrakenfutures.edit_orderD  s       !!!!!!!!!r
 $GFO$)GL!224;;w3O3OPPPPPPPP!!(<"8(CC((xjIII  ,!788 fr   c                   K   |                                   d{V  |                     |                     d|i|                     d{V }|                     |                     |di           d          }|                     |d           i }d|v r|                     |d                   }|                     d|i|          S )a|  
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-order-management-cancel-order
        Cancel an open order on the exchange
        :param str id: Order id
        :param str symbol: Not used by Krakenfutures
        :param dict [params]: Exchange specific params
        :returns: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
        Nr  cancelStatusr  r5   r  )r(  privatePostCancelorderr*  r
  r  r  r  )r   r   r   r  r  r  r  s          r   cancel_orderzkrakenfutures.cancel_order`  s       !!!!!!!!!44T[[*bAQSY5Z5Z[[[[[[[[!!$//(NB"O"OQYZZ((???X%%$$Xn%=>>E{{FH-u555r   idsc                 N  K   |                                   d{V  g }|                     |dg           }t          |          }|dk    r?t          dt          |                    D ] }|                    d||         d           !n>t          dt          |                    D ] }|                    d||         d           !d|i}|                     |                     ||                     d{V }	|                     |	dg           }
|                     |
          S )	a0  
        cancel multiple orders
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-order-management-batch-order-management
        :param str[] ids: order ids
        :param str [symbol]: unified market symbol
        :param dict [params]: extra parameters specific to the exchange API endpoint
         *
         * EXCHANGE SPECIFIC PARAMETERS
        :param str[] [params.clientOrderIds]: max length 10 e.g. ["my_id_1","my_id_2"]
        :returns dict: an list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
        NclientOrderIdsr   cancel)r  r  )r  r  r  r  )	r(  r  r	  r  r  r  r*  r2  r  )r   r  r   r  r   r  clientOrderIdsLengthr  r,  r  r  s              r   cancel_orderszkrakenfutures.cancel_ordersr  s[      !!!!!!!!!1A2FF">22!##1c.1122 R RnQ>OPPQQQQR 1c#hh'' G Gc!fEEFFFF&
 33DKK4P4PQQQQQQQQ< nnX}bAA  ---r   c                    K   i }||                      |          |d<   |                     |                     ||                     d{V }|S )aM  
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-order-management-cancel-all-orders
        Cancels all orders on the exchange, including trigger orders
        :param str symbol: Unified market symbol
        :param dict [params]: Exchange specific params
        :returns: Response from exchange api
        Nr   )	market_idprivatePostCancelallordersr*  )r   r   r  r,  r  s        r   cancel_all_orderszkrakenfutures.cancel_all_orders  sa        $v 6 6GH88Wf9U9UVVVVVVVVr   c                    K   |                                   d{V  d}||                     |          }|                     |           d{V }|                     |dg           }|                     ||||          S )a}  
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-order-management-get-open-orders
        Gets all open orders, including trigger orders, for an account from the exchange api
        :param str symbol: Unified market symbol
        :param int [since]: Timestamp(ms) of earliest order.(Not used by kraken api but filtered internally by CCXT)
        :param int [limit]: How many orders to return.(Not used by kraken api but filtered internally by CCXT)
        :param dict [params]: Exchange specific parameters
        :returns: An array of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
        N
openOrders)r(  r  privateGetOpenordersr2  r  )r   r   rY  r$  r  r  r  r   s           r   fetch_open_orderszkrakenfutures.fetch_open_orders  s       !!!!!!!!![[((F226::::::::,;;  >>>r   c                   K   |                                   d{V  d}||                     |          }i }|||d<   |||d<   |                     |                     ||                     d{V }|                     |dg           }g }	t          dt          |                    D ]}
||
         }|                     |di           }|                     |d          }|M|                     |di           }|                     |d	          }|d
k    rd|d<   |		                    |           | 
                    |	|||          S )a  
        :see: https://docs.futures.kraken.com/#http-api-history-account-history-get-order-events
        Gets all closed orders, including trigger orders, for an account from the exchange api
        :param str symbol: Unified market symbol
        :param int [since]: Timestamp(ms) of earliest order.
        :param int [limit]: How many orders to return.
        :param dict [params]: Exchange specific parameters
        :returns: An array of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
        Nry  r_  rz  r   r{  OrderPlacedr  r  r   closedr  r(  r  historyGetOrdersr*  r2  r  r	  r  r
  r  r  )r   r   rY  r$  r  r  r,  r  	allOrdersclosedOrdersr  r  r{  orderPlaced
innerOrderr  s                   r   fetch_closed_ordersz!krakenfutures.fetch_closed_orders  s{      !!!!!!!!![[((F$GG#GFO..t{{7F/K/KLLLLLLLLNN8Z<<	q#i..)) 		4 		4AaLENN5'266E..>>K&!^^K"EE
))*h??S==+3Jx( ''
333  vueDDDr   c                   K   |                                   d{V  d}||                     |          }i }|||d<   |||d<   |                     |                     ||                     d{V }|                     |dg           }g }	t          dt          |                    D ]}
||
         }|                     |di           }|                     |d          }|M|                     |di           }|                     |d	          }|d
k    rd|d<   |		                    |           |                     |d          }|1|                     |di           }d|d<   |		                    |           |                     |d          }|1|                     |di           }d|d<   |		                    |           | 
                    |	|||          S )a
  
        :see: https://docs.futures.kraken.com/#http-api-history-account-history-get-order-events
        Gets all canceled orders, including trigger orders, for an account from the exchange api
        :param str symbol: Unified market symbol
        :param int [since]: Timestamp(ms) of earliest order.
        :param int [limit]: How many orders to return.
        :param dict [params]: Exchange specific parameters
        :returns: An array of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
        Nry  r_  rz  r   r{  r  r  r  r   canceledr  OrderCancelledOrderRejectedrejectedr  )r   r   rY  r$  r  r  r,  r  r  canceledAndRejectedr  r  r{  r  r  r  orderCanceledorderRejecteds                     r   fetch_canceled_ordersz#krakenfutures.fetch_canceled_orders  s      !!!!!!!!![[((F$GG#GFO..t{{7F/K/KLLLLLLLLNN8Z<<	 q#i..)) 	7 	7AaLENN5'266E..>>K&!^^K"EE
))*h??S==+5Jx('..z::: NN52BCCM(!^^M7BGG
'1
8$#**:666 NN5/BBM(!^^M7BGG
'1
8$#**:666  !4feUKKKr   c                 >    ddddd}|                      |||          S )Nr$  r  )r  r  r   r  r
  )r   r  maps      r   r  zkrakenfutures.parse_order_type  s4    	
 
 Y	:::r   c                    i dt           dt           dt           dt           dt          dt          dt          dt          d	t          d
t          dt
          dt          dt           dt          dt          dt          dt          t           t          t          d}||v r8| 	                    ||          s$ ||         | j
        dz   |z   dz   |z             d S d S )NinvalidOrderTypeinvalidSideinvalidSizeinvalidPriceinsufficientAvailableFundsselfFilltooManySmallOrdersmaxPositionViolationmarketSuspendedmarketInactiveclientOrderIdAlreadyExistclientOrderIdTooLongoutsidePriceCollarpostWouldExecuteiocWouldNotExecutewouldNotReducePositionorderForEditNotFound)orderForEditNotAStopr  r   z: z failed due to )r   r   r   r   r%   r!   r   r    r   in_arrayr   )r   r  r   rd  errorss        r   r  z)krakenfutures.verify_order_action_success#  sI   

<
 <
 L	

 )*;
 
 !-
 #J
 3
 2
 ()9
 #J
 !,
  8
 !"2
  %m!
" #M#
$ %1#%)
 
 
, fdmmFD&A&A &.4&!8;L!Lv!UVVV r   c           
          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}|                      |||          S )NplacedrF  	cancelledr  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  )r  editedr  r  r  r   	untouchedpartiallyFilledr  )r   r  statusess      r   parse_order_statusz krakenfutures.parse_order_status=  s   
f

 

 :	

 :
 J
 )*
 

 !*
 #J
 z
 j
 (
 #J
 !*
" 
#
$ !*%
& '1$.$."%5
 
 
8 &&999r   c                 
   |                      |dg           }|                     |d          }t          |          }d|v r ||dk    r|                     |dd          S d }d}d}d }	d }
g }|rg }t	          dt          |                    D ]}||         }|                     |d          dk    r|                    |           |                      |d	          }|                     |d
d|          }|d}d}n|sG|                      |d          }|                     |dd          }|                     |d          }
|d}|                     |          }|                     |d          }	||}|	|                     |d          }	|                     |	          }| 	                    |g d          }|                     |d          }| 
                    ||          }|                     |                     |dd                    }|                     |                     |d                    }|
|                     |d          }
|                     |d          }|                     |ddd          }|                     |d          }d }d}t          |          }|dk    rd}t	          dt          |                    D ]s}||         }|                     |d          }|                     |d          }t          j        ||          }t          j        |t          j        ||                    }tt          j        ||          }||s|rt          j        ||          rd}d}|rt          j        ||          }nt          j        ||          }||r|t          j        ||          }n|}||s|t          j        ||          }d } |=|;||n|
}!|!3|d         rt          j        ||!          } nt          j        ||!          } |                     |dd          }"|"|                     |dd           }"|                     |dd!          }#d"}$|#d#k    s|                     |#          d$k    rd#}$|                     i d%|d&|"d'|                     |g d(          d|d)|                     |          d*d d+|d|                     |d          d|                     |#          d,|$d-|#d.k    d/|                      |d/          d0|                     |d0          d|
d1|                     |d2          d2|                     |d2          d|| ||||d d |d3          S )4NorderEventsr  r   r  )r  r  Fr   	EXECUTIONorderTriggernewr  Tr  r  r  )r  r  r  r   r-  receivedTimelastUpdateTimer  
filledSizer  r  unfilledSizer   r   r  r   r  r  r  r  gtcr  r  r  r   r  )r  clientIdr  r<  lastTradeTimestamplastUpdateTimestampr  r  r   r  r  r  r  )r   rJ  r  	remainingr  r  rj   trades)r  r
  r	  
safe_orderr  r  safe_value_2r  r!  r  rM  r  r  r(   rQ  rO  rP  	string_ge
string_maxrN  safe_string_lower_2r  r  r  )%r   r  r  r#  errorStatusorderEventsLengthdetailsisPriorfixedstatusIdr   r0  r   r  itemr%  r  r  isClosedrU  r-  r.  r   r  r/  rJ  filled2tradesLengthvwapSumr\  tradeAmount
tradePricer   
whichPricer   r   r  s%                                        r   r  zkrakenfutures.parse_order\  s   V ooe]B??&&uh77,,U"")@GX\]G]G]??EZ#H#HIII 	9J1c+..// ' '"1~##D&11[@@%%d+++#t^DD++D%,OO&#G EE '*.//$@U*V*V'"//6KM]^^G ,,-@,OOE*"&&&z22F''x88H?G''::H ((22==)K)K)KLL##GX66!!(F33NN4#5#5g{N#[#[\\	"nnT-=-=gGW-X-XYY=$$Wl;;E!!':66##G\8UKK$$Wn==	6{{!G1c&kk** c cq	"..uh??!--eW==
!,WkBB!,Wg6HV`6a6abb('::G"X"7"wGXY`bhGiGi"! = +FG<< +FG<< #% ' 267 C CI"	NWN93H'	::FV%7%,%8uJ%(# B"-fjAADD"-fjAADz9==:##GY>>B''EE5==D11$778CCK  
E 
" 
 T//9b9b9bcc 
 	 

 Y// 
 !$ 
 "#6 
 d&&vx88 
 D))$// 
 ; 
  
 $//'<@@ 
 D$$Wf55 
 U 
 ))'>BB 
  D,,WnEE! 
" f# 
$ "3 
  
  
   	r   c                    K   |                                   d{V  d}||                     |          }|                     |           d{V }|                     |d         |||          S )a  
        fetch all trades made by the user
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-historical-data-get-your-fills
        :param str symbol: unified market symbol
        :param int [since]: *not used by the  api* the earliest time in ms to fetch trades for
        :param int [limit]: the maximum number of trades structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param int [params.until]: the latest time in ms to fetch entries for
        :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
        Nrv   )r(  r  privateGetFillsr  )r   r   rY  r$  r  r  r  s          r   fetch_my_tradeszkrakenfutures.fetch_my_trades  s       !!!!!!!!![[((F--f55555555*   '!2FE5IIIr   c                   K   |                                   d{V  |                     |dd          }|                     |d          }|                     |g d          }|                     |           d{V }|                     |d          }|dk    s|dk    r|t          | j        d	z             |}||d
n|}|                     |          }|                     |d          }|                     ||          }|&|dn|}|dn|}t          | j        dz   |z             | 
                    |          }	||	d<   |                     |          |	d<   ||	d<   |	S )a  
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-account-information-get-wallets
        Fetch the balance for a sub-account, all sub-account balances are inside 'info' in the response
        :param dict [params]: Exchange specific parameters
        :param str [params.type]: The sub-account type to query the balance of, possible values include 'flex', 'cash'/'main'/'funding', or a market symbol * defaults to 'flex' *
        :param str [params.symbol]: A unified market symbol, when assigned the balance for a trading market that matches the symbol is returned
        :returns: A `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
        Nr   accountr   )r   rH  r   r&  marginAccountr0   z: fetchBalance requires symbol argument for margin accountsr   rs    z! fetchBalance has no account for r  r-  r<  )r(  r  r
  rd  privateGetAccountsr   r   parse_accountr  r   parse_balancer  )
r   r  r   r   r  r<  accountNamers   rH  balances
             r   fetch_balancezkrakenfutures.fetch_balance  s      !!!!!!!!!!!&&)<<!!&(336#@#@#@AA0088888888p ##Hl;;?""dh&6&6~'2n(noooD<$n666D((..??8Z88//(K88?,22TD"NRRFTW'JJTQRRR$$W--"#~~h77&
r   c                    |                      |dd          }|dk    }|dk    }|                     |ddi           }i }t          |                                          }t	          dt          |                    D ]}||         }	||	         }
|                     |	          }|                    d          }t          |          }|d	k    rR|                                 }|r3| 	                    |
d
          |d<   | 	                    |
d          |d<   nU|rd|d<   |
|d<   nH| 
                    |d          }| 	                    |d          |d<   | 	                    |d          |d<   |||<   |                     |          S )NaccountTyper   multiCollateralMarginAccountcashAccountbalancesr  r   r   r   r  total	availablefreer  used	auxiliaryafpv)r  r2  listkeysr  r	  r  r  rH  r
  r  safe_balance)r   r  rR  isFlexisCashrU  r  currencyIdsr  
currencyIdrO  r  	splitCode
codeLengthrH  rZ  s                   r   rM  zkrakenfutures.parse_balance?  s   ~ ((=&II!??.$$Xz<LL8==??++q#k**++ 	# 	#A$QJz*G**:66D

3IYJA~~llnnG 	E#'#3#3GZ#H#H "&"2"27K"H"H E"'#*   OOHkBB	"&"2"29d"C"C#'#3#3It#D#D "F4LL  (((r   c                 $  K   |                                   d{V  |                     |          }|                     |           d{V }|                     |d          }g }t	          dt          |                    D ]y}||         }|                     |d          }	||                     |	|          s9|                     |	          }
|                     ||
          }|	                    |           z| 
                    |d          S )a  
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-market-data-get-tickers
        fetch the current funding rates
        :param str[] symbols: unified market symbols
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns Order[]: an array of `funding rate structures <https://docs.ccxt.com/#/?id=funding-rate-structure>`
        Nro   r   r   )r(  
market_idsr1  r  r  r	  r  rM  parse_funding_rater  index_by)r   r/  r  	marketIdsr  ro   fundingRatesr  entryentry_symbolr  parseds               r   fetch_funding_ratesz!krakenfutures.fetch_funding_rates  s'      !!!!!!!!!OOG,,	..v66666666//(I66q#g,,'' 	( 	(AAJE??5(;;L$}}\9== %%l33F,,UF;;F''''}}\8444r   c                    d}|                      |d          }|                     |          }|                     |                      |d                    }|                     |d          }|                      |d          }|                     |          }	|                      |d          }
t          j        t          j        |
|          |          }|                     |          }|                      |d          }t          j        t          j        ||          |          }|                     |          }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 S )N8r   r6  
indexPrice	markPricefundingRatefundingRatePredictionr  interestRateestimatedSettlePricer-  r<  fundingTimestampfundingDatetimenextFundingRatenextFundingTimestampnextFundingDatetimepreviousFundingRatepreviousFundingTimestamppreviousFundingDatetime)	r
  r   r  r  r   r(   rP  rO  r  )r   rT  r  fundingRateMultiplierrU  r   r-  rr  markPriceStringrs  fundingRateStringfundingRateResultrt  nextFundingRateStringnextFundingRateResultrz  s                   r   rh  z krakenfutures.parse_funding_rate  s   . !$##FH55X&&NN4#3#3FJ#G#GHH	%%fl;;
**6;??%%o66	 ,,V]CC#.w/ABSUj/k/km|}}''(9:: $ 0 09P Q Q ' 273EF[]r3s3s  vE  !F  !F++,ABB
F
f
 
 *	

 D
 #D
 
 Y//
 ;
 
 t
 
 #D
 "4
 "4
  '!
" &t#
 	
r   c           	        K   |t          | j        dz             |                                  d{V  |                     |          }|d         st	          | j        dz             d|d                                         i}|                     |                     ||                     d{V }|                     |d          }g }	t          dt          |                    D ]b}
||
         }|                     |d	          }|	                    |||                     |d
          |                     |          |d           c|                     |	d	          }|                     ||||          S )a  
        fetches historical funding rate prices
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-historical-funding-rates-historical-funding-rates
        :param str symbol: unified symbol of the market to fetch the funding rate history for
        :param int [since]: timestamp in ms of the earliest funding rate to fetch
        :param int [limit]: the maximum amount of `funding rate structures <https://docs.ccxt.com/#/?id=funding-rate-history-structure>` to fetch
        :param dict [params]: extra parameters specific to the api endpoint
        :returns dict[]: a list of `funding rate structures <https://docs.ccxt.com/#/?id=funding-rate-history-structure>`
        Nz5 fetchFundingRateHistory() requires a symbol argumentr1   z7 fetchFundingRateHistory() supports swap contracts onlyr   r   ratesr   r-  relativeFundingRate)r  r   rt  r-  r<  )r   r   r(  r  r   upperpublicGetHistoricalfundingratesr*  r  r  r	  r
  r  r  r  sort_byfilter_by_symbol_since_limit)r   r   rY  r$  r  r  r,  r  r  r  r  r<  r<  sorteds                 r   fetch_funding_rate_historyz(krakenfutures.fetch_funding_rate_history  s      >#DG.e$efff!!!!!!!!!V$$f~ 	bTW'``aaafTl((**
 ==dkk'SY>Z>Z[[[[[[[[ '22q#e**%% 		 		A8D''k::HMM #//6KLL!^^H55$      fk2200NNNr   c                    K   |                                   d{V  i }|                     |           d{V }|                     |          }|                     |d|d          S )a=  
        :see: https://docs.futures.kraken.com/#websocket-api-private-feeds-open-positions
        Fetches current contract trading positions
        :param str[] symbols: List of unified symbols
        :param dict [params]: Not used by krakenfutures
        :returns: Parsed exchange response for positions
        Nr   F)r(  privateGetOpenpositionsparse_positionsfilter_by_array_positions)r   r/  r  r,  r  r  s         r   fetch_positionszkrakenfutures.fetch_positions  s       !!!!!!!!!55g>>>>>>>>" %%h//--fhOOOr   c                     g }|                      |d          }t          dt          |                    D ]2}|                     ||                   }|                    |           3|S )NopenPositionsr   )r  r  r	  parse_positionr  )r   r  r/  r  r  	positionsr  positions           r   r  zkrakenfutures.parse_positions7  sj    OOHo>>	q#i..)) 	$ 	$A**9Q<88HMM(####r   c                    |                      |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          d dS )NmaxFixedLeveragecrossisolatedr  r   r  r-  r<  initialMargininitialMarginPercentagemaintenanceMarginmaintenanceMarginPercentage
entryPricer   notionalr   unrealizedPnl	contractsr  r   marginRatioliquidationPricers  r  )
collateral
marginTyper  r   )r  r
  rM  r  )r   r  r  r   r  r<  rU  s          r   r  zkrakenfutures.parse_position?  s   . ##H.@AA
#J##Hj99##Hh77!!(F33
H
fX&
 11
 	

 T
 &t
  
 *4
 $**8W==
 
 
 T
 ))(F;;
 D,,V^DD
 4
  !
" #
$ $$$Xv66+
 
 
 	
r   c                    K   |                                   d{V  |                     |           d{V }|                     |d          }|                     ||d          S )a  
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-instrument-details-get-instruments
        retrieve information on the maximum leverage, and maintenance margin for trades of varying trade sizes
        :param str[]|None symbols: list of unified market symbols
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a dictionary of `leverage tiers structures <https://docs.ccxt.com/#/?id=leverage-tiers-structure>`, indexed by market symbols
        Nrm   r   )r(  r  r2  parse_leverage_tiers)r   r/  r  r  r  s        r   fetch_leverage_tiersz"krakenfutures.fetch_leverage_tiersu  s       !!!!!!!!!226::::::::Z ~~h66((wAAAr   c                 b   |                      |d          }|                     |d          }|                     ||          }g }t          dt	          |                    D ]}||         }|                     |d          }|                     |d          }	|dk    rt	          |          }
||
dz
           }|	|d<   |                    |                     |d          |d         |	d	|                     |d
          |                     t          j
        d|                    |d           |S )z~
         * @ignore
         * @param info Exchange market response for 1 market
         * @param market CCXT market
        marginLevelsr   r   r  r  r   notionalCapr   Nr  1)tiercurrencynotionalFloorr  r   maxLeverager  )r  r
  rM  r  r	  r  r  rg  r   r(   rP  )r   r  r  r  r   r   r  r  r  r  tiersLengthpreviousTiers               r   parse_market_leverage_tiersz)krakenfutures.parse_market_leverage_tiers  sD   N t^<<dH--!!"f--q#l++,, 	 	A?D ,,T?CCM ,,T;??MAvv!%jj$[1_5.;]+LLA"7O!.#)-)9)9$@S)T)T#001CC1W1WXX      r   r  c                     |                      |d          }|d |                     |          ||                      |d          d d d |                      |d          d	S )Nr&  r  r  )	r  r   r-  r<  r  r   fromAccount	toAccountr  )r
  r  )r   r_   r  r<  s       r   parse_transferzkrakenfutures.parse_transfer  so     ##Hl;;11 ((6::&&x::

 

 
	
r   c           	         ddddddddd}||v r||         S || j         v rl|                     |          }|d         }|                    d          }|d         rd|                     |d          z   S d	|                     |d          z   S |S )
Ncashr   )mainfundingr2   futuresrT  rS  multiCollateralmultiCollateralMarginr   r   r   fi_r   fv_)marketsr  r  r
  )r   rH  accountByTyper  rU  splitIds         r   rL  zkrakenfutures.parse_account	  s    !,2%%+	
 	
 m## ))$$[[))Fd|HnnS))Gi  <t//;;;;t//;;;;Nr   r  c                 D   K   |                      ||dd|           d{V S )a3  
        transfer from futures wallet to spot wallet
        :param str code: Unified currency code
        :param float amount: Size of the transfer
        :param dict [params]: Exchange specific parameters
        :returns: a `transfer structure <https://docs.ccxt.com/#/?id=transfer-structure>`
        r2   r/   N)r_   )r   r  r   r  s       r   transfer_outzkrakenfutures.transfer_out	  s4       ]]466JJJJJJJJJr   r  r  c                   K   |                                   d{V  |                     |          }|dk    rt          | j        dz             d|i}d}|dk    rt|                     |          dk    r t          | j        dz   |z   dz   |z             |d         |d	<   |                     |                     ||                     d{V }nj|                     |          |d
<   |                     |          |d<   |d         |d<   |                     |                     ||                     d{V }|                     ||          }	|                     |	|||d          S )a  
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-transfers-initiate-wallet-transfer
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-transfers-initiate-withdrawal-to-spot-wallet
        transfers currencies between sub-accounts
        :param str code: Unified currency code
        :param float amount: Size of the transfer
        :param str fromAccount: 'main'/'funding'/'future', 'flex', or a unified market symbol
        :param str toAccount: 'main'/'funding', 'flex', 'spot' or a unified market symbol
        :param dict [params]: Exchange specific parameters
        :returns: a `transfer structure <https://docs.ccxt.com/#/?id=transfer-structure>`
        Nr/   z2 transfer does not yet support transfers from spotr   r  z transfer cannot transfer from z to r   r  r  r  unit)r   r  r  )	r(  r  r   r   rL  privatePostWithdrawalr*  privatePostTransferr  )
r   r  r   r  r  r  r  r,  r  r_   s
             r   r_   zkrakenfutures.transfer$	  s      !!!!!!!!!==&&&  TW'[[\\\f
 !!+..&88 +L!L{!Z]c!cfo!oppp"*4.GJ!77GV8T8TUUUUUUUUHH%)%7%7%D%DGM"#'#5#5i#@#@GK &tnGFO!55dkk'66R6RSSSSSSSSH &&x::{{8&"&
 &
   	r   r   c                   K   |t          | j        dz             |                                  d{V  ||                     |                                          d}|                     |                     ||                     d{V S )a  
        set the level of leverage for a market
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-multi-collateral-set-the-leverage-setting-for-a-market
        :param float leverage: the rate of leverage
        :param str symbol: unified market symbol
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: response from the exchange
        Nz) setLeverage() requires a symbol argument)r  r   )r   r   r(  r  r  privatePutLeveragepreferencesr*  )r   r   r   r  r,  s        r   set_leveragezkrakenfutures.set_leverageO	  s       >#DG.Y$YZZZ!!!!!!!!!#nnV,,2244
 
 77GV8T8TUUUUUUUUUr   c                    K   |                                   d{V  |                     |           d{V }|                     |dg           }|                     ||d          S )a  
        fetch the set leverage for all contract and margin markets
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-multi-collateral-get-the-leverage-setting-for-a-market
        :param str[] [symbols]: a list of unified market symbols
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a list of `leverage structures <https://docs.ccxt.com/#/?id=leverage-structure>`
        NleveragePreferencesr   )r(  privateGetLeveragepreferencesr2  parse_leverages)r   r/  r  r  r  s        r   fetch_leverageszkrakenfutures.fetch_leveragesd	  s       !!!!!!!!!;;FCCCCCCCC #nnX7LbQQ##$7(KKKr   c                   K   |t          | j        dz             |                                  d{V  |                     |          }d|                     |                                          i}|                     |                     ||                     d{V }|                     |dg           }| 	                    |di           }| 
                    ||          S )a  
        fetch the set leverage for a market
        :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-multi-collateral-get-the-leverage-setting-for-a-market
        :param str symbol: unified market symbol
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `leverage structure <https://docs.ccxt.com/#/?id=leverage-structure>`
        Nz+ fetchLeverage() requires a symbol argumentr   r  r   )r   r   r(  r  r  r  r  r*  r2  r  parse_leverage)r   r   r  r  r,  r  r  r  s           r   fetch_leveragezkrakenfutures.fetch_leverage}	  s       >#DG.[$[\\\!!!!!!!!!V$$dnnV,,2244
 ;;DKKQW<X<XYYYYYYYY #nnX7LbQQ~~11b99""4000r   c                     |                      |d          }|                     |d          }||                     ||          d ||dS )Nr   r  )r  r   
marginModelongLeverageshortLeverage)r
  rr  safe_symbol)r   r   r  rU  leverageValues        r   r  zkrakenfutures.parse_leverage	  sZ    ##Hh77))(MBB&&x88)*
 
 	
r   c
                    |d S |dk    rt          | j        dz   |z             |                     |d          }
|                     |
d          }|                     |d          }|                     |d|          }|d S | j        dz   |z   }|                     | j        d         ||           |                     | j        d         ||           |d	k    rt          |          t          |          )
Ni   r  r   messageerrorr   r   i  )	r#   r   r  r
  throw_exactly_matched_exceptionr   throw_broadly_matched_exceptionr   r   )r   r  reasonurlr   headersbodyr  requestHeadersrequestBodyr  
firstErrorfirtErrorMessager  feedbacks                  r   handle_errorszkrakenfutures.handle_errors	  s   43;; 3!5666844__VQ//
++J	BB""8W6FGG?47S=4',,T_W-EwPXYYY,,T_W-EwPXYYY3;;X&&&H%%%r   r`   r   c                 F   |                      | j        d         |i           }|                      ||i           }|                     ||| j                  }	|                     |d|	          }
|                     |d          }|                      | j        d         |i           }|                      ||i           }|                     ||d          }|
dz   |                     ||          z   }|                     ||                     |                    }|}d}|dk    rd|                     |          z   }|}n|r|                     |          }|d	|z   z  }| j	        d
         |         |z   }|dk    s|dk    r| 
                                 |dz   }|dk    r||dz   z  }||z  }|                     |                     |          dd          }|                     | j                  }|                     ||t           j        d          }dd| j        |d}||||dS )Nr   r   r   r`   r   rJ  r}   zjson=?rh   ra   z/api/sha256binarybase64z!application/x-www-form-urlencodedzapplication/json)zContent-TypeAcceptAPIKeyAuthent)r  r   r  r  )r  r   r
  r   rd  implode_paramsextract_paramsjson	urlencoder   check_required_credentialshashencodebase64_to_binarysecrethmachashlibsha512apiKey)r   pathrh   r   r  r  r  apiVersionsmethodVersionsdefaultVersionr   	apiAccessmethodAccessr   endpointquerypostDatar  authr  r  	signatures                         r   signzkrakenfutures.sign	  s=   oodl:&>RHHfbAA)).$MM""69nEE69--OODL$:CDD	y&"==!!,h??S=4#6#6tV#D#DD64#6#6t#<#<==<6!2!22HDD 	$~~f--HS8^#Eis#e+)v22++---g%Dic	!HD99T[[..(CCD**4;77F		$III C,+$	 G fdwOOOr   )N)F__name__
__module____qualname__r   r   r
   r#  r  r   r   r.  r   r   r4  r   rX  r]  ro  rt  r   r  r  r   r   floatr   r  r  r   r  r  r   r  r  r  r   r  r  r  r  r  r!  r  rF  r   rP  rM  ro  rh  r  r  r  r  r  r  r   r  rL  r  r   r_   r  r	   r  r   r  r  r  r  __classcell__)r   s   @r   r*   r*      s       y y y y yv *, d dV d d d dL @DB .O .OS .O .OS\ .O .O .O .O` 6:" +4 +47 +4 +4 +4 +4 +4ZB B6 BV B B B BH 8<$]ajl 7K 7K 7KC 7KWZ 7Kquvzq{ 7K 7K 7K 7Kr
 
 
4 
 
 
 
( <@d[] uB uB uBS uB uBbfglbm uB uB uB uBn@ @ @5 @ @ @ @D os{} 3, 3,3 3,i 3,y 3,Z_ 3,hk 3, 3, 3, 3,j mqy{ 64 64 64I 64Y 64X] 64fi 64 64 64 64p FH -' -'$|*< -' -' -' -'^ fjx|  FH  3  9 I _b ru    8 9=R 6 6S 6# 6 6 6 6$ AER 8. 8.tCy 8.# 8. 8. 8. 8.t 59  c     59tZ^gi ? ?c ? ?TW ?nrsxny ? ? ? ?$ 7;\`ik  E  E  E3  EVY  Eptuzp{  E  E  E  ED 9=4^bkm *L *L# *LS *LX[ *Lrvw|r} *L *L *L *LX; ; ; @B W W W W4: : :>B B B5 B B B BH
 37TX\eg $J $JC $Js $JRU $J $J $J $JL *, w w w w w wrY) Y) Y) Y) Y)v <@ 5 5 5 5 5 506
 6
 6
 6
 6
 6
p >BPTcgpr -O -Os -O# -O]` -O -O -O -O^ 8<B P PW P P P P< <@      4
 4
v 4
 4
 4
 4
l =A 7B 7B' 7B 7B 7B 7Br< < < < < <|
 
 
 
 
 
,  0 <> K Ks K K K K ac ) )3 ) )C )TW )gt ) ) ) )V ?C2 V V3 V V V V V* :>b L LT#Y LY L L L L2 8: 1 13 1h 1 1 1 16	
 	
x 	
 	
 	
 	
& & &$ &eBSW #P #P #P #P #P #P #P #Pr   r*   )/ ccxt.async_support.base.exchanger   ccxt.abstract.krakenfuturesr   r   ccxt.base.typesr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   typingr   ccxt.base.errorsr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   ccxt.base.decimal_to_precisionr'   ccxt.base.preciser(   r*    r   r   <module>r     s   6 5 5 5 5 5 3 3 3 3 3 3  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A       * * * * * * 0 0 0 0 0 0 . . . . . . ' ' ' ' ' ' . . . . . . ) ) ) ) ) ) * * * * * * 5 5 5 5 5 5 - - - - - - - - - - - - 0 0 0 0 0 0 + + + + + + . . . . . . 1 1 1 1 1 1 ) ) ) ) ) ) 4 4 4 4 4 4 % % % % % %z&P z&P z&P z&P z&PHk z&P z&P z&P z&P z&Pr   