
    E#i                    |   S SK Jr  S SK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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
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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K J/r/  S SK0J1r1  S SK2J3r3   " S S\\5      r4g)    )Exchange)ImplicitAPIN)AnyBalancesCurrencyIntLeverage	LeveragesLeverageTierLeverageTiersMarketNumOrder	OrderBookOrderRequest	OrderSide	OrderTypePositionStrStringsTickerTickersFundingRateFundingRatesTradeTransferEntry)List)ExchangeError)AuthenticationError)ArgumentsRequired)
BadRequest)InsufficientFunds)InvalidOrder)OrderNotFound)OrderImmediatelyFillable)OrderNotFillable)DuplicateOrderId)ContractUnavailable)DDoSProtection)RateLimitExceeded)ExchangeNotAvailable)InvalidNonce)	TICK_SIZE)Precisec                     ^  \ rS rSrS\4U 4S jjr0 4S\\   4S jjrS0 4S\	S\
S\4S jjrS0 4S	\S\4S
 jjrSSS\S\S\4S jjrSSS0 4S\	S\	S\
S\
S\\   4
S jjrSSS\S\4S jjrSS0 4S\	S\
S\
S\\   4S jjrSSS\S\S\4S jjrS0 4S\	S\S\S\S\4
S jjrS0 4S\	S\S\S\S\4
S jjr0 4S\\   4S jjr SS0 4S\	S\	S\S\S\S\4S jjr!S0 4S\	S\"4S  jjr#S0 4S!\\	   S\"4S" jjr$S0 4S\"4S# jjr%0 4S$\
4S% j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SS0 4S\"S\
S\
S\\'   4S( jjr*S) r+/ 4S* jr,S+\"4S, jr-SSS-\S\S\'4S. jjr.SSS0 4S\"S\
S\
4S/ jjr/0 4S\04S0 jjr1S\04S1 jr2S0 4S	\S\34S2 jjr4SSS\S\54S3 jjr6SSS0 4S\"S\
S\
4S4 jjr7S0 4S	\S\\8   4S5 jjr9S0 4S	\4S6 jjr:SSS7\S\4S8 jjr;S0 4S	\S\<4S9 jjr=SSS\S\\>   4S: jjr?SSS;\S<\@S\A4S= jjrBS> rC0 4S?\	4S@ jjrD0 4S?\	S\SA\	SB\	S\A4
SC jjrES0 4SD\FS\"4SE jjrGS0 4S	\S\H4SF jjrI0 4S\	S\J4SG jjrKSSSD\S\S\J4SH jjrLS?\FSI\	SJ\	SK\	SL\SM\	4SN jrMSOSP0 SS4SQ jrNSRrOU =rP$ )Tkrakenfutures   returnc                 	  > U R                  [        [        U ]  5       0 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_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/S0_S1S_S2S_E0 S3S_S4S_S5S_S6S_S7S_S8S_S9S_S:S0_S;S_S<S_S=S_S>S_S?S_S@S_SAS_SBS_SCS_ESSSSSSSSD.E_SESFSFSGSHSISJ.SKSLSMSNSOSOSP.SQSR/SSS ST._SUSV/ SWQ0/ SXQ/ SYQSZS[/S\.SVS]/0SV/ S^Q0S_._S`SaSSU R	                  Sb5      U R	                  Sc5      U R	                  Sd5      U R	                  Sb5      /U R	                  Se5      U R	                  Sf5      /U R	                  Sg5      U R	                  Sh5      /U R	                  Si5      U R	                  Sj5      /U R	                  Sk5      U R	                  Sc5      /U R	                  Sl5      U R	                  Sm5      /U R	                  Sn5      U R	                  So5      /U R	                  Sp5      U R	                  Sq5      //U R	                  Sd5      U R	                  Sc5      /U R	                  Se5      U R	                  Sr5      /U R	                  Sg5      U R	                  So5      /U R	                  Si5      U R	                  Sq5      /U R	                  Sk5      U R	                  Ss5      /U R	                  Sl5      U R	                  St5      /U R	                  Sn5      U R	                  Su5      /U R	                  Sp5      U R	                  Sd5      //Sv.Sw.0_Sx0 Sy[
        _Sz[        _S{[        _S|[        _S}[        _S~[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        0E[        [        [        S.S._S[        _SSSSSSSSS.00S/ SQ0SS/SS.SSS00SS]S00SSSSSS.0S.SS0S._SSSSSSSS.SSSS SSSSS.SSSSSSSS.SS0SS S SSS.S SS SSSS.S SS S S S SSSS.SS0S.	S SS0SS0S.SS0SS0S.S._SSSSSSSSSSS.	_5      $ )Nidr0   namezKraken Futures	countriesUSversionv3	userAgent	rateLimitiX  proThasCORSspotFmarginswapfutureoptioncancelAllOrderscancelAllOrdersAftercancelOrdercancelOrderscreateMarketOrdercreateOrdercreatePostOnlyOrdercreateReduceOnlyOrdercreateStopLimitOrdercreateStopMarketOrdercreateStopOrdercreateTriggerOrder	editOrderfetchBalancefetchBorrowRateHistoriesfetchBorrowRateHistoryfetchCanceledOrdersfetchClosedOrdersfetchCrossBorrowRatefetchCrossBorrowRatesfetchCurrencies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sandboxsetLeveragesetMarginModetransferurlsz0https://demo-futures.kraken.com/derivatives/api/z+https://demo-futures.kraken.com/api/charts/z,https://demo-futures.kraken.com/api/history/zhttps://demo-futures.kraken.com)publicprivatechartshistory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/)r|   r}   feeschedulesrz   r{   zhttps://futures.kraken.com/zAhttps://docs.kraken.com/api/docs/futures-api/trading/market-data/zihttps://support.kraken.com/hc/en-us/articles/360022835771-Transaction-fees-and-rebates-for-Kraken-Futures)testlogoapir~   docfeesreferralr   get)r   instruments	orderbooktickersr}   historicalfundingrates)zfeeschedules/volumesopenpositionsnotificationsaccounts
openordersrecentordersfills	transfersleveragepreferencespnlpreferenceszassignmentprogram/currentzassignmentprogram/history)
	sendorder	editordercancelorderrx   
batchordercancelallorderscancelallordersafter
withdrawalzassignmentprogram/addzassignmentprogram/deleter   r   )r   postputz {price_type}/{symbol}/{interval})orders
executionstriggersaccountlogcsvaccount-logzmarket/{symbol}/orderszmarket/{symbol}/executions)rz   r{   r|   r}   r   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
exceptions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broadprecisionModeoptionsr}   GETr{   )r   r   r   r   r   flex)USDTBTCUSDGBPEURUSDCr   XBT)quoteIdsreversedr   v4v1v2)r   r   r   r   )rz   r|   r}   method historyGetMarketSymbolExecutions)accesssettlementCurrenciessymbolversionsrt   features)lastmarkindex)IOCFOKPOGTD)
marginModetriggerPricetriggerPriceTypetriggerDirectionstopLossPricetakeProfitPriceattachedStopLossTakeProfittimeInForcehedgedtrailingleveragemarketBuyByCostmarketBuyRequiresPriceselfTradePreventionicebergmaxd   i )r   limitdaysBack	untilDayssymbolRequired)r   r   triggerr   r   )r   r   r   daysBackCanceledr   r   r   r   r     )	ru   rI   createOrdersrk   rn   rm   rp   rU   rl   extendsdefault)linearinverse)r   r?   rA   rB   
timeframes1m5m15m30m1h4h12h1d1w)	r   r   r  r  r  r  r  r  r  )deep_extendsuperr0   describeparse_numberr*   r(   r!   r+   r   r   r"   r,   r-   )self	__class__s    Z/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/async_support/krakenfutures.pyr
  krakenfutures.describe    s*	   mT C E WH
/WH
$WH
 $WH
 t	WH

 WH
 WH
 4WH
  ;;; %; 	;
 $; %; "4; '; t; ; $U; t; &t; (; ';  (!;" "4#;$ %d%;& T';( );* +E+;, )%-;. &t/;0 $T1;2 '3;4 (5;6 "57;8 &u9;: (;;< 1%=;> &t?;@ #JA;B *4C;D $TE;F "5G;H *5I;J +EK;L )%M;N  O;P !$Q;R %dS;T +JU;V W;X !$Y;Z  [;\ d];^ "4_;` ea;b !$c;d ue;f !$g;h +0 $##!& u;WH
H PQKM< FH$RKL 5W D +IWH
v  	 .(7B :  
a;wWH
n !%"&!..x8!..x8 "..s3T5F5Fx5PQ!..x8$:K:KH:UV!..y94;L;LX;VW!..y94;L;LY;WX!..z:D<M<Mh<WX!..z:D<M<Mi<XY!..z:D<M<Mj<YZ!..{;T=N=Nx=XY	" "..s3T5F5Fx5PQ!..x8$:K:KH:UV!..y94;L;LZ;XY!..y94;L;LX;VW!..z:D<M<Mj<YZ!..z:D<M<Mi<XY!..z:D<M<Mj<YZ!..{;T=N=Ns=ST	"oWH
j &(9')< .z "#7	
 *+> &} %j $Z (): ": "#7 ": ' *< %l  
!" #M#$ #M%* (2+7&2+kWH
` YaWH
b &/*3(1-6+4  
 H) "' % 4d  >  &**.(,-1	  * @ O*cWH
x #&+(,$($(%)-
 -2)-+/6:#'#'"&#(	( #($)$)+027/4#(1$6 s% ',!%$(%+*/& #'&+!%#($)*/( $(&+!%$(,0%)#($)*/	*  #s<z  "9 "9 	 "9 "9 	OOyWH
X
 
Y
WH
 W W	    c                   #    U R                  U5      I Sh  vN nU R                  US/ 5      n/ n[        S[        U5      5       GHv  nX5   nU R	                  US5      nU R	                  US5      nSn	UR                  S5      S:  n
SnSnSnU
(       dF  UR                  S5      S:  nU(       + nU R	                  US5      nUc  S	OS
n	U R                  U5      nOSn	U	S	:H  nU	S
:H  nUnUR                  S5      nU R	                  US5      nUS[        U5      S-
   nSnU R                  U5      nU R                  U5      nSnSnU R	                  US5      nU R                  U R                  U5      5      nU R                  US5      nU=(       d    U=(       d    U
nU=(       d    UnU(       aX  U R	                  US5      nUS:X  a  UnUnSnOUnUnSnU(       + nUS-   U-   S-   U-   nU(       a  US-   U R                  U5      -   nUR                  0 SU_SU_SU_SU_SU_SU_SU_SU_SU	_SS_S S_S	U_S
U_S!S_SU
_S"U R                  US#5      _S$U_UUU R                  US%5      SUU R                  U5      SSUUS&.SSS'.SSS'.SSS'.SSS'.S(.U R                  U R	                  US)5      5      US*.E5        GMy     U R                   S+   S,   n / n![        S[        U 5      5       H,  nU U   n"U!R                  U"R#                  5       SU"SS-.5        M.     U R%                  U R'                  U!U R(                  5      5      U l        U$  GN57f).a1  
Fetches the available trading markets from the exchange, Multi-collateral markets are returned markets, but can be settled in multiple currencies

https://docs.kraken.com/api/docs/futures-api/trading/get-instruments

:param dict [params]: exchange specific params
:returns: An array of market structures
Nr   r   r   typez index_vanillalastTradingTimerA   rB   r   _      usdcontractValueTradePrecisiontickSizefutures_inverseTF/:-r4   basequotesettlebaseIdquoteIdsettleIdr?   r@   rC   active	tradeablecontractcontractSize)amountprice)minr   )r   r)  r*  costopeningDate)r   r   r(  maintenanceMarginRateexpiryexpiryDatetimestrike
optionType	precisionlimitscreatedinfor   r   )r4   	numericIdcoder3  )publicGetInstruments
safe_valuerangelensafe_stringfind	parse8601splitsafe_currency_coder  integer_precision_to_amountsafe_numberyymmddappend	safe_booliso8601r   lowermap_to_safe_mapr  
currencies)#r  paramsresponser   resultimarketr4   
marketTyper  r   r   r   r/  
settleTimerA   rB   r   r@  splitMarketr"  r#  r  r   r!  r$  cvtpamountPrecisionpricePrecisionr'  swapOrFuturesexchangeTyper   rJ  r8  s#                                      r  fetch_marketskrakenfutures.fetch_marketsz  sE     226::Z oohrBq#k*+A ^F!!&(3B))&&9JD__X.!3EFGF$//*5:$*!--f6GH
","4v8
3FNDh&FFHHSME**5!4K 3{#3a#78FG**62D++G4EFH##F,IJD"//0P0PQU0VWO!--fjAN//%H!^VM#//?#44!F%H"G"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)- "&,,v"6"-+  $#!
  $#
  $#
  $#$  >>$*:*:6=*QRc2 2a ,F  $||,BCFK
q#234A'*Djjl!!	  5 ..t/?/?
DOO/\]{ ;s   MML5MNr   r   c                   #    U R                  5       I Sh  vN   U R                  U5      nSUS   0nU R                  U R                  XS5      5      I Sh  vN nU R	                  US   5      nU R                  US   X5      $  Nm N/7f)aM  

https://docs.kraken.com/api/docs/futures-api/trading/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   r4   
serverTime	orderBook)load_marketsrO  publicGetOrderbookextendr?  parse_order_book)r  r   r   rK  rO  requestrL  	timestamps           r  fetch_order_bookkrakenfutures.fetch_order_book"  s      !!!V$fTl
 00W1MNN> NN8L#9:	$$Xk%:FNNK 	"
 Os!   BB?BB.BBsymbolsc                    #    U R                  5       I Sh  vN   U R                  U5      I Sh  vN nU R                  US5      nU R                  XA5      $  N@ N)7f)a  
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market

https://docs.kraken.com/api/docs/futures-api/trading/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>`
Nr   )r]  publicGetTickers	safe_listparse_tickers)r  re  rK  rL  r   s        r  fetch_tickerskrakenfutures.fetch_tickersT  sY      !!!..v66B ..95!!'33G 	"6s   AAAA(AAtickerrO  c           
         U R                  US5      nU R                  X25      nUS   nU R                  U R                  US5      5      nU R                  US5      nU R                  US5      n[        R                  " Xv5      n[        R
                  " [        R                  " X5      S5      n	[        R                  " [        R                  " Xg5      S5      n
U R                  US5      nS nS nU R                  USS	5      nU(       d  US
   (       a  UnOUS   (       a  UnU R                  0 SU_SU_SU R                  U5      _SS _SS _SU R                  US5      _SU R                  US5      _SU R                  US5      _SU R                  US5      _SS _SU_SU_SU_SS _SU_SU	_SU
_UUU R                  US5      U R                  US5      US.E5      $ ) Nr   lastTimeopen24hr   1002vol24hr   Fr   r   rb  datetimehighlowbid	bidVolumebidSizeask	askVolumeaskSizevwapopenclosepreviousClosechanger   average	markPrice
indexPrice)
baseVolumequoteVolumer  r  r6  )r=  safe_marketr?  r.   
string_sub
string_mul
string_div
string_addrF  safe_tickerrG  )r  rl  rO  marketIdr   rb  r}  r   r  r   r  volumer  r  isIndexs                  r  parse_tickerkrakenfutures.parse_ticker  sQ   6 ##FH5!!(3!NN4#3#3FJ#GH		2/##D/''(:(:6(H%P
$$W%7%7%CSI!!&(3
..%8h#
	"$ !
f!
!
 Y/!
 D	!

 4!
 4##FE2!
 ))&)<!
 4##FE2!
 ))&)<!
 D!
 D!
 T!
 D!
 T!
 f!
  *!!
" w#!
$ %&))&+>**6<@-!
  	r  r   	timeframesincec           	      v  #    U R                  5       I Sh  vN   U R                  U5      nSnU R                  USS5      u  puU(       a  U R                  SXXBUS5      I Sh  vN $ US   U R	                  USS5      U R
                  U   S	.nU R                  US5      nUbr  U R                  U5      n	U R                  US
-  5      US'   Uc  Sn[        US5      nU R                  US   XI-  S-
  5      n
U R                  5       n[        X5      US'   OOUbL  [        US5      nU R                  U5      n	U R                  5       US'   U R                  US   X-  -
  5      US'   U R                  U R                  X5      5      I Sh  vN nU R                  US5      nU R                  XX#U5      $  GN GNR N/7f)a9  

https://docs.kraken.com/api/docs/futures-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
NFrl   paginater   r4   r*  trade)r   
price_typeinterval  fromr  tocandles)r]  rO  handle_option_and_params"fetch_paginated_call_deterministicr=  r   omitparse_timeframeparse_to_intr+  sumseconds chartsGetPriceTypeSymbolIntervalr_  rh  parse_ohlcvs)r  r   r  r  r   rK  rO  r  ra  durationtoTimestampcurrentTimestamprL  r  s                 r  fetch_ohlcvkrakenfutures.fetch_ohlcv  s     !!!V$88zZ@@v^cpvx|}}}Tl**67GD	2

 67+++I6H"//=GFO}t$E((76?E4Dq4HIK#||~>GDMt$E++I6H LLNGDM"//AQ0RSGFO>>t{{7?[\\  ..95  )EJJW 	"
 ~* ]s5   F9F1AF9"F4#D$F9F7*F94F97F9c           	          U R                  US5      U R                  US5      U R                  US5      U R                  US5      U R                  US5      U R                  US5      /$ )Ntimer}  rt  ru  r~  r  )safe_integerrC  )r  ohlcvrO  s      r  parse_ohlcvkrakenfutures.parse_ohlcv  sn     eV,UF+UF+UE*UG,UH-
 	
r  c                   #    U R                  5       I Sh  vN   SnU R                  USS5      u  pTU(       a  U R                  SXX45      I Sh  vN $ U R                  U5      nSUS   0nSnU R                  USSS5      u  pSn	US:H  n
U
(       a  U R	                  S	Xt5      u  ptUb	  X'S
'   SUS'   Ub  X7S'   U R                  U R                  Xt5      5      I Sh  vN nU R                  US/ 5      n/ n	[        U5      n[        SU5       HY  nUS-
  U-
  nX   nU R                  US0 5      nU R                  US0 5      nU R                  US0 5      nU	R                  U5        M[     OOU R	                  SXt5      u  ptU R                  U R                  Xt5      5      I Sh  vN nU R                  US/ 5      n	U R                  XX#5      $  GN GN N N17f)a  

https://docs.kraken.com/api/docs/futures-api/trading/get-history
https://docs.kraken.com/api/docs/futures-api/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>`
NFrt   r  r   r4   r   r   beforer  ascsortcountelementsr   r  event	Execution	executionrn  r}   )r]  r  fetch_paginated_call_dynamicrO  handle_until_optionr   r_  rh  r<  r;  	safe_dictrE  publicGetHistoryparse_trades)r  r   r  r   rK  r  rO  ra  r   	rawTradesisFullHistoryEndpointrL  r  lengthrN  r   elementr  executionContainerrawTrades                       r  fetch_tradeskrakenfutures.fetch_trades  s      !!!88PZ[::=&Y^gggV$fTl
 66v}hXz{	!'+M!M "66xQOG #( "' #( !BB4;;wC_``Hd ~~h
B?HI]F1f%
Q"/w<%)^^E;%K">>*<k2N  * & #66z7SOG!224;;w3OPPH& xB?I  EAAO 	" h  a~ QsG   GG8GGBGGCG"G#*GGGGr  c                    U R                  U R                  USS5      5      nU R                  US5      nU R                  U/ SQS5      nU R                  USS5      nUc  U R                  US5      nU R                  US	5      nU R                  US
5      nU R                  US5      n	S n
U R	                  US5      nU R	                  US5      nUbI  U R                  US5      nU R                  US
5      nU R                  US5      n	U R                  US5      n
OKUbH  U R                  US5      nU R                  US
5      nU R                  US5      n	U R                  US5      n
U
b  U R                  U
5      n
U R                  X5      nS nU R                  US5      nUbb  Ub_  Ub\  U(       a  [        R                  " XT5      nO[        R                  " XT5      nU R                  US5      n[        R                  " X5      nS nU R                  US5      nUb/  UR                  S5      S:  a  SnOUR                  S5      S:  a  SnSU;   nU(       a<  U R                  US5      nU R                  US0 5      nUb  U R                  US5      n	SnU R                  UUU R                  US
5      UU R!                  U5      UU
U	UUU(       a  UOS US S.5      $ )Nr  fillTimer*  )sizer)  quantity0.0uidfill_idexecutionIdorder_idr   sideorderPriorEditorderPriorExecutionorderIdr  r   r(  fillTyper   r   r   
takerOrderrb  	direction)r6  r4   r   rb  rs  orderr  r  takerOrMakerr*  r)  r,  fee)r?  safe_string_2r=  safe_string_nr:  parse_order_typer  rF  r.   r  r  r>  r  r  safe_string_lower
safe_traderG  )r  r  rO  rb  r*  r)  r4   r  r  r  r  	priorEditpriorExecutionr,  r   r(  r  r  isHistoricalExecutionr   s                       r  parse_tradekrakenfutures.parse_trade  s   D NN4#5#5eVZ#PQ	  0##E+I5Qui8:!!%7B  
3##E84v.OOE+;<	0EF%$$^Y?E''AH##NF;D##NF;D"$$Y	:E''	8<H##Iv6D##Iv6D((.D!!(31U%6V=O))&8))&8++FNCL%%d9D##E:6}}W%*&w'1,&!-!6 ))%=INN5,;E --e[A&&&vx8"Y/( &fD 
  	r  r  r  r)  r*  c                    U R                  U5      nUS   nU R                  USU5      nU R                  US5      nSn	U R                  US:H  US:H  U5      u  pU	(       a  SnOUS:X  a  SnOUS:X  a  S	nOUS:X  a  S
nUS   UU R                  X5      S.n
U R	                  USS5      nUb  XS'   U R	                  USS5      nUS LnU R                  US5      nU R                  US5      nUS LnUS LnU=(       d    UnU R                  USS5      nU R                  US5      nU(       d  U(       a  UU
S'   U(       a  SnU R                  X5      U
S'   ODU(       a=  SnU(       a  SnU R                  X5      U
S'   OU(       a  SnU R                  X5      U
S'   U(       a  SU
S'   X*S'   Ub  U R                  X5      U
S'   U R                  U/ SQ5      nU R                  X5      $ )Nr   	orderTyper   FrO  r   iocr   lmtmktr4   )r   r  r  clientOrderIdcliOrdIdr   	stopPricer   r   triggerSignalr   
reduceOnlystpTtake_profit
limitPrice)r  r   r   r   r   )	rO  r=  handle_post_onlyamount_to_precisionr  r:  price_to_precisionr  r_  )r  r   r  r  r)  r*  rK  rO  r   postOnlyra  r  r   isTriggerOrderstopLossTriggerPricetakeProfitTriggerPriceisStopLossTriggerOrderisTakeProfitTriggerOrderisStopLossOrTakeProfitTriggerr  r  s                        r  create_order_request"krakenfutures.create_order_request  s    V$!T:&&v}=001A46>SYZDE!DW_DXDTl,,V<

 **6?JO$"/J))&.+N%T1#//H!%!1!1&:K!L!5T!A#9#E (>(ZBZ%((&I__V\:
(N'4GO$D#'#:#:6#PGK *J%'+'>'>v'\$)$'+'>'>v'^$$(GL!#$($;$;F$JGL!6#wx{{7++r  c                 N  #    U R                  5       I Sh  vN   U R                  U5      nU R                  XX4XV5      nU R                  U5      I Sh  vN n	U R	                  U	S5      n
U R                  U
S5      nU R                  USS/5        U R                  X5      $  N NO7f)a  
Create an order on the exchange

https://docs.kraken.com/api/docs/futures-api/trading/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 dict [params]: extra parameters specific to the exchange API endpoint
: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'
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
N
sendStatusstatusrI   filled)r]  rO  r  privatePostSendorderr:  r=  verify_order_action_successparse_order)r  r   r  r  r)  r*  rK  rO  orderRequestrL  r  r  s               r  create_orderkrakenfutures.create_orderH  s     * !!!V$00tU[22<@@> __X|<
!!*h7((
K
33K 	" As"   B%B!<B%B#AB%#B%r   c           	        #    U R                  5       I Sh  vN   / n[        S[        U5      5       H  nX   nU R                  US5      nU R                  US5      nU R                  US5      nU R	                  US5      n	U R	                  US5      n
U R	                  US0 5      nU R                  X5      nS	U;  a  U R                  U[        S
5      5      US	'   SUS'   U R                  XgXX5      nUR                  U5        M     SU0nU R                  U R                  X5      5      I Sh  vN nU R                  US/ 5      nU R                  U5      $  GNB N+7f)a  
create a list of trade orders

https://docs.kraken.com/api/docs/futures-api/trading/send-batch-order

: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
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
Nr   r   r  r  r)  r*  rK  	order_tagr  sendr  
batchOrderbatchStatus)r]  r;  r<  r=  r:  r_  r  strr  rE  privatePostBatchorderrh  parse_orders)r  r   rK  ordersRequestsrN  rawOrderr  r  r  r)  r*  orderParamsextendedParamsr  ra  rL  datas                    r  create_orderskrakenfutures.create_orders  s[     !!!q#f+&AyH''(;H##Hf5D##Hf5D__Xx8FOOHg6E//(HbAK![[=N>1.2hhq#a&.A{+&,N7#44XTSXiL!!,/ '  .
 33DKK4PQQ" ~~hr:  &&M 	"( Rs"   EEDE/E0)EEr4   c                 <  #    U R                  5       I Sh  vN   SU0nUb  XXS'   Ub  XhS'   U R                  U R                  X5      5      I Sh  vN n	U R                  U	S   S5      n
U R	                  U
SS/5        U R                  U	S   5      nXS	'   U$  N NI7f)
a  

https://docs.kraken.com/api/docs/futures-api/trading/edit-order-spring

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  rP   r  r6  )r]  privatePostEditorderr_  r=  r  r  )r  r4   r   r  r  r)  r*  rK  ra  rL  r  r  s               r  
edit_orderkrakenfutures.edit_order  s      !!!r
 $FO$)L!224;;w3OPP!!(<"8(C((xjI  ,!78 f 	" Qs"   BB9BBABBc                 b  #    U R                  5       I Sh  vN   U R                  U R                  SU0U5      5      I Sh  vN nU R                  U R	                  US0 5      S5      nU R                  US5        0 nSU;   a  U R                  US   5      nU R                  SU0U5      $  N Nk7f)a+  

https://docs.kraken.com/api/docs/futures-api/trading/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  rF   r6  )r]  privatePostCancelorderr_  r=  r:  r  r  )r  r4   r   rK  rL  r  r  s          r  cancel_orderkrakenfutures.cancel_order  s      !!!44T[[*bAQSY5Z[[!!$//(NB"OQYZ((?X%$$Xn%=>E{{FH-u55 	"[s"   B/B+*B/B-A*B/-B/idsc                   #    U R                  5       I Sh  vN   / nU R                  US/ 5      n[        U5      nUS:  a3  [        S[        U5      5       H  nUR	                  SXW   S.5        M     O2[        S[        U5      5       H  nUR	                  SX   S.5        M     SU0nU R                  U R                  X5      5      I Sh  vN n	U R                  U	S/ 5      n
U R                  U
5      $  N N*7f)	a  
       cancel multiple orders

       https://docs.kraken.com/api/docs/futures-api/trading/send-batch-order

       :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;  rE  r  r_  rh  r  )r  r  r   rK  r   r!  clientOrderIdsLengthrN  ra  rL  r
  s              r  cancel_orderskrakenfutures.cancel_orders  s      !!!1A2F">2!#1c.12n>OPQ 3 1c#h'cfEF ( &
 33DKK4PQQ< nnX}bA  --Y 	" Rs"   C:C6B6C:C8)C:8C:c                   #    0 nUb  U R                  U5      US'   U R                  U R                  X25      5      I Sh  vN nU R                  US5      nU R	                  US/ 5      n/ n[        S[        U5      5       H9  nU R                  US5      n	U R                  U	S0 5      n
UR                  U
5        M;     U R                  U5      $  N7f)a  

https://docs.kraken.com/api/docs/futures-api/trading/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   r  orderEventsr   r  )		market_idprivatePostCancelallordersr_  r  rh  r;  r<  rE  r  )r  r   rK  ra  rL  r  r'  r   rN  
orderEventr  s              r  cancel_all_orderskrakenfutures.cancel_all_orders$  s       $v 6GH88W9UVV@ ~~h?nn\="Eq#k*+AQ7JNN:w;EMM%  ,   ((O Ws   =CC BCtimeoutc                    #    U R                  5       I Sh  vN   SUS:  a  U R                  US-  5      OS0nU R                  U R                  X25      5      I Sh  vN nU$  NL N7f)aC  
dead man's switch, cancel all orders after the given timeout

https://docs.kraken.com/api/docs/futures-api/trading/cancel-all-orders-after

:param number timeout: time in milliseconds, 0 represents cancel the timer
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: the api result
Nr-  r   r  )r]  r  privatePostCancelallordersafterr_  )r  r-  rK  ra  rL  s        r  cancel_all_orders_after%krakenfutures.cancel_all_orders_afterZ  sm      !!!w{))'D.9QR
 ==dkk'>Z[[  	" \s"   A'A#AA'A%A'%A'c                    #    U R                  5       I Sh  vN   SnUb  U R                  U5      nU R                  U5      I Sh  vN nU R                  US/ 5      nU R	                  XuX#5      $  NX N+7f)a$  

https://docs.kraken.com/api/docs/futures-api/trading/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]  rO  privateGetOpenordersrh  r  )r  r   r  r   rK  rO  rL  r   s           r  fetch_open_orderskrakenfutures.fetch_open_ordersu  st      !!![[(F226::,;  >> 	" ;s!   A3A/.A3A1*A31A3c                 H  #    U R                  5       I Sh  vN   SnUb  U R                  U5      n0 nUb  X6S'   Ub  X&S'   U R                  U R                  Xd5      5      I Sh  vN nU R	                  US/ 5      n/ n	[        S[        U5      5       Ht  n
X   nU R                  US0 5      nU R                  US5      nUc  M1  U R                  US0 5      nU R                  US	5      nUS
:w  d  M^  SUS'   U	R                  U5        Mv     U R                  XX#5      $  GN N7f)a  

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>`
Nr  r  r  r   r  OrderPlacedr  r  r   closedr  r]  rO  historyGetOrdersr_  rh  r;  r<  r  r=  rE  r  )r  r   r  r   rK  rO  ra  rL  	allOrdersclosedOrdersrN  r  r  orderPlaced
innerOrderr  s                   r  fetch_closed_orders!krakenfutures.fetch_closed_orders  s,     !!![[(F$G#FO..t{{7/KLLNN8Z<	q#i.)ALENN5'26E..>K&!^^K"E
))*h?S=+3Jx( ''
3 *   uDD- 	" Ms/   D"DAD"$D %AD")D"1-D" D"c                 >  #    U R                  5       I Sh  vN   SnUb  U R                  U5      n0 nUb  X6S'   Ub  X&S'   U R                  U R                  Xd5      5      I Sh  vN nU R	                  US/ 5      n/ n	[        S[        U5      5       H  n
X   nU R                  US0 5      nU R                  US5      nUbA  U R                  US0 5      nU R                  US	5      nUS
:X  a  SUS'   U	R                  U5        U R                  US5      nUb)  U R                  US0 5      nSUS'   U	R                  U5        U R                  US5      nUc  M  U R                  US0 5      nSUS'   U	R                  U5        M     U R                  XX#5      $  GN GN67f)a  

https://docs.kraken.com/api/docs/futures-api/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>`
Nr  r  r  r   r  r8  r  r  r   canceledr  OrderCancelledOrderRejectedrejectedr:  )r  r   r  r   rK  rO  ra  rL  r<  canceledAndRejectedrN  r  r  r>  r?  r  orderCanceledorderRejecteds                     r  fetch_canceled_orders#krakenfutures.fetch_canceled_orders  s     !!![[(F$G#FO..t{{7/KLLNN8Z<	 q#i.)ALENN5'26E..>K&!^^K"E
))*h?S=+5Jx('..z: NN52BCM(!^^M7BG
'1
8$#**:6 NN5/BM(!^^M7BG
'1
8$#**:6' *(   !4eKKA 	" Ms*   FFAF$F%C/FA FFc                 4    SSSSS.nU R                  X!U5      $ )Nr   rO  )r  r  r   r  r=  )r  r  typesMaps      r  r  krakenfutures.parse_order_type  s*    	
 Y??r  c                    0 S[         _S[         _S[         _S[         _S[        _S[        _S[        _S[        _S	[        _S
[        _S[
        _S[        _S[         _S[        _S[        _S[        _S[        _[         [        [        S.EnX;   a7  U R                  X5      (       d   XA   " U R                  S-   U-   S-   U-   5      eg g )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_arrayr4   )r  r  r   r  errorss        r  r  )krakenfutures.verify_order_action_success  s+   

<
 <
 L	

 )*;
 
 !-
 #J
 3
 2
 ()9
 #J
 !,
  8
 !"2
  %m!
" #M#
$ %1#%)
, dmmF&A&A.4&!8;L!Lv!UVV 'Br  r  c           
          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_SSSSSSSSS.EnU R                  X!U5      $ )Nplacedr}  	cancelledrC  rQ  rF  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r9  )r`  editedra  rb  r  r   	untouchedpartiallyFilledrM  )r  r  statusess      r  parse_order_status krakenfutures.parse_order_status  s   
f

 

 :	

 :
 J
 )*
 

 !*
 #J
 z
 j
 (
 #J
 !*
" 
#
$ !*%
& '1$.$."%5
8 &99r  r  c                 
   U R                  US/ 5      nU R                  US5      n[        U5      nSU;   a  Ub  US:X  a  U R                  USS.5      $ S nSnSnS n	S n
/ nU(       a  / n[	        S[        U5      5       H  nX=   nU R                  US5      S:X  a  UR                  U5        U R                  US	5      nUb  ME  U R                  US
SU5      nUb  SnSnMb  U(       a  Mk  U R                  US5      nU R                  USS5      nU R                  US5      n
Uc  M  SnM     U R                  U5      nU R                  US5      n	Uc  UnU	c  U R                  US5      n	U R                  U	5      nU R                  U/ SQ5      nU R                  US5      nU R                  UU5      nU R                  U R                  USS5      5      nU R                  U R                  US5      5      nU
c  U R                  US5      n
U R                  US5      nU R                  USSS5      nU R                  US5      nS nSn[        U5      nUS:  Ga  Sn[	        S[        U5      5       Hn  nX   nU R                  US5      nU R                  US5      n[        R                  " UU5      n[        R                  " U[        R                  " UU5      5      nMp     [        R                   " UU5      nUb.  U(       d'  U(       a   [        R"                  " UU5      (       a  SnSnU(       a  [        R                  " UU5      nO[        R$                  " UU5      nUc$  U(       a  Ub  [        R&                  " UU5      nOUnUc!  U(       d  Ub  [        R                  " UU5      nS n UbF  UbC  Ub  UOU
n!U!b9  US   (       a  [        R                  " UU!5      n O[        R                   " UU!5      n U R                  USS5      n"U"c  U R                  USS 5      n"U R)                  USS!5      n#S"n$U#S#:X  d  U R+                  U#5      S$:X  a  S#n$U R                  US5      n%S%U;   a"  U R-                  U R                  US%5      U5      n%U R/                  USU5      n&U R                  0 S&U_S'U"_S(U R1                  U/ S)Q5      _SU&_S*U R3                  U&5      _S+S _S,U R/                  US,U5      _SU%_SU R+                  U#5      _S-U$_S.U#S/:H  _S0U R5                  US0S15      _S2U R)                  US2S35      _SU
_S4U R                  US45      _SU_S5U _UUUUS S US6.E5      $ )7Nr'  r  r   rF  )r6  r  Fr  	EXECUTIONorderTriggernewr  Tr  r  r  )rC  rF  r9  r   rb  receivedTimelastUpdateTimer  
filledSizer  r  unfilledSizer)  r*  r9  r   r  r  r  r  gtcr  rO  r&  r6  r4   r  )r  clientIdr  rs  lastTradeTimestamplastUpdateTimestampr   r  r   r  reduce_onlyr  r  r   r,  )r  r  	remainingr  r  r   trades)r:  r=  r<  
safe_orderr;  rE  safe_value_2r  rm  rc  r  r?  r  r.   r  r  r  	string_ge
string_maxr  safe_string_lower_2r  safe_symbolr  r  rG  safe_bool_2)'r  r  rO  r'  errorStatusorderEventsLengthdetailsisPriorfixedstatusIdr*  r}  r   rN  itemrq  r  r  isClosedr  rb  rz  r)  r  r|  r  filled2tradesLengthvwapSumr  tradeAmount
tradePricer,  
whichPricer4   r  r   r   tss'                                          r  r  krakenfutures.parse_order  s   V ooe]B?&&uh7,U")@GX\]G]??EZ#HIIJ1c+./"~##D&1[@%%d+#t^D?"//eWlSG*"' $"U.2oodDY.Z+"&"3"3D:OQa"b $ 0 01Dl S".&*G! 0" &&z2F''x8H?G'':H ((2==)KL##GX6!!(F3NN4#5#5g{N#[\	"nnT-=-=gGW-XY=$$Wl;E!!':6##G\8UK$$Wn=	6{!G1c&k*	"..uh?!--eW=
!,,WkB!,,Wg6H6HV`6ab + ((':G"X7wGXGXY`bhGiGi! ++FG< ++FG<% ' 2 267 CI"	NW93H''	:FV%7%,%8uJ%(#"--fjAD"--fjADz9=:##GY>B''E5=D11$78CK!!&(3'!%%d&6&6w&LfUFwY?  
E 
" 
 T//9bc 
 	 

 R( 
 !$ 
 "4#4#4W>SUh#i 
 f 
 D))$/ 
 ; 
  
 $**7L-P 
 D,,WfkJ 
 U 
 D,,WnE 
  f! 
" D# 
$ "1 
  	r  c                    #    U R                  5       I Sh  vN   SnUb  U R                  U5      nU R                  U5      I Sh  vN nU R                  US   XRU5      $  NI N7f)a  
fetch all trades made by the user

https://docs.kraken.com/api/docs/futures-api/trading/get-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>`
Nr   )r]  rO  privateGetFillsr  )r  r   r  r   rK  rO  rL  s          r  fetch_my_tradeskrakenfutures.fetch_my_trades  sk      !!![[(F--f55*   '!2F5II5 	"
 6s!   A$A .A$A"A$"A$c                   #    U R                  5       I Sh  vN   U R                  USS5      nU R                  US5      nU R                  U/ SQ5      nU R	                  U5      I Sh  vN nU R                  US5      nUS:X  d  US:X  a  Uc  [        U R                  S	-   5      eUnUc  Uc  S
OUnU R                  U5      nU R                  US5      nU R                  Xv5      nUc)  Uc  SOUnUc  SOUn[        U R                  S-   U-   5      eU R                  U5      n	XIS'   U R                  U5      U	S'   XYS'   U	$  GN+ N7f)a[  

https://docs.kraken.com/api/docs/futures-api/trading/get-accounts

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  r  r   r[  marginAccountr@   z: fetchBalance requires symbol argument for margin accountsr   r    z! fetchBalance has no account for r6  rb  rs  )r]  r  r=  r  privateGetAccountsr    r4   parse_accountr:  r!   parse_balancer?  )
r  rK  r  r   rL  rs  accountNamer   r  balances
             r  fetch_balancekrakenfutures.fetch_balance  s[     !!!!!&&)<!!&(36#@A0088p ##Hl;?"dh&6~'2n(nooD<$n66D((.??8Z8//(8?,2TD"NRFTWW'JJTQRR$$W-"#~~h7&
] 	" 9s#   EEAE(E)CEEc                    U R                  USS5      nUS:H  nUS:H  nU R                  USS0 5      n0 n[        UR                  5       5      n[	        S[        U5      5       H  nXx   n	XY   n
U R                  U	5      nUR                  S5      n[        U5      nUS	:  a  M@  U R                  5       nU(       a+  U R                  U
S
5      US'   U R                  U
S5      US'   OMU(       a
  SUS'   XS'   O<U R                  US5      nU R                  US5      US'   U R                  US5      US'   XU'   M     U R                  U5      $ )NaccountTyper  multiCollateralMarginAccountcashAccountbalancesrJ  r   r  r  r  total	availablefreer  used	auxiliaryafpv)r  r  listkeysr;  r<  rA  r@  r  r=  r:  safe_balance)r  rL  r  isFlexisCashr  rM  currencyIdsrN  
currencyIdr  r8  	splitCode
codeLengthr  r  s                   r  r  krakenfutures.parse_balance)  sT   ~ ((=&I!??.$$Xz<L8==?+q#k*+A$J*G**:6D

3IYJA~llnG#'#3#3GZ#H "&"2"27K"H"'#*  OOHkB	"&"2"29d"C#'#3#3It#D "4L' ,(   ((r  c                   #    U R                  5       I Sh  vN   U R                  U5      nU R                  U5      I Sh  vN nU R                  US/ 5      n/ n[	        S[        U5      5       Hg  nXW   nU R                  US5      n	Ub  U R                  X5      (       d  M4  U R                  U	5      n
U R                  X5      nUR                  U5        Mi     U R                  US5      $  N N7f)a`  
fetch the current funding rates for multiple markets

https://docs.kraken.com/api/docs/futures-api/trading/get-tickers

: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>`
Nr   r   r   )r]  
market_idsrg  rh  r;  r<  r:  rc  r  parse_funding_raterE  index_by)r  re  rK  	marketIdsrL  r   fundingRatesrN  entryentry_symbolrO  parseds               r  fetch_funding_rates!krakenfutures.fetch_funding_rates  s      !!!OOG,	..v66..9b9q#g,'AJE??5(;L$}}\==%%l3F,,U;F' ( }}\844 	"6s"   C0C,)C0 C.B,C0.C0c                    U R                  US5      nU R                  U5      nU R                  U R                  US5      5      nU R                  US5      nU R                  US5      n[        R                  " Xv5      nU R                  US5      n	[        R                  " X5      n
US:  a  SnOUS:  a  SnU
S:  a  Sn
OU
S:  a  Sn
0 SU_SU_SU R                  U5      _S	U R                  US	5      _S
S _SS _SU_SU R                  U5      _SU R                  U5      _SS _SS _SU R                  U
5      _SS _SS _SS _SS _SS _SS0E$ )Nr   rn  r  fundingRatefundingRatePredictionz0.25z-0.25r6  r  interestRateestimatedSettlePricerb  rs  fundingTimestampfundingDatetimenextFundingRatenextFundingTimestampnextFundingDatetimepreviousFundingRatepreviousFundingTimestamppreviousFundingDatetimer  r  )r=  r   r?  r.   r  r  rC  rG  )r  rl  rO  r  r   rb  markPriceStringfundingRateStringfundingRateResultnextFundingRateStringnextFundingRateResults              r  r   krakenfutures.parse_funding_rate  s   8 ##FH5X&NN4#3#3FJ#GH	**6;? ,,V]C#../@R $ 0 09P Q ' 2 23H Zv% &( ' 6)$*!"W,$+!
F
f
 **?;
 $**6<@	

 D
 #D
 
 Y/
 4,,->?
 
 t
 t001FG
 #D
 "4
 "4
  '!
" &t#
$ %
 	
r  c           	        #    Uc  [        U R                  S-   5      eU R                  5       I Sh  vN   U R                  U5      nUS   (       d  [	        U R                  S-   5      eSUS   R                  5       0nU R                  U R                  Xd5      5      I Sh  vN nU R                  US5      n/ n	[        S[        U5      5       HO  n
X   nU R                  US	5      nU	R                  UUU R                  US
5      U R                  U5      US.5        MQ     U R                  U	S	5      nU R!                  XX#5      $  GN N7f)aX  
fetches historical funding rate prices

https://docs.kraken.com/api/docs/futures-api/trading/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 argumentrA   z7 fetchFundingRateHistory() supports swap contracts onlyr   r4   ratesr   rb  relativeFundingRate)r6  r   r  rb  rs  )r    r4   r]  rO  r!   upperpublicGetHistoricalfundingratesr_  r:  r;  r<  r=  rE  rC  r?  sort_byfilter_by_symbol_since_limit)r  r   r  r   rK  rO  ra  rL  r  rM  rN  r  rs  sorteds                 r  fetch_funding_rate_history(krakenfutures.fetch_funding_rate_history  sA     >#DGG.e$eff!!!V$f~TWW'``aafTl((*
 ==dkk'>Z[[ '2q#e*%A8D''k:HMM #//6KL!^^H5$  & fk200NNC 	" \s#   /EEA/E!E	"B%E	Ec                    #    U R                  5       I Sh  vN   0 nU R                  U5      I Sh  vN nU R                  U5      nU R                  USUS5      $  ND N+7f)a  

https://docs.kraken.com/api/docs/futures-api/trading/get-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  re  rK  ra  rL  rM  s         r  fetch_positionskrakenfutures.fetch_positions	  sb      !!!55g>>" %%h/--fhOO) 	">s   AAAA*AAc                     / nU R                  US5      n[        S[        U5      5       H'  nU R                  XV   5      nUR	                  U5        M)     U$ )NopenPositionsr   )r:  r;  r<  parse_positionrE  )r  rL  re  rK  rM  	positionsrN  positions           r  r  krakenfutures.parse_positions0	  sQ    OOHo>	q#i.)A**9<8HMM(# * r  r  c                    U R                  US5      nSnUb  SnU R                  US5      nU R                  US5      nU R                  Xb5      n0 SU_SUS   _SU R                  U5      _SU_S	S _S
S _SS _SS _SU R                  US5      _SS _SU_SS _SU R                  US5      _SU R                  US5      _SS _SS _SS _S UU R                  US5      S S.E$ )NmaxFixedLeveragecrossisolatedr  r   r6  rb  rs  initialMargininitialMarginPercentagemaintenanceMarginmaintenanceMarginPercentage
entryPricer*  notionalr   unrealizedPnl	contractsr  r(  marginRatioliquidationPricer  r  )
collateral
marginTyper  r   )rC  r=  r  r?  )r  r  rO  r   r  rs  r  s          r  r  krakenfutures.parse_position8	  s   . ##H.@A
#J##Hj9##Hh7!!(3
H
fX&
 1
 	

 T
 &t
  
 *4
 $**8W=
 
 
 T
 ))(F;
 D,,V^D
 4
  !
" #
$ $$$Xv6+
 	
r  c                    #    U R                  5       I Sh  vN   U R                  U5      I Sh  vN nU R                  US5      nU R                  XAS5      $  NA N*7f)a  
retrieve information on the maximum leverage, and maintenance margin for trades of varying trade sizes

https://docs.kraken.com/api/docs/futures-api/trading/get-instruments

: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
Nr   r   )r]  r9  rh  parse_leverage_tiers)r  re  rK  rL  r  s        r  fetch_leverage_tiers"krakenfutures.fetch_leverage_tiersn	  s[      !!!226::Z ~~h6((AA_ 	":s   AAAA)AAc                    U R                  US5      nU R                  US5      nU R                  XB5      n/ nUc  U$ [        S[	        U5      5       H  nX6   nU R                  US5      nU R                  US5      n	US:w  a  [	        U5      n
XZS-
     nXS'   UR                  U R                  US5      U R                  XB5      US	   U	SU R                  US
5      U R                  [        R                  " SU5      5      US.5        M     U$ )z\
@ignore
@param info Exchange market response for 1 market
@param market CCXT market
       marginLevelsr   Nr   r  numNonContractUnitsr  maxNotionalr   r  1)tierr   currencyminNotionalr  r.  maxLeverager6  )r:  r=  r  r;  r<  rC  rE  r  r  r  r.   r  )r  r6  rO  r  r  r   rN  r  r  r
  tiersLengthpreviousTiers               r  parse_market_leverage_tiers)krakenfutures.parse_market_leverage_tiers	  s   N t^<##D(3!!(3Lq#l+,A?D ,,T?CM**41FGKAv!%j$1_5.9]+LLA**8<"7O*#)-)9)9$@S)T#001C1CC1WX	 	 -$ r  rx   r	  c                     U R                  US5      nUS U R                  U5      UU R                  US5      S S S U R                  US5      S.	$ )Nr[  r8  rM  )	r6  r4   rb  rs  r	  r)  fromAccount	toAccountr  )r=  r?  )r  rx   r	  rs  s       r  parse_transferkrakenfutures.parse_transfer	  s^     ##Hl;1 ((6:&&x:

 
	
r  c           	         SSSSSSSSS.nX;   a  X!   $ XR                   ;   a[  U R                  U5      nUS   nUR                  S5      nUS   (       a  SU R                  US5      -   $ S	U R                  US5      -   $ U$ )
Ncashr   )mainfundingrB   futuresr  r  multiCollateralmultiCollateralMarginr4   r  r   fi_r  fv_)marketsrO  r@  r=  )r  r  accountByTyperO  r  splitIds         r  r  krakenfutures.parse_account 
  s    !,2%%+	
 # ))$[[)Fd|HnnS)Gi t//;;;t//;;;Nr  r8  c                 F   #    U R                  XSSU5      I Sh  vN $  N7f)a  
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>`
rB   r?   N)rx   )r  r8  r)  rK  s       r  transfer_outkrakenfutures.transfer_out
  s"      ]]466JJJJs   !!r  r  c                   #    U R                  5       I Sh  vN   U R                  U5      nUS:X  a  [        U R                  S-   5      eSU0nSnUS:X  ag  U R	                  U5      S:w  a!  [        U R                  S-   U-   S-   U-   5      eUS   US	'   U R                  U R                  Xu5      5      I Sh  vN nOXU R	                  U5      US
'   U R	                  U5      US'   US   US'   U R                  U R                  Xu5      5      I Sh  vN nU R                  X5      n	U R                  U	UUUS.5      $  GN& N N07f)a3  

https://docs.kraken.com/api/docs/futures-api/trading/transfer
https://docs.kraken.com/api/docs/futures-api/trading/sub-account-transfer

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 r4   r	  r  r  unit)r)  r  r  )	r]  r	  r!   r4   r  privatePostWithdrawalr_  privatePostTransferr  )
r  r8  r)  r  r  rK  r	  ra  rL  rx   s
             r  rx   krakenfutures.transfer"
  sY     !!!==&& TWW'[[\\f
 !!+.&8 +L!L{!Z]c!cfo!opp"*4.GJ!77G8TUUH%)%7%7%DGM"#'#5#5i#@GK &tnGFO!55dkk'6RSSH &&x:{{8&"&
  	3 	" V
 Ts5   ED<B E7D?8AEE,E?EEr   c                   #    Uc  [        U R                  S-   5      eU R                  5       I Sh  vN   UU R                  U5      R	                  5       S.nU R                  U R                  XC5      5      I Sh  vN $  NN N7f)a@  
set the level of leverage for a market

https://docs.kraken.com/api/docs/futures-api/trading/set-leverage-setting

: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    r4   r]  r(  r  privatePutLeveragepreferencesr_  )r  r   r   rK  ra  s        r  set_leveragekrakenfutures.set_leverageO
  s|      >#DGG.Y$YZZ!!!#nnV,224
 77G8TUUU 	" Vs"   /BB A	B;B<BBc                    #    U R                  5       I Sh  vN   U R                  U5      I Sh  vN nU R                  US/ 5      nU R                  XAS5      $  NB N+7f)an  
fetch the set leverage for all contract and margin markets

https://docs.kraken.com/api/docs/futures-api/trading/get-leverage-setting

: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]  privateGetLeveragepreferencesrh  parse_leverages)r  re  rK  rL  r/  s        r  fetch_leverageskrakenfutures.fetch_leveragesf
  s^      !!!;;FCC #nnX7LbQ##$7(KK 	"Cs   AAAA*AAc                   #    Uc  [        U R                  S-   5      eU R                  5       I Sh  vN   U R                  U5      nSU R	                  U5      R                  5       0nU R                  U R                  XB5      5      I Sh  vN nU R                  US/ 5      nU R                  US0 5      nU R                  Xs5      $  N N=7f)a>  
fetch the set leverage for a market

https://docs.kraken.com/api/docs/futures-api/trading/get-leverage-setting

: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    r4   r]  rO  r(  r  r0  r_  rh  r  parse_leverage)r  r   rK  rO  ra  rL  r/  r  s           r  fetch_leveragekrakenfutures.fetch_leverage
  s      >#DGG.[$[\\!!!V$dnnV,224
 ;;DKK<XYY #nnX7LbQ~~11b9""400 	"
 Zs"   /CCACC	<C	Cc                 x    U R                  US5      nU R                  US5      nUU R                  X25      S UUS.$ )Nr   r  )r6  r   r   longLeverageshortLeverage)r=  r  r  )r  r   rO  r  leverageValues        r  r5  krakenfutures.parse_leverage
  sJ    ##Hh7))(MB&&x8)*
 	
r  reasonurlr   headersbodyc
                    Uc  g US:X  a  [        U R                  S-   U-   5      eU R                  US5      n
U R                  U
S5      nU R                  US5      nU R                  USU5      nUc  g U R                  S-   U-   nU R	                  U R
                  S   X5        U R                  U R
                  S   X5        US	:X  a  [        U5      e[        U5      e)
Ni   rd  r   messageerrorr   r   i  )	r)   r4   r:  r=  throw_exactly_matched_exceptionr   throw_broadly_matched_exceptionr!   r   )r  r8  r=  r>  r   r?  r@  rL  requestHeadersrequestBodyrd  
firstErrorfirtErrorMessagerC  feedbacks                  r  handle_errorskrakenfutures.handle_errors
  s    3; 3!56684__VQ/
++J	B""8W6FG?77S=4',,T__W-EwY,,T__W-EwY3;X&&H%%r  rz   r   c                    U R                  U R                  S   U0 5      nU R                  Xs0 5      nU R                  XU R                  5      n	U R                  USU	5      n
U R	                  US5      nU R                  U R                  S   U0 5      nU R                  X0 5      nU R                  XS5      nU
S-   U R                  X5      -   nU R	                  X@R                  U5      5      nUnSnUS:X  a  SU R                  U5      -   nUnO U(       a  U R                  U5      nUS	U-   -  nU R                  S
   U   U-   nUS:X  d  US:X  a  U R                  5         US-   nUS:w  a  UUS-   -  nUU-  nU R                  U R                  U5      SS5      nU R                  U R                  5      nU R                  UU[         R"                  S5      nSSU R$                  US.nUX6US.$ )Nr   r8   r   rz   r  r  r   zjson=?r   r{   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=  r8   r  implode_paramsextract_paramsjson	urlencodery   check_required_credentialshashencodebase64_to_binarysecrethmachashlibsha512apiKey)r  pathr   r   rK  r?  r@  apiVersionsmethodVersionsdefaultVersionr8   	apiAccessmethodAccessr   endpointquerypostDatar>  authr[  r^  	signatures                         r  signkrakenfutures.sign
  s   oodll:&>RHbA)).M""69nE69-OODLL$:CD	y"=!!,h?S=4#6#6t#DD6#6#6t#<=<6!22HD~~f-HS8^#Eiis#e+)v2++-g%Dic	!HD99T[[.(CD**4;;7F		$II C,++$	G fwOOr  )rJ  )N)Q__name__
__module____qualname____firstlineno__r   r
  r   r   rX  r  r   r   rc  r   r   rj  dictr   r  r  r  r  r   r  r  r   r   floatr   r  r  r   r  r  r   r  r$  r+  r0  r   r5  r@  rJ  r  r  rm  r  r  r   r  r  r   r  r   r  r  r   r  r  r  r   r  r   r  r   r   r  r  r#  rx   intr,  r
   r2  r	   r6  r5  rL  rn  __static_attributes____classcell__)r  s   @r  r0   r0      s   X# Xt
 *, fV fP @DB 0OS 0O 0OS\ 0Od 6:" -47 -4 -4^D4 D D6 DL ?CQUdhqs 9K 9K 9K3 9K^a 9Kx|  ~B  yC 9Kv
 
4 
( <@d[] wB wBS wB wBbfglbm wBr@ @v @ @D os{} 3,3 3,i 3,y 3,Z_ 3,hk 3,j mqy{ :4 :4I :4Y :4X] :4fi :4x FH 0'$|*< 0'd fjx|  FH 3  9 I _b ru < 9=R 6S 6# 6( AER :.tCy :.# :.x 59 4)c 4)l BD S 6 59tZ^gi ?c ? ?TW ?nrsxny ?( 7;\`ik "E "E3 "EVY "Eptuzp{ "EH 9=4^bkm ,L# ,LS ,LX[ ,Lrvw|r} ,L\@ @B W4: :>f fv f fP 37TX\eg 'JC 'Js 'JRU 'JR *, y yvY) Y)v <@ 5 5| 54?
 ?
; ?
B >BPTcgpr /Os /O# /O]` /Ob 8<B PW P4PX> P@ <@  4
t 4
V 4
l =A 9B' 9BP] 9Bv? ?$|J\ ?B
t 
x 
= 
,0 <> Ks K ac +3 + +C +TW +gt +Z ?C2 V3 V V. 8<B LW L9 L6 8: 13 1h 1:	
t 	
V 	
x 	
&# &s & &c &TX &`c &$ &eBSW #P #Pr  r0   )5 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   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.   r0    r  r  <module>r     s    6 3  H  H  H  H  H  H  H  * 0 . ' . ) * 5 - - 0 + . 1 ) 4 %@+PHk @+Pr  