
    !:h*                    0   d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlm Z  d dlm!Z! d dlm"Z" d dlm#Z# d dl$m%Z% d dl&m'Z'  G d dee      Z(y)    )Exchange)ImplicitAPI)AnyBalances
CurrenciesIntMarketNumOrder	OrderBook	OrderSide	OrderTypeStrStringsTickerTickersTradeTradingFees)List)ExchangeError)AuthenticationError)PermissionDenied)ArgumentsRequired)
BadRequest)InsufficientFunds)InvalidAddress)InvalidOrder)OrderNotFound)NotSupported)DDoSProtection)ExchangeNotAvailable)	TICK_SIZE)Precisec                       e Zd Zdef fdZi fdefdZi fdefdZi fde	e
   fdZdede
fdZi fdefdZi fd	Zi fd
Zd<de
fdZd<dede
defdZi fdedefdZdi fdedefdZdi fdededefdZd<de
defdZdddi fdededede	e   fdZd<dede
defdZ de!fdZ"i fde!fdZ#de$fdZ%d<dede
de&fd Z'd!e$fd"Z(d#e$fd$Z)di fded!e*d%e+d&e,d'e-f
d(Z.di fd)ede$fd*Z/di fde$fd+Z0di fde$fd,Z1di fd)ede$fd-Z2dddi fde$dedede	e&   fd.Z3dddi fde$dedede	e&   fd/Z4dddi fd)ede$dedefd0Z5dddi fde$dedefd1Z6d2d3i ddfd4Z7d5e8d6ed7ed8ed9ed:efd;Z9 xZ:S )=
onetradingreturnc                    | j                  t        t        |          i ddddddgddd	d
dddi dd ddddddddddddddddddddddddddddddddi d dd!dd"dd#dd$dd%dd&dd'dd(dd)dd*dd+dd,dd-dd.dd/dd0di d1dd2dd3dd4dd5dd6dd7dd8dd9dd:dd;dd<dd=dd>dd?dd@ddAdi dBddCddDddEddFddGddHddIddJddKddLddMddNddOddPddQddRddddddddddddddSdTdUdVdWdXdYdZd[d\d]d^	d_d`dadadbdcddgdedfdgdhg diig djdkgg dldmdbdndodd| j	                  dp      | j	                  dq      | j	                  dr      | j	                  dp      g| j	                  ds      | j	                  dt      g| j	                  du      | j	                  dt      g| j	                  dv      | j	                  dq      g| j	                  dw      | j	                  dx      g| j	                  dy      | j	                  dz      g| j	                  d{      | j	                  d|      gg| j	                  dr      | j	                  dq      g| j	                  ds      | j	                  dq      g| j	                  du      | j	                  dx      g| j	                  dv      | j	                  dz      g| j	                  dw      | j	                  d}      g| j	                  dy      | j	                  d~      g| j	                  d{      | j	                  d~      ggdgdidddddt
        di dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        i dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        i dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        i dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt        t        t        t        t        t        t        t        t        t         dɜ	dt        id˜dddidddiddgdԜdddddd ddd ddddd֜ddddddddלd ddddddڜdddddۜddddddܜd dddddddddޜddid	d d dd d dd      S )Nidr%   namezOne Trading	countriesAT	rateLimiti,  versionv1proThasCORSspotmarginFswapfutureoption	addMargincancelAllOrderscancelOrdercancelOrderscloseAllPositionsclosePositioncreateDepositAddresscreateOrdercreateReduceOnlyOrdercreateStopLimitOrdercreateStopMarketOrdercreateStopOrderfetchAccountsfetchBalancefetchBorrowRateHistoriesfetchBorrowRateHistoryfetchClosedOrdersfetchCrossBorrowRatefetchCrossBorrowRatesfetchCurrenciesfetchDepositfetchDepositAddressfetchDepositAddressesfetchDepositAddressesByNetworkfetchDepositsfetchDepositsWithdrawalsfetchFundingHistoryfetchFundingRatefetchFundingRateHistoryfetchFundingRatesfetchIndexOHLCVfetchIsolatedBorrowRatefetchIsolatedBorrowRatesfetchLedgerfetchLeveragefetchMarginModefetchMarketsfetchMarkOHLCVfetchMyTrades
fetchOHLCVfetchOpenInterestHistoryfetchOpenOrders
fetchOrderfetchOrderBookfetchOrdersfetchOrderTradesfetchPositionfetchPositionHistoryfetchPositionModefetchPositionsfetchPositionsForSymbolfetchPositionsHistoryfetchPositionsRiskfetchPremiumIndexOHLCVfetchTickerfetchTickers	fetchTimefetchTradesfetchTradingFeefetchTradingFeesfetchTransactionFeefetchTransactionFees)fetchTransactionsfetchTransferfetchTransfersfetchWithdrawalfetchWithdrawalsreduceMarginsetLeverage	setMarginsetMarginModesetPositionModetransferwithdraw
timeframesz	1/MINUTESz	5/MINUTESz
15/MINUTESz
30/MINUTESz1/HOURSz4/HOURSz1/DAYSz1/WEEKSz1/MONTHS)	1m5m15m30m1h4h1d1w1MurlszQhttps://github.com/ccxt/ccxt/assets/43336371/bdbc26fd-02f2-4ca7-9f1e-17333690bb1czhttps://api.onetrading.com/fast)publicprivatezhttps://onetrading.com/zhttps://docs.onetrading.comzhttps://onetrading.com/fees)logoapiwwwdocfeesr   get)
currencieszcandlesticks/{instrument_code}r   instrumentszorder-book/{instrument_code}zmarket-tickerzmarket-ticker/{instrument_code}time)zaccount/balanceszaccount/feesaccount/ordersaccount/orders/{order_id}z account/orders/{order_id}/tradeszaccount/tradeszaccount/trades/{trade_id}r   )r   r   z!account/orders/client/{client_id})r   postdeleter   tradingz0.0015z0.0010100z0.001325010005000z0.000910000z0.0007520000z0.00065z0.0006z0.0005)takermaker)	tierBased
percentager   r   tiersrequiredCredentials)apiKeysecretprecisionMode
exceptionsINVALID_CLIENT_UUIDORDER_NOT_FOUNDONLY_ONE_ERC20_ADDRESS_ALLOWEDDEPOSIT_ADDRESS_NOT_USEDINVALID_CREDENTIALSMISSING_CREDENTIALSINVALID_APIKEYINVALID_SCOPESINVALID_SUBJECTINVALID_ISSUERINVALID_AUDIENCEINVALID_DEVICE_IDINVALID_IP_RESTRICTIONAPIKEY_REVOKEDAPIKEY_EXPIREDSYNCHRONIZER_TOKEN_MISMATCHSESSION_EXPIREDINTERNAL_ERRORCLIENT_IP_BLOCKEDMISSING_PERMISSIONILLEGAL_CHARSUNSUPPORTED_MEDIA_TYPE"ACCOUNT_HISTORY_TIME_RANGE_TOO_BIGCANDLESTICKS_TIME_RANGE_TOO_BIGINVALID_INSTRUMENT_CODEINVALID_ORDER_TYPEINVALID_UNITINVALID_PERIODINVALID_TIMEINVALID_DATEINVALID_CURRENCYINVALID_AMOUNTINVALID_PRICEINVALID_LIMITINVALID_QUERYINVALID_CURSORINVALID_ACCOUNT_IDINVALID_SIDE!INVALID_ACCOUNT_HISTORY_FROM_TIME%INVALID_ACCOUNT_HISTORY_MAX_PAGE_SIZE#INVALID_ACCOUNT_HISTORY_TIME_PERIODINVALID_ACCOUNT_HISTORY_TO_TIME INVALID_CANDLESTICKS_GRANULARITYINVALID_CANDLESTICKS_UNITINVALID_ORDER_BOOK_DEPTHINVALID_ORDER_BOOK_LEVELINVALID_PAGE_CURSORINVALID_TIME_RANGEINVALID_TRADE_IDINVALID_UI_ACCOUNT_SETTINGSNEGATIVE_AMOUNTNEGATIVE_PRICEMIN_SIZE_NOT_SATISFIEDBAD_AMOUNT_PRECISIONBAD_PRICE_PRECISIONBAD_TRIGGER_PRICE_PRECISIONMAX_OPEN_ORDERS_EXCEEDEDMISSING_PRICEMISSING_ORDER_TYPEMISSING_SIDE!MISSING_CANDLESTICKS_PERIOD_PARAMMISSING_CANDLESTICKS_UNIT_PARAMMISSING_FROM_PARAMMISSING_INSTRUMENT_CODEMISSING_ORDER_IDMISSING_TO_PARAMMISSING_TRADE_IDINVALID_ORDER_ID)		NOT_FOUNDINSUFFICIENT_LIQUIDITYINSUFFICIENT_FUNDS
NO_TRADINGSERVICE_UNAVAILABLEGATEWAY_TIMEOUT	RATELIMITCF_RATELIMITINTERNAL_SERVER_ERRORzOrder not found.)exactbroadcommonCurrenciesMIOTAIOTAoptionsmethodfetchPrivateTradingFeesEURCHF)rr   fiatfeatures)IOCFOKPOGTD)
marginModetriggerPricetriggerDirectiontriggerPriceTypestopLossPricetakeProfitPriceattachedStopLossTakeProfittimeInForcehedgedtrailingleveragemarketBuyByCostmarketBuyRequiresPriceselfTradePreventionicebergd   i )r
  limitdaysBack	untilDayssymbolRequired)r
  triggerr  r  )r
  r  r  r  r  gUUUUUU?)r
  r  r  daysBackCanceledr  r  r  r  r  i  )	sandboxr>   createOrdersr]   ra   r`   rc   rG   r^   )linearinverse)r2   r4   r5   )deep_extendsuperr%   describeparse_numberr"   r   r   r   r   r   r   r   r   r!   r    r   )self	__class__s    I/var/www/html/turnos/venv/lib/python3.12/site-packages/ccxt/onetrading.pyr&  zonetrading.describe   sz   j$ @ B ZE
,ZE
MZE
 $ZE
 	ZE

 tZE
 4ZE
  QQQ %Q 	Q
 %Q %Q UQ "4Q tQ Q $UQ  Q 'Q tQ (Q  '!Q" (#Q$ "4%Q&  'Q( )Q* +E+Q, )%-Q. $T/Q0 '1Q2 (3Q4 "45Q6 7Q8 &u9Q: (;Q< 1%=Q>  ?Q@ +EAQB &uCQD #EEQF *5GQH $UIQJ "5KQL *5MQN +EOQP uQQR  SQT "5UQV WQX !%YQZ  [Q\ d]Q^ +E_Q` "4aQb dcQd !$eQf ugQh #DiQj  kQl 'mQn $UoQp !%qQr *5sQt (uQv %ewQx )%yQz t{Q| }Q~ TQ@ uAQB "5CQD #DEQF &uGQH 'IQJ &+!&"'#($) %$"!&#(!!aQZE
t !!## 
uZE
J k?@ 11 6KZE
b  	 ) cZE
d !%"&!..x8!..w7
 "&!2!23!79J9J89T U!%!2!25!94;L;LX;V W!%!2!25!94;L;LX;V W!%!2!26!:D<M<Mg<V W!%!2!26!:D<M<Mh<W X!%!2!27!;T=N=Ny=Y Z!%!2!27!;T=N=Ny=Y Z& "&!2!23!79J9J79S T!%!2!25!94;L;LW;U V!%!2!25!94;L;LX;V W!%!2!26!:D<M<Mi<X Y!%!2!26!:D<M<Mh<W X!%!2!27!;T=N=Nx=X Y!%!2!27!;T=N=Nx=X Y&eZE
b "$cZE
j YkZE
l N)<N%}N 5nN /	N
 *+>N *+>N %&9N %&9N &':N %&9N '(;N ()<N -.AN %&9N %&9N  23F!N" &':#N$ %&9%N& ()9'N( )*:)N* $Z+N, -j-N. 9*/N0 6z1N2 .z3N4 )*5N6 #J7N8 %j9N: #J;N< #J=N> '
?N@ %jANB $ZCND $ZENF $ZGNH %jINJ )*KNL #LMNN 8ONP <ZQNR ::SNT 6zUNV 7
WNX 0YNZ /
[N\ /
]N^ *:_N` )*aNb '
cNd 2:eNf &|gNh %liNj -lkNl +LmNn *<oNp 2<qNr /
sNt $\uNv ),wNx #LyNz 89J{N| 67H}N~ )*;N@ ./@ANB 'CND '(9ENF '(9GNH 'INJ "/.?*;"6+?';!/$2-:[N` 'aSmZE
T !UZE
\ 7% 	]ZE
h $&+(-,1,0).+06:#'#'"&#(	( #($)$)+027/4#()$, %)&+!$$*%+*/& ',#($)*/	# ',!$#($)*/( $(&+!$$*,2%+#($)*/	*  #q;z ##
 ##CEiZE
 Z Z	    c                 H    | j                  |      }| j                  |d      S )a>  
        fetches the current integer timestamp in milliseconds from the exchange server

        https://docs.onetrading.com/#time

        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns int: the current integer timestamp in milliseconds from the exchange server
        epoch_millis)publicGetTimesafe_integerr(  paramsresponses      r*  
fetch_timezonetrading.fetch_timey  s)     %%f-   >::r+  c                 ~   | j                  |      }i }t        dt        |            D ]  }||   }| j                  |d      }| j	                  |      }| j                  ||| j                  |d      |dd| j                  | j                  | j                  |d                  dddddddddi d      ||<    |S )	a  
        fetches all available currencies on an exchange

        https://docs.onetrading.com/#currencies

        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: an associative dictionary of currencies
        r   coder)   N	precisionminmax)amountr   )r(   r5  r)   infoactivefeer6  r   depositlimitsnetworks)publicGetCurrenciesrangelensafe_stringsafe_currency_codesafe_currency_structurer'  parse_precision)r(  r1  r2  resulticurrencyr(   r5  s           r*  fetch_currencieszonetrading.fetch_currencies  s     ++F3 q#h-( 	A{H!!(F3B**2.D77((6: !..t/C/CDDTDTU]_jDk/lm &*48(,T : 9 F4L		( r+  c                 F    | j                  |      }| j                  |      S )a  
        retrieves data on all markets for onetrading

        https://docs.onetrading.com/#instruments

        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: an array of objects representing market data
        )publicGetInstrumentsparse_marketsr0  s      r*  fetch_marketszonetrading.fetch_markets  s'     ,,V4 !!(++r+  marketc                    | j                  |di       }| j                  |di       }| j                  |d      }| j                  |d      }|dz   |z   }| j                  |      }| j                  |      }| j                  |d      }	i d|d|dz   |z   d|d|d	d d
|d|dd ddddddddddddd|	dk(  dddd d d d d d d | j                  | j	                  | j                  |d                  | j                  | j	                  | j                  |d                  dd d dd d dd d d| j                  |d      d ddd |d
S ) Nbasequoter5  _stater(   symbol/settlebaseIdquoteIdsettleIdtyper2   Tr3   Fr4   r5   r6   r<  ACTIVEcontractr"  amount_precisionmarket_precision)r:  pricer7  min_size)r  r:  ra  cost)
r#  contractSizeexpiryexpiryDatetimestrike
optionTyper6  r?  createdr;  )
safe_valuerD  rE  r'  rG  safe_number)
r(  rP  	baseAsset
quoteAssetrY  rZ  r(   rR  rS  rU  s
             r*  parse_marketzonetrading.parse_market  s'   OOFFB7	__VWb9
!!)V4"":v6c\G#&&v.''0  10
"0
dSj5(0
 D0
 U	0

 d0
 f0
 w0
 0
 F0
 D0
 e0
 E0
 e0
 e0
 u(0
  !0
" d#0
$  "++D,@,@AQAQRXZlAm,no**4+?+?@P@PQWYk@l+mn  
  
  
  ++FJ?$ _0
 0	
r+  c                 B   | j                  |d      }| j                  |d      }|0| j                  | j                  di       }| j                  |dd      }|dk(  r| j	                  |      S |dk(  r| j                  |      S t        | j                  dz   |z   dz         )al  
        fetch the trading fees for multiple markets

        https://docs.onetrading.com/#fee-groups
        https://docs.onetrading.com/#fees

        :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
        r   rr   r  fetchPublicTradingFeesz% fetchTradingFees() does not support zB, fetchPrivateTradingFees and fetchPublicTradingFees are supported)rD  omitrj  r   fetch_private_trading_feesfetch_public_trading_feesr   r(   )r(  r1  r   r   s       r*  fetch_trading_feeszonetrading.fetch_trading_fees
  s     !!&(368,>oodll4FKG%%gx9RSF..226:://11&99tww)PPSYY  ]a   a  b  br+  c           	         | j                          | j                  |      }| j                  |di       }| j                  |d      }| j                  |      }| j                  |di       }i }t	        dt        | j                              D ]>  }| j                  |   }	||	| j                  |d      | j                  |d      dd|d||	<   @ |S )Nr   	fee_tiers	maker_fee	taker_feeTr;  rV  r   r   r   r   r   )load_marketspublicGetFeesrj  parse_fee_tiersrB  rC  symbolsrk  )
r(  r1  r2  firstfeeTiersr   	firstTierrH  rI  rV  s
             r*  rs  z$onetrading.fetch_public_trading_fees   s    %%f-( !R0??5+6$$X.OOHa4	q#dll+, 
	A\\!_F )))[A)))[A"!F6N
	 r+  c           	         | j                          | j                  |      }| j                  |di       }| j                  |d      }| j                  |d      }t	        j
                  |d      }t	        j
                  |d      }| j                  |d      }i }| j                  |      }t        dt        | j                              D ]<  }	| j                  |	   }
||
| j                  |      | j                  |      dd|d||
<   > |S )	Nactive_fee_tierrw  rx  r   rv  r   Try  )rz  privateGetAccountFeesrj  rD  r#   
string_divr|  rB  rC  r}  r'  )r(  r1  r2  activeFeeTiermakerFeetakerFeer  rH  r   rI  rV  s              r*  rr  z%onetrading.fetch_private_trading_feesH  s	   --f5, 2CRH##M;?##M;?%%h6%%h6??8[9$$X.q#dll+, 
	A\\!_F  **84**84"!F6N
	 r+  Nc                    g }g }t        dt        |            D ]  }||   }| j                  |d      }| j                  |d      }| j                  |d      }	t	        j
                  |	d      }	t	        j
                  |d      }|j                  || j                  |	      g       |j                  || j                  |      g        ||dS )Nr   volumerx  rw  r   )r   r   )rB  rC  rk  rD  r#   r  appendr'  )
r(  r  rP  	takerFees	makerFeesrI  tierr  r   r   s
             r*  r|  zonetrading.parse_fee_tiersu  s    		q#h-( 	AAA;D%%dH5F$$T;7E$$T;7E&&ue4E&&ue4Efd&7&7&>?@fd&7&7&>?@	A 
 	
r+  tickerc                 v   | j                  | j                  |d            }| j                  |d      }| j                  ||d      }| j                  |d      }| j                  |d      }| j                  |d      }| j                  |d      }	| j                  |d      }
| j                  i d	|d
|d| j	                  |      d| j                  |d      d| j                  |d      d| j                  |d      dd d| j                  |d      dd dd dd d|d|dd d|d|dd |	|
|d|      S )Nr   instrument_coderT  
last_priceprice_change_percentageprice_changebase_volumequote_volumerV  	timestampdatetimehighlowbidbest_bid	bidVolumeaskbest_ask	askVolumevwapopencloselastpreviousClosechanger   average)
baseVolumequoteVolumer;  )	parse8601rD  safe_symbolsafe_tickeriso8601)r(  r  rP  r  marketIdrV  r  r   r  r  r  s              r*  parse_tickerzonetrading.parse_ticker  s   * NN4#3#3FF#CD	##F,=>!!(FC85%%f.GH
!!&.9%%fm<
&&v~> !
f!
!
 Y/!
 D$$VV4	!

 4##FE2!
 4##FJ7!
 !
 4##FJ7!
 !
 D!
 D!
 T!
 D!
 T!
 f!
  *!!
" t#!
$ %&)!
* + 	r+  rV  c                     | j                          | j                  |      }d|d   i}| j                  | j                  ||            }| j	                  ||      S )a  
        fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

        https://docs.onetrading.com/#market-ticker-for-instrument

        :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(   )rz  rP  #publicGetMarketTickerInstrumentCodeextendr  )r(  rV  r1  rP  requestr2  s         r*  fetch_tickerzonetrading.fetch_ticker  sa     	V$vd|
 ;;DKKQW<XY&   622r+  r}  c                     | j                          | j                  |      }| j                  |      }i }t        dt	        |            D ]   }| j                  ||         }|d   }|||<   " | j                  |d|      S )a  
        fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market

        https://docs.onetrading.com/#market-ticker

        :param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
        r   rV  )rz  market_symbolspublicGetMarketTickerrB  rC  r  filter_by_array_tickers)r(  r}  r1  r2  rH  rI  r  rV  s           r*  fetch_tickerszonetrading.fetch_tickers  s     	%%g.--f5* q#h-( 	$A&&x{3FH%F#F6N	$ ++FHgFFr+  r  c           	         | j                          | j                  |      }d|d   i}|||d<   | j                  | j                  ||            }| j	                  | j                  |d            }| j                  ||d   |dddd	      S )
a%  
        fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

        https://docs.onetrading.com/#order-book

        :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  r(   depthr   rV  bidsasksra  r:  )rz  rP   publicGetOrderBookInstrumentCoder  r  rD  parse_order_book)r(  rV  r  r1  rP  r  r2  r  s           r*  fetch_order_bookzonetrading.fetch_order_book  s     	V$vd|
 $GG88Wf9UVp NN4#3#3Hf#EF	$$Xvh/?FTZ\cemnnr+  c           	      X   | j                  |d      }| j                  |d      }| j                  |d      }dddddd	}| j                  ||      }||z   }| j                  |      }	|	d
z  }
| j                  | j                  |d            }|
| j	                  ||
z        z  }| j                  | j
                  di       }| j                  |dd      }|| j                  |d      | j                  |d      | j                  |d      | j                  |d      | j                  ||      gS )NgranularityunitperiodmhdwM)MINUTESHOURSDAYSWEEKSMONTHS  r   r^   r  total_amountr  r  r  r  )rj  rD  parse_timeframer  parse_to_intr   rk  )r(  ohlcvrP  r  r  r  unitslowercaseUnit	timeframedurationInSecondsdurationr  alignedTimestampr   volumeFields                  r*  parse_ohlcvzonetrading.parse_ohlcvY  sD    ooe];V4!!+x8
 ((5]*	 00;$t+NN4#3#3E6#BC	#d&7&7	H8L&MM//$,,bA&&w.IUF+UF+UE*UG,UK0
 	
r+  r   sincec                 r   | j                          | j                  |      }| j                  | j                  |      }|j	                  d      \  }}	| j                  |      }
|
dz  }|d}|d   ||	d}|?| j                         }| j                  |      |d<   | j                  |||z  z
        |d<   n;| j                  |      |d<   | j                  | j                  |||z              |d<   | j                  | j                  ||            }| j                  |d      }| j                  |||||      S )	a  
        fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market

        https://docs.onetrading.com/#candlesticks

        :param str symbol: unified symbol of the market to fetch OHLCV data for
        :param str timeframe: the length of time each candle represents
        :param int [since]: timestamp in ms of the earliest candle to fetch
        :param int [limit]: the maximum amount of candles to fetch
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns int[][]: A list of candles ordered, open, high, low, close, volume
        rW  r  i  r(   )r  r  r  tofromcandlesticks)rz  rP  rD  r   splitr  millisecondsr  sum#publicGetCandlesticksInstrumentCoder  	safe_listparse_ohlcvs)r(  rV  r  r  r  r1  rP  
periodUnitr  r  r  r  r  nowr2  r  s                   r*  fetch_ohlcvzonetrading.fetch_ohlcv  sA    	V$%%dooyA
!'', 00;$t+=E%d| 
 =##%C LL-GDM"ll31A+ABGFO"ll51GFO LL%9I)JKGDM;;DKKQW<XY x8  	5%HHr+  tradec                    | j                  |di       }| j                  |d|      }| j                  |d      }|!| j                  | j                  |d            }| j	                  |dd      }| j                  |d      }| j                  |d      }| j                  |d	      }| j                  |d
      }	| j                  |	|d      }
| j                  |d      }d }d }|M| j                  |d      }| j                  |      }| j                  |d      }|||d}| j                  |d      }| j                  | j                  |dd      | j                  |d      || j                  |      |
d |||||||d|      S )Nr=  r  trade_timestampr   side
taker_sidera  r:  r  r  rT  
fee_amountfee_currencyfee_percentage)rc  rJ  ratefee_typetrade_idsequenceorder_id)r(   orderr  r  rV  r\  r  ra  r:  rc  takerOrMakerr=  r;  )rj  r/  r  rD  safe_string_lower_2r  rE  safe_string_lower
safe_tradesafe_string_2r  )r(  r  rP  feeInfor  r  priceStringamountString
costStringr  rV  feeCostStringr  r=  feeCurrencyIdfeeCurrencyCodefeeRateStrings                    r*  parse_tradezonetrading.parse_trade  s   N //%3w6%%e->?	t'7'7v'FGI''v|D&&ug6''x8%%eX6
##E+<=!!(FC8((,?$ ,,WnEM"55mDO ,,W6FGM%+%C
  11':FL$$UJ
C%%eZ8"Y/ "( 
  	r+  c                 T   | j                  |dg       }d|i}t        dt        |            D ]i  }||   }| j                  |d      }| j	                  |      }| j                         }| j                  |d      |d<   | j                  |d      |d<   |||<   k | j                  |      S )	Nbalancesr;  r   currency_code	availablefreelockedused)rj  rB  rC  rD  rE  accountsafe_balance)	r(  r2  r  rH  rI  balance
currencyIdr5  r  s	            r*  parse_balancezonetrading.parse_balance   s    ??8Z<)q#h-( 	#AqkG))'?CJ**:6DllnG"..wDGFO"..wAGFO"F4L	#   ((r+  c                 f    | j                          | j                  |      }| j                  |      S )aQ  
        query for balance and get the amount of funds available for trading or funds locked in orders

        https://docs.onetrading.com/#balances

        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
        )rz  privateGetAccountBalancesr  r0  s      r*  fetch_balancezonetrading.fetch_balance  s3     	11&9" !!(++r+  statusc                 B    ddddddddddd
}| j                  |||      S )Nr  closedcanceledrejectedfailed	triggered)
FILLEDFILLED_FULLYFILLED_CLOSEDFILLED_REJECTEDOPENREJECTEDCLOSEDFAILEDSTOP_TRIGGEREDDONErD  )r(  r  statusess      r*  parse_order_statuszonetrading.parse_order_status*  s>    $')" )
 &&99r+  r  c                    | j                  |d|      }| j                  |d      }| j                  |d      }| j                  | j                  |d            }| j                  | j                  |d            }| j                  |      }| j                  |d      }	| j	                  |	|d      }
| j                  |d      }| j                  |d	      }| j                  |d
      }| j                  |d      }| j                  |d      }| j                  | j                  |d            }| j                  |d      }| j                  |dg       }| j                  i d|d|d|d|d| j                  |      dd d|
d| j                  |      d|d|d|d|d| j                  |d      d	|dd dd d|d ||d|      S )Nr  r  	client_idr   r  r  rT  ra  r:  filled_amountr  r\  time_in_forceis_post_onlytradesr(   clientOrderIdr;  r  r  lastTradeTimestamprV  r  postOnlyr  trigger_pricerc  r  filled)	remainingr  r-  )rj  rD  r  r'  r  r  parse_time_in_force
safe_orderr  parse_order_typerk  )r(  r  rP  rawOrderr(   r.  r  	rawStatusr  r  rV  ra  r:  r2  r  r\  r  r0  	rawTradess                      r*  parse_orderzonetrading.parse_order9  sW   F ??5'59h
3((;?NN4#3#3Hf#EF	++D,<,<Xx,PQ	((3##H.?@!!(FC8  73!!(H5!!(O<%%h7%%h7..t/?/?//Z[??8^<OOE8R8	  
" 
] 
 E 
 	 

 Y/ 
 !$ 
 f 
 D))$/ 
 ; 
  
 D 
 U 
 D,,XG 
 f 
 D 
  t! 
" f# 
$ + 
, - 	r+  r\  c                 0    ddi}| j                  |||      S )Nbookedr  r%  )r(  r\  typess      r*  r6  zonetrading.parse_order_type  s%    g
 tT22r+  r  c                 6    ddddd}| j                  |||      S )NGTCGTTr  r  )GOOD_TILL_CANCELLEDGOOD_TILL_TIMEIMMEDIATE_OR_CANCELLEDFILL_OR_KILLr%  )r(  r  timeInForcess      r*  r4  zonetrading.parse_time_in_force  s,    #(#&+!	
 k;GGr+  r  r:  ra  c                     | j                          | j                  |      }|j                         }|d   ||j                         | j                  ||      d}	d}
|dk(  s|dk(  rd}
| j	                  |g d      }|L|dk(  rt        | j                  d	z         | j                  ||      |	d
<   d|	d<   | j                  |g d      }n#|dk(  rt        | j                  dz   |z   dz         |
r| j                  ||      |	d<   | j                  |dd      }|||	d<   | j                  |ddg      }| j                  |ddd      }| j                  |d      }||	d<   | j                  | j                  |	|            }| j                  ||      S )a  
        create a trade order

        https://docs.onetrading.com/#create-order

        :param str symbol: unified symbol of the market to create an order in
        :param str type: '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]: onetrading only does stop limit orders and does not do stop market
        :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
        r(   )r  r\  r  r:  FLIMITSTOPT)r  r1  	stopPriceMARKETz? createOrder() cannot place stop market orders, only stop limitr1  r\  z1 createOrder() requires a triggerPrice param for z ordersra  r.  r)  r  r+  rA  )rz  rP  upperamount_to_precisionsafe_number_nr   r(   price_to_precisionrq  r   r  privatePostAccountOrdersr  r:  )r(  rV  r\  r  r:  ra  r1  rP  uppercaseTyper  priceIsRequiredr  r.  r  r2  s                  r*  create_orderzonetrading.create_order  s    	V$

%d|!JJL..vv>	
  G#}'>"O))&2`a#( +l!lmm'+'>'>v|'TGO$$GFOYYv'UVFf$#DGG.a$adh$hkt$tuu#66vuEGG**6?KP$#0GK YYv'EFF((Qfg6=1#. 00Wf1MN  &11r+  r(   c                 L   | j                          | j                  |dd      }| j                  |ddg      }d}i }|d}||d<   n||d<   d}|dk(  r"| j                  | j	                  ||            }n!| j                  | j	                  ||            }| j                  |      S )aq  
        cancels an open order

        https://docs.onetrading.com/#close-order-by-order-id

        :param str id: order id
        :param str symbol: not used by bitmex cancelOrder()
        :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)  !privateDeleteAccountOrdersOrderIdN(privateDeleteAccountOrdersClientClientIdr  )rz  r  rq  rT  r  rU  r:  )r(  r(   rV  r1  r.  r   r  r2  s           r*  cancel_orderzonetrading.cancel_order  s     	**6?KP6O[#AB4$?F#0GK "$GJ88==dkk'SY>Z[HDDT[[QXZ`EabH ))r+  c                     | j                          i }|| j                  |      }|d   |d<   | j                  | j                  ||            }|S )a  
        cancel all open orders

        https://docs.onetrading.com/#close-all-orders

        :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
        r(   r  )rz  rP  privateDeleteAccountOrdersr  )r(  rV  r1  r  rP  r2  s         r*  cancel_all_orderszonetrading.cancel_all_orders  sZ     	[[(F)/G%&224;;w3OP r+  c                     | j                          ddj                  |      i}| j                  | j                  ||            }|S )a~  
        cancel multiple orders

        https://docs.onetrading.com/#close-all-orders

        :param str[] ids: order ids
        :param str symbol: unified market symbol, default is None
        :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>`
        ids,)rz  joinrX  r  )r(  r[  rV  r1  r  r2  s         r*  cancel_orderszonetrading.cancel_orders.  sH     	388C=
 224;;w3OP r+  c                     | j                          d|i}| j                  | j                  ||            }| j                  |      S )a  
        fetches information on an order made by the user

        https://docs.onetrading.com/#get-order

        :param str id: the order id
        :param str symbol: not used by onetrading 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  )rz  privateGetAccountOrdersOrderIdr  r:  )r(  r(   rV  r1  r  r2  s         r*  fetch_orderzonetrading.fetch_orderE  sM     	
 66t{{7F7STT ))r+  c                    | j                          i }d}|| j                  |      }|d   |d<   |@| j                  |d      }|t        | j                  dz         | j                  |      |d<   |||d<   | j                  | j                  ||            }| j                  |dg       }	| j                  |	|||      S )	a  
        fetch all unfilled currently open orders

        https://docs.onetrading.com/#get-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
        :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
        Nr(   r  r  zs fetchOpenOrders() requires a "to" iso8601 string param with the since argument is specified, max range is 100 daysr  max_page_sizeorder_history)
rz  rP  rD  r   r(   r  privateGetAccountOrdersr  r  parse_orders)
r(  rV  r  r  r1  r  rP  r  r2  orderHistorys
             r*  fetch_open_orderszonetrading.fetch_open_orders  s     		
 [[(F)/G%&!!&$/Bz'  3h  )h  i  i"ll51GFO',GO$//GV0LM` ~~hD  vueDDr+  c           	      R    ddi}| j                  |||| j                  ||            S )a&  
        fetches information on multiple closed orders made by the user

        https://docs.onetrading.com/#get-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
        :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
        with_cancelled_and_rejectedT)rh  r  )r(  rV  r  r  r1  r  s         r*  fetch_closed_orderszonetrading.fetch_closed_orders  s5     *4
 %%feUDKKQW<XYYr+  c                     | j                          d|i}|||d<   | j                  | j                  ||            }| j                  |dg       }d}	|| j	                  |      }	| j                  ||	||      S )a  
        fetch all the trades made from a single order

        https://docs.onetrading.com/#trades-for-order

        :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>`
        r  Nrc  trade_history)rz  $privateGetAccountOrdersOrderIdTradesr  rj  rP  parse_trades)
r(  r(   rV  r  r  r1  r  r2  tradeHistoryrP  s
             r*  fetch_order_tradeszonetrading.fetch_order_trades  s     	

 ',GO$<<T[[RX=YZ> x"E[[(F  vueDDr+  c                    | j                          i }d}|| j                  |      }|d   |d<   |@| j                  |d      }|t        | j                  dz         | j                  |      |d<   |||d<   | j                  | j                  ||            }| j                  |dg       }	| j                  |	|||      S )	a  
        fetch all trades made by the user

        https://docs.onetrading.com/#all-trades

        :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
        :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
        Nr(   r  r  zq fetchMyTrades() requires a "to" iso8601 string param with the since argument is specified, max range is 100 daysr  rc  rm  )
rz  rP  rD  r   r(   r  privateGetAccountTradesr  r  ro  )
r(  rV  r  r  r1  r  rP  r  r2  rp  s
             r*  fetch_my_tradeszonetrading.fetch_my_trades@  s     	
 [[(F)/G%&!!&$/Bz'  3f  )f  g  g"ll51GFO',GO$//GV0LM> ~~hD  vueDDr+  r   GETc                    | j                   d   |   dz   | j                  z   dz   | j                  ||      z   }| j                  || j	                  |            }|dk(  r|rt|d| j                  |      z   z  }n\|dk(  rW| j                          dd| j                  z   d}|d	k(  r| j                  |      }d|d
<   n|r|d| j                  |      z   z  }||||dS )Nr   rW  r   ?r   zapplication/jsonzBearer )AcceptAuthorizationPOSTzContent-Type)urlr   bodyheaders)	r   r-   implode_paramsrq  extract_params	urlencodecheck_required_credentialsr   json)	r(  pathr   r   r1  r}  r|  r{  querys	            r*  signzonetrading.sign  s    iis#c)DLL83>ATATUY[aAbb		&$"5"5d";<(?sT^^E222I++-,!*T[[!8G yy'*<'3!666CfdwOOr+  r5  reasonr{  r   r}  r|  c
                     |y | j                  |d      }
|
]| j                  dz   |z   }| j                  | j                  d   |
|       | j	                  | j                  d   |
|       t        |      y )Nerror r   r   )rD  r(   throw_exactly_matched_exceptionr   throw_broadly_matched_exceptionr   )r(  r5  r  r{  r   r}  r|  r2  requestHeadersrequestBodymessagefeedbacks               r*  handle_errorszonetrading.handle_errors  s}     ""8W5ww}t+H001I7T\]001I7T\]))r+  )N);__name__
__module____qualname__r   r&  r   r3  r   rK  r   r	   rO  dictrn  r   rt  rs  rr  r|  r   r  strr  r   r   r  r   r  listr  r  r   r  r   r  r  r   r'  r   r:  r6  r4  r   r   floatr
   rR  rV  rY  r^  ra  rh  rk  rq  rt  r  intr  __classcell__)r)  s   @r*  r%   r%      s   [# [z
 !# ;s ;$ ') *Z *X $& ,$v, ,09
4 9
F 9
v )+ b{ b, 02 &P 13 +Z
 
"24 2 26 2h 02 "33 "3f "3H 04B &GW &G7 &GP :>b Qos Qo3 QoY Qof(
 (
4 (
T 26DW[df ,I# ,Ic ,IQT ,Ikoptku ,I\M Mv M M^) ) $& ,( ,:: :i iv i iV3S 3Hs H gksu C23 C2i C2y C2RW C2`c C2J 37r *s *C *> /32  . 04B  . 26b 9*c 9*3 9*v /3TXac sE sE3 sEc sEhlmrhs sEj 154VZce Z# ZS ZPS Zjnotju Z" 9=4^bkm 8ES 8E# 8ES 8EX[ 8Et -1tRV_a ?Ec ?E ?EC ?EB &eBSW P(# s  c TX `c r+  r%   N))ccxt.base.exchanger   ccxt.abstract.onetradingr   ccxt.base.typesr   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!   ccxt.base.decimal_to_precisionr"   ccxt.base.preciser#   r%    r+  r*  <module>r     sh    ( 0 c  c  c  c  c  * 0 - . ' . + ) * ) + 1 4 %I; Ir+  