ccxt 4.4.78__py2.py3-none-any.whl → 4.4.82__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. ccxt/__init__.py +1 -1
  2. ccxt/abstract/bitmart.py +1 -0
  3. ccxt/apex.py +21 -31
  4. ccxt/ascendex.py +23 -6
  5. ccxt/async_support/__init__.py +1 -1
  6. ccxt/async_support/apex.py +21 -31
  7. ccxt/async_support/ascendex.py +23 -6
  8. ccxt/async_support/base/exchange.py +5 -1
  9. ccxt/async_support/bigone.py +17 -14
  10. ccxt/async_support/binance.py +6 -0
  11. ccxt/async_support/bingx.py +16 -35
  12. ccxt/async_support/bitfinex.py +120 -82
  13. ccxt/async_support/bitget.py +58 -66
  14. ccxt/async_support/bitmart.py +7 -2
  15. ccxt/async_support/bitmex.py +8 -1
  16. ccxt/async_support/bitopro.py +5 -1
  17. ccxt/async_support/bitrue.py +2 -1
  18. ccxt/async_support/bitso.py +1 -1
  19. ccxt/async_support/bitteam.py +2 -0
  20. ccxt/async_support/bitvavo.py +25 -10
  21. ccxt/async_support/btcalpha.py +1 -1
  22. ccxt/async_support/btcmarkets.py +1 -1
  23. ccxt/async_support/btcturk.py +1 -1
  24. ccxt/async_support/bybit.py +29 -15
  25. ccxt/async_support/coinbase.py +3 -15
  26. ccxt/async_support/coinex.py +1 -0
  27. ccxt/async_support/coinlist.py +1 -0
  28. ccxt/async_support/coinone.py +1 -0
  29. ccxt/async_support/delta.py +3 -0
  30. ccxt/async_support/deribit.py +1 -0
  31. ccxt/async_support/hollaex.py +1 -0
  32. ccxt/async_support/htx.py +9 -5
  33. ccxt/async_support/huobijp.py +1 -0
  34. ccxt/async_support/hyperliquid.py +14 -0
  35. ccxt/async_support/kraken.py +2 -0
  36. ccxt/async_support/okx.py +2 -3
  37. ccxt/async_support/oxfun.py +21 -1
  38. ccxt/async_support/poloniex.py +1 -0
  39. ccxt/async_support/timex.py +2 -2
  40. ccxt/async_support/upbit.py +43 -21
  41. ccxt/async_support/whitebit.py +65 -12
  42. ccxt/base/exchange.py +20 -2
  43. ccxt/bigone.py +17 -14
  44. ccxt/binance.py +6 -0
  45. ccxt/bingx.py +16 -35
  46. ccxt/bitfinex.py +120 -82
  47. ccxt/bitget.py +58 -66
  48. ccxt/bitmart.py +7 -2
  49. ccxt/bitmex.py +8 -1
  50. ccxt/bitopro.py +5 -1
  51. ccxt/bitrue.py +2 -1
  52. ccxt/bitso.py +1 -1
  53. ccxt/bitteam.py +2 -0
  54. ccxt/bitvavo.py +25 -10
  55. ccxt/btcalpha.py +1 -1
  56. ccxt/btcmarkets.py +1 -1
  57. ccxt/btcturk.py +1 -1
  58. ccxt/bybit.py +29 -15
  59. ccxt/coinbase.py +3 -15
  60. ccxt/coinex.py +1 -0
  61. ccxt/coinlist.py +1 -0
  62. ccxt/coinone.py +1 -0
  63. ccxt/delta.py +3 -0
  64. ccxt/deribit.py +1 -0
  65. ccxt/hollaex.py +1 -0
  66. ccxt/htx.py +9 -5
  67. ccxt/huobijp.py +1 -0
  68. ccxt/hyperliquid.py +14 -0
  69. ccxt/kraken.py +2 -0
  70. ccxt/okx.py +2 -3
  71. ccxt/oxfun.py +21 -1
  72. ccxt/poloniex.py +1 -0
  73. ccxt/pro/__init__.py +1 -1
  74. ccxt/pro/binance.py +3 -3
  75. ccxt/pro/coinbase.py +41 -53
  76. ccxt/pro/hyperliquid.py +10 -2
  77. ccxt/pro/upbit.py +42 -0
  78. ccxt/test/tests_async.py +0 -1
  79. ccxt/test/tests_sync.py +0 -1
  80. ccxt/timex.py +2 -2
  81. ccxt/upbit.py +43 -21
  82. ccxt/whitebit.py +65 -12
  83. {ccxt-4.4.78.dist-info → ccxt-4.4.82.dist-info}/METADATA +9 -13
  84. {ccxt-4.4.78.dist-info → ccxt-4.4.82.dist-info}/RECORD +87 -87
  85. {ccxt-4.4.78.dist-info → ccxt-4.4.82.dist-info}/LICENSE.txt +0 -0
  86. {ccxt-4.4.78.dist-info → ccxt-4.4.82.dist-info}/WHEEL +0 -0
  87. {ccxt-4.4.78.dist-info → ccxt-4.4.82.dist-info}/top_level.txt +0 -0
ccxt/pro/coinbase.py CHANGED
@@ -78,7 +78,7 @@ class coinbase(ccxt.async_support.coinbase):
78
78
  messageHash = messageHash + '::' + ','.join(symbol)
79
79
  elif symbol is not None:
80
80
  market = self.market(symbol)
81
- messageHash = name + '::' + market['id']
81
+ messageHash = name + '::' + symbol
82
82
  productIds = [market['id']]
83
83
  url = self.urls['api']['ws']
84
84
  subscribe = {
@@ -115,7 +115,7 @@ class coinbase(ccxt.async_support.coinbase):
115
115
  market = self.market(symbol)
116
116
  marketId = market['id']
117
117
  productIds.append(marketId)
118
- messageHashes.append(name + '::' + marketId)
118
+ messageHashes.append(name + '::' + symbol)
119
119
  url = self.urls['api']['ws']
120
120
  subscribe = {
121
121
  'type': 'subscribe',
@@ -176,8 +176,11 @@ class coinbase(ccxt.async_support.coinbase):
176
176
  if symbols is None:
177
177
  symbols = self.symbols
178
178
  name = 'ticker_batch'
179
- tickers = await self.subscribe(name, False, symbols, params)
179
+ ticker = await self.subscribe_multiple(name, False, symbols, params)
180
180
  if self.newUpdates:
181
+ tickers = {}
182
+ symbol = ticker['symbol']
183
+ tickers[symbol] = ticker
181
184
  return tickers
182
185
  return self.tickers
183
186
 
@@ -272,7 +275,7 @@ class coinbase(ccxt.async_support.coinbase):
272
275
  #
273
276
  #
274
277
  channel = self.safe_string(message, 'channel')
275
- events = self.safe_value(message, 'events', [])
278
+ events = self.safe_list(message, 'events', [])
276
279
  datetime = self.safe_string(message, 'timestamp')
277
280
  timestamp = self.parse8601(datetime)
278
281
  newTickers = []
@@ -281,31 +284,18 @@ class coinbase(ccxt.async_support.coinbase):
281
284
  tickers = self.safe_list(tickersObj, 'tickers', [])
282
285
  for j in range(0, len(tickers)):
283
286
  ticker = tickers[j]
287
+ wsMarketId = self.safe_string(ticker, 'product_id')
288
+ if wsMarketId is None:
289
+ continue
284
290
  result = self.parse_ws_ticker(ticker)
285
291
  result['timestamp'] = timestamp
286
292
  result['datetime'] = datetime
287
293
  symbol = result['symbol']
288
294
  self.tickers[symbol] = result
289
- wsMarketId = self.safe_string(ticker, 'product_id')
290
- if wsMarketId is None:
291
- continue
292
- messageHash = channel + '::' + wsMarketId
293
295
  newTickers.append(result)
296
+ messageHash = channel + '::' + symbol
294
297
  client.resolve(result, messageHash)
295
- if messageHash.endswith('USD'):
296
- client.resolve(result, messageHash + 'C') # sometimes we subscribe to BTC/USDC and coinbase returns BTC/USD
297
- messageHashes = self.find_message_hashes(client, 'ticker_batch::')
298
- for i in range(0, len(messageHashes)):
299
- messageHash = messageHashes[i]
300
- parts = messageHash.split('::')
301
- symbolsString = parts[1]
302
- symbols = symbolsString.split(',')
303
- tickers = self.filter_by_array(newTickers, 'symbol', symbols)
304
- if not self.is_empty(tickers):
305
- client.resolve(tickers, messageHash)
306
- if messageHash.endswith('USD'):
307
- client.resolve(tickers, messageHash + 'C') # sometimes we subscribe to BTC/USDC and coinbase returns BTC/USD
308
- return message
298
+ self.try_resolve_usdc(client, messageHash, result)
309
299
 
310
300
  def parse_ws_ticker(self, ticker, market=None):
311
301
  #
@@ -470,13 +460,13 @@ class coinbase(ccxt.async_support.coinbase):
470
460
  # ]
471
461
  # }
472
462
  #
473
- events = self.safe_value(message, 'events')
463
+ events = self.safe_list(message, 'events')
474
464
  event = self.safe_value(events, 0)
475
- trades = self.safe_value(event, 'trades')
476
- trade = self.safe_value(trades, 0)
465
+ trades = self.safe_list(event, 'trades')
466
+ trade = self.safe_dict(trades, 0)
477
467
  marketId = self.safe_string(trade, 'product_id')
478
- messageHash = 'market_trades::' + marketId
479
468
  symbol = self.safe_symbol(marketId)
469
+ messageHash = 'market_trades::' + symbol
480
470
  tradesArray = self.safe_value(self.trades, symbol)
481
471
  if tradesArray is None:
482
472
  tradesLimit = self.safe_integer(self.options, 'tradesLimit', 1000)
@@ -484,14 +474,12 @@ class coinbase(ccxt.async_support.coinbase):
484
474
  self.trades[symbol] = tradesArray
485
475
  for i in range(0, len(events)):
486
476
  currentEvent = events[i]
487
- currentTrades = self.safe_value(currentEvent, 'trades')
477
+ currentTrades = self.safe_list(currentEvent, 'trades')
488
478
  for j in range(0, len(currentTrades)):
489
479
  item = currentTrades[i]
490
480
  tradesArray.append(self.parse_trade(item))
491
481
  client.resolve(tradesArray, messageHash)
492
- if marketId.endswith('USD'):
493
- client.resolve(tradesArray, messageHash + 'C') # sometimes we subscribe to BTC/USDC and coinbase returns BTC/USD
494
- return message
482
+ self.try_resolve_usdc(client, messageHash, tradesArray)
495
483
 
496
484
  def handle_order(self, client, message):
497
485
  #
@@ -522,14 +510,14 @@ class coinbase(ccxt.async_support.coinbase):
522
510
  # ]
523
511
  # }
524
512
  #
525
- events = self.safe_value(message, 'events')
513
+ events = self.safe_list(message, 'events')
526
514
  marketIds = []
527
515
  if self.orders is None:
528
516
  limit = self.safe_integer(self.options, 'ordersLimit', 1000)
529
517
  self.orders = ArrayCacheBySymbolById(limit)
530
518
  for i in range(0, len(events)):
531
519
  event = events[i]
532
- responseOrders = self.safe_value(event, 'orders')
520
+ responseOrders = self.safe_list(event, 'orders')
533
521
  for j in range(0, len(responseOrders)):
534
522
  responseOrder = responseOrders[j]
535
523
  parsed = self.parse_ws_order(responseOrder)
@@ -540,12 +528,11 @@ class coinbase(ccxt.async_support.coinbase):
540
528
  cachedOrders.append(parsed)
541
529
  for i in range(0, len(marketIds)):
542
530
  marketId = marketIds[i]
543
- messageHash = 'user::' + marketId
531
+ symbol = self.safe_symbol(marketId)
532
+ messageHash = 'user::' + symbol
544
533
  client.resolve(self.orders, messageHash)
545
- if messageHash.endswith('USD'):
546
- client.resolve(self.orders, messageHash + 'C') # sometimes we subscribe to BTC/USDC and coinbase returns BTC/USD
534
+ self.try_resolve_usdc(client, messageHash, self.orders)
547
535
  client.resolve(self.orders, 'user')
548
- return message
549
536
 
550
537
  def parse_ws_order(self, order, market=None):
551
538
  #
@@ -621,7 +608,7 @@ class coinbase(ccxt.async_support.coinbase):
621
608
  # {
622
609
  # "side": "bid",
623
610
  # "event_time": "1970-01-01T00:00:00Z",
624
- # "price_level": "21921.73",
611
+ # "price_level": "21921.74",
625
612
  # "new_quantity": "0.06317902"
626
613
  # },
627
614
  # {
@@ -635,34 +622,35 @@ class coinbase(ccxt.async_support.coinbase):
635
622
  # ]
636
623
  # }
637
624
  #
638
- events = self.safe_value(message, 'events')
625
+ events = self.safe_list(message, 'events')
639
626
  datetime = self.safe_string(message, 'timestamp')
640
627
  for i in range(0, len(events)):
641
628
  event = events[i]
642
- updates = self.safe_value(event, 'updates', [])
629
+ updates = self.safe_list(event, 'updates', [])
643
630
  marketId = self.safe_string(event, 'product_id')
644
631
  # sometimes we subscribe to BTC/USDC and coinbase returns BTC/USD, are aliases
645
632
  market = self.safe_market(marketId)
646
- messageHash = 'level2::' + market['id']
647
633
  symbol = market['symbol']
634
+ messageHash = 'level2::' + symbol
648
635
  subscription = self.safe_value(client.subscriptions, messageHash, {})
649
636
  limit = self.safe_integer(subscription, 'limit')
650
637
  type = self.safe_string(event, 'type')
651
638
  if type == 'snapshot':
652
639
  self.orderbooks[symbol] = self.order_book({}, limit)
653
- orderbook = self.orderbooks[symbol]
654
- self.handle_order_book_helper(orderbook, updates)
655
- orderbook['timestamp'] = self.parse8601(datetime)
656
- orderbook['datetime'] = datetime
657
- orderbook['symbol'] = symbol
658
- client.resolve(orderbook, messageHash)
659
- elif type == 'update':
660
- orderbook = self.orderbooks[symbol]
661
- self.handle_order_book_helper(orderbook, updates)
662
- orderbook['datetime'] = datetime
663
- orderbook['timestamp'] = self.parse8601(datetime)
664
- orderbook['symbol'] = symbol
665
- client.resolve(orderbook, messageHash)
640
+ # unknown bug, can't reproduce, but sometimes orderbook is None
641
+ if not (symbol in self.orderbooks) and self.orderbooks[symbol] is None:
642
+ continue
643
+ orderbook = self.orderbooks[symbol]
644
+ self.handle_order_book_helper(orderbook, updates)
645
+ orderbook['timestamp'] = self.parse8601(datetime)
646
+ orderbook['datetime'] = datetime
647
+ orderbook['symbol'] = symbol
648
+ client.resolve(orderbook, messageHash)
649
+ self.try_resolve_usdc(client, messageHash, orderbook)
650
+
651
+ def try_resolve_usdc(self, client, messageHash, result):
652
+ if messageHash.endswith('/USD') or messageHash.endswith('-USD'):
653
+ client.resolve(result, messageHash + 'C') # when subscribing to BTC/USDC and coinbase returns BTC/USD, so resolve USDC too
666
654
 
667
655
  def handle_subscription_status(self, client, message):
668
656
  #
ccxt/pro/hyperliquid.py CHANGED
@@ -103,7 +103,11 @@ class hyperliquid(ccxt.async_support.hyperliquid):
103
103
  await self.load_markets()
104
104
  order, globalParams = self.parseCreateEditOrderArgs(None, symbol, type, side, amount, price, params)
105
105
  orders = await self.create_orders_ws([order], globalParams)
106
- return orders[0]
106
+ parsedOrder = orders[0]
107
+ orderInfo = self.safe_dict(parsedOrder, 'info')
108
+ # handle potential error here
109
+ self.handle_errors(None, None, None, None, None, self.json(orderInfo), orderInfo, None, None)
110
+ return parsedOrder
107
111
 
108
112
  async def edit_order_ws(self, id: str, symbol: str, type: str, side: str, amount: Num = None, price: Num = None, params={}):
109
113
  """
@@ -140,7 +144,11 @@ class hyperliquid(ccxt.async_support.hyperliquid):
140
144
  dataObject = self.safe_dict(responseObject, 'data', {})
141
145
  statuses = self.safe_list(dataObject, 'statuses', [])
142
146
  first = self.safe_dict(statuses, 0, {})
143
- return self.parse_order(first, market)
147
+ parsedOrder = self.parse_order(first, market)
148
+ orderInfo = self.safe_dict(parsedOrder, 'info')
149
+ # handle potential error here
150
+ self.handle_errors(None, None, None, None, None, self.json(orderInfo), orderInfo, None, None)
151
+ return parsedOrder
144
152
 
145
153
  async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
146
154
  """
ccxt/pro/upbit.py CHANGED
@@ -8,6 +8,7 @@ from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById
8
8
  from ccxt.base.types import Any, Balances, Int, Order, OrderBook, Str, Strings, Ticker, Tickers, Trade
9
9
  from ccxt.async_support.base.ws.client import Client
10
10
  from typing import List
11
+ from ccxt.base.errors import NotSupported
11
12
 
12
13
 
13
14
  class upbit(ccxt.async_support.upbit):
@@ -21,6 +22,7 @@ class upbit(ccxt.async_support.upbit):
21
22
  'watchTickers': True,
22
23
  'watchTrades': True,
23
24
  'watchTradesForSymbols': True,
25
+ 'watchOHLCV': True,
24
26
  'watchOrders': True,
25
27
  'watchMyTrades': True,
26
28
  'watchBalance': True,
@@ -190,6 +192,25 @@ class upbit(ccxt.async_support.upbit):
190
192
  orderbook = await self.watch_public(symbol, 'orderbook')
191
193
  return orderbook.limit()
192
194
 
195
+ async def watch_ohlcv(self, symbol: str, timeframe='1s', since: Int = None, limit: Int = None, params={}) -> List[list]:
196
+ """
197
+ watches information an OHLCV with timestamp, openingPrice, highPrice, lowPrice, tradePrice, baseVolume in 1s.
198
+
199
+ https://docs.upbit.com/kr/reference/websocket-candle for Upbit KR
200
+ https://global-docs.upbit.com/reference/websocket-candle for Upbit Global
201
+
202
+ :param str symbol: unified market symbol of the market orders were made in
203
+ :param str timeframe: specifies the OHLCV candle interval to watch. As of now, Upbit only supports 1s candles.
204
+ :param int [since]: the earliest time in ms to fetch orders for
205
+ :param int [limit]: the maximum number of order structures to retrieve
206
+ :param dict [params]: extra parameters specific to the exchange API endpoint
207
+ :returns OHLCV[]: a list of `OHLCV structures <https://docs.ccxt.com/#/?id=ohlcv-structure>`
208
+ """
209
+ if timeframe != '1s':
210
+ raise NotSupported(self.id + ' watchOHLCV does not support' + timeframe + ' candle.')
211
+ timeFrameOHLCV = 'candle.' + timeframe
212
+ return await self.watch_public(symbol, timeFrameOHLCV)
213
+
193
214
  def handle_ticker(self, client: Client, message):
194
215
  # 2020-03-17T23:07:36.511Z "onMessage" <Buffer 7b 22 74 79 70 65 22 3a 22 74 69 63 6b 65 72 22 2c 22 63 6f 64 65 22 3a 22 42 54 43 2d 45 54 48 22 2c 22 6f 70 65 6e 69 6e 67 5f 70 72 69 63 65 22 3a ... >
195
216
  # {type: "ticker",
@@ -313,6 +334,26 @@ class upbit(ccxt.async_support.upbit):
313
334
  messageHash = 'trade:' + marketId
314
335
  client.resolve(stored, messageHash)
315
336
 
337
+ def handle_ohlcv(self, client: Client, message):
338
+ # {
339
+ # type: 'candle.1s',
340
+ # code: 'KRW-USDT',
341
+ # candle_date_time_utc: '2025-04-22T09:50:34',
342
+ # candle_date_time_kst: '2025-04-22T18:50:34',
343
+ # opening_price: 1438,
344
+ # high_price: 1438,
345
+ # low_price: 1438,
346
+ # trade_price: 1438,
347
+ # candle_acc_trade_volume: 1145.8935,
348
+ # candle_acc_trade_price: 1647794.853,
349
+ # timestamp: 1745315434125,
350
+ # stream_type: 'REALTIME'
351
+ # }
352
+ marketId = self.safe_string(message, 'code')
353
+ messageHash = 'candle.1s:' + marketId
354
+ ohlcv = self.parse_ohlcv(message)
355
+ client.resolve(ohlcv, messageHash)
356
+
316
357
  async def authenticate(self, params={}):
317
358
  self.check_required_credentials()
318
359
  wsOptions: dict = self.safe_dict(self.options, 'ws', {})
@@ -611,6 +652,7 @@ class upbit(ccxt.async_support.upbit):
611
652
  'trade': self.handle_trades,
612
653
  'myOrder': self.handle_my_order,
613
654
  'myAsset': self.handle_balance,
655
+ 'candle.1s': self.handle_ohlcv,
614
656
  }
615
657
  methodName = self.safe_string(message, 'type')
616
658
  method = self.safe_value(methods, methodName)
ccxt/test/tests_async.py CHANGED
@@ -348,7 +348,6 @@ class testMainClass:
348
348
  'fetchOHLCV': [symbol],
349
349
  'fetchTrades': [symbol],
350
350
  'fetchOrderBook': [symbol],
351
- 'fetchL2OrderBook': [symbol],
352
351
  'fetchOrderBooks': [],
353
352
  'fetchBidsAsks': [],
354
353
  'fetchStatus': [],
ccxt/test/tests_sync.py CHANGED
@@ -345,7 +345,6 @@ class testMainClass:
345
345
  'fetchOHLCV': [symbol],
346
346
  'fetchTrades': [symbol],
347
347
  'fetchOrderBook': [symbol],
348
- 'fetchL2OrderBook': [symbol],
349
348
  'fetchOrderBooks': [],
350
349
  'fetchBidsAsks': [],
351
350
  'fetchStatus': [],
ccxt/timex.py CHANGED
@@ -1526,7 +1526,7 @@ class timex(Exchange, ImplicitAPI):
1526
1526
  'cost': feeCost,
1527
1527
  'currency': feeCurrency,
1528
1528
  }
1529
- return {
1529
+ return self.safe_trade({
1530
1530
  'info': trade,
1531
1531
  'id': id,
1532
1532
  'timestamp': timestamp,
@@ -1540,7 +1540,7 @@ class timex(Exchange, ImplicitAPI):
1540
1540
  'cost': cost,
1541
1541
  'takerOrMaker': takerOrMaker,
1542
1542
  'fee': fee,
1543
- }
1543
+ })
1544
1544
 
1545
1545
  def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
1546
1546
  #
ccxt/upbit.py CHANGED
@@ -491,7 +491,8 @@ class upbit(Exchange, ImplicitAPI):
491
491
  def fetch_markets(self, params={}) -> List[Market]:
492
492
  """
493
493
 
494
- https://docs.upbit.com/reference/%EB%A7%88%EC%BC%93-%EC%BD%94%EB%93%9C-%EC%A1%B0%ED%9A%8C
494
+ https://docs.upbit.com/kr/reference/마켓-코드-조회
495
+ https://global-docs.upbit.com/reference/listing-market-list
495
496
 
496
497
  retrieves data on all markets for upbit
497
498
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -586,7 +587,8 @@ class upbit(Exchange, ImplicitAPI):
586
587
  def fetch_balance(self, params={}) -> Balances:
587
588
  """
588
589
 
589
- https://docs.upbit.com/reference/%EC%A0%84%EC%B2%B4-%EA%B3%84%EC%A2%8C-%EC%A1%B0%ED%9A%8C
590
+ https://docs.upbit.com/kr/reference/전체-계좌-조회
591
+ https://global-docs.upbit.com/reference/overall-account-inquiry
590
592
 
591
593
  query for balance and get the amount of funds available for trading or funds locked in orders
592
594
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -611,7 +613,8 @@ class upbit(Exchange, ImplicitAPI):
611
613
  def fetch_order_books(self, symbols: Strings = None, limit: Int = None, params={}) -> OrderBooks:
612
614
  """
613
615
 
614
- https://docs.upbit.com/reference/%ED%98%B8%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C
616
+ https://docs.upbit.com/kr/reference/호가-정보-조회
617
+ https://global-docs.upbit.com/reference/order-book-list
615
618
 
616
619
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data for multiple markets
617
620
  :param str[]|None symbols: list of unified market symbols, all symbols fetched if None, default is None
@@ -677,7 +680,8 @@ class upbit(Exchange, ImplicitAPI):
677
680
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
678
681
  """
679
682
 
680
- https://docs.upbit.com/reference/%ED%98%B8%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C
683
+ https://docs.upbit.com/kr/reference/호가-정보-조회
684
+ https://global-docs.upbit.com/reference/order-book-list
681
685
 
682
686
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
683
687
  :param str symbol: unified symbol of the market to fetch the order book for
@@ -747,7 +751,8 @@ class upbit(Exchange, ImplicitAPI):
747
751
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
748
752
  """
749
753
 
750
- https://docs.upbit.com/reference/ticker%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4
754
+ https://docs.upbit.com/kr/reference/ticker현재가-정보
755
+ https://global-docs.upbit.com/reference/tickers
751
756
 
752
757
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
753
758
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
@@ -804,7 +809,8 @@ class upbit(Exchange, ImplicitAPI):
804
809
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
805
810
  """
806
811
 
807
- https://docs.upbit.com/reference/ticker%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4
812
+ https://docs.upbit.com/kr/reference/ticker현재가-정보
813
+ https://global-docs.upbit.com/reference/tickers
808
814
 
809
815
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
810
816
  :param str symbol: unified symbol of the market to fetch the ticker for
@@ -885,7 +891,8 @@ class upbit(Exchange, ImplicitAPI):
885
891
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
886
892
  """
887
893
 
888
- https://docs.upbit.com/reference/%EC%B5%9C%EA%B7%BC-%EC%B2%B4%EA%B2%B0-%EB%82%B4%EC%97%AD
894
+ https://docs.upbit.com/kr/reference/최근-체결-내역
895
+ https://global-docs.upbit.com/reference/today-trades-history
889
896
 
890
897
  get the list of most recent trades for a particular symbol
891
898
  :param str symbol: unified symbol of the market to fetch trades for
@@ -930,7 +937,8 @@ class upbit(Exchange, ImplicitAPI):
930
937
  def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
931
938
  """
932
939
 
933
- https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EA%B0%80%EB%8A%A5-%EC%A0%95%EB%B3%B4
940
+ https://docs.upbit.com/kr/reference/주문-가능-정보
941
+ https://global-docs.upbit.com/reference/available-order-information
934
942
 
935
943
  fetch the trading fees for a market
936
944
  :param str symbol: unified market symbol
@@ -961,7 +969,7 @@ class upbit(Exchange, ImplicitAPI):
961
969
  # },
962
970
  # "bid_account": {
963
971
  # "currency": "KRW",
964
- # "balance": "0.34202414",
972
+ # "balance": "0.34202415",
965
973
  # "locked": "4999.99999922",
966
974
  # "avg_buy_price": "0",
967
975
  # "avg_buy_price_modified": True,
@@ -1040,7 +1048,8 @@ class upbit(Exchange, ImplicitAPI):
1040
1048
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
1041
1049
  """
1042
1050
 
1043
- https://docs.upbit.com/reference/%EB%B6%84minute-%EC%BA%94%EB%93%A4-1
1051
+ https://docs.upbit.com/kr/reference/분minute-캔들-1
1052
+ https://global-docs.upbit.com/reference/minutes
1044
1053
 
1045
1054
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1046
1055
  :param str symbol: unified symbol of the market to fetch OHLCV data for
@@ -1126,7 +1135,7 @@ class upbit(Exchange, ImplicitAPI):
1126
1135
  """
1127
1136
  create a trade order
1128
1137
 
1129
- https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8%ED%95%98%EA%B8%B0
1138
+ https://docs.upbit.com/kr/reference/주문하기
1130
1139
  https://global-docs.upbit.com/reference/order
1131
1140
 
1132
1141
  :param str symbol: unified symbol of the market to create an order in
@@ -1220,7 +1229,8 @@ class upbit(Exchange, ImplicitAPI):
1220
1229
  def cancel_order(self, id: str, symbol: Str = None, params={}):
1221
1230
  """
1222
1231
 
1223
- https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EC%B7%A8%EC%86%8C
1232
+ https://docs.upbit.com/kr/reference/주문-취소
1233
+ https://global-docs.upbit.com/reference/order-cancel
1224
1234
 
1225
1235
  cancels an open order
1226
1236
  :param str id: order id
@@ -1257,7 +1267,8 @@ class upbit(Exchange, ImplicitAPI):
1257
1267
  def edit_order(self, id: str, symbol: str, type: OrderType, side: OrderSide, amount: Num = None, price: Num = None, params={}) -> Order:
1258
1268
  """
1259
1269
 
1260
- https://docs.upbit.com/reference/%EC%B7%A8%EC%86%8C-%ED%9B%84-%EC%9E%AC%EC%A3%BC%EB%AC%B8
1270
+ https://docs.upbit.com/kr/reference/취소-후-재주문
1271
+ https://global-docs.upbit.com/reference/cancel-and-new
1261
1272
 
1262
1273
  canceled existing order and create new order. It's only generated same side and symbol canceled order. it returns the data of the canceled order, except for `new_order_uuid` and `new_identifier`. to get the details of the new order, use `fetchOrder(new_order_uuid)`.
1263
1274
  :param str id: the uuid of the previous order you want to edit.
@@ -1357,7 +1368,8 @@ class upbit(Exchange, ImplicitAPI):
1357
1368
  def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1358
1369
  """
1359
1370
 
1360
- https://docs.upbit.com/reference/%EC%9E%85%EA%B8%88-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A1%B0%ED%9A%8C
1371
+ https://docs.upbit.com/kr/reference/입금-리스트-조회
1372
+ https://global-docs.upbit.com/reference/deposit-list-inquiry
1361
1373
 
1362
1374
  fetch all deposits made to an account
1363
1375
  :param str code: unified currency code
@@ -1400,6 +1412,7 @@ class upbit(Exchange, ImplicitAPI):
1400
1412
  """
1401
1413
  fetch information on a deposit
1402
1414
 
1415
+ https://docs.upbit.com/kr/reference/개별-입금-조회
1403
1416
  https://global-docs.upbit.com/reference/individual-deposit-inquiry
1404
1417
 
1405
1418
  :param str id: the unique id for the deposit
@@ -1437,7 +1450,8 @@ class upbit(Exchange, ImplicitAPI):
1437
1450
  def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1438
1451
  """
1439
1452
 
1440
- https://docs.upbit.com/reference/%EC%A0%84%EC%B2%B4-%EC%B6%9C%EA%B8%88-%EC%A1%B0%ED%9A%8C
1453
+ https://docs.upbit.com/kr/reference/전체-출금-조회
1454
+ https://global-docs.upbit.com/reference/withdrawal-list-inquiry
1441
1455
 
1442
1456
  fetch all withdrawals made from an account
1443
1457
  :param str code: unified currency code
@@ -1480,6 +1494,7 @@ class upbit(Exchange, ImplicitAPI):
1480
1494
  """
1481
1495
  fetch data on a currency withdrawal via the withdrawal id
1482
1496
 
1497
+ https://docs.upbit.com/kr/reference/개별-출금-조회
1483
1498
  https://global-docs.upbit.com/reference/individual-withdrawal-inquiry
1484
1499
 
1485
1500
  :param str id: the unique id for the withdrawal
@@ -1768,6 +1783,7 @@ class upbit(Exchange, ImplicitAPI):
1768
1783
  """
1769
1784
  fetch all unfilled currently open orders
1770
1785
 
1786
+ https://docs.upbit.com/kr/reference/대기-주문-조회
1771
1787
  https://global-docs.upbit.com/reference/open-order
1772
1788
 
1773
1789
  :param str symbol: unified market symbol
@@ -1814,6 +1830,7 @@ class upbit(Exchange, ImplicitAPI):
1814
1830
  """
1815
1831
  fetches information on multiple closed orders made by the user
1816
1832
 
1833
+ https://docs.upbit.com/kr/reference/종료-주문-조회
1817
1834
  https://global-docs.upbit.com/reference/closed-order
1818
1835
 
1819
1836
  :param str symbol: unified market symbol of the market orders were made in
@@ -1866,6 +1883,7 @@ class upbit(Exchange, ImplicitAPI):
1866
1883
  """
1867
1884
  fetches information on multiple canceled orders made by the user
1868
1885
 
1886
+ https://docs.upbit.com/kr/reference/종료-주문-조회
1869
1887
  https://global-docs.upbit.com/reference/closed-order
1870
1888
 
1871
1889
  :param str symbol: unified market symbol of the market orders were made in
@@ -1917,7 +1935,8 @@ class upbit(Exchange, ImplicitAPI):
1917
1935
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1918
1936
  """
1919
1937
 
1920
- https://docs.upbit.com/reference/%EA%B0%9C%EB%B3%84-%EC%A3%BC%EB%AC%B8-%EC%A1%B0%ED%9A%8C
1938
+ https://docs.upbit.com/kr/reference/개별-주문-조회
1939
+ https://global-docs.upbit.com/reference/individual-order-inquiry
1921
1940
 
1922
1941
  fetches information on an order made by the user
1923
1942
  :param str id: order id
@@ -1978,7 +1997,8 @@ class upbit(Exchange, ImplicitAPI):
1978
1997
  def fetch_deposit_addresses(self, codes: Strings = None, params={}) -> List[DepositAddress]:
1979
1998
  """
1980
1999
 
1981
- https://docs.upbit.com/reference/%EC%A0%84%EC%B2%B4-%EC%9E%85%EA%B8%88-%EC%A3%BC%EC%86%8C-%EC%A1%B0%ED%9A%8C
2000
+ https://docs.upbit.com/kr/reference/전체-입금-주소-조회
2001
+ https://global-docs.upbit.com/reference/general-deposit-address-inquiry
1982
2002
 
1983
2003
  fetch deposit addresses for multiple currencies and chain types
1984
2004
  :param str[]|None codes: list of unified currency codes, default is None
@@ -2034,7 +2054,8 @@ class upbit(Exchange, ImplicitAPI):
2034
2054
  def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
2035
2055
  """
2036
2056
 
2037
- https://docs.upbit.com/reference/%EC%A0%84%EC%B2%B4-%EC%9E%85%EA%B8%88-%EC%A3%BC%EC%86%8C-%EC%A1%B0%ED%9A%8C
2057
+ https://docs.upbit.com/kr/reference/개별-입금-주소-조회
2058
+ https://global-docs.upbit.com/reference/individual-deposit-address-inquiry
2038
2059
 
2039
2060
  fetch the deposit address for a currency associated with self account
2040
2061
  :param str code: unified currency code
@@ -2065,7 +2086,8 @@ class upbit(Exchange, ImplicitAPI):
2065
2086
  def create_deposit_address(self, code: str, params={}) -> DepositAddress:
2066
2087
  """
2067
2088
 
2068
- https://docs.upbit.com/reference/%EC%9E%85%EA%B8%88-%EC%A3%BC%EC%86%8C-%EC%83%9D%EC%84%B1-%EC%9A%94%EC%B2%AD
2089
+ https://docs.upbit.com/kr/reference/입금-주소-생성-요청
2090
+ https://global-docs.upbit.com/reference/deposit-address-generation
2069
2091
 
2070
2092
  create a currency deposit address
2071
2093
  :param str code: unified currency code of the currency for the deposit address
@@ -2102,8 +2124,8 @@ class upbit(Exchange, ImplicitAPI):
2102
2124
  def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
2103
2125
  """
2104
2126
 
2105
- https://docs.upbit.com/reference/디지털자산-출금하기
2106
- https://docs.upbit.com/reference/%EC%9B%90%ED%99%94-%EC%B6%9C%EA%B8%88%ED%95%98%EA%B8%B0
2127
+ https://docs.upbit.com/kr/reference/디지털자산-출금하기
2128
+ https://global-docs.upbit.com/reference/withdrawal-digital-assets
2107
2129
 
2108
2130
  make a withdrawal
2109
2131
  :param str code: unified currency code