
    E#iU                       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K J0r0  S SK J1r1  S SK J2r2  S SK3J4r4  S SK3J5r5  S SK6J7r7   " S S\\5      r8g)    )Exchange)ImplicitAPIN)AnyBalances
CurrenciesCurrencyDepositAddress	IndexTypeIntLedgerEntryMarketNumOrder	OrderBookOrderRequest	OrderSide	OrderTypePositionStrStringsTickerTickersTradeTradingFeeInterfaceTransactionTransferEntry)List)ExchangeError)AuthenticationError)PermissionDenied)AccountSuspended)ArgumentsRequired)
BadRequest)	BadSymbol)InsufficientFunds)InvalidAddress)InvalidOrder)OrderNotFound)NotSupported)DDoSProtection)RateLimitExceeded)ExchangeNotAvailable)OnMaintenance)InvalidNonce)CancelPending)TRUNCATE)	TICK_SIZE)Precisec                     ^  \ rS rSrS\4U 4S jjrS r0 4S\\   4S jjr	0 4S jr
0 4S\4S jjrSrS	\S
\S\4U 4S jjjr0 4S\S\4S jjrS rSsS\S\S\4S jjrS0 4S\S\S\4S jjrSrS\S\S\4S jjrS0 4S\S\4S jjr0 4S\S\4S jjrSrS\S\ 4S jjr!SSS0 4S\S\S\S\S\\    4
S jjr"S  r#SrS!\S
\S\$4S" jjr%SSS0 4S#\S\S\S\\$   4S$ jjr&S0 4S#\4S% jjr'S0 4S&\S#\S\$4S' jjr(SrS(\S\S\)4S) jjr*SS0 4S\S\S\S\\)   4S* jjr+S\,4S+ jr-0 4S\,4S, jjr.0 4S\S-\/S.\04S/ jjr10 4S\S.\04S0 jjr2S0 4S\S1\3S-\/S2\0S3\44
S4 jjr50 4S5\\6   4S6 jjr7S7 r8S8 r9S9\4S: jr:S; r;SrS<\S\S\<4S= jjr=S0 4S>\S\S1\S?\S2\4S3\44S@ jjr>SS0 4S&\S\S1\3S-\/S2\4S3\44SA jjr?S0 4S&\S\4SB jjr@SSS0 4S&\S\S\S\4SC jjrAS0 4S\4SD jjrBSSS0 4S\S\S\4SE jjrCS0 4S&\S\4SF jjrDS0 4SG\\   S\4SH jjrES0 4S\4SI jjrF0 4SJ\4SK jjrGSSS0 4S\S\S\S\\<   4SL jjrHSSS0 4S\S\S\S\\<   4SM jjrIS9\4SN jrJSO rKSrSP\S
\S\L4SQ jjrMStS#\S\S\4SR jjrNSSS0 4S#\S\S\S\\L   4SS jjrO0 4S\4ST jjrPSSS0 4S#\S\S\S\\L   4SU jjrQSV rR0 4S#\S\S4SW jjrT0 4S#\4SX jjrU0 4S#\S\S4SY jjrVSrS
\S\S4SZ jjrWS0 4S#\S2\0S[\S\\S\L4
S] jjrXS0 4S\S\\Y   4S^ jjrZSrS_\S\4S` jjr[Sa r\0 4S#\4Sb jjr]0 4S#\S2\0Sc\Sd\S\^4
Se jjr_SrSf\S
\S\^4Sg jjr`ShSi0 SS4Sj jraSk rbS#\cSl\Sm\S>\Sn\So\4Sp jrdSqreU =rf$ )ukraken"   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/S_S0S_S1S_E0 S2S_S3S_S4S_S5S_S6S_S7S_S8S_S9S_S:S_S;S_S<S_S=S_S>S_S?S_S@S_SAS_SBS_E0 SCS_SDS_SESF_SGS_SHS_SIS_SJS_SKS_SLS_SMS_SNS_SOS_SPS_SQS_SRS_SSS_STS_E_SUSVSWSXSYSZS[S\S]S^S_.	_S`SaSbSbScSd.SeSfSgSh._SiSjSSU R	                  Sk5      U R	                  Sl5      U R	                  S5      U R	                  Sk5      /U R	                  Sm5      U R	                  Sn5      /U R	                  So5      U R	                  Sp5      /U R	                  Sq5      U R	                  Sr5      /U R	                  Ss5      U R	                  St5      /U R	                  Su5      U R	                  Sl5      /U R	                  Sv5      U R	                  Sw5      /U R	                  Sx5      U R	                  Sy5      /U R	                  Sz5      U R	                  S{5      //	U R	                  S5      U R	                  Sl5      /U R	                  Sm5      U R	                  Sw5      /U R	                  So5      U R	                  Sy5      /U R	                  Sq5      U R	                  S|5      /U R	                  Ss5      U R	                  S}5      /U R	                  Su5      U R	                  S~5      /U R	                  Sv5      U R	                  S5      /U R	                  Sx5      U R	                  S5      /U R	                  Sz5      U R	                  S5      //	S.S.0_SS_SSSS/0SSVSVSSSVSVSVSVSS.	0S0 SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_0 SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_ESSSSSSSSSS.	E0S._S0 SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SSSSSSSSS.E_SSS0 0 / SQSSS.0 SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_0 SS_GS GS_GSGS_GSGS_GSGS_GSGS	_SGS
_GSGS_GSGS_GSGS_GSGS_SGS_SGS_GSGS_SGS_GSGS_GSGS_E0 GSGS_GSGS_GSGS_GSGS _GS!GS"_GS#GS$_GS%GS&_GS'GS(_GS)GS*_GS+GS,_GS-GS._GS/GS0_GS1GS2_GS3GS4_SGS5_GS6GS6_GS7GS8_E0 GS9GS:_GS;GS<_GS=GS>_SS_GS?GS@_GSAGSA_GSBGSB_GSCGSD_GSEGSE_GSFGSG_GSHGSI_GSJGSK_GSLGSM_GSNGSO_GSPGSP_GSQGSR_GSSGST_E0 GSUGSV_SGSW_SS_GSXGSY_GSZGS[_GS\GS]_GS^GS__GS`GSa_GSbGSc_GSdGSe_GSfGSg_GShGSi_GSjGSk_GSlGSl_GSmGSm_GSnGSo_GSpGSq_EGSrGSsGStGSuGSvGSwGSxGSyGSzGS{.	E0 GS|GS|_SS_GS}S_GS5S_GS
S_GS~S_GSS_GSGS_GSGS7_GSGS_GSGS_GSGS_GSS_GSS_GSuS_GSkS_GS_GS^_0 GSGS_SS_GSS_GSGSP_GSGSw_SS_GSGSA_GS[GSZ_GS4GS3_GSrGS_GSGS_SS_GSGS7_GSGS_GSGS_GS&GS%_GSGS_E0 GS,GS+_GSGS_GSGS_GS:GS9_GSGS_GSGS#_GSGS?_GSGS\_GSGSN_GSS_GSGS_GSS_GSGS_GSGS_GSGS_GSGS_GSGS_E0 GSGS_GSGS_GSGS_GSGS_GSGS_GSGS_GSGS_GSGS_GSGS_GSGS_GSGS_GSGS_GSGS_GSGS_GSGS_GSGS_GSGS_EGSGSGSSGSGSGSGSGSGSGSGSGSGSGSGS.EGSGS/GS.	_GSSSSS SSSS SSSSGS.SSSSSSSGS.GSSXSGS.SS S S SGS.SSSSGS.SS SSSGS.S SS S S GSSSSGS.GSGS0GS.	S S GS.S S GS.GS._GS[
        _GS0 GS[        _GS[        _GS[        _GS[        _GS[        _GS[        _GS[        _GS[        _GS[        _GS[        _GS[        _GS[        _GS[        _GS[        _GS[        _GS[        _GS[        _[        [        [        [        [        [        [         [        ["        GS.	E[        [        [        [        [        [$        [&        GS.GS.0E5      $ (  Nidr4   nameKraken	countriesUSversion0	rateLimit  	certifiedFproThasCORSspotmarginswapfutureoption	addMargincancelAllOrderscancelAllOrdersAftercancelOrdercancelOrderscreateDepositAddresscreateMarketBuyOrderWithCostcreateMarketOrderWithCostcreateMarketSellOrderWithCostcreateOrdercreateOrderscreateStopLimitOrdercreateStopMarketOrdercreateStopOrdercreateTrailingAmountOrdercreateTrailingPercentOrder	editOrderfetchBalancefetchBorrowInterestfetchBorrowRateHistoriesfetchBorrowRateHistoryfetchClosedOrdersfetchCrossBorrowRatefetchCrossBorrowRatesfetchCurrenciesfetchDepositAddressfetchDepositAddressesfetchDepositAddressesByNetworkfetchDepositsfetchFundingHistoryfetchFundingRatefetchFundingRateHistoryfetchFundingRatesfetchIndexOHLCVfetchIsolatedBorrowRatefetchIsolatedBorrowRatesfetchLedgerfetchLedgerEntryfetchLeverageTiersfetchMarketsfetchMarkOHLCVfetchMyTrades
fetchOHLCVfetchOpenInterestHistoryfetchOpenOrders
fetchOrderfetchOrderBookfetchOrderTradesemulatedfetchPositionsfetchPremiumIndexOHLCVfetchStatusfetchTickerfetchTickers	fetchTimefetchTradesfetchTradingFeefetchTradingFeesfetchWithdrawalssetLeveragesetMarginModetransferwithdraw
timeframes            <      i  i`'  i`T  )	1m5m15m30m1h4h1d1w2wurlszdhttps://user-images.githubusercontent.com/51840849/76173629-fc67fb00-61b1-11ea-84fe-f2de582f58a3.jpgzhttps://api.kraken.comz<https://kraken.zendesk.com/api/v2/help_center/en-us/articles)publicprivatezendeskzhttps://www.kraken.comzhttps://docs.kraken.com/rest/z2https://www.kraken.com/en-us/features/fee-schedule)logoapiwwwdocfeesr   tradingz0.0026z0.001650000z0.0024100000z0.0022250000z0.0020500000z0.001810000002500000z0.00145000000z0.001210000000z0.0001z0.0010z0.0008z0.0006z0.0004z0.0002z0.0)takermaker)	tierBased
percentager   r   tiershandleContentTypeApplicationZipr   get360000292886	201893608g333333?)	Assets
AssetPairsDepthOHLCSpreadSystemStatusr   TimeTradespostAddOrderr   AddOrderBatch	AddExport   
AmendOrderBalance	CancelAllCancelAllOrdersAfterCancelOrderCancelOrderBatchClosedOrdersDepositAddressesDepositMethodsDepositStatus	EditOrderExportStatusGetWebSocketsTokenLedgers   
OpenOrdersOpenPositionsQueryLedgersQueryOrdersQueryTradesRetrieveExportRemoveExport	BalanceExTradeBalanceTradesHistoryTradeVolumeWithdrawWithdrawCancelWithdrawInfoWithdrawMethodsWithdrawAddressesWithdrawStatus)	WalletTransferCreateSubaccountAccountTransferzEarn/AllocatezEarn/DeallocatezEarn/AllocateStatuszEarn/DeallocateStatuszEarn/StrategieszEarn/Allocations)r   r   r   commonCurrenciesLUNALUNCLUNA2REPV2REPREPV1USTUSTCXBTBTCXDGDOGEFEEKFEEXETCETCXETHETHXLTCLTCXMLNMLNXREPXXBTXXDGXXLMXLMXXMRXMRXRPZECAUDCADEURGBPJPYUSD)XXRPXZECZAUDZCADZEURZGBPZJPYZUSDoptions)r  r	  r  r  ERC20TRC20)r   TRX1INCHz1inch (1INCH)AAVEAaveADAALGOAlgorandANKRzANKR (ANKR)ANTzAragon (ANT)ATOMCosmosAXSzAxie Infinity Shards (AXS)BADGERzBager DAO (BADGER)BALzBalancer (BAL)BANDzBand Protocol (BAND)BATBCHzBitcoin CashBNCzBifrost (BNC)BNTzBancor (BNT)BitcoinCHZzChiliz (CHZ)COMPzCompound (COMP)CQTz	Covalent Query Token (CQT)CRVzCurve DAO Token (CRV)CTSIzCartesi (CTSI)DAIDaiDASHDashDogecoinDOTPolkadotDYDXzdYdX (DYDX)ENJzEnjin Coin (ENJ)EOSzEther Classic (Hex)zEther (Hex)EWTzEnergy Web TokenzKraken Fee CreditFILFilecoinFLOWFlowGHSTzAavegotchi (GHST)GNOGRTICXIconINJzInjective Protocol (INJ)KARzKarura (KAR)KAVAKavaKEEPzKeep Token (KEEP)KNCzKyber Network (KNC)KSMKusamaLINKLinkLPTzLivepeer Token (LPT)LRCzLoopring (LRC)LSKLiskLitecoinMANAMATICzPolygon (MATIC)MINAMinaMIRzMirror Protocol (MIR)MKRzMaker (MKR)MOVRzMoonriver (MOVR)NANOOCEANOGNzOrigin Protocol (OGN)OMGOXTzOrchid (OXT)OXYzOxygen (OXY)PAXGz
PAX (Gold)PERPzPerpetual Protocol (PERP)PHAzPhala (PHA)QTUMRARIzRarible (RARI)RAYzRaydium (RAY)RENzRen Protocol (REN)REPv2SANDzThe Sandbox (SAND)SCSiacoinSDNzShiden (SDN)SOLSolanaSNXzSynthetix  Network (SNX)SRMSerumSTORJzStorj (STORJ)SUSHIzSushiswap (SUSHI)TBTCtBTCr  TronUNIUSDCUSDTzTether USD (ERC20)z
USDT-TRC20zTether USD (TRC20)WaveszWrapped Bitcoin (WBTC)zStellar XLMMoneroz
Ripple XRPXTZYFIzZcash (Transparent)z0x (ZRX))	WAVESWBTCr   r  r  ry  rz  r  ZRX	LightningRippleStellarEthereumzArbitrum OneArbitrumPolygonzArbitrum NovaOptimismz
zkSync ErazkSynczEthereum ClassicZcashCardanoQtumTezosNanor{  ICONzPolygon - USDC.ezArbitrum One - USDC.ez
Energy WebEW
CentrifugeCFGKarura	MoonriverShidenKhalazBifrost KusamaSongbirdSGBzTerra classicKILTBasiliskBSXFlareFLRzAvalanche C-ChainAVAXKintsugiKINTAltairAIRMoonbeamGLMRAcalaACAAstarASTRAkashAKT
RobonomicsXRTFantomFTMElrondEGLD	THORchainRUNESecretSCRTNearNEARzInternet Computer ProtocolICPPicassoPICAzCrust ShadowCSM
IntegriteeTEERzParallel FinancePARAHydraDXHDXINTRFETNYMJUNONODLSTXETHWAPTSUIGENSAVTSEIOTPTIA)InterlayzFetch.air  z	Terra 2.0JunoNodleStackszEthereum PoWAptosSuiGenshiroAventusSeiOriginTrailCelestiamarketsByAltnamedelistedMarketsById)	timeDifferenceadjustForTimeDifferencer  r  inactiveCurrenciesnetworksdepositMethodswithdrawMethodsmarketHelperPropsfeatures)IOCFOKPOGTD)
marginModetriggerPricetriggerPriceTypetriggerDirectionstopLossPricetakeProfitPriceattachedStopLossTakeProfittimeInForcehedgedtrailingleveragemarketBuyByCostmarketBuyRequiresPriceselfTradePreventioniceberg   )minmaxsameSymbolOnly)r  limitdaysBack	untilDayssymbolRequired)r  triggerr  r  )r  r  r  r  r  i )r  r  r  daysBackCanceledr  r  r  r  r    )	sandboxrS   rT   rs   rw   rv   fetchOrdersr_   rt   )linearinverserE   rG   rH   precisionMode
exceptionszEQuery:Invalid asset pairzEAPI:Invalid keyzEFunding:Unknown withdraw keyzEFunding:Invalid amountzEService:UnavailablezEDatabase:Internal errorzEService:BusyzEQuery:Unknown assetzEAPI:Rate limit exceededzEOrder:Rate limit exceededzEGeneral:Internal errorzEGeneral:Temporary lockoutzEGeneral:Permission deniedz EGeneral:Invalid arguments:priceEOrder:Unknown orderz+EOrder:Invalid price:Invalid price argumentzEOrder:Order minimum not met)	zEOrder:Insufficient fundszEGeneral:Invalid argumentszESession:Invalid sessionzEAPI:Invalid noncezEFunding:No funding methodzEFunding:Unknown assetz!EService:Market in post_only modezEGeneral:Too many requestszETrade:User Locked)z:Invalid orderz:Invalid arguments:volumez:Invalid arguments:viqcz:Invalid noncez:IInsufficient fundsz:Cancel pendingz:Rate limit exceeded)exactbroad)deep_extendsuperr4   describeparse_numberr1   r$   r   r&   r%   r,   r*   r    r'   r#   r.   r-   r!   r/   r+   )self	__class__s    E/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/kraken.pyr	  kraken.describe$   s   fd < > aA
(aA
HaA
 $aA
 s	aA
 aA
 aA
 4aA
  EEE $E 	E
 %E %E UE "4E 'E tE E 'E /E ,UE 0E  t!E" #E$ '%E& ('E( "4)E* ,T+E, -d-E. T/E0 1E2 &u3E4 +E5E6 )%7E8 $T9E: ';E< (=E> "4?E@ &tAEB (CED 1%EEF  GEH &uIEJ #EKEL *5MEN $UOEP "5QER *5SET +EUEV tWEX #DYEZ %e[E\ ]E^ !%_E`  aEb dcEd +EeEf "4gEh diEj !$kEl #JmEn !$oEp )%qEr tsEt tuEv wEx TyEz t{E| "4}E~ #EE@ #DAEB uCED  EEF DGEH DIEaA
b 
caA
x ~67]
 06L
yaA
N !%"&!..x8!..x8 "..s3T5F5Fx5PQ!..w79J9J89TU!..x8$:K:KH:UV!..x8$:K:KH:UV!..x8$:K:KH:UV!..y94;L;LX;VW!..y94;L;LX;VW!..y94;L;LX;VW!..z:D<M<Mh<WX
" "..s3T5F5Fx5PQ!..w79J9J89TU!..x8$:K:KH:UV!..x8$:K:KH:UV!..x8$:K:KH:UV!..y94;L;LX;VW!..y94;L;LX;VW!..y94;L;LX;VW!..z:D<M<Me<TU
"OaA
N .tOaA
P  '#	 "#&'!$ #"#()"# !"%  ."A.'. $Q. %a	.
 "1. $Q. /. &q. +A. '. +A. )!. (. $Q. '.  -a!." "1#.$ %a%.& ('.( ').* &q+., &q-.. )!/.0 '1.2 $Q3.4 '5.6 (7.8 &q9.: #A;.< )!=.> '?.@ *1A.B ,QC.D )!E.F +,,-+,)*+,/012+,,-[.0/HQaA
b  !! ! 	!
 w! v! u! v! v! ! ! ! ! ! !  !!" #!$ %!& 5!caA
Z "#+0$&')&B""_#6_#F_# 5_# J	_#
 3_# 3_# H_# A_# <_# 5_# <_# 5_# >_# 4_# 3_#  9!_#" 3#_#$ 7%_#& C'_#( <)_#* 6+_#, 5-_#. F/_#0 J1_#2 :3_#4 35_#6 77_#8 59_#: :;_#< 2=_#> -?_#@ .A_#B :C_#D FE_#F 9G_#H 5I_#J 5K_#L 6M_#N ?O_#P 3Q_#R FS_#T 9U_#V :W_#X 8Y_#Z F[_#\ ;]_#^ 5__#` 6a_#b :c_#d Fe_#f 8g_#h Fi_#j <k_#l 2m_#n 5o_#p 8q_#r Fs_#t Wu_#v <w_#x 5y_#z 3{_#| 3}_#~ 2_#@ AA_#B 2C_#D FE_#F 6G_#H 4I_#J 9K_#L 7M_#N UO_#P :Q_#R )S_#T 3U_#V 8W_#X ?Y_#Z 7[_#\ 6]_#^ :__#` Fa_#b 6c_#d 5e_#f Fg_#h :i_#j !"@k_#l %>(#'  :/}_#@T$T$uT$ eT$ 	T$
 T$ uT$ T$ #JT$ wT$ $ZT$ 
T$ !(T$ 'T$ UT$ eT$  G!T$" e#T$$ 5%T$& #E'T$( u)T$* F+T$, U-T$. f/T$0 F1T$2 t3T$4 E5T$6 W7T$8 E9T$: ;T$< '=T$> ,Z?T$@ AT$B FCT$D ET$F eGT$H FIT$J !$KT$L FMT$N !%OT$P eQT$R  ST$T eUT$V UWT$X %eYT$Z [T$\ $V]T$^ F_T$` aT$b UcT$d (eT$f gT$h eiT$j kT$l UmT$n VoT$p UqT$r !%sT$t euT$v fwT$x  yT$z f{T$| F}T$~ 1%T$@ vAT$B #ECT$D !&ET$F 'GT$H uIT$J !' % !("##$*"  &$ #( %gT$j '9:O%PAA[aA
^ $&+(-,0,1)-+/6:#'#'"&#(	( #($($)+/27/3#')$.  !!*.% ',!%$(%)*/& ',#($)*/	# ',!%#($)*/( $(&+!%$(,0%+#($)*/	*  #y?B ##
 ##KI_aA
r YsaA
t /&(; 4^ ./@	
 +,@ /0D $%9 +I / 1. ./C 1. 12B 7 +L  B<!" 3L#$ 2C2<0C*62<.79F2@*:5: '31=/;&2,='4,=;&uaA
 a a	    c                 l    U R                  U[        U R                  U   S   S   U R                  5      $ )N	precisionamount)decimal_to_precisionr0   marketsr  )r  symbolfees      r  fee_to_precisionkraken.fee_to_precisionH  s4    ((hV8L[8YZb8ceiewewxxr  c                    / nUR                  U R                  U5      5        U R                  S   (       a  UR                  U R                  5       5        UnUS   nU R	                  US0 5      nU R	                  U R                  S0 5      n[        UR                  5       5      n/ n[        S[        U5      5       GH  n	Xy   n
XZ   nU R                  US5      nU R                  US5      nU R                  U5      nU R                  U5      nUnUnU R                  US/ 5      nU R                  US/ 5      nU R                  US5      nS	nUb&  U R                  [        R                  " US
5      5      nU R                  US/ 5      nU R                  US/ 5      nU R                  US5      nS	nUb&  U R                  [        R                  " US
5      5      nU R                  US/ 5      n[        U5      nU R                  U R                  U R                  US5      5      5      nU R                  U R                  U R                  US5      5      5      nSnU(       a%  UU;   a  UU   nU R!                  US5      n U U:  a  U nU R                  US5      n!U!S:H  n"UR                  0 SU
_SU R                  US5      _SUS-   U-   _SU_SU_SS	_SU_SU_SS	_SUS   _SS_SU_SUS:  _S S!_S"S!_S#S!_S$U"_S!S	S	UUS	S	S	S	S	UUS%.U R                  S&5      U R!                  UUS-
  S5      S'.U R!                  US(5      S	S'.S	S	S'.U R!                  US)5      S	S'.S*.S	US+.E5        GM     U R#                  US5      U R                  S,'   U$ )-a
  
retrieves data on all markets for kraken

https://docs.kraken.com/rest/#tag/Spot-Market-Data/operation/getTradableAssetPairs

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: an array of objects representing market data
r  r   resultcachedCurrenciesbasequote
fees_makerr   N100r   leverage_buypair_decimalslot_decimalsTr  statusonliner8   wsIdwsnamer  /settlebaseIdquoteIdsettleIdaltnametyperE   rF   rG   FrH   rI   active)r  price1r  r  ordermincostmin)r  r  r/  cost)contractr  r   r   r   contractSizeexpiryexpiryDatetimestrike
optionTyper  limitscreatedinfor  )appendpublicGetAssetPairsr  load_time_difference	safe_dictlistkeysrangelensafe_stringsafe_currency_code	safe_listr
  r2   
string_divparse_precisionsafe_numberindex_by)#r  paramspromises	responsesassetsResponser  r  rC  r  ir8   market	baseIdRaw
quoteIdRawr)  r*  r  r  	makerFeesfirstMakerFeefirstMakerFeeRater   	takerFeesfirstTakerFeefirstTakerFeeRater   leverageBuyleverageBuyLengthprecisionPriceprecisionAmountrE   currencycurrencyPrecisionr#  isActives#                                      r  fetch_marketskraken.fetch_marketsK  sW    0089<<12OOD5578	"1` ..2>>>$,,8JBOGLLN#q#d)$AB[F((8I))&':J,,Y7F--j9GDEv|R@I NN9a<M $ 0 0 BE ,))'*<*<=NPU*VWvvr:I NN9a<M $ 0 0 BE ,))'*<*<=NPU*VW..DK #K 0!..t/C/CDDTDTU[]lDm/noN"//0D0DTEUEUV\^lEm0noOD!11+D1$($4$4X{$K!$6&7O%%fh7F)HMM 4b4((:4 $*u,4 	4
 4 $4 &4 74 D4 6),4 4 4 ,q04 4 %4  %!4" (#4$ " $"&"-+  $005#//=NQR=RTUV!
  $//
C#
  $#
  $//	B#$  g4 4G %p ,0==+K'(r  c                     U R                  U5      nU R                  US5      nU R                  US5      nUS:X  a  SOSSSSUS.$ )a.  
the latest known information on the availability of the exchange API

https://docs.kraken.com/api/docs/rest-api/get-system-status/

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `status structure <https://docs.ccxt.com/#/?id=exchange-status-structure>`
r  r#  r$  okmaintenanceN)r#  updatedetaurlr=  )publicGetSystemStatusrA  rF  )r  rM  responser  	statusRaws        r  fetch_statuskraken.fetch_status  sZ     --f5 (3$$VX6	(H4d=
 	
r  c                 2   U R                  U5      nU R                  US0 5      n[        UR                  5       5      n0 n[	        S[        U5      5       GH=  nXF   nX7   nU R                  U5      n	UR                  S5      S:  at  U R                  US5      n
Xz:w  aL  UR                  S5      (       d  UR                  S5      (       a   U R                  U
5      n	XR                  U'   OU R                  U5      n	U	R                  S5      S:  nU R                  UU	UU R                  US5      U R                  US5      S	:H  U(       a  S
OSSSSU R                  U R                  U R                  US5      5      5      SSS.SSS.S.0 S.5      XY'   GM@     U$ )a  
fetches all available currencies on an exchange

https://docs.kraken.com/rest/#tag/Spot-Market-Data/operation/getAssetInfo

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an associative dictionary of currencies
r  r   .r,  XZz.HOLDr#  enabledfiatcryptoNdecimalsr1  )r  r   )r8   coder=  r9   r.  r-  depositr   r  r  r;  r  )publicGetAssets
safe_valuerB  rC  rD  rE  rG  findrF  
startswithr   safe_currency_structurer
  rJ  )r  rM  rk  
currenciesidsr  rQ  r8   r_  rw  altNameisFiats               r  fetch_currencieskraken.fetch_currencies  s    ''/n __Xx<
:??$%q#c(#AB!~H **2.Dwws|a**8Y? =bmmC&8&8BMM#<N<N227;D04))"-2226DYYw'1,F77 ((9=**8X>)K"(h !..t/C/CDDTDTU]_iDj/kl  $#
  $#!	 +9 FL; $h r  N
currencyIdr_  c                    > Uc  U$ UR                  S5      S:  aN  UR                  S5      nU R                  US5      nU R                  US5      n[        [        U ]  XB5      S-   U-   $ [        [        U ]  X5      $ )Nrp  r   r   )r{  splitrF  r  r4   rG  )r  r  r_  parts	firstPart
secondPartr  s         r  rG  kraken.safe_currency_code{  s    ??3!#$$S)E((2I))%3J9)NQTTWaaaVT5jKKr  r  c                     U R                  5         U R                  U5      nUS   SS.nU R                  U R                  XB5      5      nU R	                  US0 5      nU R                  Xc5      $ )a2  
fetch the trading fees for a market

https://docs.kraken.com/rest/#tag/Account-Data/operation/getTradeVolume

:param str symbol: unified market symbol
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
r8   T)pairzfee-infor  )load_marketsrR  privatePostTradeVolumeextendrz  parse_trading_fee)r  r  rM  rR  requestrk  r  s          r  fetch_trading_feekraken.fetch_trading_fee  so     	V$4L
 ..t{{7/KL< 8R8%%f55r  c                    U R                  US0 5      nU R                  US0 5      nU R                  X2S   0 5      nU R                  XBS   0 5      nUUS   U R                  [        R                  " U R	                  US5      S5      5      U R                  [        R                  " U R	                  US5      S5      5      SSS.$ )	Nr  r   r8   r  r  r  T)r=  r  r   r   r   r   )rz  r
  r2   rI  rF  )r  rk  rR  rU  rX  symbolMakerFeesymbolTakerFees          r  r  kraken.parse_trading_fee  s    OOHlB?	OOHfb9	4L"E4L"EX&&&w'9'9$:J:J>[`:ach'ij&&w'9'9$:J:J>[`:ach'ij
 	
r  priceKey	amountKeycountOrIdKeyc                 r    U R                  X5      nU R                  X5      nU R                  US5      nXVU/$ )Nr  )rK  safe_integer)r  bidaskr  r  r  r/  r  	timestamps           r  parse_bid_askkraken.parse_bid_ask  s?      2!!&4%%fa0	y))r  r  c                    U R                  5         U R                  U5      nSUS   0nUb  X%S'   U R                  U R                  XS5      5      nU R	                  US0 5      nU R	                  XtS   5      nU R	                  US0 5      n	U R	                  U	S5      n
U
b  U R	                  XzU5      nU R                  X5      $ )a  
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

https://docs.kraken.com/rest/#tag/Spot-Market-Data/operation/getOrderBook

:param str symbol: unified symbol of the market to fetch the order book for
:param int [limit]: the maximum amount of order book entries to return
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
r  r8   countr  r=  r&  )r  rR  publicGetDepthr  rz  parse_order_book)r  r  r  rM  rR  r  rk  r  	orderbook
marketInfowsNames              r  fetch_order_bookkraken.fetch_order_book  s     	V$F4L
 $G&&t{{7'CD( 8R8OOF4L9	 __VVR8
X6	BI$$Y77r  tickerrR  c                 >   U R                  S U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[        R                  " XW5      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	/ 5      nU R                  0 S
U_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U R                  US5      _SU R                  US5      _SU_SU R                  US5      _SU
_SU
_SS _SS _SS _SS _UUUS.EU5      $ )Nvr   pcr   hlbar  r  datetimehighlowbid	bidVolumer  ask	askVolumevwapopenocloselastpreviousClosechanger   average)
baseVolumequoteVolumer=  )safe_symbolrz  rF  r2   
string_mulsafe_ticker)r  r  rR  r  r  r  r  r  r  r  r  r  r  r  r  s                  r  parse_tickerkraken.parse_ticker  s*    !!$/OOFC,%%a+
OOFC,1%((:OOFC,1%vsB/oofc2.oofc2.oofc2. !
f!
!
 !
 D$$T1-	!

 4##C+!
 4##C+!
 ))#q1!
 4##C+!
 ))#q1!
 D!
 D$$VS1!
 T!
 D!
 T!
 d!
  $!!
" t#!
$ %&)!
* + 	r  symbolsc                 X   U R                  5         0 nUbv  U R                  U5      n/ n[        S[        U5      5       H6  nX   nU R                  U   nUS   (       d  M"  UR                  US   5        M8     SR                  U5      US'   U R                  U R                  X25      5      nUS   n	[        U	R                  5       5      n
0 n[        S[        U
5      5       H4  nX   nU R                  U5      nUS   nX   nU R                  X5      X'   M6     U R                  USU5      $ )a  
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market

https://docs.kraken.com/rest/#tag/Spot-Market-Data/operation/getTickerInformation

:param str[]|None 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: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
r   r.  r8   ,r  r  r  )r  market_symbolsrD  rE  r  r>  joinpublicGetTickerr  rB  rC  safe_marketr  filter_by_array_tickers)r  r  rM  r  	marketIdsrQ  r  rR  rk  tickersr  r  r8   r  s                 r  fetch_tickerskraken.fetch_tickers,  s)    	))'2GI1c'l+ f-(##$$VD\2	 ,
 "hhy1GFO''G(DE8$7<<>"q#c(#AB%%b)FH%F[F!..v>FN $ ++FHgFFr  c                     U R                  5         U R                  U5      nSUS   0nU R                  U R                  XB5      5      nUS   US      nU R	                  Xc5      $ )a  
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

https://docs.kraken.com/rest/#tag/Spot-Market-Data/operation/getTickerInformation

:param str symbol: unified symbol of the market to fetch the ticker for
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
r  r8   r  )r  rR  r  r  r  )r  r  rM  rR  r  rk  r  s          r  fetch_tickerkraken.fetch_tickerM  sm     	V$F4L
 ''G(DE(#F4L1  00r  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      /$ )Nr   r   r  r      r   )safe_timestamprK  )r  ohlcvrR  s      r  parse_ohlcvkraken.parse_ohlcv`  sn     q)UA&UA&UA&UA&UA&
 	
r  r   	timeframesincec           	      "   U R                  5         SnU R                  USS5      u  peU(       a  U R                  SXXBUS5      $ U R                  U5      nU R	                  U R
                  U5      nSUS   0n	Ub  XS'   OX)S'   Ub/  U R                  US-  5      n
US	-  nU R                  X-
  5      U	S
'   U R                  U R                  X5      5      nU R                  US0 5      nU R                  XS   / 5      nU R                  XX#U5      $ )a5  
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market

https://docs.kraken.com/api/docs/rest-api/get-ohlc-data

: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
Frt   paginater  r  r8   intervalr@   r   r  r  )r  handle_option_and_params"fetch_paginated_call_deterministicrR  r  r   parse_to_intnumber_to_stringpublicGetOHLCr  rz  rH  parse_ohlcvs)r  r  r  r  r  rM  r  rR  parsedTimeframer  scaledSincetimeFrameInSecondsrk  r  ohlcvss                  r  fetch_ohlcvkraken.fetch_ohlcvv  s*    	88zZ::<X]jpruvvV$++DOOYGF4L
 &"1J"+J++EDL9K!02!5#44[5UVGG%%dkk'&BC 8R8tb9  5IIr  c                 6    SSSSSS.nU R                  X!U5      $ )Ntradetransactionr   rF   )r  
withdrawalrx  r   rF   rF  )r  r-  typess      r  parse_ledger_entry_typekraken.parse_ledger_entry_type  s-    '$"
 T22r  itemc                 ~   U R                  US5      nS nS nU R                  US5      nS nU R                  U R                  US5      5      nU R                  US5      n	U R                  X5      n
U R                  X5      nU R                  US5      n[        R
                  " US5      (       a  Sn[        R                  " U5      nOSnU R                  US	S
5      nU R                  UUUUUUUU
U R                  U5      S U R                  US5      SUU R                  U5      U R                  US5      U
S.S.U5      $ )Nr8   refidr-  assetr  r>   outintimer@   balancere  r  r4  r_  )r=  r8   	directionaccountreferenceIdreferenceAccountr-  r_  r  beforeafterr#  r  r  r  )rF  r  rG  safe_currencyr2   	string_lt
string_abssafe_integer_productsafe_ledger_entryr
  rK  iso8601)r  r  r_  r8   r   r  r  r  r-  r  rw  r  r  s                r  parse_ledger_entrykraken.parse_ledger_entry  sZ     dD)	&&tW5++D,<,<T6,JK%%dG4
&&z<%%j;!!$1VS))I''/FI--dFDA	%%"& 0''/%%dI6"Y/((u5 '
& ' 	r  rw  c                    U R                  5         0 nSnUb  U R                  U5      nUS   US'   Ub  U R                  US-  5      US'   U R                  USS/5      nUbT  U R	                  USS/5      n[
        R                  " US5      nU R                  [
        R                  " US	5      5      US
'   U R                  U R                  XT5      5      n	U R                  U	S0 5      n
U R                  U
S0 5      n[        UR                  5       5      n/ n[        S[        U5      5       H!  nX   nX   nUUS'   UR                  U5        M#     U R!                  XX#5      $ )a  
fetch the history of changes, actions done by the user or operations that altered the balance of the user

https://docs.kraken.com/rest/#tag/Account-Data/operation/getLedgers

:param str [code]: unified currency code, default is None
:param int [since]: timestamp in ms of the earliest ledger entry, default is None
:param int [limit]: max number of ledger entries to return, default is None
:param dict [params]: extra parameters specific to the exchange API endpoint
:param int [params.until]: timestamp in ms of the latest ledger entry
:param int [params.end]: timestamp in seconds of the latest ledger entry
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
Nr8   r  r@   startuntiltill1000r0  endr  ledgerr   )r  r_  r  safe_string_nomitr2   rI  
string_addprivatePostLedgersr  rz  rB  rC  rD  rE  r>  parse_ledger)r  rw  r  r  rM  r  r_  r  untilDividedrk  r  r  rC  itemsrQ  keyvalues                    r  fetch_ledgerkraken.fetch_ledger  sb    	}}T*H'~GG#00>GG""6GV+<=YYv'89F"--eV<L!..w/A/A,PS/TUGEN**4;;w+GH 8R826FKKM"q#d)$A'CKEE$KLL	 %
   %??r  c                 b   U R                  5         SR                  U5      nU R                  SU0U5      nU R                  U5      nUS   n[	        UR                  5       5      n/ n[        S[        U5      5       H   n	Xy   n
Xj   nXS'   UR                  U5        M"     U R                  U5      $ )Nr  r8   r  r   )
r  r  r  privatePostQueryLedgersrB  rC  rD  rE  r>  r  )r  r  rw  rM  r  rk  r  rC  r  rQ  r  r  s               r  fetch_ledger_entries_by_ids"kraken.fetch_ledger_entries_by_ids  s    hhsm++#
 //8 (#FKKM"q#d)$A'CKE$KLL	 %
   ''r  r8   c                 2    U R                  U/X#5      nUS   $ )Nr   )r"  )r  r8   rw  rM  r  s        r  fetch_ledger_entrykraken.fetch_ledger_entry3  s    00"tDQxr  r  c                 @   S nS nS nS nS nS nS n	S n
S nS n[        U[        5      (       au  U R                  US5      nUS   S:X  a  SOSnUS   S:X  a  SOS	nU R                  US
5      nU R                  US5      n[	        U5      nUS:  a  U R                  US5      n	GO[        U[
        5      (       a  Un	GOfSU;   a  U R                  US5      nU R                  U5      nUb  UnOUb  U R                  U5      nU R                  US5      n
U R                  USS5      n	U R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      nSU;   a  S nUb  US   nU R                  US5      US.nO~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5      nU R                  US5      nUb  US   nU R                  US5      nU R                  US 5      nS nUb  U(       a  S OS!nUc  U R                  U5      nOU R                  U5      nU R                  U	U
UUUUUUUUUUUS".U5      $ )#Nr  r   ssellbuyr  r  r  rR  r   r   r   	ordertxidr  r8   postxidr  r-  	ordertyper/  volr  r  r  r  r  trade_idsideord_typeqtyr4  r   r   )r8   orderr=  r  r  r  r-  r0  takerOrMakerr/  r  r4  r  )
isinstancerB  r  rF  rE  strfind_market_by_altname_or_idget_delisted_market_by_idsafe_string_2	safe_boolr  	parse8601
safe_trade)r  r  rR  r  r  r0  r-  r/  r  r8   orderIdr  r  tradeLengthmarketIdfoundMarketr_  r4  r   r4  s                       r  parse_tradekraken.parse_trade7  s   ~ 	eT""++E15I#Ah#o6ED$Qx37XD$$UA.E%%eQ/Fe*KQ%%eQ/s##BE!''v6H;;HEK&$%77A&&uk:G##E4;B++E6:I##E62D##E;7D$$UG4E%%eU3F~%%gH ,,UE: (
 %%eX6F''{;H!!%4B##E62D##E:6D$$UG4E%%eU3FH%Fv.ug.&+7L||I.Hx0I" ( 
  	r  c                    U R                  5         U R                  U5      nUS   nSU0nUb&  U R                  U R                  US-  5      5      US'   Ub  X7S'   U R	                  U R                  Xt5      5      nUS   n	X   n
[        U
5      nUS::  a  / $ XS-
     nU R                  U	S	5      nUR                  U5        XUS-
  '   U R                  XX#5      $ )
a  
get the list of most recent trades for a particular symbol

https://docs.kraken.com/rest/#tag/Spot-Market-Data/operation/getRecentTrades

:param str symbol: unified symbol of the market to fetch trades for
:param int [since]: timestamp in ms of the earliest trade to fetch
:param int [limit]: the maximum amount of trades to fetch
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
r8   r  r@   r  r  r  r   r   r  )
r  rR  r  r  publicGetTradesr  rE  rF  r>  parse_trades)r  r  r  r  rM  rR  r8   r  rk  r  tradeslength	lastTradelastTradeIds                 r  fetch_tradeskraken.fetch_trades  s     	V$D\B

 #44T5F5Fut|5TUGG$G''G(DE (#VQ;IA:&	&&vv6%&vz  >>r  c                    U R                  US0 5      nUS S S.n[        UR                  5       5      n[        S[	        U5      5       Hh  nXE   nU R                  U5      nU R                  X&0 5      nU R                  5       n	U R                  US5      U	S'   U R                  US5      U	S'   XU'   Mj     U R                  U5      $ )Nr  )r=  r  r  r   
hold_tradeusedr  total)	rz  rB  rC  rD  rE  rG  r  rF  safe_balance)
r  rk  balancesr  currencyIdsrQ  r  rw  r  r  s
             r  parse_balancekraken.parse_balance  s    ??8Xr:

 8==?+q#k*+A$J**:6DoohB?GllnG"..wEGFO#//CGG"4L ,   ((r  c                 f    U R                  5         U R                  U5      nU R                  U5      $ )aO  
query for balance and get the amount of funds available for trading or funds locked in orders

https://docs.kraken.com/rest/#tag/Account-Data/operation/getExtendedBalance

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
)r  privatePostBalanceExrS  )r  rM  rk  s      r  fetch_balancekraken.fetch_balance  s3     	,,V4  !!(++r  r0  r4  c                 r    U R                  5         SU0nU R                  USX#SU R                  XT5      5      $ )a  
create a market order by providing the symbol, side and cost

https://docs.kraken.com/rest/#tag/Spot-Trading/operation/addOrder

:param str symbol: unified symbol of the market to create an order in(only USD markets are supported)
:param str side: 'buy' or 'sell'
:param float cost: how much you want to trade in units of the quote currency
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
r4  rR  N)r  create_orderr  )r  r  r0  r4  rM  reqs         r  create_market_order_with_cost$kraken.create_market_order_with_cost#  sC     	 D
   4tT[[QTE]^^r  c                 H    U R                  5         U R                  USX#5      $ )a  
create a market buy order by providing the symbol, side and cost

https://docs.kraken.com/rest/#tag/Spot-Trading/operation/addOrder

:param str symbol: unified symbol of the market to create an order in
:param float cost: how much you want to trade in units of the quote currency
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
r*  )r  r\  )r  r  r4  rM  s       r  !create_market_buy_order_with_cost(kraken.create_market_buy_order_with_cost6  s%     	11&%NNr  r-  r  r/  c           	         U R                  5         U R                  U5      nUS   UUU R                  X5      S.nU R                  SXXXV5      n	U R	                  U	S   SS5      n
U
R                  S5      S:  nU R                  U R                  U	S   U	S	   5      5      nU R                  US
5      nXS'   U R                  U5      $ )a  
create a trade order

https://docs.kraken.com/api/docs/rest-api/add-order

:param str symbol: unified symbol of the market to create an order in
:param str type: 'market' or 'limit'
:param str side: 'buy' or 'sell'
:param float amount: how much of currency you want to trade in units of base currency
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
:param dict [params]: extra parameters specific to the exchange API endpoint
:param bool [params.postOnly]: if True, the order will only be posted to the order book and not executed immediately
:param bool [params.reduceOnly]: *margin only* indicates if self order is to reduce the size of a position
:param float [params.stopLossPrice]: *margin only* the price that a stop loss order is triggered at
:param float [params.takeProfitPrice]: *margin only* the price that a take profit order is triggered at
:param str [params.trailingAmount]: *margin only* the quote amount to trail away from the current market price
:param str [params.trailingPercent]: *margin only* the percent to trail away from the current market price
:param str [params.trailingLimitAmount]: *margin only* the quote amount away from the trailingAmount
:param str [params.trailingLimitPercent]: *margin only* the percent away from the trailingAmount
:param str [params.offset]: *margin only* '+' or '-' whether you want the trailingLimitAmount value to be positive or negative, default is negative '-'
:param str [params.trigger]: *margin only* the activation price type, 'last' or 'index', default is 'last'
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
r8   )r  r-  r-  volumerS   r   oflags viqcr   r  	usingCost)
r  rR  amount_to_precisionorder_requestrF  r{  privatePostAddOrderr  rA  parse_order)r  r  r-  r0  r  r/  rM  rR  r  orderRequestflagsisUsingCostrk  r  s                 r  rZ  kraken.create_orderD  s    0 	V$4L..v>	
 ))-wX]f  a(B?jj(2-++DKKQVW,YZ (3){ ''r  ordersc           
      D   U R                  5         / n/ nSnSn[        S[        U5      5       H  nX   nU R                  US5      n	Uc  U	nOXY:w  a  [	        U R
                  S-   5      eU R                  U	5      nUR                  U	5        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U
U R                  US   U5      S
.nU R                  SXXX5      nUR                  US   5        M     U R                  USSSS5      nSnUUS   S.nU R                  UU5      nU R                  U5      nU R                  US0 5      nU R                  U R!                  US5      5      $ )a  
create a list of trade orders

https://docs.kraken.com/api/docs/rest-api/add-order-batch/

: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  z; createOrders() requires all orders to have the same symbolr-  r0  r  r/  rM  )r-  r-  rb  rT   FTr8   )rp  r  r  rp  )r  rD  rE  rF  r#   r8   rR  r>  rz  rA  rh  ri  r  r  privatePostAddOrderBatchparse_ordersrH  )r  rp  rM  ordersRequestsorderSymbolsr  rR  rQ  rawOrderr?  r-  r0  r  r/  orderParamsr[  rl  rk  r  r  s                       r  create_orderskraken.create_ordersx  s    	q#f+&AyH''(;H~!%$TWW/l%lmm[[*F)##Hf5D##Hf5D__Xx8FOOHg6E..8R@K!226(3CVLC
  --nhc[`nL!!,q/2+ ', **<udDQ$4L
 ++gv.009, (B7  !ABBr  c                 p    U R                  U R                  S0 5      nX;   a  X!   $ U R                  U5      $ )Nr  )rz  r  r  )r  r8   r  s      r  r7  #kraken.find_market_by_altname_or_id  s:    ??4<<9KRP!#''##B''r  c                 T   Uc  U$ U R                  U R                  S   U5      nUb  U$ SnSnSnSn[        U5      S:X  a  SnSnSnO[        U5      S:X  a  SnSnSnXU nXU nU R                  U5      n	U R                  U5      n
U	S-   U
-   nUU	U
UUS	.nX R                  S   U'   U$ )
Nr  r   r   r      r     r'  )r  r  r  r)  r*  )rz  r  rE  rG  )r  r8   rR  baseIdStart	baseIdEndquoteIdStart
quoteIdEndr)  r*  r  r  r  s               r  r8   kraken.get_delisted_market_by_id  s    :I.C!DbIM	
r7a<ILJW\ILJ	**-&&v.''0e#
 39*+B/r  r#  c           
      >    SSSSSSSSSS.	nU R                  X!U5      $ )Nr  closedcanceledexpired)	pendingr  pending_newnewpartially_filledfilledr  r  r  r  r  r#  statusess      r  parse_order_statuskraken.parse_order_status  s9    ! &" 

 &99r  c                 6    SSSSSS.nU R                  X!U5      $ )NrR  r  )take-profit	stop-lossstop-loss-limittake-profit-limittrailing-stop-limitr  r  s      r  parse_order_typekraken.parse_order_type  s/     $!&!(#*
 &99r  r3  c                 ^   U R                  USS5      nU R                  US5      nU R                  US0 5      nU R                  US5      nS nUb  U R                  US5      nOU R                  US5      nS nS nS n	S n
S nS nS nUb  UR	                  S5      nU R                  US5      nU(       d  U R                  US5      nO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S:X  d  US:X  a  UnOUS-   U-   nUS:X  d  US:X  a%  U R                  US5      nU R                  US5      n
OUS:X  a  U R                  US
5      n
U R                  USU5      nU R                  USU5      nU R                  USU	5      n	U R                  U	5      nS nUb  UnOU	b  U R                  U	5      nU R                  US5      nU R                  USU5      nU R                  US5      nS nU R                  USU
5      n
U
bP  U
R                  S5      (       d8  [        R                  " U
S5      (       d  [        R                  " U
S5      (       a  S n
U
c&  U R                  US5      n
U R                  USSU
5      n
U R                  USS5      nUR                  S5      S :  nU R                  US5      nUb]  US!   nS"U;   aR  U R                  US"5      nUS S#.nUR                  S$5      S:  a	  US%   US&'   OUR                  S'5      S:  a  US(   US&'   U R                  U R                  US)5      5      nU R                  U/ S*Q5      nUb  UR!                  S+5      (       a$  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 R%                  US// 5      n/ n ['        S[)        U5      5       HU  n!UU!   n"[+        U"[,        5      (       a'  U R/                  U R1                  U"UU0 S0.5      5        MD  U R/                  U"5        MW     S n#S n$Ub  UR!                  S15      (       a4  U R                  US5      n$U R3                  U R                  US5      5      n
O[UR!                  S25      (       a4  U R                  US5      n#U R3                  U R                  US5      5      n
OUS:X  a  Un$OUS:X  a  Un#U R5                  U5      n%U R7                  U%SS/5      (       a  U
c  SOSn%U R                  US35      n&U&b  S nU R9                  0 S4U_S5U_S6U_S7U_S8U R;                  U5      _S9S _S)U_S!U_SU%_S:S _S;U_S<U_SU
_S=U_S>U$_S?U#_S@U_UUUS U R=                  USASB5      UU SC.EU5      $ )DNrg  Fdescrr3   r   r   r  r  r   r  rR  z	stop lossztake profitr   	   r-  r-  r  opentmr.  vol_execr/  %z0.00000r>   price2
limitpricerc  rd  r   rf  r  r  )r4  ratefciqr  r_  fcibr  r#  )r8   txidorder_idamend_id[r  userref	cl_ord_idrF  )r8   r=  r  r=  r  r  r  r8   clientOrderIdr=  r  r  lastTradeTimestampr  postOnlyr0  r  r  r  r4  
reduceOnlyreduce_only)r  r  r  	remainingr  r  rF  )r:  r  rA  rF  r  r7  r8  r  endswithr2   string_equalsr9  r{  rK  r  r  r|  rH  rz  rD  rE  r5  r6  r>  r<  	omit_zeror  in_array
safe_orderr  safe_bool_2)'r  r3  rR  rn  descriptionorderDescriptionObjorderDescriptionr0  rawTyper?  r/  r  r4  r  r  part4part5r@  r  r  r  r  rm  
isPostOnlyr  feeCostr#  r8   r  r  r  	rawTradesrF  rQ  rawTrader  r  	finalTypeamendIds'                                          r  rk  kraken.parse_order  s   F nnUK?		%-nnUGR8"nnUG<*#//0CWM#//w?'$**3/E##E1-D))%3''q1''q1H$$UA.E$$UA.E5H#4#+-+%M)A#//q9((2G#((2VT:"";WE##KB77A" F!33H=F''x8	!!%7!!%4   gu=ENN3$7$77;P;PQVXa;b;bfmf{f{  }B  DG  gH  gHE=$$[(;E&&ulGUKE  "5ZZ'",
""5'2H%F~**5%8#  ::f%*&,WoC
OZZ'1,&,VnC
O(()9)9%)JK'MNJBMM#..>>%0D!!$*B""5)4((WEOOE8R8	q#i.)A |H(C((dooX"X^hj.klmh' *  !!-00"&"2"2;"Ht'7'7X'NO##K00 $ 0 0g Ft'7'7X'NOM)".K' ,))'2	 ==[-$@AA%*]I""5*5J  
" 
] 
 E 
 	 

 Y/ 
 !$ 
 f 
 f 
 I 
 4 
 
 
 D 
 U 
 L 
  
  ]! 
" D# 
$ **5,N1 
2 3 	r  methodr  c                 \   U R                  US5      nU R                  US/5      nUb  XS'   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5      nU R                  US5      nU R                  US5      nU R                  US5      nUS LnUS LnUR                  S	5      nUS
:H  nU R                  US5      nU R                  US5      nU R                  USS/5      nUS L=(       a    UR                  S5      S:  nU(       aY  Uc  U(       aO  Uc'  Ub$  U R	                  X R                  U5      5      US'   OU R	                  UU5      US'   Ub  US-   OSnUUS'   O)U(       a"  U(       d  U(       d  U R                  X&5      US'   U R                  USS5      nU(       aw  U(       a'  U R                  X)5      US'   U(       a  SUS'   O3SUS'   O-U(       a&  U R                  X*5      US'   U(       a  SUS'   OSUS'   U(       a  U R                  X&5      US'   OU(       d  U(       a  S nUb#  UR                  S5      (       a  SU-   OSU-   S-   nUb  SU-   OS nU R                  USS5      nUb  UU R                  U5      -   OS nU R                  USS5      nUUS'   U(       d  Uc  UbD  S US'   Ub.  UR                  S5      (       a  UU-   OUU-   S-   n UUS'   U US'   O!Ub
  UUS'   UUS'   OS!US'   Ub  UUS'   OUUS'   U(       a  US":X  a  S#US'   OS$US'   U R                  US%5      n!U!bk  U R                  0 U!5      n!U R                  U!S5      n"U"b  U R                  UU"5      U!S'   U R                  U!S5      n#U#b  U R                  UU#5      U!S'   U!US%'   U R                  US&S'5      n$U$b  U$US''   US
:H  n%S n&U R                  U%S(U5      u  n&nU&(       a  Ub  US)-   OS*n'U'US'   Ub  SU;  a  UUS'   U R                  U/ S+Q5      nXG/$ ),Nr  r  r  r  trailingAmounttrailingPercenttrailingLimitAmounttrailingLimitPercentr  rR  r4  rc  re  rf  rb  z,viqcr/  r  r  r  r-  r  r  r  r  r  +offset-r  r  r  ztrailing-stopcreateOrderWsTtruer  r  timeinforceFz,postr   )	r  r  r  r  r  r  r  r  r  )rF  r  r  r{  cost_to_precisionr  price_to_precisionr  rA  r  rz  r9  handle_post_only)(r  r  r  r-  r  r  r/  rM  r  stopLossTriggerPricetakeProfitTriggerPriceisStopLossTriggerOrderisTakeProfitTriggerOrderisStopLossOrTakeProfitTriggerr  r  r  r  isTrailingAmountOrderisTrailingPercentOrderisLimitOrderisMarketOrderr4  rm  isViqcOrderextendedOflagsr  trailingPercentStringtrailingAmountStringr  trailingLimitAmountStringtrailingActivationPriceTypetrailingLimitPercentStringr  
closePriceclosePrice2r  isMarketr  extendedPostFlagss(                                           r  ri  kraken.order_request  s
   ((A6O#45$#0K #//H!%!1!1&:K!L!5T!A#9#E (>(ZBZ%))&2BC**63DE"..v7LM#//8NO .d :!0!<}}W-(/  26FH#56D(Guzz&/AB/Fd.+|!3$($:$:6CXCXY_C`$a!$($:$:64$H!161BUW_N .GH"7@V#66vEGG%%flMJ
(%#'#:#:6#X +<GK(+6GK()#'#:#:6#Z +>GK(+8GK($($;$;F$J!"&<$(!*DSD\D\]`DaDa)>ilo~i~  BE  jE%<J<V3#7]a %%fh<F`s`1F1FGZ1[([  GK%*.*:*:69f*U'!<GI 3 ?EYEe'<$'3UiUrUrsvUwUw&;O2O  @F  I]  @]  `c  @c.'<GG$(BGH%(4';GG$(AGH%'6$".'<GG$';GG$()-&)/&vw/KKE*E8J%!%!8!8!Lg//%:K&"&"9"9&+"Nh$GG((N"%0GM"H$005&I&494EF 1GHG(; %GH6  $C  D  r  c                    U R                  5         U R                  U5      nUS   (       d!  [        U R                  S-   US   -   S-   5      eSU0n	U R	                  USS5      n
U
b*  XS'   U R                  USS/5      nU R                  U	S5      n	US	:H  nSnU R                  US
U5      u  pU(       a  SU	S'   Ub  U R                  X%5      U	S'   Ub  U R                  X&5      U	S'   U R                  U/ SQ5      nUbF  U R                  US5      nU R                  U/ SQ5      nUb	  X-   nXS'   OU R                  X-5      U	S'   U R                  U R                  X5      5      nU R                  US0 5      nU R                  UU5      $ )a  
edit a trade order

https://docs.kraken.com/api/docs/rest-api/amend-order

:param str id: order id
:param str symbol: unified symbol of the market to create an order in
:param str type: 'market' or 'limit'
:param str side: 'buy' or 'sell'
:param float [amount]: how much of the currency you want to trade in units of the base currency
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
:param dict [params]: extra parameters specific to the exchange API endpoint
: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.trailingAmount]: the quote amount to trail away from the current market price
:param str [params.trailingPercent]: the percent to trail away from the current market price
:param str [params.trailingLimitAmount]: the quote amount away from the trailingAmount
:param str [params.trailingLimitPercent]: the percent away from the trailingAmount
:param str [params.offset]: '+' or '-' whether you want the trailingLimitAmount value to be positive or negative
:param boolean [params.postOnly]: if True, the order will only be posted to the order book and not executed immediately
:param str [params.clientOrderId]: the orders client order id
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
rE   z editOrder() does not support r-  z& orders, only spot orders are acceptedr  r  r  NrR  Fr  	post_only	order_qtylimit_price)r  r  r  r  r  r  r  )r  r  r  r  r  r  r  trigger_pricer  )r  rR  r)   r8   r9  r  r  rh  r  r  rF  privatePostAmendOrderr  rA  rk  )r  r8   r  r-  r0  r  r/  rM  rR  r  r  r  r  allTriggerPricesr  rk  r  s                    r  
edit_orderkraken.edit_orderR  s   0 	V$f~tww)IIFSYNZ  ^F   F  G  GB
 **6?KP$#0K YYv'EFFii0GH$005&I#)GK #'#;#;F#KGK %)%<%<V%KGM"--f  7o  p'%%fh7FYYv  (j  kF!#)#< +;(+/+B+B6+\(--dkk'.JK (B7//r  c                 |   U R                  5         U R                  USS5      nSUS.nUnUb  XES'   U R                  USS/5      nU R                  U R	                  XV5      5      nU R                  US/ 5      nX;  a  [        U R                  S-   U-   5      eU R                  U R	                  SU0X   5      5      $ )ac  
fetches information on an order made by the user

https://docs.kraken.com/rest/#tag/Account-Data/operation/getOrdersInfo

:param str id: order id
:param str symbol: not used by kraken fetchOrder
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
r  r  TrF  r  r  z& fetchOrder() could not find order id r8   )	r  safe_value_2r  privatePostQueryOrdersr  rz  r(   r8   rk  )	r  r8   r  rM  r  r  queryrk  r  s	            r  fetch_orderkraken.fetch_order  s     	))&)_M

 $!.IIIfy/&BCE..t{{7/JKL 8R8*R RUW WXXT2J
 CDDr  c                 8   U R                  US5      n/ nUc  [        U R                  S-   5      e[        S[	        U5      5       HC  nXh   n	[        U	[        5      (       a  UR                  U	5        M/  UR                  U	S   5        ME     U R                  5         Ub  U R                  U5      nU R                  U R                  S0 5      n
U R                  U
SS5      n[	        U5      nU R                  X-  5      nU R                  US	5      n/ n[        SU5       H  n/ n[        SU5       H3  nU R                  X-  U5      nUU:  d  M  UR                  UU   5        M5     S
SR                  U5      0nU R                  U5      nU R                  US5      n[!        UR#                  5       5      n[        S[	        U5      5       H  nUU   UUU      S'   M     U R%                  USX45      nU R'                  UU5      nU R)                  UU5      nM     U$ )a  
fetch all the trades made from a single order

https://docs.kraken.com/rest/#tag/Account-Data/operation/getTradesInfo

:param str id: order id
:param str symbol: unified market symbol
:param int [since]: the earliest time in ms to fetch trades for
:param int [limit]: the maximum number of trades to retrieve
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
rF  Nz fetchOrderTrades() requires a unified order structure in the params argument or a 'trades' param(an array of trade id strings)r   r8   ry   	batchSize   r   r  r  r  )rz  r"   r8   rD  rE  r5  r6  r>  r  r  r  r  r  sumr  privatePostQueryTradesrB  rC  rE  filter_by_symbolarray_concat)r  r8   r  r  r  rM  orderTradestradeIdsrQ  
orderTrader  r  numTradeIds
numBatchesr  j
requestIdskindexr  rk  r  r  rF  tradesFilteredBySymbols                            r  fetch_order_tradeskraken.fetch_order_trades  s    oofh7#DGG  /p  %p  q  q1c+./(^
j#..OOJ/OOJt$45 0 	[[(F//$,,0BBG%%g{B?	(m&&{'>?
XXj!,
q*%AJ1i(2;&%%huo6 )
 ,G 227;H, (;Iy~~'(C1c#h'*-a&	#a&!$' (&&y$EF%)%:%:66%J"&&v/EFFK &L r  c                    U R                  5         U R                  U R                  SSR                  U5      S.U5      5      nU R	                  US0 5      n/ n[        UR                  5       5      n[        S[        U5      5       H?  nXx   n	XY   n
U R                  U R                  SU	0U
5      5      nUR                  U5        MA     U$ )al  
fetch orders by the list of order id

https://docs.kraken.com/rest/#tag/Account-Data/operation/getClosedOrders

:param str[] [ids]: list of order id
:param str [symbol]: unified ccxt market symbol
:param dict [params]: extra parameters specific to the kraken api endpoint
:returns dict[]: a list of `order structure <https://docs.ccxt.com/#/?id=order-structure>`
Tr  r  r  r   r8   )r  r  r  r  rz  rB  rC  rD  rE  rk  r>  )r  r  r  rM  rk  r  rp  orderIdsrQ  r8   r  r3  s               r  fetch_orders_by_idskraken.fetch_orders_by_ids	  s     	..t{{HHSM<
 0  8R8&q#h-(AB:D$$T[[$T%BCEMM% 	 )
 r  c                 R   U R                  5         0 nUb  U R                  US-  5      US'   U R                  USS/5      nUbT  U R                  USS/5      n[        R
                  " US5      nU R                  [        R                  " US5      5      US'   U R                  U R                  XT5      5      nUS	   S
   n	[        U	R                  5       5      n
[        S[        U
5      5       H  nX   XU      S'   M     SnUb  U R                  U5      nU R                  XX#5      $ )aI  
fetch all trades made by the user

https://docs.kraken.com/api/docs/rest-api/get-trade-history

:param str symbol: unified market symbol
:param int [since]: the earliest time in ms to fetch trades for
:param int [limit]: the maximum number of trades structures to retrieve
:param dict [params]: extra parameters specific to the exchange API endpoint
:param int [params.until]: timestamp in ms of the latest trade entry
:param int [params.end]: timestamp in seconds of the latest trade entry
:returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
Nr@   r  r  r  r  r0  r  r  rF  r   r8   )r  r  r  r  r2   rI  r  privatePostTradesHistoryr  rB  rC  rD  rE  rR  rE  )r  r  r  r  rM  r  r  r  rk  rF  r  rQ  rR  s                r  fetch_my_tradeskraken.fetch_my_trades8	  s+    	
 #00>GG""6GV+<=YYv'89F"--eV<L!..w/A/A,PS/TUGEN00W1MN: (#H-6;;=!q#c(#A#&6Fq6N4  $[[(F  >>r  c                 2   U R                  5         SnU R                  USU5      nU R                  US5      nSU0nU R                  USS5      nUb*  XvS'   U R                  USS/5      nU R                  US5      n U R	                  U R                  Xc5      5      nU R                  S	U05      $ ! [         a\  nU R                  (       aD  U R                  R                  S5      S:  a%  [        U R                  S-   U R                  -   5      eUeSnAff = f)
a  
cancels an open order

https://docs.kraken.com/api/docs/rest-api/cancel-order

:param str id: order id
:param str [symbol]: unified symbol of the market the order was made in
:param dict [params]: extra parameters specific to the exchange API endpoint
:param str [params.clientOrderId]: the orders client order id
:param int [params.userref]: the orders user reference id
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
Nr  r  r  r  r  r   z cancelOrder() error r=  )r  rz  r  r9  privatePostCancelOrderr  	Exceptionlast_http_responser{  r(   r8   r  )	r  r8   r  rM  rk  	requestIdr  r  es	            r  cancel_orderkraken.cancel_order{	  s!    	OOFIr:	69-I
 **6?KP$#0K YYv'EFFii0G	224;;w3OPH H 
  	  	&&**//0FG1L'2I(IDLcLc(cddG		s   = B0 0
D:ADDr  c                 r    SU0nU R                  U R                  XC5      5      nU R                  SU05      /$ )a  
cancel multiple orders

https://docs.kraken.com/rest/#tag/Spot-Trading/operation/cancelOrderBatch

:param str[] ids: open orders transaction ID(txid) or user reference(userref)
:param str symbol: unified market symbol
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
rp  r=  )privatePostCancelOrderBatchr  r  )r  r  r  rM  r  rk  s         r  cancel_orderskraken.cancel_orders	  sM     c
 33DKK4PQ OO 
 	
r  c                 l    U R                  5         U R                  U5      nU R                  SU05      /$ )ax  
cancel all open orders

https://docs.kraken.com/rest/#tag/Spot-Trading/operation/cancelAllOrders

:param str symbol: unified market symbol, not used by kraken cancelAllOrders(all open orders are cancelled)
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
r=  )r  privatePostCancelAllr  )r  r  rM  rk  s       r  cancel_all_orderskraken.cancel_all_orders	  sB     	,,V4 OO 
 	
r  timeoutc                     US:  a  [        U R                  S-   5      eU R                  5         SUS:  a  U R                  US-  5      OS0nU R	                  U R                  X25      5      nU$ )aD  
dead man's switch, cancel all orders after the given timeout

https://docs.kraken.com/rest/#tag/Spot-Trading/operation/cancelAllOrdersAfter

: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
i \&zG cancelAllOrdersAfter timeout should be less than 86400000 millisecondsr#  r   r@   )r#   r8   r  r  privatePostCancelAllOrdersAfterr  )r  r#  rM  r  rk  s        r  cancel_all_orders_afterkraken.cancel_all_orders_after	  ss     XTWW'ppqqw{))'D.9QR
 77G8TU r  c                    U R                  5         0 nUb  U R                  US-  5      US'   U R                  US5      nUb  XeS'   U R                  US5      nU R	                  US5      nUb  XuS'   U R                  US5      nU R                  U R                  XT5      5      nSn	Ub  U R                  U5      n	U R                  US0 5      n
U R                  U
S0 5      n/ n[        UR                  5       5      n[        S	[        U5      5       H.  nX   nX   nUR                  U R                  S
U0U5      5        M0     U R                  XX#5      $ )aF  
fetch all unfilled currently open orders

https://docs.kraken.com/api/docs/rest-api/get-open-orders

:param str [symbol]: unified market symbol
:param int [since]: the earliest time in ms to fetch open orders for
:param int [limit]: the maximum number of  open orders structures to retrieve
:param dict [params]: extra parameters specific to the exchange API endpoint
:param str [params.clientOrderId]: the orders client order id
:param int [params.userref]: the orders user reference id
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
Nr@   r  r  r  r  r  r  r   r8   )r  r  r  r  rF  privatePostOpenOrdersr  rR  rA  rB  rC  rD  rE  r>  rs  )r  r  r  r  rM  r  r  r  rk  rR  r  r  rp  r  rQ  r8   r  s                    r  fetch_open_orderskraken.fetch_open_orders	  sU    	#00>GG##FI6!(IYYvy1F((A$#0K YYv7F--dkk'.JKL [[(F(B7~~ffb1		$q#h-(AB8DMM$++tRj$78 )   >>r  c                    U R                  5         0 nUb  U R                  US-  5      US'   U R                  US5      nUb  XeS'   U R                  US5      nU R	                  US5      nUb  XuS'   U R                  US5      nU R                  SXT5      u  pTU R                  U R                  XT5      5      nSn	Ub  U R                  U5      n	U R                  US0 5      n
U R                  U
S	0 5      n/ n[        UR                  5       5      n[        S
[        U5      5       H.  nX   nX   nUR                  U R                  SU0U5      5        M0     U R                  XX#5      $ )a  
fetches information on multiple closed orders made by the user

https://docs.kraken.com/api/docs/rest-api/get-closed-orders

:param str [symbol]: unified market symbol of the market orders were made in
:param int [since]: the earliest time in ms to fetch orders for
:param int [limit]: the maximum number of order structures to retrieve
:param dict [params]: extra parameters specific to the exchange API endpoint
:param int [params.until]: timestamp in ms of the latest entry
:param str [params.clientOrderId]: the orders client order id
:param int [params.userref]: the orders user reference id
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
Nr@   r  r  r  r  r  r  r  r   r8   )r  r  r  r  rF  handle_until_optionprivatePostClosedOrdersr  rR  rA  rB  rC  rD  rE  r>  rs  )r  r  r  r  rM  r  r  r  rk  rR  r  r  rp  r  rQ  r8   r  s                    r  fetch_closed_orderskraken.fetch_closed_ordersG
  si    	#00>GG##FI6!(IYYvy1F((A$#0K YYv7F225'J//G0LMP [[(F(B7"5&q#h-(AB:DMM$++tRj$78 )   >>r  c                 8    SSSSSSS.nU R                  X!U5      $ )Nr  re  failed)InitialPendingSuccessSettledFailurePartialr  r  s      r  parse_transaction_statuskraken.parse_transaction_status
  s2     !  
 &99r  c                 `    U R                  U R                  S0 5      nU R                  X!U5      $ )Nr  )rz  r  rF  )r  networkr  s      r  parse_networkkraken.parse_network
  s,    //$,,8I2N'BBr  r  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U R                  Xb5      nU R                  US5      nU R                  US5      n	U R	                  U R                  US5      5      n
U R                  US5      nUS	:H  nUS
:H  nUS:H  nU(       d  U(       d  U(       a  Sn
U R                  US5      nU R                  US5      nUc  US:X  a  Sn0 SU_SU_SU_SU	_SU R                  U R                  US5      5      _SU_SS _SS _SS _SS _SS _SU
_SU_SS _SU_SU_SU R                  U5      _S S UUS.S.E$ )Nr  r  r  r  r=  r  r#  zstatus-propzon-holdzcancel-pendingonholdr  r-  r  rx  r   r8   r_  r<  address	addressToaddressFromtagtagTotagFromrg  r  r  )r_  r4  )commentinternalr  )rF  r  rG  rK  r9  r=  r  )r  r  r_  r8   r  r  r  rw  rA  r  r#  
statusPropisOnHoldDepositisCancellationRequestisOnHoldWithdrawalr-  r  s                    r  parse_transactionkraken.parse_transaction
  s    z k73V4''V<	%%k7;
&&z<"";7!!+x8..t/?/?X/VW%%k=A
$	1 *.> >'8337IFV4"";6?y 
K
"
 
 f	

 t))$*:*:;	*RS
 w
 
 4
 4
 T
 t
 f
 D
 t
 D
  !
" Y/#
$  )
 	
r  c                     / n[        S[        U5      5       H9  nU R                  U R                  SU0X'   5      5      nUR	                  U5        M;     U R                  XcXE5      $ )Nr   r-  )rD  rE  rM  r  r>  filter_by_currency_since_limit)	r  r-  transactionsrw  r  r  r  rQ  r  s	            r  parse_transactions_by_type!kraken.parse_transactions_by_type  sj    q#l+,A00>2  !K MM+&	 -
 226NNr  c                    U R                  5         0 nUb  U R                  U5      nUS   US'   Ub+  U R                  U5      n[        R                  " US5      US'   U R                  USS/5      nUbE  U R                  USS/5      n[        R                  " US5      n	[        R                  " U	S5      US'   U R                  U R                  XT5      5      n
U R                  S	U
S
   XU5      $ )av  
fetch all deposits made to an account

https://docs.kraken.com/rest/#tag/Funding/operation/getStatusRecentDeposits

:param str code: unified currency code
:param int [since]: the earliest time in ms to fetch deposits for
:param int [limit]: the maximum number of deposits structures to retrieve
:param dict [params]: extra parameters specific to the exchange API endpoint
:param int [params.until]: timestamp in ms of the latest transaction entry
:param int [params.end]: timestamp in seconds of the latest transaction entry
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
r8   r  r  r  r  r  r0  r  rx  r  )r  r_  r  r2   rI  r  r  r  privatePostDepositStatusr  rR  )r  rw  r  r  rM  r  r_  sinceStringr  r  rk  s              r  fetch_depositskraken.fetch_deposits  s     	}}T*H'~GG//6K&11+vFGG""6GV+<=YYv'89F"--eV<L$//cBGEN00W1MN ..y(8:Ld[`aar  c                 n    U R                  U5      nU R                  US0 5      nU R                  US5      $ )a?  
fetches the current integer timestamp in milliseconds from the exchange server

https://docs.kraken.com/rest/#tag/Spot-Market-Data/operation/getServerTime

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns int: the current integer timestamp in milliseconds from the exchange server
r  unixtime)publicGetTimerz  r  )r  rM  rk  r  s       r  
fetch_timekraken.fetch_timeG  s;     %%f- 8R8""6:66r  c           	         U R                  5         SnU R                  USS5      u  pTU(       a  SUS'   U R                  SXX4SS5      $ 0 nUb  U R                  U5      nUS   US	'   Ub+  U R	                  U5      n[
        R                  " US
5      US'   U R                  USS/5      n	U	bE  U R                  USS/5      n[
        R                  " U	S
5      n
[
        R                  " U
S5      US'   U R                  U R                  Xd5      5      nSnU R                  US5      n[        U[        5      (       d  U R                  U5      nOUnU R!                  SXX#5      $ )a  
fetch all withdrawals made from an account

https://docs.kraken.com/rest/#tag/Funding/operation/getStatusRecentWithdrawals

:param str code: unified currency code
:param int [since]: the earliest time in ms to fetch withdrawals for
:param int [limit]: the maximum number of withdrawals structures to retrieve
:param dict [params]: extra parameters specific to the exchange API endpoint
:param int [params.until]: timestamp in ms of the latest transaction entry
:param int [params.end]: timestamp in seconds of the latest transaction entry
:param boolean [params.paginate]: default False, when True will automatically paginate by calling self endpoint multiple times
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
Fr   r  Tcursornext_cursorNr8   r  r  r  r  r  r0  r  r  r  )r  r  fetch_paginated_call_cursorr_  r  r2   rI  r  r  r  privatePostWithdrawStatusr  rz  r5  rB  add_pagination_cursor_to_resultrR  )r  rw  r  r  rM  r  r  r_  rV  r  r  rk  rawWithdrawalsr  s                 r  fetch_withdrawalskraken.fetch_withdrawals^  so    	88ASU_`#F8334FUZdqs{||}}T*H'~GG//6K&11+vFGG""6GV+<=YYv'89F"--eV<L$//cBGEN11$++g2NON 84&$''!AA&IN#N..|^SX``r  c                     U R                  US5      nU R                  US5      n[        U5      nUb  US:  a  X4S-
     nX%S'   XSUS-
  '   U$ )Nr`  withdrawalsr   r   )rF  rz  rE  )r  r  r_  data
dataLengthr  s         r  rc  &kraken.add_pagination_cursor_to_result  s^    !!&-8v}5Y
*q.Q'D"(#'a r  c                 J    SS0nU R                  XR                  X25      5      $ )a_  
create a currency deposit address

https://docs.kraken.com/rest/#tag/Funding/operation/getDepositAddresses

:param str code: unified currency code of the currency for the deposit address
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
r  r  )fetch_deposit_addressr  )r  rw  rM  r  s       r  create_deposit_addresskraken.create_deposit_address  s,     6
 ))$G0LMMr  c                     U R                  5         U R                  U5      nSUS   0nU R                  U R                  XB5      5      nU R	                  US5      $ )a  
fetch deposit methods for a currency associated with self account

https://docs.kraken.com/rest/#tag/Funding/operation/getDepositMethods

:param str code: unified currency code
:param dict [params]: extra parameters specific to the kraken api endpoint
:returns dict: of deposit methods
r  r8   r  )r  r_  privatePostDepositMethodsr  rz  )r  rw  rM  r_  r  rk  s         r  fetch_deposit_methodskraken.fetch_deposit_methods  s\     	==&Xd^
 11$++g2NO0 x22r  c                    U R                  5         U R                  U5      nU R                  US5      nU R                  U R                  S0 5      nU R                  XTU5      nU R                  US5      nUS:X  a  US:X  a  US-   U-   nU R                  U R                  S0 5      nU R                  Xa5      nU R                  USU5      nUc  U R                  U5      n	UbI  [        S[        U	5      5       H0  n
U R                  X   S5      nUR                  U5      S:  d  M.  Un  O   Uc%  U R                  U	S0 5      nU R                  US5      nUS	   US
.nU R                  U R                  X5      5      nU R                  US/ 5      nU R                  US0 5      nUc  [        U R                  S-   U-   5      eU R                  UU5      $ )a[  
fetch the deposit address for a currency associated with self account

https://docs.kraken.com/rest/#tag/Funding/operation/getDepositAddresses

:param str code: unified currency code
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
r<  r  rv  r  r  r  r  r   r8   )r  r  r  z9 privatePostDepositAddresses() returned no addresses for )r  r_  safe_string_upperrz  r  rF  r  rr  rD  rE  r{  privatePostDepositAddressesr  r&   r8   parse_deposit_address)r  rw  rM  r_  r<  r  defaultDepositMethodsdefaultDepositMethoddepositMethodr  rQ  entryfirstDepositMethodr  rk  r  firstResults                    r  rm  kraken.fetch_deposit_address  s    	==&((;??4<<R@""8g>69-FNG!3#:'D $>NPR S#//0EL((;OP  !77=N"q#n"56A ,,^->IEzz'*a/(-	 7 $%)__^Q%K" $ 0 01CX Nd^#
 33DKK4PQ 8R8oofa4 +f!fim!mnn))+x@@r  c                     U R                  US5      nU R                  US5      nU R                  S U5      nUS   nU R                  U5        UUS UUS.$ )NrA  rD  rw  )r=  r_  r<  rA  rD  )rF  r  check_address)r  depositAddressr_  rA  rD  rw  s         r  rw  kraken.parse_deposit_address'  sk     "">9=~u5%%dH57#"
 	
r  rA  rD  c                 z   U R                  XE5      u  pESU;   a  U R                  5         U R                  U5      nUS   US.nUb  US:w  a  X7S'   U R                  U5        U R	                  U R                  Xu5      5      nU R                  US0 5      n	U R                  X5      $ [        U R                  S-   5      e)a  
make a withdrawal

https://docs.kraken.com/rest/#tag/Funding/operation/withdrawFunds

:param str code: unified currency code
:param float amount: the amount to withdraw
:param str address: the address to withdraw to, not required can be '' or None/none/None
:param str tag:
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
r  r8   )r  r  rd  rA  r  zO withdraw() requires a 'key' parameter(withdrawal key name, up on your account))
handle_withdraw_tag_and_paramsr  r_  r  privatePostWithdrawr  rA  rM  r   r8   )
r  rw  r  rA  rD  rM  r_  r  rk  r  s
             r  r   kraken.withdraw;  s     99#FF?}}T*H!$ G
 "w"}%,	"""7+//G0LMH ^^Hh;F))&;;DGG&wwxxr  c                     U R                  5         SSS.nU R                  U R                  X25      5      nU R                  U5      nU R	                  US5      nU R                  XQ5      nU R                  USUS5      $ )aP  
fetch all open positions

https://docs.kraken.com/rest/#tag/Account-Data/operation/getOpenPositions

:param str[] [symbols]: not used by kraken fetchPositions()
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: a list of `position structure <https://docs.ccxt.com/#/?id=position-structure>`
r  rR  )docalcsconsolidationr  r  F)r  privatePostOpenPositionsr  r  rH  parse_positionsfilter_by_array_positions)r  r  rM  r  rk  r  resultss          r  fetch_positionskraken.fetch_positionsa  s     	 %

 00W1MN\ %%g.(3&&v7--gx%PPr  positionc                    U R                  US5      nU R                  US5      nUS:X  a  SOSnU R                  0 SU_SS _SU R                  X25      _S	S _S
S _SS _SS _SU R                  US5      _SS _SS _SU R                  US5      _SS _SS _SS _SU_SS _SS _S S S S S U R                  US5      S U R                  US5      S S S S.E5      $ )Nr  r-  r*  longshortr=  r8   r  notionalr  liquidationPrice
entryPriceunrealizedPnlnetrealizedPnlr   	contractsr.  r6  	markPrice	lastPricer0  r  r  rF   r  )r  lastUpdateTimestampmaintenanceMarginmaintenanceMarginPercentage
collateralinitialMargininitialMarginPercentager  marginRatior  r  )rF  safe_positionr  rK  )r  r  rR  r?  rawSider0  s         r  parse_positionkraken.parse_position  s}    ##Hf5""8V4!U*v!! #
H#
$#
 d&&x8#
 	#

 $#
 #
 $#
 T--h>#
 4#
 $#
 ))(E:#
 D#
 #
 #
 D#
  d!#
" ##
$ #'!%+/!--hA'+((:>!#9#
  	r  c                 2    SSSS.nU R                  X!U5      $ )NSpot WalletzFutures Walletr  r  )r  r  accountByTypes      r  parse_account_typekraken.parse_account_type  s'    !$&

 @@r  c                 *    U R                  XSSU5      $ )aM  
transfer from spot wallet to futures wallet

https://docs.kraken.com/rest/#tag/User-Funding/operation/walletTransfer

: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>`
rE   rG   )r   )r  rw  r  rM  s       r  transfer_outkraken.transfer_out  s     }}T666BBr  fromAccount	toAccountc                    U R                  5         U R                  U5      nU R                  U5      nU R                  U5      nU R                  X5      UUUS   S.nUS:w  a$  [	        U R
                  S-   U-   S-   U-   S-   5      eU R                  U R                  Xu5      5      nU R                  X5      n	U R                  U	UUUS.5      $ )a  

https://docs.kraken.com/rest/#tag/User-Funding/operation/walletTransfer

transfers currencies between sub-accounts(only spot->swap direction is supported)
:param str code: Unified currency code
:param float amount: Size of the transfer
:param str fromAccount: 'spot' or 'Spot Wallet'
:param str toAccount: 'swap' or 'Futures Wallet'
:param dict [params]: Exchange specific parameters
:returns: a `transfer structure <https://docs.ccxt.com/#/?id=transfer-structure>`
r8   )r  fromtor  r  z transfer cannot transfer from z to zA. Use krakenfutures instead to transfer from the futures account.)r  r  r  )	r  r_  r  currency_to_precisionr#   r8   privatePostWalletTransferr  parse_transfer)
r  rw  r  r  r  rM  r_  r  rk  r   s
             r  r   kraken.transfer  s     	==&--k:++I6	00>d^	
 -'TWW'HH;VY__bkk  or  r  s  s11$++g2NO &&x:{{8&"&
  	r  r   c           
          U R                  US0 5      nU R                  US5      nUUS S U R                  US5      S S S SS.	$ )Nr  r  rw  sucess)	r=  r8   r  r  r_  r  r  r  r#  )rz  rF  )r  r   r_  r  r  s        r  r  kraken.parse_transfer  sZ     8R8  1((6:

 
	
r  r   GETc                    SU R                   -   S-   U-   S-   U-   nUS:X  a   U(       a  USU R                  U5      -   -  nGOUS:X  Gau  U R                  US5      nSn	Ub  UR                  S5      (       a  SOSn	US	:H  n
US
:H  nU R	                  5         [        U R                  5       5      nU
(       d  U	(       d  U(       a$  U R                  U R                  SU0U5      5      nO#U R                  U R                  SU0U5      5      nU R                  X-   5      nU R                  USS5      nU R                  U5      nU R                  X5      nU R                  U R                  5      nU R                  UU[        R                   S5      nU R"                  US.nU
(       d  U	(       d  U(       a  SUS'   OSUS'   OSU-   nU R$                  S   U   U-   nXsXeS.$ )Nr'  r   ?r   r/  Fr  Tr   r   noncesha256binarybase64)zAPI-KeyzAPI-Signzapplication/jsonzContent-Typez!application/x-www-form-urlencodedr   )ri  r  bodyheaders)r=   urlencode_nestedrF  r  check_required_credentialsr6  r  jsonr  encodehashbinary_concatbase64_to_binarysecrethmachashlibsha512apiKeyr   )r  pathr   r  rM  r  r  ri  r/  isTriggerPercentisCancelOrderBatchisBatchOrderr  authr  r  binhashr  	signatures                      r  signkraken.sign-  s   DLL 3&,s2T9(?sT226:::I$$VW5E$ ,1NN3,?,?4e "&*<"< O3L++-

%E!%5yygu-=v!FG,,T[['59I6-RS;;u|,D99T8X6D[[%F((6G**4;;7F		'67>>8LI;;%G "%5*<'*M'*Ciis#c)dOOr  c                 B    U R                  5       U R                  S   -
  $ )Nr  )millisecondsr  )r  s    r  r  kraken.nonceT  s       "T\\2B%CCCr  reasonri  r  r  c
                 F   US:X  a*  [        U R                  S-   [        U5      -   S-   U-   5      eUc  g US   S:X  Gac  [        U[        5      (       GdM  U R                  S-   U-   n
SU;   a  [	        US   5      nU(       ap  [        S[	        US   5      5       HI  nUS   U   nU R                  U R                  S   X5        U R                  U R                  S   X5        MK     [        U
5      eSU;   a  U R                  US0 5      nS	U;   a  U R                  US	/ 5      n[        S[	        U5      5       He  nX   nU R                  US5      nUc  M  U R                  U R                  S   X5        U R                  U R                  S   X5        [        U
5      e   g )
Ni  r  r   {errorr  r  r  rp  )r,   r8   r6  r5  rE  rD  throw_exactly_matched_exceptionr  throw_broadly_matched_exceptionr   rA  rH  rF  )r  rw  r  ri  r  r  r  rk  requestHeadersrequestBodymessage	numErrorsrQ  r  r  rp  r3  s                    r  handle_errorskraken.handle_errorsW  s   3;&tww}s4y'@3'F'OPP7c>h,,''C-$.h& #HW$5 6I !&q#hw.?*@!AA$,W$5a$8E @@QXAY[`j @@QXAY[`j "B ,G44x'!^^HhCF6)!%"!E!&q#f+!6A$*IE$($4$4UG$DE$0 $ D DT__U\E]_d n $ D DT__U\E]_d n&3G&< < "7 r   )N)r   r   r  )NNN)g__name__
__module____qualname____firstlineno__r   r	  r  r   r   rb  rm  r   r  r   r   rG  r6  r   r  r  r
   r  r   r   r  dictr   r  r   r   r  r  rB  r  r  r  r   r  r  r"  r%  r   rA  rJ  r   rS  rW  r   floatr\  r_  r   r   rZ  r   rx  r7  r8  r  r  r   rk  ri  r  r  r	  r  r  r  r  r!  r&  r*  r/  r9  r=  r   rM  rR  rW  r\  re  rc  r	   rn  rr  rm  rw  r   r   r  r  r  r  r   r   r  r  r  intr  __static_attributes____classcell__)r  s   @r  r4   r4   "   s   b# bHy $& [$v, [z #% 
4 ') wZ wr	LS 	LH 	LPS 	L 	L 57 /6 /6;N /6b
*i *	 *en * :>b .8s .83 .8Y .8`/4 / /6 /b 04B GW G7 GB 02 13 1f 1&
 
4 
, 9=4^bkm 0J# 0J# 0JS 0JX[ 0Jrvw{r| 0Jd33t 3x 3; 3j (,$TZ\ /@ /@C /@s /@aefqar /@b <@ (S (6 7;2 S  + L Lv L L\ 6:UW .?3 .?s .?# .?\`af\g .?`) )$ $& ,( ,8 _a _C _y _PU _& RT O O5 O gksu 2(3 2(i 2(y 2(RW 2(`c 2(h @B CCD$6 CCJ(B: :	:n nv n n` kowy b!C b! b!C b!$ b!X[ b!dg b!H `drv  @B @0S @0# @0Y @0i @0Y\ @0lo @0D 26b ?Ec ?E3 ?EB 9=4^bkm GS G# GS GX[ GR 6:" s 4 -1tRV_a A?c A? A?C A?F 37r *s *C *X ;?r 
c 
C 
: /32 
 
4 <> s 8 /3TXac K? K?3 K?c K?hlmrhs K?Z 154VZce O?# O?S O?PS O?jnotju O?b
:s 
:Ch
T h
X h
Q\ h
TO3 OVY Oil O *.Dt\^ *b3 *bc *b *bcghsct *bX !# 7s 7. -1tRV_a Nac Na NaC Nafjkvfw Na` 8: N3 Nn N 79 '3# '3R 79 5A# 5A^ 5An
h 
R` 
( KOWY $yS $y% $y# $yC $y^i $yL 26b AQw AQT(^ AQF.t .V .`A 68 C C [] (S (% (c (c (an (T
t 
x 
= 
4 &eBSW %PND# s  c TX `c  r  r4   )9ccxt.base.exchanger   ccxt.abstract.krakenr   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,   r-   r.   r/   ccxt.base.decimal_to_precisionr0   r1   ccxt.base.preciser2   r4   r  r  r  <module>r     s    ( ,  Q  Q  Q  Q  Q  Q  Q  * 0 - - . ' & . + ) * ) + . 1 * ) * 3 4 %Q5X{ Q5r  