
    E#i                    @   S SK Jr  S SKJr  S SKrS SKJrJrJrJ	r	J
r
JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  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\\5      r-g)    )Exchange)ImplicitAPIN)AnyBalances
CurrenciesCurrencyDepositAddressIntMarginModificationMarketNumOrder	OrderBook	OrderSide	OrderTypeStrStringsTickerTickers
OrderBooksTradeTradingFeesTransaction)List)ExchangeError)AuthenticationError)PermissionDenied)ArgumentsRequired)
BadRequest)InsufficientFunds)InvalidOrder)OrderNotFound)RateLimitExceeded)OnMaintenance)InvalidNonce)	TICK_SIZE)Precisec                   X  ^  \ rS rSrS\4U 4S jjr0 4S\4S jjrSYS\S\	S\
4S	 jjr0 4S\S
\S\
4S jjr0 4S\S
\S\
4S jjr0 4S\4S jjr0 4S jr0 4S jrS rS0 4S\4S jjrS0 4S\4S jjrSYS\4S jjr0 4S\4S jjr0 4S\\	   4S jjrSSS0 4S\S\S\S\S\\   4
S jjrSYS\	S\4S jjr S\!4S jr"0 4S\!4S jjr#S0 4S\S\S\$4S  jjr%SS0 4S!\S\S\&4S" jjr'SYS#\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,SYS'\S\	S\-4S( jjr.SS0 4S\S\S\S\\-   4S) jjr/SSS0 4S\0S\S\4S* jjr10 4S\S+\2S,\4S- jjr30 4S\S,\4S. jjr40 4S\S,\4S/ jjr5S0 4S\S0\6S+\2S
\S1\74
S2 jjr8S0 4S3\S\04S4 jjr9S0 4S3\S\04S5 jjr:SSS0 4S3\S\0S\S\4S6 jjr;SSS0 4S\0S\S\S\\<   4S7 jjr=S8 r>S9 r?SYS:\S\	S\<4S; jjr@SSS0 4S\0S\S\4S< jjrASS0 4S3\S\S0\6S+\2S
\7S1\74S= jjrB0 4S>\S\C4S? jjrDS@ rES0 4S>\S
\SA\SB\0S\F4
SC jjrGSD\04SE jrHSYSF\S\S\F4SG jjrISSS0 4S>\0S\S\S\\F   4SH jjrJSSS0 4S>\0S\S\S\\F   4SI jjrKS0 4S3\S>\04SJ jjrLS0 4S3\S>\04SK jjrMSSS0 4S>\0S\S\S\\F   4SL jjrNSMSN0 SS4SO jrOSP rPSQ\QSR\SS\ST\SU\SV\4SW jrRSXrSU =rT$ )Zexmo   returnc                 r  > U R                  [        [        U ]  5       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_S)S_S*S_E0 S+S_S,S_S-S_S.S_S/S_S0S_S1S_S2S_S3S%_S4S_S5S_S6S_S7S_S8S_S9S_S:S_S;S_E0 S<S_S=S_S>S_S?S_S@S_SAS_SBS_SCS_SDS%_SES_SFS_SGS_SHS_SIS_SJS_SKS_SLS_ESMSNSOSPSQSRSSSTSUSVSWSXSY.SZS[S[S\S].S\S^S_/S`Sa.SbScSd/0Sb/ SeQ0Sf/ SgQ0Sh.SbSSU R	                  Si5      U R	                  Si5      Sj.SSSk.Sl.SmSnSo.SpSq0SrS0Ss.SSSS SSSS SSSSSt.SSSSSSSSu.S SSS S SSv.SSSSSw.SS SSSSx.S S SySz0S{.	S S S|.S S S|.S}.S~S0[
        0 S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        0E[        [        [        S.S.S.5      $ )Nr)   EXMOLTd   zv1.1CORSspotTmarginswapFfutureoption	addMargincancelOrdercancelOrderscreateDepositAddresscreateMarketBuyOrdercreateMarketBuyOrderWithCostcreateMarketOrderWithCostcreateOrdercreateStopLimitOrdercreateStopMarketOrdercreateStopOrder	editOrderfetchAccountsfetchBalancefetchCanceledOrdersfetchCurrenciesfetchDepositfetchDepositAddressfetchDepositAddressesfetchDepositAddressesByNetworkfetchDepositsfetchDepositsWithdrawalsfetchDepositWithdrawFeeemulatedfetchDepositWithdrawFeesfetchFundingHistoryfetchFundingRatefetchFundingRateHistoryfetchFundingRatesfetchIndexOHLCVfetchMarginModefetchMarketsfetchMarkOHLCVfetchMyTrades
fetchOHLCVfetchOpenInterestHistoryfetchOpenOrders
fetchOrderfetchOrderBookfetchOrderBooksfetchOrderTradesfetchPositionfetchPositionHistoryfetchPositionModefetchPositionsfetchPositionsHistoryfetchPositionsRiskfetchPremiumIndexOHLCVfetchTickerfetchTickersfetchTradesfetchTradingFeefetchTradingFeesfetchTransactionFeesfetchTransactionsfetchTransferfetchTransfersfetchWithdrawalfetchWithdrawalsreduceMargin	setMargintransferwithdraw1515304560120180240DWM)1m5m15m30m45m1h2h3h4h1d1w1Mzchttps://user-images.githubusercontent.com/1294454/27766491-1b0ea956-5eda-11e7-9225-40d67b481b8d.jpgzhttps://api.exmo.comzhttps://exmo.me)publicprivatewebzhttps://exmo.me/?ref=131685z%https://exmo.me/en/api_doc?ref=131685zhttps://exmo.com/en/docs/fees)logoapiwwwreferraldocfeesgetzctrl/feesAndLimitszen/docs/fees)	currencyzcurrency/list/extended
order_bookpair_settingstickertradescandles_historyrequired_amountzpayments/providers/crypto/listpost)(	user_infoorder_createorder_cancelstop_market_order_createstop_market_order_canceluser_open_ordersuser_tradesuser_cancelled_ordersorder_tradesdeposit_addresswithdraw_cryptwithdraw_get_txidexcode_createexcode_load
code_checkwallet_historywallet_operationszmargin/user/order/createzmargin/user/order/updatezmargin/user/order/cancelzmargin/user/position/closezmargin/user/position/margin_addz"margin/user/position/margin_removezmargin/currency/listzmargin/pair/listzmargin/settingszmargin/funding/listzmargin/user/infozmargin/user/order/listzmargin/user/order/historyzmargin/user/order/tradeszmargin/user/order/max_quantityzmargin/user/position/listz'margin/user/position/margin_remove_infoz$margin/user/position/margin_add_infozmargin/user/wallet/listzmargin/user/wallet/historyzmargin/user/trade/listzmargin/tradeszmargin/liquidation/feed)r   r   r   z0.004)feeSide	tierBased
percentagemakertaker)r   r   )tradingtransactionERC20TRC20)ETHTRXmethodfetchPrivateTradingFeesfillResponseFromRequest)networksrj   r2   )IOCFOKPOGTD)
marginModetriggerPricetriggerPriceTypetriggerDirectionstopLossPricetakeProfitPriceattachedStopLossTakeProfittimeInForcehedgedselfTradePreventiontrailingleveragemarketBuyByCostmarketBuyRequiresPriceiceberg)r   limitdaysBack	untilDayssymbolRequired)r   triggerr   r   )r   r   r   r   r   r     )	sandboxr=   createOrdersrW   r[   rZ   fetchOrdersfetchClosedOrdersrX   )linearinverse)r1   r3   r4   GMTz	GMT Token14033314043440005400094001540016400174003240033400345005250054503045017350277503195032150381)zrange period is too longzinvalid syntaxzAPI rate limit exceeded)exactbroad)idname	countries	rateLimitversionhas
timeframesurlsr   r   optionsfeaturescommonCurrenciesprecisionMode
exceptions)deep_extendsuperr)   describeparse_numberr&   r!   r   r   r%   r   r$   r   r#   r    r"   )self	__class__s    C/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/exmo.pyr  exmo.describe   s   dD : <EEE $E 	E
 %E %E TE tE E 'E 'E /E ,TE tE 'E  (!E" "4#E$ T%E&  'E( )E* &t+E, "4-E. /E0 &t1E2 (3E4 1%5E6  7E8 +D9E: *:;E< +D=E> &u?E@ #EAEB *5CED $UEEF "5GEH "5IEJ KEL !%MEN  OEP dQER +ESET "4UEV jWEX !$YEZ "4[E\ #D]E^  _E` 'aEb $UcEd !%eEf (gEh %eiEj )%kEl tmEn oEp tqEr "5sEt #DuEv 'wEx $ZyEz  {E| !%}E~ "4E@ #DAEB CED UEEF EGEH DIEN  ~45,
 )9; 8  ,&  
  )+)@F  %!%"&!..w7!..w7 "'"'  #"
 7% .t  %&*(,,0,1).+06:#'#'"&#'	( #(/4$)$(+/27#()$, %)&*!$$(%)*.& ',#($)*/	# ',!%#($)*/( $()-#_2h ##
 ##q<| {! 'lj 0 \	
 ] ] 0 - - . . . ] ] \  \!" \#$ \%* 1;&0/@+G^?
 ^ ^	    symbolc                    U R                  5         U R                  U5      nUS   US.nS nUS:X  a!  U R                  U R                  Xd5      5      nO&US:X  a   U R	                  U R                  Xd5      5      nU R                  Xu5      nU R                  U R                  S0 5      n	U R                  U	SS5      n
U
(       a  X8S'   X(S	'   U$ )
Nr   )position_idquantityaddreducer2   r   Ttypeamount)	load_marketsmarket&privatePostMarginUserPositionMarginAddextend)privatePostMarginUserPositionMarginRemoveparse_margin_modification
safe_valuer   	safe_bool)r  r	  r  r  paramsr  requestresponser2   r   r   s              r  modify_margin_helperexmo.modify_margin_helper=  s    V$!$<
 5=BB4;;wC_`HXEEdkkRYFbcH //A//$,,"="&..:SUY"Z"!6N%8r  Ndatar  c                 \    UU R                  S U5      S SS S U R                  US5      SS S S.
$ )Nisolatedquoteok)
infor	  r  r   r  totalcodestatus	timestampdatetime)safe_symbolr  )r  r  r  s      r  r  exmo.parse_margin_modificationT  sD    
 &&tV4$OOFG4
 	
r  r  c                 (    U R                  XSU5      $ )a  
remove margin from a position

https://documenter.getpostman.com/view/10287440/SzYXWKPi#eebf9f25-0289-4946-9482-89872c738449

:param str symbol: unified market symbol
:param float amount: the amount of margin to remove
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `margin structure <https://docs.ccxt.com/#/?id=reduce-margin-structure>`
r  r  r  r	  r  r  s       r  reduce_marginexmo.reduce_margine  s     ((6JJr  c                 (    U R                  XSU5      $ )af  
add margin

https://documenter.getpostman.com/view/10287440/SzYXWKPi#143ef808-79ca-4e49-9e79-a60ea4d8c0e3

:param str symbol: unified market symbol
:param float amount: amount of margin to add
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `margin structure <https://docs.ccxt.com/#/?id=add-margin-structure>`
r  r,  r-  s       r  
add_marginexmo.add_marginr  s     ((GGr  c                     U R                  U R                  S0 5      nU R                  USS5      nU R                  USU5      nU R                  US5      nUS:X  a  U R	                  U5      $ U R                  U5      $ )a  
fetch the trading fees for multiple markets

https://documenter.getpostman.com/view/10287440/SzYXWKPi#90927062-256c-4b03-900f-2b99131f9a54
https://documenter.getpostman.com/view/10287440/SzYXWKPi#7de7e75c-5833-45a8-b937-c2276d235aaa

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
rj   r   r   )r  r   safe_stringomitfetch_private_trading_feesfetch_public_trading_fees)r  r  r   defaultMethodr   s        r  fetch_trading_feesexmo.fetch_trading_fees  s     //$,,0BBG(((<UV!!&(MB68,..226::11&99r  c                    U R                  5         U R                  U5      nU R                  US/ 5      n0 n[        S[	        U5      5       H  nX5   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                  [        R                  " U	S5      5      nU R                  [        R                  " U
S5      5      nUUUUSSS	.XH'   M     U$ )
Npairsr   r   _trade_maker_feetrade_taker_fee100Tr#  r	  r   r   r   r   )
r  privatePostMarginPairListr  rangelenr4  r)  r  r'   
string_div)r  r  r  r<  resultipairmarketIdr	  makerStringtakerStringr   r   s                r  r6  exmo.fetch_private_trading_fees  s    11&9< '26q#e*%A8D''f5H%%hc:F**41BCK**41BCK%%g&8&8e&LME%%g&8&8e&LME "!FN &  r  c                    U R                  5         U R                  U5      n0 n[        S[        U R                  5      5       H  nU R                  U   nU R                  U5      nU R                  X&S   0 5      nU R                  US5      nU R                  US5      n	U R                  [        R                  " US5      5      n
U R                  [        R                  " U	S5      5      nUUU
USSS.X5'   M     U$ )Nr   r   commission_maker_percentcommission_taker_percentr@  TrA  )r  publicGetPairSettingsrC  rD  symbolsr  r  r4  r  r'   rE  )r  r  r  rF  rG  r	  r  feerJ  rK  r   r   s               r  r7  exmo.fetch_public_trading_fees  s    --f5  q#dll+,A\\!_F[[(F//(4L"=C**30JKK**30JKK%%g&8&8e&LME%%g&8&8e&LME "!FN -  r  c                    Ub  US:X  a  g US:X  a  gUR                  S5      S:  nUR                  S5      nUS   R                  SS5      n[        U5      nUS:  a"  U(       a  [	        U R
                  S-   U-   5      eU$ )N- r   % zN parseFixedFloatValue() detected an unsupported non-zero percentage-based fee )findsplitreplacefloatr   r   )r  inputisPercentagepartsvaluerF  s         r  parse_fixed_float_valueexmo.parse_fixed_float_value  s    Mu|B;

31,C a  b)uQJL*z z  ~C  !C  D  Dr  codesc                 N   U R                  5         U R                  U5      n0 n[        UR                  5       5      n[	        S[        U5      5       H  nXV   nUb  U R                  Xq5      (       d  M"  SSS.XG'   U R                  U5      nU R                  US5      n	U R                  X9/ 5      n
[	        S[        U
5      5       HC  nX   nU R                  US5      nU R                  US5      nU R                  U5      nXU   U'   ME     XU   S'   M     X@R                  S'   U$ )	a  
@deprecated
       please use fetchDepositWithdrawFees instead

       https://documenter.getpostman.com/view/10287440/SzYXWKPi#4190035d-24b1-453d-833b-37e0a52f88e2

       :param str[]|None codes: list of unified currency codes
       :param dict [params]: extra parameters specific to the exchange API endpoint
       :returns dict: a list of `transaction fees structures <https://docs.ccxt.com/#/?id=fees-structure>`
       r   N)depositrt   r   r  commission_descr#  transactionFees)r  $publicGetPaymentsProvidersCryptoListlistkeysrC  rD  in_arrayr   r4  r  ra  r   )r  rc  r  
cryptoListrF  cryptoListKeysrG  r%  r   
currencyId	providersjprovider	typeInnercommissionDescrR  s                   r  fetch_transaction_feesexmo.fetch_transaction_fees  s.    	>>vF
F joo/0q#n-.A!$D t)C)C FL }}T*H))(D9J
CI1c)n-$< ,,Xv>	!%!1!1(<M!N22>B*-tY' . $-4L # /& +1&'r  c                     U R                  5         U R                  U5      nU R                  X15      nX@R                  S'   U$ )aj  
fetch deposit and withdraw fees

https://documenter.getpostman.com/view/10287440/SzYXWKPi#4190035d-24b1-453d-833b-37e0a52f88e2

:param str[]|None codes: list of unified currency codes
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a list of `transaction fees structures <https://docs.ccxt.com/#/?id=fees-structure>`
rg  )r  rh  parse_deposit_withdraw_feesr   )r  rc  r  r  rF  s        r  fetch_deposit_withdraw_fees exmo.fetch_deposit_withdraw_fees?  sD     	<<VD( 11(B*0&'r  r   c                 0   U R                  U5      n[        S[        U5      5       H  nX   nU R                  US5      nU R                  US5      nU R	                  XpR                  US5      5      nU R                  US5      n	/ n
S nU	b!  U	R                  S5      n
[        U
5      nUS:  nU R                  US   U5      nUc  S S S	.S S S	.S
.US   U'   U R                  U R                  U
S5      5      US	.US   U   U'   M     U R                  U5      $ )Nr   r  r   r%  rf  rW     r   )rR  r   rt   re  )	deposit_withdraw_feerC  rD  r4  network_id_to_coderZ  r  ra  $assign_default_deposit_withdraw_fees)r  rR  r   rF  rG  rq  r  	networkIdnetworkCoders  splitCommissionDescr   splitCommissionDescLengthnetworks                 r  parse_deposit_withdraw_feeexmo.parse_deposit_withdraw_feec  sM   " **3/q#c(#AvH##Hf5D((6:I11)=M=MhX^=_`K!--h8IJN"$J)&4&:&:3&?#,/0C,D)6!;
oofZ&8+FG  $&*!
  $&* 	3z";/ 33D4D4DEXZ[4\](5F:{+D11 $8 88@@r  c                    / nUR                  U R                  U5      5        UR                  U R                  U5      5        UnUS   nUS   n0 n[        S[	        U5      5       GH  nXG   nU R                  US5      n	U R                  U	5      n
Sn0 nU R                  XY5      nUc  SnGOZ[        S[	        U5      5       GH@  nX   nU R                  US5      nUR                  U	S-   S5      nUR                  S	S5      nS
nUR                  US5      nU R                  U5      nUU;  a  UUSSSSSSS.SSS.S./ S.UU'   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U   nUS:X  a  UUS'   UUS   S   S'   UUS   S   S'   O!US:X  a  UUS'   UUS   S   S'   UUS   S   S'   U R                  US5      nUR                  U5        UUS'   UUU'   GMC     U R                  U	U
U R                  US5      USSSSU R                  S5      SSS.SSS.S.UUS.US.5      Xj'   GM     U$ )as  
fetches all available currencies on an exchange

https://documenter.getpostman.com/view/10287440/SzYXWKPi#7cdf0ca8-9ff6-4cf3-aa33-bcec83155c49
https://documenter.getpostman.com/view/10287440/SzYXWKPi#4190035d-24b1-453d-833b-37e0a52f88e2

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an associative dictionary of currencies
r      r   cryptoNfiatrX  rV  ()minmaxr|  )r   r  activere  rt   rR  limitsr#  r  r  r  enabledre  r  rt   r#  description1e-8)r   ro  )r   r%  r   r  r  re  rt   rR  	precisionr  r#  r   )appendpublicGetCurrencyListExtendedrh  rC  rD  r4  safe_currency_code	safe_listr[  r~  r  safe_currency_structurer  )r  r  promises	responsescurrencyListrl  rF  rG  r   rn  r%  r  r   ro  rp  rq  r   r  replaceCharr  rr  minValuemaxValueactiveProvidernetworkEntryr#  s                             r  fetch_currenciesexmo.fetch_currencies  s    ::6BC 	AA&IJ2 	 |q\
q#l+,A#H))(F;J**:6DDHz>I q#i.1A(|H++Hf=D $Z#-=r BI ) 1 1#r :I"%K ) 1 1+r BI"&"9"9)"DK'83"+'2&*'+(,#' ,0+/-"
 ,0+/,"	' %'#1-& !% 0 06 BI#//%@H#//%@H%)^^Hi%HN#+K#8L I-2@Y/CKX.y9%@CKX.y9%@"j03AZ0DLX.z:5ADLX.z:5A>>,?DKK)+/L(,8H[)[ 2\  77 ((=A !..v6  $#!
  $# 	 !)!* %19 FLq -d r  c                    / nUR                  U R                  U5      5        0 nU R                  S5      nU(       a   UR                  U R                  U5      5        UnUS   nU(       a)  US   nU R	                  US5      nU R                  US5      n[        UR                  5       5      n	/ n
[        S[        U	5      5       GH  nX   nXl   nU R                  X<5      nUR                  SS5      nUR                  S5      u  nnU R                  U5      nU R                  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U
R                  0 SU_SU_SU_SU_SS_SU_SU_SS_SS_SS_SUSL_SS_SS_SS_SS_SS_SS_SU R                  [         R"                  " US5      5      U R                  [         R"                  " US5      5      SSSSSU R                  S 5      U R                  U R%                  U R                  US!5      5      5      S".SU R'                  US#5      S$.U R'                  US%5      U R                  [         R(                  " UU5      5      S$.U R'                  US&5      U R'                  US'5      S$.U R'                  US(5      U R'                  US)5      S$.S*.SUS+.E5        GM"     U
$ ),a  
retrieves data on all markets for exmo

https://documenter.getpostman.com/view/10287440/SzYXWKPi#7de7e75c-5833-45a8-b937-c2276d235aaa

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: an array of objects representing market data
Fr   r  r<  r   r=  /rO  rN  max_quantitymax_order_quantityr   r	  baser!  settleNbaseIdquoteIdsettleIdr  r1   Tr2   r3   r4   r5   r  contractr   r@  r  price_precision)r  pricer   r  min_quantity	min_price	max_price
min_amount
max_amount)r   r  r  cost)r   r   r   contractSizeexpiryexpiryDatetimestrike
optionTyper  r  createdr#  )r  rP  check_required_credentialsrB  r  index_byri  rj  rC  rD  	safe_dictr[  rZ  r  r4  r  r'   rE  parse_precisionsafe_number
string_max)r  r  r  marginPairsDictfetchMarginr  spotResponsemarginPairsr<  rj  rF  rG  r   r  marginMarketr	  r  r  r  r!  rK  rJ  maxQuantitymarginMaxQuantitys                           r  fetch_marketsexmo.fetch_markets  s~    226:;  !#55e<OOD::6BC< 	 |#A,KNN;8E"mmE6:OL%%'(q#d)$AB!%F>>/>LZZS)F$ll3/OFG**62D++G4E**63MNK**63MNK**6>BK $ 0 0?S TMM 2b2&2 2 	2
 $2 &2 72 D2 2 2 ,d22 2 %2 %2 $2  E!2" $#2$  **7+=+=k5+QR**7+=+=k5+QR $"&""//7!..t/C/CDDTDTU[]nDo/pq  $#//
C!
  $//G#001C1CKQb1cd
  $//D#//D
  $//E#//E$  c2 2 %~ r  r   	timeframesincer   c                    U R                  5         U R                  U5      nU R                  USS5      nUSLnUS   U R                  U R                  X"5      S.n	Sn
U R                  U5      nU R                  U R                  5       S-  5      nUc7  U(       a  [        X|5      OUnUc  SnO[        XJ5      nXU-  -
  S-
  U	S	'   XS
'   O`U R                  US-  5      U	S	'   U(       a  [        X|5      U	S
'   O3Uc  U
nO[        XJ5      nU R                  X4U-  5      n[        X5      U	S
'   U R                  US5      nU R                  U R                  X5      5      nU R                  US/ 5      nU R                  XX#U5      $ )a  
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market

https://documenter.getpostman.com/view/10287440/SzYXWKPi#65eeb949-74e5-4631-9184-c38387fe53e8

: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 int [params.until]: timestamp in ms of the latest candle to fetch
:returns int[][]: A list of candles ordered, open, high, low, close, volume
untilgMbP?Nr   )r	  
resolutioni  r   r  fromtocandles)r  r  safe_integer_productr4  r   parse_timeframeparse_to_intmillisecondsr  sumr5  publicGetCandlesHistoryr  r  parse_ohlcvs)r  r	  r  r  r   r  r  r  untilIsDefinedr  maxLimitdurationnowr  r  r  s                   r  fetch_ohlcvexmo.fetch_ohlcv  s    	V$))&'5At+Tl**4??IQ
 ''	2 1 1 3d :;=$2UB}E, H$459GFODM"//=GFO #E=$E0EXXeX%56 #B67+//G0LM ..9b9  )EJJr  c           	          U R                  US5      U R                  US5      U R                  US5      U R                  US5      U R                  US5      U R                  US5      /$ )Ntohlcv)safe_integerr  )r  ohlcvr  s      r  parse_ohlcvexmo.parse_ohlcv  sn     eS)UC(UC(UC(UC(UC(
 	
r  c                    SU0nU R                  US5      nUb  [        UR                  5       5      n[        S[	        U5      5       Ho  nXE   nX6   nU R                  U5      nU R                  5       n	U R                  US5      U	S'   U R                  US5      U	S'   U R                  US5      U	S'   XU'   Mq     OU R                  US0 5      n
U R                  US	0 5      n[        U
R                  5       5      n[        S[	        U5      5       H^  nXE   nU R                  U5      nU R                  5       n	Xj;   a  U R                  X5      U	S'   Xk;   a  U R                  X5      U	S'   XU'   M`     U R                  U5      $ )
Nr#  walletsr   usedfreebalancer$  balancesreserved)	r  ri  rj  rC  rD  r  accountr4  safe_balance)r  r  rF  r  currencyIdsrG  rn  itemr   r  r  r  r%  s                r  parse_balanceexmo.parse_balance  sy   )//(I6w||~.K1c+./(^
*22:>,,."&"2"24"@"&"2"24"@#'#3#3D)#D #*x  0 ??8Z<D??8Z<Dtyy{+K1c+./(^
..z:,,.%&*&6&6t&HGFO%&*&6&6t&HGFO&t 0   ((r  c                    U R                  5         SnU R                  SU5      u  p!US:X  a  [        U R                  S-   5      eSnUS:X  a  U R	                  U5      nOU R                  U5      nU R                  U5      $ )a  
query for balance and get the amount of funds available for trading or funds locked in orders

https://documenter.getpostman.com/view/10287440/SzYXWKPi#59c5160f-27a1-4d9a-8cfb-7979c7ffaac6
https://documenter.getpostman.com/view/10287440/SzYXWKPi#c8388df7-1f9f-4d41-81c4-5a387d171dc6

:param dict [params]: extra parameters specific to the exchange API endpoint
:param str [params.marginMode]: *isolated* fetches the isolated margin balance
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
NrC   crossz does not support cross marginr   )r  handle_margin_mode_and_paramsr   r   privatePostMarginUserWalletListprivatePostUserInfor  )r  r  r   r  s       r  fetch_balanceexmo.fetch_balance  s     	
!??PVW
 TWW'GGHH#;;FCH //7H !!(++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	                  XdS   5      nU R                  XtS   SSS5      $ )a#  
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

https://documenter.getpostman.com/view/10287440/SzYXWKPi#c60c51a8-e683-4f45-a000-820723d37871

: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
rH  r   Nr   r	  bidask)r  r  publicGetOrderBookr  r  parse_order_book)r  r	  r   r  r  r  r  rF  s           r  fetch_order_bookexmo.fetch_order_book6  s     	V$F4L
 $G**4;;w+GH,7$$VH-=tUERRr  rQ  c                 b   U R                  5         SnUcg  SR                  U R                  5      n[        U5      S:  a<  [        U R                  5      n[	        U R
                  S-   [        U5      -   S-   5      eO"U R                  U5      nSR                  U5      nSU0nUb  X&S'   U R                  U R                  Xc5      5      n0 n[        UR                  5       5      n	[        S[        U	5      5       H1  n
X   nU R                  U5      nU R                  X{   USS	S
5      X'   M3     U$ )a_  
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data for multiple markets

https://documenter.getpostman.com/view/10287440/SzYXWKPi#c60c51a8-e683-4f45-a000-820723d37871

:param str[]|None symbols: list of unified market symbols, all symbols fetched if None, default is None
:param int [limit]: max number of entries per orderbook to return, default is None
: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 symbol
N,i   z fetchOrderBooks() has zy symbols exceeding max URL length, you are required to specify a list of symbols in the first argument to fetchOrderBooksrH  r   r   r  r  )r  joinidsrD  r   r   str
market_idsr  r  ri  rj  rC  r)  r  )r  rQ  r   r  r
  numIdsr  r  rF  	marketIdsrG  rI  r	  s                r  fetch_order_booksexmo.fetch_order_booksL  s3    	?((488$C3x$TXX#DGG.G$G#f+$U  YT  %T  U  U  //'*C((3-CC
 $G**4;;w+GH)	q#i.)A |H%%h/F!2283EvtUZ\abFN * r  r   c                    U R                  US5      nU R                  S U5      nU R                  US5      nU R                  0 SUS   _SU_SU R	                  U5      _SU R                  US5      _SU R                  US5      _SU R                  US	5      _S
S _SU R                  US5      _SS _SS _SS _SU_SU_SS _SS _SS _SU R                  US5      _U R                  US5      U R                  US5      US.EU5      $ )Nupdated
last_trader	  r'  r(  highlowr  	buy_price	bidVolumer  
sell_price	askVolumevwapopencloselastpreviousClosechanger   averageavgvolvol_curr)
baseVolumequoteVolumer#  )safe_timestampsafe_marketr4  safe_tickeriso8601)r  r   r  r'  r  s        r  parse_tickerexmo.parse_tickerp  s    ''	:	!!$/5 !
fX&!
!
 Y/!
 D$$VV4	!

 4##FE2!
 4##FK8!
 !
 4##FL9!
 !
 D!
 D!
 T!
 D!
 T!
 d!
  $!!
" t''6#!
$ **659++FJ?)!
* + 	r  c                 z   U R                  5         U R                  U5      nU R                  U5      n0 n[        UR	                  5       5      n[        S[        U5      5       HC  nXV   nU R                  USS5      nUS   n	U R                  X75      n
U R                  X5      XI'   ME     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://documenter.getpostman.com/view/10287440/SzYXWKPi#4c8e6459-3503-4361-b012-c34bb9f7e385

: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   Nr=  r	  )r  market_symbolspublicGetTickerri  rj  rC  rD  r'  r  r*  filter_by_array_tickers)r  rQ  r  r  rF  r  rG  rI  r  r	  r   s              r  fetch_tickersexmo.fetch_tickers  s     	%%g.''/  )	q#i.)A |H%%hc:FH%F__X8F!..v>FN * ++FHgFFr  c                     U R                  5         U R                  U5      nU R                  U5      nU R                  X4S      U5      $ )a  
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

https://documenter.getpostman.com/view/10287440/SzYXWKPi#4c8e6459-3503-4361-b012-c34bb9f7e385

: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   )r  r.  r  r*  )r  r	  r  r  r  s        r  fetch_tickerexmo.fetch_ticker  sH     	''/V$  ,!7@@r  tradec                    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S5      n	S n
U R                  US	5      nU R                  XS
5      nUS   nU R	                  US5      nS nUb  U(       a  SOSnU R                  USU5      nS nU R                  US5      nUbV  U R                  US5      nU R                  U5      nU R                  US5      nUb  [        R                  " USS5      nUUUS.nU R                  UUUU R                  U5      UUU
U	UUUUUS.U5      $ )Ndatetrade_idorder_idr  r  r  r  
trade_typerH  r=  r	  is_makerr   r   	exec_typecommission_amountcommission_currencycommission_percent1000   )r  r   rate)r   r#  r'  r(  r	  orderr  sidetakerOrMakerr  r  r  rR  )
r&  r4  safe_string_2r'  r  r  r'   rE  
safe_trader)  )r  r5  r  r'  r   orderIdpriceStringamountString
costStringrD  r  rI  r	  isMakertakerOrMakerDefaultrE  rR  feeCostStringfeeCurrencyIdfeeCurrencyCodefeeRateStrings                        r  parse_tradeexmo.parse_trade  s   T ''v6	eZ0""5*5&&ug6''z:%%eX6
!!%>##E62!!(C8!//%4"-4''''{<OP((0CD$ ,,U4IJM"55mDO ,,U4HIM( ' 2 2=&" M%+%C
 "Y/( " 
  	r  c                     U R                  5         U R                  U5      nSUS   0nU R                  U R                  Xd5      5      nU R	                  XuS   / 5      nU R                  XX#5      $ )a  
get the list of most recent trades for a particular symbol

https://documenter.getpostman.com/view/10287440/SzYXWKPi#5a5a9c0d-cf17-47f6-9d62-6d4404ebd5ac

: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>`
rH  r   )r  r  publicGetTradesr  r  parse_trades)	r  r	  r  r   r  r  r  r  r  s	            r  fetch_tradesexmo.fetch_trades$  sr     	V$F4L
 ''G(DE. ~~htb9  u<<r  c                 ,   Uc  [        U R                  S-   5      eSnU R                  SU5      u  pTUS:X  a  [        U R                  S-   5      eU R	                  5         U R                  U5      nUS   nUS:g  nUc  Sn0 n	U(       a  XyS	'   OXyS
'   Ub  X9S'   U R                  USS5      n
XS'   SnU(       a!  U R                  U R                  X5      5      nO2U R                  U R                  X5      5      nU R                  US5      n/ n[        UR                  5       5      n[        S[        U5      5       HD  nX   nU R                  USS5      nUU   nU R!                  UUX#5      nU R#                  UU5      nMF     U R%                  XU5      $ )a<  
       fetch all trades made by the user

       https://documenter.getpostman.com/view/10287440/SzYXWKPi#b8d8d9af-4f46-46a1-939b-ad261d79f452  # spot
       https://documenter.getpostman.com/view/10287440/SzYXWKPi#f4b1aaf8-399f-403b-ab5e-4926d967a106  # margin

       :param str symbol: a symbol is required but it can be a single string, or a non-empty array
       :param int [since]: the earliest time in ms to fetch trades for
       :param int [limit]: *required for margin orders* the maximum number of trades structures to retrieve
       :param dict [params]: extra parameters specific to the exchange API endpoint

EXCHANGE SPECIFIC PARAMETERS
       :param int [params.offset]: last deal offset, default = 0
       :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
       Nz+ fetchMyTrades() requires a symbol argumentrW   r  z" only isolated margin is supportedr   r   r/   rH  	pair_namer   offsetr   r   r=  )r   r   r  r   r  r  r  privatePostUserTradesr  privatePostMarginTradesr  ri  rj  rC  rD  r'  rV  array_concatfilter_by_since_limit)r  r	  r  r   r  r   r  rH  isSpotr  r[  r  responseFromExchangerF  marketIdsInnerrG  rI  resultMarketitemsr   s                       r  fetch_my_tradesexmo.fetch_my_tradesO  s     >#DGG.[$[\\
!??QWX
 TWW'KKLLV$d|z)=E"FO#'K $G""68Q7"11$++g2NOH2 $(#?#?G@\#] & ';XFHhmmo.q#n-.A%(H++HdC@LX&E&&ulEIF&&vv6F / ))&??r  rD  r  c                 t    U R                  5         U R                  USU05      nU R                  USX#SU5      $ )a  
create a market order by providing the symbol, side and cost

https://documenter.getpostman.com/view/10287440/SzYXWKPi#80daa469-ec59-4d0a-b229-6a311d8dd1cd

:param str symbol: unified symbol of the market to create an order in
: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>`
r  r  Nr  r  create_order)r  r	  rD  r  r  s        r  create_market_order_with_cost"exmo.create_market_order_with_cost  s=     	Vfd^4  4tVLLr  c                 v    U R                  5         U R                  USU05      nU R                  USSUSU5      $ )a  
create a market buy order by providing the symbol and cost

https://documenter.getpostman.com/view/10287440/SzYXWKPi#80daa469-ec59-4d0a-b229-6a311d8dd1cd

: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  buyNrh  r  r	  r  r  s       r  !create_market_buy_order_with_cost&exmo.create_market_buy_order_with_cost  s?     	Vfd^4  5$fMMr  c                 v    U R                  5         U R                  USU05      nU R                  USSUSU5      $ )a  
create a market sell order by providing the symbol and cost

https://documenter.getpostman.com/view/10287440/SzYXWKPi#80daa469-ec59-4d0a-b229-6a311d8dd1cd

: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  sellNrh  rn  s       r  "create_market_sell_order_with_cost'exmo.create_market_sell_order_with_cost  s?     	Vfd^4  64vNNr  r  r  c                 @   U R                  5         U R                  U5      nUS:H  =(       a    USL nSn	U R                  SU5      u  pU	S:X  a  [        U R                  S-   5      eU	S:g  n
U R                  U/ SQ5      nU R                  US5      nS	US
   0nUc  U R                  US   U5      US'   OU R                  US   U5      US'   U R                  USS5      nUb2  U R                  USS5      nUc  [        U R                  S-   5      eXS'   U R                  US5      nU
(       d  Uc  [        U R                  S-   5      eU R                  U/ SQ5      nUb  U R                  US   U5      US'   SnU
(       Ga  UbX  US:X  a  [        U R                  S-   5      eX=S'   U R                  X5      US'   U R                  U R!                  X5      5      nGO2U R                  US5      nSnU R#                  US:H  US:H  U5      u  nnU R                  US5      nU(       a  SOU R                  US   U5      US'   US:X  a  X=S'   OUS:X  a  Ub  SOSnSU-   U-   US'   U(       a  SUS'   OUb  UUS'   U R%                  U R!                  X5      5      nOvUb7  U R                  X5      US'   US:X  a	  S U-   US'   O0US:X  a	  S!U-   US'   O!X-S'   OUS:X  d  US:X  a  US"-   U-   US'   OX-S'   U R'                  U R!                  X5      5      nU R)                  UU5      $ )#a  
create a trade order

https://documenter.getpostman.com/view/10287440/SzYXWKPi#80daa469-ec59-4d0a-b229-6a311d8dd1cd
https://documenter.getpostman.com/view/10287440/SzYXWKPi#de6f4321-eeac-468c-87f7-c4ad7062e265  # stop market
https://documenter.getpostman.com/view/10287440/SzYXWKPi#3561b86c-9ff1-436e-8e68-ac926b7eb523  # margin

: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 float [params.triggerPrice]: the price at which a trigger order is triggered at
:param str [params.timeInForce]: *spot only* 'fok', 'ioc' or 'post_only'
:param boolean [params.postOnly]: *spot only* True for post only orders
:param float [params.cost]: *spot only* *market orders only* the cost of the order in the quote currency for market orders
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
r  Nr=   r   only supports isolated marginr   r   	stopPrice
stop_pricer  rH  r   r	  r  	client_idclientOrderIdzC createOrder() client order id must be an integer / numeric literalr   zI createOrder requires an extra param params["leverage"] for margin orders)rx  ry  r   r   rz  r{  r  r  r   zI createOrder() cannot create stop limit orders for spot, only stop marketr  trigger_pricer<  	post_onlyr   r   _totalrV  market_ry  stop_limit_stop_r=  )r  r  r  r   r   safe_string_nr4  amount_to_precisioncost_to_precisionsafe_value_2safe_integer_2r  r   r5  price_to_precision privatePostStopMarketOrderCreater  handle_post_onlyprivatePostOrderCreate privatePostMarginUserOrderCreateparse_order)r  r	  r  rD  r  r  r  r  isMarketr   r`  r   r  r  r{  r   r  execType
isPostOnlyr   marketSuffixs                        r  ri  exmo.create_order  sx   ( 	V$H$95D=
!??vV
 TWW'GGHH
*))&2]^/F4L
 <"&":":6(;KV"TGJ"&"8"89I4"PGJ))&+O$ //_UM$ +p!pqq'4$##FJ78+#DGG.y$yzz6  $D  E#66vh7GOGG'7?$TWW/z%z{{&*FO/3/F/Fv/\GO,@@WA]^++FK@!
%)%:%:48;KXYdMdfl%m"
F"..v}E(01d6M6MfU]N^`e6f 7?&*FOX%040@8rL&/$&6&EGFO+6GK( ,+6GK(66t{{77ST'(,(?(?(U%7?&3d&:GFOX%&-nGFO&*FO7?dh&6&*Sj4&7GFO&*FO<<T[[=YZH&11r  r   c                    U R                  5         0 nU R                  USS5      nU R                  USS/5      nSnU R                  SU5      u  pcUS:X  a  [	        U R
                  S-   5      eSnUS:X  a%  XS'   U R                  U R                  XC5      5      nOPU(       a%  XS	'   U R                  U R                  XC5      5      nO$XS'   U R                  U R                  XC5      5      nU R                  U5      $ )
a  
cancels an open order

https://documenter.getpostman.com/view/10287440/SzYXWKPi#1f710d4b-75bc-4b65-ad68-006f863a3f26
https://documenter.getpostman.com/view/10287440/SzYXWKPi#a4d0aae8-28f7-41ac-94fd-c4030130453d  # stop market
https://documenter.getpostman.com/view/10287440/SzYXWKPi#705dfec5-2b35-4667-862b-faf54eca6209  # margin

:param str id: order id
:param str symbol: not used by exmo cancelOrder()
:param dict [params]: extra parameters specific to the exchange API endpoint
:param boolean [params.trigger]: True to cancel a trigger order
:param str [params.marginMode]: set to 'cross' or 'isolated' to cancel a margin order
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
r   stopNr7   r  rv  r   r9  parent_order_id)r  r  r5  r  r   r    privatePostMarginUserOrderCancelr   privatePostStopMarketOrderCancelprivatePostOrderCancelr  )r  r   r	  r  r  r   r   r  s           r  cancel_orderexmo.cancel_order@  s     	##FIv>6Iv#67
!??vV
 TWW'GGHH*$"$J<<T[[=YZH
 -/)*@@WA]^
 ')
#66t{{77ST ))r  c                     U R                  5         S[        U5      0nU R                  U R                  XC5      5      nU R	                  U5      n[        U5      US'   U$ )a  
*spot only* fetches information on an order made by the user

https://documenter.getpostman.com/view/10287440/SzYXWKPi#cf27781e-28e5-4b39-a52d-3110f5d22459  # spot

:param str id: order id
:param str symbol: not used by exmo fetchOrder
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
r9  r   )r  r  privatePostOrderTradesr  r  )r  r   r	  r  r  r  rC  s          r  fetch_orderexmo.fetch_orderp  s_     	B
 ..t{{7/KL,   *"gdr  c                    SnU R                  SU5      u  peUS:X  a  [        U R                  S-   5      eSnUb  U R                  U5      nS[	        U5      0nSn	US:X  a!  U R                  U R                  X5      5      n	O U R                  U R                  X5      5      n	U R                  U	S5      n
U R                  XX45      $ )a  
fetch all the trades made from a single order

https://documenter.getpostman.com/view/10287440/SzYXWKPi#cf27781e-28e5-4b39-a52d-3110f5d22459  # spot
https://documenter.getpostman.com/view/10287440/SzYXWKPi#00810661-9119-46c5-aec5-55abe9cb42c7  # margin

: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
:param str [params.marginMode]: set to "isolated" to fetch trades for a margin order
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
Nr^   r  rv  r9  r   r   )
r  r   r   r  r   privatePostMarginUserOrderTradesr  r  r  rV  )r  r   r	  r  r   r  r   r  r  r  r   s              r  fetch_order_tradesexmo.fetch_order_trades  s     
!??@RTZ[
 TWW'GGHH[[(FB
 #<<T[[=YZH$ 224;;w3OPH4 (3  >>r  c                    U R                  5         SnUb  U R                  U5      nUS   nSnU R                  SU5      u  pdUS:H  =(       d    US:H  nSn/ n	U(       aL  U R                  U5      nU R	                  USS05      nU R                  US5      n
U R                  XX#U5      n	U	$ U R                  U5      n[        UR                  5       5      n[        S	[        U5      5       HR  nX   nU R                  U5      nU R	                  USS05      nU R                  X   XX45      nU R                  X5      n	MT     U	$ )
a  
fetch all unfilled currently open orders

https://documenter.getpostman.com/view/10287440/SzYXWKPi#0e135370-daa4-4689-8acd-b6876dee9ba1  # spot open orders
https://documenter.getpostman.com/view/10287440/SzYXWKPi#a7cfd4f0-476e-4675-b33f-22a46902f245  # margin

: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.marginMode]: set to "isolated" for margin orders
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
Nr	  rZ   r  r   r&  r  ordersr   )r  r  r  privatePostMarginUserOrderListr  r  parse_ordersprivatePostUserOpenOrdersri  rj  rC  rD  r'  r^  )r  r	  r  r   r  r  r   isMarginr  r  responseOrdersr  rG  rI  marketInnerparsedOrderss                   r  fetch_open_ordersexmo.fetch_open_orders  sd    	[[(FH%F
!??@QSYZ
7*I
j0H::6BH8 [[&* F "__Xx@N&&~uVTF: 7 55f=H$ X]]_-I1c)n-$<"..x8Vf.   $001C[Y^g**6@ . r  c                 d    Uc  g SS0nUR                  S5      S:  a  SnU R                  X!U5      $ )Ncancel_startedcanceledcancelr   )rY  r4  r  r&  statusess      r  parse_statusexmo.parse_status;  sA    >j
 ;;x A%F&99r  c                 H    SSSSSSSSSSSSSSS.nU R                  X!U5      $ )Nrm  rr  )	limit_buy
limit_sell
market_buymarket_sellstop_buy	stop_sellstop_limit_buystop_limit_selltrailing_stop_buytrailing_stop_sellstop_market_sellstop_market_buyrm  rr  r4  )r  	orderTyperD  s      r  
parse_sideexmo.parse_sideE  sH     !#%!&"( &$
  ;;r  rC  c           
         U R                  USS5      nU R                  USSS5      nU R                  USU5      nU R                  USS5      nU R                  U5      nS nSU;   a  US   nO/S	U;   a)  S
U;   a#  US:X  a  US	   S-   US
   -   nOUS
   S-   US	   -   nU R	                  X5      nUS   n	U R                  US5      n
U
c  US:X  a  SOSnU R                  X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S:X  a  S nS nUS:w  a  US:w  a  UnU R                  0 SU_SU_SU R                  U5      _SU_SU R                  USS5      _SU R                  U R                  US5      5      _SU	_SU_S S _S!S _S"U_SU_S#U_S$U_SU
_S%S _S&S _S US US'.EU5      $ )(Nr9  r  
event_timer  gư>r  
order_typerH  in_currencyout_currencyrm  r=  r	  r  	in_amount
out_amountr  r  r   rz  ry  0rr  r   r{  r(  r'  lastTradeTimestampr  r&  order_statusr   postOnlyrD  r   r  filled	remaining)r   r   rR  r#  )rF  safe_integer_product_2r&  r  r'  r4  r  r  
safe_orderr)  r  r  )r  rC  r  r   	eventTimer'  r  rD  rI  r	  r  amountFieldr  r  transactionsr{  r   r  s                     r  r  exmo.parse_orderX  s   ` z3DE//|YPXY	''y)D	&&uflC	y)U?V}Hu$>U+Bu} /#5n8MM 036}9MM!!(3!!!%4>*.%-+lK%%e9F  0x0uh;))%=''|<3LY&%8D  
" 
] 
 Y/ 
 	 

 !$";";E9h"W 
 d''(8(8(OP 
 f 
 D 
 4 
  
 D 
 U 
 L 
 D 
 f 
  d! 
" # 
$ "+ 
, - 	r  c                    U R                  5         SnU R                  SU5      u  pTUS:X  a  [        U R                  S-   5      eUc  SnUS:g  nUb  U R	                  U5      nUS   nSU0nUb  UOS	US
'   X8S'   Sn	Ub  U R	                  U5      n	Sn
U(       aG  U R                  U R                  X5      5      n
U R                  USS05      nU R                  XX#U5      $ U R                  U R                  X5      5      nU R                  US5      nU R                  XX#U5      n/ n[        S	[        U5      5       H#  nX   nUS   S:X  d  M  UR                  U5        M%     U$ )a  
fetches information on multiple canceled orders made by the user

https://documenter.getpostman.com/view/10287440/SzYXWKPi#1d2524dd-ae6d-403a-a067-77b50d13fbe5  # margin
https://documenter.getpostman.com/view/10287440/SzYXWKPi#a51be1d0-af5f-44e4-99d7-f7b04c6067d0  # spot canceled orders

:param str symbol: unified market symbol of the market orders were made in
:param int [since]: timestamp in ms of the earliest order, default is None
:param int [limit]: max number of orders to return, default is None
:param dict [params]: extra parameters specific to the exchange API endpoint
:param str [params.marginMode]: set to "isolated" for margin orders
:returns dict: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
Nr   r  rv  r/   r   r	  r   r   r[  r&  r  rd  )r  r  r   r   r  privatePostUserCancelledOrdersr  r  !privatePostMarginUserOrderHistoryr  rC  rD  r  )r  r	  r  r   r  r   r`  r  r  r  r  responseSwaprd  r  rF  rG  rC  s                    r  fetch_canceled_ordersexmo.fetch_canceled_orders  s    	
!??vV
 TWW'GGHH=E
*++f-K *FU
 ',&7Ea [[(F::4;;w;WXH [[** F $$XuVLLAA$++gB^_L2 OOL':E&&ueFKFF1c&k*	?j0MM%( + Mr  c                    U R                  5         U R                  U5      nSn	U R                  SU5      u  pU	S:w  a  [        U R                  S-   5      eU R                  U/ SQ5      n
U R                  USS/5      nSU0nUb  X[S	'   Ub  U R                  US
   U5      US'   U
b  U R                  US
   U
5      US'   U R                  U R                  X5      5      nU R                  U5      $ )a  
       *margin only* edit a trade order

       https://documenter.getpostman.com/view/10287440/SzYXWKPi#f27ee040-c75f-4b59-b608-d05bd45b7899  # margin

       :param str id: order id
       :param str symbol: unified CCXT market symbol
       :param str type: not used by exmo editOrder
       :param str side: not used by exmo editOrder
       :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.triggerPrice]: stop price for stop-market and stop-limit orders
       :param str params['marginMode']: must be set to isolated

EXCHANGE SPECIFIC PARAMETERS
       :param int [params.distance]: distance for trailing stop orders
       :param int [params.expire]: expiration timestamp in UTC timezone for the order. order will not be expired if expire is 0
       :param str [params.comment]: optional comment for order. up to 50 latin symbols, whitespaces, underscores
       :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
       NrA   r   z8 editOrder() can only be used for isolated margin ordersrw  r   rx  r9  r  r	  r  ry  )r  r  r  r   r   safe_number_nr5  r   privatePostMarginUserOrderUpdater  r  )r  r   r	  r  rD  r  r  r  r  r   r   r  r  s                r  
edit_orderexmo.edit_order6  s   , 	V$
!??VT
#TWW'aabb))&2]^6NK#@A
 "(J#66vh7GOGG#$($;$;F8<Ll$[GL!88W9UV))r  r%  c                    U R                  5         U R                  U5      nU R                  X15      nSnSnU(       a,  UR                  S5      nUS   n[	        U5      nUS:  a  US   nU R                  U5        UUSUUS.$ )aq  
fetch the deposit address for a currency associated with self account

https://documenter.getpostman.com/view/10287440/SzYXWKPi#c8f9ced9-7ab6-4383-a6a4-bc54469ba60e

: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>`
Nr  r   r  )r#  r   r  addresstag)r  privatePostDepositAddressr4  rZ  rD  check_address)	r  r%  r  r  depositAddressr  r  addressAndTagnumPartss	            r  fetch_deposit_addressexmo.fetch_deposit_address`  s     	11&9 ))(9*005M#A&G=)H!|#A&7#
 	
r  c                     U R                  US5      n[        UR                  5       5      n[        U5      nUS:X  a  U R                  US      $ g )NrH  r  r   )r  ri  rj  rD  markets)r  r   tradesBySymbolrQ  
numSymbolss        r  get_market_from_tradesexmo.get_market_from_trades  sK    vv6~**,-\
?<<
++r  r  r  c                    U R                  XE5      u  pEU R                  5         U R                  U5      nUUS   US.nUb  XGS'   U R                  U R                  S0 5      nU R                  US5      n	U R                  XU	5      n	U	b  XS'   U R                  US5      nU R                  U R                  Xu5      5      n
U R                  X5      $ )a  
make a withdrawal

https://documenter.getpostman.com/view/10287440/SzYXWKPi#3ab9c34d-ad58-4f87-9c57-2e2ea88a8325

:param str code: unified currency code
:param float amount: the amount to withdraw
:param str address: the address to withdraw to
:param str tag:
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
r   )r  r   r  invoicer   r  	transport)handle_withdraw_tag_and_paramsr  r   r  r   safe_string_upperr4  r5  privatePostWithdrawCryptr  parse_transaction)r  r%  r  r  r  r  r   r  r   r  r  s              r  rt   exmo.withdraw  s     99#F==& 

 ?!$I??4<<R@((;""8g>#*K YYvy1F00W1MN%%h99r  r&  c                 6    SSSSSS.nU R                  X!U5      $ )Nr"  pending)transferredpaidr  
processing	verifyingr  r  s      r  parse_transaction_statusexmo.parse_transaction_status  s-     #"
 &99r  r   c                 B   U R                  USS5      nU R                  US5      nUb  [        R                  " U5      nU R                  US5      nUc-  U R	                  US0 5      nU R                  US5      nUS:w  a  UnU R                  US5      nU R                  USS	5      n	U R                  X5      n
S nS nU R                  US
5      nUS:X  a  UnOQUS:X  aK  UnUbF  UR                  S5      n[        U5      nUS:X  a$  U R                  US5      nUR                  SS5      nS S S S.nU R                  S   S   (       d  US:X  a  SOSnU R                  US5      nUcB  U R	                  U R                  S0 5      nU R	                  UU
0 5      nU R                  UU5      nU R                  US5      nUS:X  a  SnUb6  US:X  a  [        R                  " UU5      nU R                  U5      US'   U
US	'   0 SU_SU R                  USS5      _SU_SU_S	U
_SU R                  US5      _SU R                  U5      _S U R                  U R                  US 5      5      _S!U_S"U R!                  U5      _S#U_S$S _S%U_S&S _S'S _S(S _S)U R#                  US)5      _US US*.E$ )+Ndtr  r  txidextrarV  r  currr   r  re  
withdrawal:r{  r  rX  )r   r  rB  r   r   rt   
commissionrg  rq  cashbackr  r  r#  r   r9  task_idr  r&  r'  r(  r  addressFrom	addressTor  tagFromtagTor  )commentinternalrR  )safe_timestamp_2r4  r'   
string_absr  rF  r  rZ  rD  r[  r   r   
string_subr  r  safe_string_lowerr)  r&  )r  r   r   r'  rJ  r  r  	extraTxidr  rn  r%  r  r  r  r_  r  rR  keyfeeCostrg  codeFeesrq  s                         r  r  exmo.parse_transaction  sR   h ))+tYG	''X>#"--l;LV4<OOK"=E((7IB V4''VZH
&&z<"";	:9G\!G"c*u:q="..ua8G%ooc26G
 yy'5!%!5*IC&&{LAG"&//$,,@QSU"V???D"E**8S9''Z@H:%"<'#*#5#5lG#LL"//8F"&J
K
$$$[*iH
 D
 D	

 
 t''Z@
 d''5
 d33D4J4J;X`4ab
 
 Y/
 w
 4
 
 4
 t
  T!
" t**;	B#
$ )
 	
r  c                     U R                  5         0 nUb  U R                  US-  5      US'   SnUb  U R                  U5      nU R                  U R	                  XT5      5      nU R                  US   XbU5      $ )aL  
fetch history of deposits and withdrawals

https://documenter.getpostman.com/view/10287440/SzYXWKPi#31e69a33-4849-4e6a-b4b4-6d574238f6a7

:param str [code]: unified currency code for the currency of the deposit/withdrawals, default is None
:param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
:param int [limit]: max number of deposit/withdrawals to return, default is None
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a list of `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
Nr   r7  history)r  r  r   privatePostWalletHistoryr  parse_transactions)r  r%  r  r   r  r  r   r  s           r  fetch_deposits_withdrawalsexmo.fetch_deposits_withdrawals2	  s     	"//=GFO}}T*H00W1MN> &&x	':HUSSr  c                     U R                  5         SnSS0nUb  X6S'   Ub  U R                  U5      nUS   US'   U R                  U R                  Xd5      5      nU R	                  US/ 5      nU R                  XX#5      $ )a  
fetch all withdrawals made from an account

https://documenter.getpostman.com/view/10287440/SzYXWKPi#97f1becd-7aad-4e0e-babe-7bbe09e33706

: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
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
Nr  rt   r   r   r   rd  r  r   privatePostWalletOperationsr  r  r   	r  r%  r  r   r  r   r  r  rd  s	            r  fetch_withdrawalsexmo.fetch_withdrawalsf	  s     	J
 $G}}T*H"*4.GJ33DKK4PQ6 x"5&&uEEr  c                    U R                  5         SnUSS.nUb  U R                  U5      nUS   US'   U R                  U R                  XS5      5      nU R	                  US/ 5      nU R                  US0 5      nU R                  X5      $ )a  
fetch data on a currency withdrawal via the withdrawal id

https://documenter.getpostman.com/view/10287440/SzYXWKPi#97f1becd-7aad-4e0e-babe-7bbe09e33706

:param str id: withdrawal id
:param str code: unified currency code of the currency withdrawn, default is None
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
Nrt   r9  r  r   r   rd  r   r  r   r%  r  r  r  r  	r  r   r%  r  r   r  r  rd  firsts	            r  fetch_withdrawalexmo.fetch_withdrawal	  s     	
 }}T*H"*4.GJ33DKK4PQ6 '26ua,%%e66r  c                    U R                  5         SnUSS.nUb  U R                  U5      nUS   US'   U R                  U R                  XS5      5      nU R	                  US/ 5      nU R                  US0 5      nU R                  X5      $ )a|  
fetch information on a deposit

https://documenter.getpostman.com/view/10287440/SzYXWKPi#97f1becd-7aad-4e0e-babe-7bbe09e33706

:param str id: deposit id
:param str code: unified currency code, default is None
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
Nre  r*  r   r   rd  r   r+  r,  s	            r  fetch_depositexmo.fetch_deposit	  s     	
 }}T*H"*4.GJ33DKK4PQ6 '26ua,%%e66r  c                     U R                  5         SnSS0nUb  X6S'   Ub  U R                  U5      nUS   US'   U R                  U R                  Xd5      5      nU R	                  US/ 5      nU R                  XX#5      $ )a  
fetch all deposits made to an account

https://documenter.getpostman.com/view/10287440/SzYXWKPi#97f1becd-7aad-4e0e-babe-7bbe09e33706

: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
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
Nr  re  r   r   r   rd  r$  r&  s	            r  fetch_depositsexmo.fetch_deposits 
  s     	I
 $G}}T*H"*4.GJ33DKK4PQ6 x"5&&uEEr  r   GETc                    U R                   S   U   S-   nUS:w  a  XpR                  S-   -  nXq-  nUS:X  d  US:X  a  U(       a  USU R                  U5      -   -  nOUS:X  a  U R                  5         U R	                  5       nU R                  U R                  SU0U5      5      nSU R                  U R                  U R                  U5      U R                  U R                  5      [        R                  5      S	.nXsXeS
.$ )Nr   r  r   r   ?r   noncez!application/x-www-form-urlencoded)zContent-TypeKeySign)urlr   bodyheaders)r   r   	urlencoder  r9  r  apiKeyhmacencodesecrethashlibsha512)	r  pathr   r   r  r>  r=  r<  r9  s	            r  sign	exmo.sign4
  s    iis#c)%<<<#%%C8OsT^^F333I++-JJLE>>$++w.>"GHD C{{		$++d"3T[[5Mw~~^G
 dOOr  c                 "    U R                  5       $ N)r  )r  s    r  r9  
exmo.nonceG
  s      ""r  httpCodereasonr<  r   r>  r=  c
                 d   Uc  g SU;   a  SU;  a  U R                  US0 5      n
U R                  U
S5      nU R                  U
S5      nU R                  S-   U-   nU R                  U R                  S   X5        U R                  U R                  S   X5        [        U5      eSU;   d  SU;   Ga  U R                  USS	5      n[        U[        5      (       a  US
:X  d  US:X  a  SnOS	nU(       d  S nU R                  USS5      nUR                  S5      n[        U5      nUS:  a/  US   R                  S5      n[        U5      nUS:  a  US   OUS   nU R                  S-   U-   nU R                  U R                  S   X5        U R                  U R                  S   X5        [        U5      eg )NerrorrF  msgr%  rX  r   r   errmsgFtrueru   Tr
  r  r   )r  r4  r   throw_exactly_matched_exceptionr   throw_broadly_matched_exceptionr   r  
isinstancer  rF  rZ  rD  )r  rL  rM  r<  r   r>  r=  r  requestHeadersrequestBody	errorCodemessageErrorr%  feedbacksuccessmessage
errorPartsr  errorSubPartsnumSubPartss                       r  handle_errorsexmo.handle_errorsJ
  s   x(h*> '2>I++Iu=L##Iv6Dww}t+H001I4Z001I<b)) h(&:
 nnXx?G'3''v%7c>"G#G,,XwI$]]3/
z?a<$.qM$7$7$<M"%m"4K0;a=+mTUFVD77S=4/44T__W5Mt^44T__W5Mwa#H--r   rJ  )U__name__
__module____qualname____firstlineno__r   r  r  r  dictr   r   r  r\  r.  r1  r   r9  r6  r7  ra  r   rt  rx  r   r  r   r  r   r  r
   ri  r  r  r   r  r  r   r  r   r  r   r*  r   r0  r3  r   rR  rW  r   re  r   rj  ro  rs  r   r   ri  r  r  r  r   r  r  r  r  r  r  r	   r  r  r   rt   r  r  r!  r'  r.  r1  r4  rG  r9  intr`  __static_attributes____classcell__)r  s   @r  r)   r)      sD   _# _B	 FH 3 .
d 
F 
N` 
" @B KC K KFX K =? H He HCU H )+ :{ :& 13 2h 02 #J 7;2 EG EN <@ " "H.A .A` ') DZ DL $& B$v, BH 9=4^bkm 8K# 8K# 8KS 8KX[ 8Krvw{r| 8Kt
 
4 
() ): $& ,,( ,,\ :>b Ss S3 SY S, 48dSU " " "Zd "H&4 & &6 &P 04B $GW $G7 $GL 02 A3 Af AU Uv U Un 6:UW )=3 )=s )=# )=\`af\g )=V -1tRV_a \@c \@ \@C \@| _a MC My MPU M  RT N N5 N SU O OE O gksu c23 c2i c2y c2RW c2`c c2J 37r .*s .*C .*` 26b 'c '3 'R 9=4^bkm H?S H?# H?S H?X[ H?T /3TXac V V3 Vc Vhlmrhs Vp:<&C Cv C CJ 37TX\eg WC Ws WRU Wr `drv  @B (*S (*# (*Y (*i (*Y\ (*lo (*T 79 "
# "
^ "
H KOWY :S :% :# :C :^i :@:s :z
T z
X z
Q\ z
x 6:[_hj 2Ts 2T# 2TUX 2Tost  pA 2Th -1tRV_a 2Fc 2F 2FC 2Ffjkvfw 2Fh 59 173 17c 17f 26b 17 173 17f *.Dt\^ 2F3 2Fc 2F 2Fcghsct 2Fh &eBSW P&#(c (3 (S (# (X\ (dg ( (r  r)   ).ccxt.base.exchanger   ccxt.abstract.exmor   rD  ccxt.base.typesr   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%   ccxt.base.decimal_to_precisionr&   ccxt.base.preciser'   r)   rb  r  r  <module>rr     sn    ( *  j  j  j  j  j  j  * 0 - . ' . ) * . * ) 4 %X)8[ X)r  