ccxt 4.4.72__py2.py3-none-any.whl → 4.4.73__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.
ccxt/bybit.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.bybit import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Any, Balances, BorrowInterest, Conversion, CrossBorrowRate, Currencies, Currency, DepositAddress, Greeks, Int, LedgerEntry, Leverage, LeverageTier, LeverageTiers, LongShortRatio, Market, Num, Option, OptionChain, Order, OrderBook, OrderRequest, CancellationRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, FundingRate, FundingRates, Trade, TradingFeeInterface, TradingFees, Transaction, MarketInterface, TransferEntry
9
+ from ccxt.base.types import Any, Balances, BorrowInterest, Conversion, CrossBorrowRate, Currencies, Currency, DepositAddress, FundingHistory, Greeks, Int, LedgerEntry, Leverage, LeverageTier, LeverageTiers, Liquidation, LongShortRatio, Market, Num, Option, OptionChain, Order, OrderBook, OrderRequest, CancellationRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, FundingRate, FundingRates, Trade, TradingFeeInterface, TradingFees, Transaction, MarketInterface, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import AuthenticationError
@@ -2475,7 +2475,7 @@ class bybit(Exchange, ImplicitAPI):
2475
2475
  tickerList = self.safe_list(result, 'list', [])
2476
2476
  return self.parse_tickers(tickerList, parsedSymbols)
2477
2477
 
2478
- def fetch_bids_asks(self, symbols: Strings = None, params={}):
2478
+ def fetch_bids_asks(self, symbols: Strings = None, params={}) -> Tickers:
2479
2479
  """
2480
2480
  fetches the bid and ask price and volume for multiple markets
2481
2481
 
@@ -3689,7 +3689,7 @@ class bybit(Exchange, ImplicitAPI):
3689
3689
  'trades': None,
3690
3690
  }, market)
3691
3691
 
3692
- def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
3692
+ def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}) -> Order:
3693
3693
  """
3694
3694
  create a market buy order by providing the symbol and cost
3695
3695
 
@@ -3706,7 +3706,7 @@ class bybit(Exchange, ImplicitAPI):
3706
3706
  raise NotSupported(self.id + ' createMarketBuyOrderWithCost() supports spot orders only')
3707
3707
  return self.create_order(symbol, 'market', 'buy', cost, 1, params)
3708
3708
 
3709
- def create_market_sell_order_with_cost(self, symbol: str, cost: float, params={}):
3709
+ def create_market_sell_order_with_cost(self, symbol: str, cost: float, params={}) -> Order:
3710
3710
  """
3711
3711
  create a market sell order by providing the symbol and cost
3712
3712
 
@@ -3727,7 +3727,7 @@ class bybit(Exchange, ImplicitAPI):
3727
3727
  raise NotSupported(self.id + ' createMarketSellOrderWithCost() supports spot orders only')
3728
3728
  return self.create_order(symbol, 'market', 'sell', cost, 1, params)
3729
3729
 
3730
- def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
3730
+ def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}) -> Order:
3731
3731
  """
3732
3732
  create a trade order
3733
3733
 
@@ -3986,7 +3986,7 @@ class bybit(Exchange, ImplicitAPI):
3986
3986
  params = self.omit(params, ['stopPrice', 'timeInForce', 'stopLossPrice', 'takeProfitPrice', 'postOnly', 'clientOrderId', 'triggerPrice', 'stopLoss', 'takeProfit', 'trailingAmount', 'trailingTriggerPrice', 'hedged'])
3987
3987
  return self.extend(request, params)
3988
3988
 
3989
- def create_orders(self, orders: List[OrderRequest], params={}):
3989
+ def create_orders(self, orders: List[OrderRequest], params={}) -> List[Order]:
3990
3990
  """
3991
3991
  create a list of trade orders
3992
3992
 
@@ -4136,7 +4136,7 @@ class bybit(Exchange, ImplicitAPI):
4136
4136
  params = self.omit(params, ['stopPrice', 'stopLossPrice', 'takeProfitPrice', 'triggerPrice', 'clientOrderId', 'stopLoss', 'takeProfit'])
4137
4137
  return request
4138
4138
 
4139
- def edit_order(self, id: str, symbol: str, type: OrderType, side: OrderSide, amount: Num = None, price: Num = None, params={}):
4139
+ def edit_order(self, id: str, symbol: str, type: OrderType, side: OrderSide, amount: Num = None, price: Num = None, params={}) -> Order:
4140
4140
  """
4141
4141
  edit a trade order
4142
4142
 
@@ -4186,7 +4186,7 @@ class bybit(Exchange, ImplicitAPI):
4186
4186
  'id': self.safe_string(result, 'orderId'),
4187
4187
  })
4188
4188
 
4189
- def edit_orders(self, orders: List[OrderRequest], params={}):
4189
+ def edit_orders(self, orders: List[OrderRequest], params={}) -> List[Order]:
4190
4190
  """
4191
4191
  edit a list of trade orders
4192
4192
 
@@ -4297,7 +4297,7 @@ class bybit(Exchange, ImplicitAPI):
4297
4297
  request['category'] = 'option'
4298
4298
  return self.extend(request, params)
4299
4299
 
4300
- def cancel_order(self, id: str, symbol: Str = None, params={}):
4300
+ def cancel_order(self, id: str, symbol: Str = None, params={}) -> Order:
4301
4301
  """
4302
4302
  cancels an open order
4303
4303
 
@@ -4332,7 +4332,7 @@ class bybit(Exchange, ImplicitAPI):
4332
4332
  result = self.safe_dict(response, 'result', {})
4333
4333
  return self.parse_order(result, market)
4334
4334
 
4335
- def cancel_orders(self, ids, symbol: Str = None, params={}):
4335
+ def cancel_orders(self, ids, symbol: Str = None, params={}) -> List[Order]:
4336
4336
  """
4337
4337
  cancel multiple orders
4338
4338
 
@@ -4601,7 +4601,7 @@ class bybit(Exchange, ImplicitAPI):
4601
4601
  return response
4602
4602
  return self.parse_orders(orders, market)
4603
4603
 
4604
- def fetch_order_classic(self, id: str, symbol: Str = None, params={}):
4604
+ def fetch_order_classic(self, id: str, symbol: Str = None, params={}) -> Order:
4605
4605
  """
4606
4606
  fetches information on an order made by the user *classic accounts only*
4607
4607
 
@@ -4846,7 +4846,7 @@ classic accounts only/ spot not supported* fetches information on an order made
4846
4846
  data = self.add_pagination_cursor_to_result(response)
4847
4847
  return self.parse_orders(data, market, since, limit)
4848
4848
 
4849
- def fetch_closed_order(self, id: str, symbol: Str = None, params={}):
4849
+ def fetch_closed_order(self, id: str, symbol: Str = None, params={}) -> Order:
4850
4850
  """
4851
4851
  fetches information on a closed order made by the user
4852
4852
 
@@ -4876,7 +4876,7 @@ classic accounts only/ spot not supported* fetches information on an order made
4876
4876
  raise InvalidOrder(self.id + ' returned more than one order')
4877
4877
  return self.safe_value(result, 0)
4878
4878
 
4879
- def fetch_open_order(self, id: str, symbol: Str = None, params={}):
4879
+ def fetch_open_order(self, id: str, symbol: Str = None, params={}) -> Order:
4880
4880
  """
4881
4881
  fetches information on an open order made by the user
4882
4882
 
@@ -5032,7 +5032,7 @@ classic accounts only/ spot not supported* fetches information on an order made
5032
5032
  }
5033
5033
  return self.fetch_canceled_and_closed_orders(symbol, since, limit, self.extend(request, params))
5034
5034
 
5035
- def fetch_canceled_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
5035
+ def fetch_canceled_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
5036
5036
  """
5037
5037
  fetches information on multiple canceled orders made by the user
5038
5038
 
@@ -5155,7 +5155,7 @@ classic accounts only/ spot not supported* fetches information on an order made
5155
5155
  data = self.add_pagination_cursor_to_result(response)
5156
5156
  return self.parse_orders(data, market, since, limit)
5157
5157
 
5158
- def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
5158
+ def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
5159
5159
  """
5160
5160
  fetch all the trades made from a single order
5161
5161
 
@@ -5177,7 +5177,7 @@ classic accounts only/ spot not supported* fetches information on an order made
5177
5177
  params = self.omit(params, ['clientOrderId', 'orderLinkId'])
5178
5178
  return self.fetch_my_trades(symbol, since, limit, self.extend(request, params))
5179
5179
 
5180
- def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
5180
+ def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
5181
5181
  """
5182
5182
  fetch all trades made by the user
5183
5183
 
@@ -5900,7 +5900,7 @@ classic accounts only/ spot not supported* fetches information on an order made
5900
5900
  result = self.safe_dict(response, 'result', {})
5901
5901
  return self.parse_transaction(result, currency)
5902
5902
 
5903
- def fetch_position(self, symbol: str, params={}):
5903
+ def fetch_position(self, symbol: str, params={}) -> Position:
5904
5904
  """
5905
5905
  fetch data on a single open contract trade position
5906
5906
 
@@ -5971,7 +5971,7 @@ classic accounts only/ spot not supported* fetches information on an order made
5971
5971
  position['datetime'] = self.iso8601(timestamp)
5972
5972
  return position
5973
5973
 
5974
- def fetch_positions(self, symbols: Strings = None, params={}):
5974
+ def fetch_positions(self, symbols: Strings = None, params={}) -> List[Position]:
5975
5975
  """
5976
5976
  fetch all open positions
5977
5977
 
@@ -5983,9 +5983,14 @@ classic accounts only/ spot not supported* fetches information on an order made
5983
5983
  :param str [params.subType]: market subType, ['linear', 'inverse']
5984
5984
  :param str [params.baseCoin]: Base coin. Supports linear, inverse & option
5985
5985
  :param str [params.settleCoin]: Settle coin. Supports linear, inverse & option
5986
+ :param boolean [params.paginate]: default False, when True will automatically paginate by calling self endpoint multiple times
5986
5987
  :returns dict[]: a list of `position structure <https://docs.ccxt.com/#/?id=position-structure>`
5987
5988
  """
5988
5989
  self.load_markets()
5990
+ paginate = False
5991
+ paginate, params = self.handle_option_and_params(params, 'fetchPositions', 'paginate')
5992
+ if paginate:
5993
+ return self.fetch_paginated_call_cursor('fetchPositions', symbols, None, None, params, 'nextPageCursor', 'cursor', None, 200)
5989
5994
  symbol = None
5990
5995
  if (symbols is not None) and isinstance(symbols, list):
5991
5996
  symbolsLength = len(symbols)
@@ -6016,6 +6021,8 @@ classic accounts only/ spot not supported* fetches information on an order made
6016
6021
  # inverse
6017
6022
  if symbol is None and baseCoin is None:
6018
6023
  request['category'] = 'inverse'
6024
+ if self.safe_integer(params, 'limit') is None:
6025
+ request['limit'] = 200 # max limit
6019
6026
  params = self.omit(params, ['type'])
6020
6027
  request['category'] = type
6021
6028
  response = self.privateGetV5PositionList(self.extend(request, params))
@@ -6064,7 +6071,7 @@ classic accounts only/ spot not supported* fetches information on an order made
6064
6071
  results.append(self.parse_position(rawPosition))
6065
6072
  return self.filter_by_array_positions(results, 'symbol', symbols, False)
6066
6073
 
6067
- def parse_position(self, position: dict, market: Market = None):
6074
+ def parse_position(self, position: dict, market: Market = None) -> Position:
6068
6075
  #
6069
6076
  # linear swap
6070
6077
  #
@@ -7015,7 +7022,7 @@ classic accounts only/ spot not supported* fetches information on an order made
7015
7022
  'amount': amount,
7016
7023
  })
7017
7024
 
7018
- def parse_margin_loan(self, info, currency: Currency = None):
7025
+ def parse_margin_loan(self, info, currency: Currency = None) -> dict:
7019
7026
  #
7020
7027
  # borrowCrossMargin
7021
7028
  #
@@ -7253,7 +7260,7 @@ classic accounts only/ spot not supported* fetches information on an order made
7253
7260
  result[symbol] = fee
7254
7261
  return result
7255
7262
 
7256
- def parse_deposit_withdraw_fee(self, fee, currency: Currency = None):
7263
+ def parse_deposit_withdraw_fee(self, fee, currency: Currency = None) -> Any:
7257
7264
  #
7258
7265
  # {
7259
7266
  # "name": "BTC",
@@ -7701,7 +7708,7 @@ classic accounts only/ spot not supported* fetches information on an order made
7701
7708
  'info': greeks,
7702
7709
  }
7703
7710
 
7704
- def fetch_my_liquidations(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
7711
+ def fetch_my_liquidations(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Liquidation]:
7705
7712
  """
7706
7713
  retrieves the users liquidated positions
7707
7714
 
@@ -7780,7 +7787,7 @@ classic accounts only/ spot not supported* fetches information on an order made
7780
7787
  liquidations = self.add_pagination_cursor_to_result(response)
7781
7788
  return self.parse_liquidations(liquidations, market, since, limit)
7782
7789
 
7783
- def parse_liquidation(self, liquidation, market: Market = None):
7790
+ def parse_liquidation(self, liquidation, market: Market = None) -> Liquidation:
7784
7791
  #
7785
7792
  # {
7786
7793
  # "symbol": "ETHPERP",
@@ -7943,7 +7950,7 @@ classic accounts only/ spot not supported* fetches information on an order made
7943
7950
  })
7944
7951
  return tiers
7945
7952
 
7946
- def fetch_funding_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
7953
+ def fetch_funding_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[FundingHistory]:
7947
7954
  """
7948
7955
  fetch the history of funding payments paid and received on self account
7949
7956
 
@@ -7984,7 +7991,7 @@ classic accounts only/ spot not supported* fetches information on an order made
7984
7991
  fundings = self.add_pagination_cursor_to_result(response)
7985
7992
  return self.parse_incomes(fundings, market, since, limit)
7986
7993
 
7987
- def parse_income(self, income, market: Market = None):
7994
+ def parse_income(self, income, market: Market = None) -> object:
7988
7995
  #
7989
7996
  # {
7990
7997
  # "symbol": "XMRUSDT",
ccxt/defx.py CHANGED
@@ -613,7 +613,7 @@ class defx(Exchange, ImplicitAPI):
613
613
  'active': self.safe_string(market, 'status', '') == 'active',
614
614
  'contract': True,
615
615
  'linear': True,
616
- 'inverse': None,
616
+ 'inverse': False,
617
617
  'taker': self.safe_number(fees, 'taker'),
618
618
  'maker': self.safe_number(fees, 'maker'),
619
619
  'contractSize': self.parse_number('1'),
ccxt/derive.py CHANGED
@@ -640,6 +640,8 @@ class derive(Exchange, ImplicitAPI):
640
640
  optionType = 'put'
641
641
  else:
642
642
  optionType = 'call'
643
+ linear = True
644
+ inverse = False
643
645
  return self.safe_market_structure({
644
646
  'id': marketId,
645
647
  'symbol': symbol,
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.72'
7
+ __version__ = '4.4.73'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
@@ -22,7 +22,6 @@ from ccxt.pro.binanceusdm import binanceusdm # noqa
22
22
  from ccxt.pro.bingx import bingx # noqa: F401
23
23
  from ccxt.pro.bitcoincom import bitcoincom # noqa: F401
24
24
  from ccxt.pro.bitfinex import bitfinex # noqa: F401
25
- from ccxt.pro.bitfinex1 import bitfinex1 # noqa: F401
26
25
  from ccxt.pro.bitget import bitget # noqa: F401
27
26
  from ccxt.pro.bithumb import bithumb # noqa: F401
28
27
  from ccxt.pro.bitmart import bitmart # noqa: F401
@@ -97,7 +96,6 @@ exchanges = [
97
96
  'bingx',
98
97
  'bitcoincom',
99
98
  'bitfinex',
100
- 'bitfinex1',
101
99
  'bitget',
102
100
  'bithumb',
103
101
  'bitmart',
ccxt/test/tests_async.py CHANGED
@@ -1156,7 +1156,9 @@ class testMainClass:
1156
1156
 
1157
1157
  async def test_binance(self):
1158
1158
  exchange = self.init_offline_exchange('binance')
1159
- spot_id = 'x-R4BD3S82'
1159
+ spot_id = 'x-TKT5PX2F'
1160
+ swap_id = 'x-cvBPrNm9'
1161
+ inverse_swap_id = 'x-xcKtGhcu'
1160
1162
  spot_order_request = None
1161
1163
  try:
1162
1164
  await exchange.create_order('BTC/USDT', 'limit', 'buy', 1, 20000)
@@ -1165,7 +1167,6 @@ class testMainClass:
1165
1167
  client_order_id = spot_order_request['newClientOrderId']
1166
1168
  spot_id_string = str(spot_id)
1167
1169
  assert client_order_id.startswith(spot_id_string), 'binance - spot clientOrderId: ' + client_order_id + ' does not start with spotId' + spot_id_string
1168
- swap_id = 'x-xcKtGhcu'
1169
1170
  swap_order_request = None
1170
1171
  try:
1171
1172
  await exchange.create_order('BTC/USDT:USDT', 'limit', 'buy', 1, 20000)
@@ -1176,11 +1177,13 @@ class testMainClass:
1176
1177
  await exchange.create_order('BTC/USD:BTC', 'limit', 'buy', 1, 20000)
1177
1178
  except Exception as e:
1178
1179
  swap_inverse_order_request = self.urlencoded_to_dict(exchange.last_request_body)
1180
+ # linear swap
1179
1181
  client_order_id_swap = swap_order_request['newClientOrderId']
1180
1182
  swap_id_string = str(swap_id)
1181
1183
  assert client_order_id_swap.startswith(swap_id_string), 'binance - swap clientOrderId: ' + client_order_id_swap + ' does not start with swapId' + swap_id_string
1184
+ # inverse swap
1182
1185
  client_order_id_inverse = swap_inverse_order_request['newClientOrderId']
1183
- assert client_order_id_inverse.startswith(swap_id_string), 'binance - swap clientOrderIdInverse: ' + client_order_id_inverse + ' does not start with swapId' + swap_id_string
1186
+ assert client_order_id_inverse.startswith(inverse_swap_id), 'binance - swap clientOrderIdInverse: ' + client_order_id_inverse + ' does not start with swapId' + inverse_swap_id
1184
1187
  create_orders_request = None
1185
1188
  try:
1186
1189
  orders = [{
ccxt/test/tests_sync.py CHANGED
@@ -1153,7 +1153,9 @@ class testMainClass:
1153
1153
 
1154
1154
  def test_binance(self):
1155
1155
  exchange = self.init_offline_exchange('binance')
1156
- spot_id = 'x-R4BD3S82'
1156
+ spot_id = 'x-TKT5PX2F'
1157
+ swap_id = 'x-cvBPrNm9'
1158
+ inverse_swap_id = 'x-xcKtGhcu'
1157
1159
  spot_order_request = None
1158
1160
  try:
1159
1161
  exchange.create_order('BTC/USDT', 'limit', 'buy', 1, 20000)
@@ -1162,7 +1164,6 @@ class testMainClass:
1162
1164
  client_order_id = spot_order_request['newClientOrderId']
1163
1165
  spot_id_string = str(spot_id)
1164
1166
  assert client_order_id.startswith(spot_id_string), 'binance - spot clientOrderId: ' + client_order_id + ' does not start with spotId' + spot_id_string
1165
- swap_id = 'x-xcKtGhcu'
1166
1167
  swap_order_request = None
1167
1168
  try:
1168
1169
  exchange.create_order('BTC/USDT:USDT', 'limit', 'buy', 1, 20000)
@@ -1173,11 +1174,13 @@ class testMainClass:
1173
1174
  exchange.create_order('BTC/USD:BTC', 'limit', 'buy', 1, 20000)
1174
1175
  except Exception as e:
1175
1176
  swap_inverse_order_request = self.urlencoded_to_dict(exchange.last_request_body)
1177
+ # linear swap
1176
1178
  client_order_id_swap = swap_order_request['newClientOrderId']
1177
1179
  swap_id_string = str(swap_id)
1178
1180
  assert client_order_id_swap.startswith(swap_id_string), 'binance - swap clientOrderId: ' + client_order_id_swap + ' does not start with swapId' + swap_id_string
1181
+ # inverse swap
1179
1182
  client_order_id_inverse = swap_inverse_order_request['newClientOrderId']
1180
- assert client_order_id_inverse.startswith(swap_id_string), 'binance - swap clientOrderIdInverse: ' + client_order_id_inverse + ' does not start with swapId' + swap_id_string
1183
+ assert client_order_id_inverse.startswith(inverse_swap_id), 'binance - swap clientOrderIdInverse: ' + client_order_id_inverse + ' does not start with swapId' + inverse_swap_id
1181
1184
  create_orders_request = None
1182
1185
  try:
1183
1186
  orders = [{
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.4.72
3
+ Version: 4.4.73
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -49,7 +49,7 @@ Requires-Dist: mypy==1.6.1; extra == "type"
49
49
 
50
50
  # CCXT – CryptoCurrency eXchange Trading Library
51
51
 
52
- [![NPM Downloads](https://img.shields.io/npm/dy/ccxt.svg)](https://www.npmjs.com/package/ccxt) [![npm](https://img.shields.io/npm/v/ccxt.svg)](https://npmjs.com/package/ccxt) [![PyPI](https://img.shields.io/pypi/v/ccxt.svg)](https://pypi.python.org/pypi/ccxt) [![NuGet version](https://img.shields.io/nuget/v/ccxt)](https://www.nuget.org/packages/ccxt) [![GoDoc](https://pkg.go.dev/badge/github.com/ccxt/ccxt/go/v4?utm_source=godoc)](https://godoc.org/github.com/ccxt/ccxt/go/v4) [![Discord](https://img.shields.io/discord/690203284119617602?logo=discord&logoColor=white)](https://discord.gg/ccxt) [![Supported Exchanges](https://img.shields.io/badge/exchanges-110-blue.svg)](https://github.com/ccxt/ccxt/wiki/Exchange-Markets) [![Follow CCXT at x.com](https://img.shields.io/twitter/follow/ccxt_official.svg?style=social&label=CCXT)](https://x.com/ccxt_official)
52
+ [![NPM Downloads](https://img.shields.io/npm/dy/ccxt.svg)](https://www.npmjs.com/package/ccxt) [![npm](https://img.shields.io/npm/v/ccxt.svg)](https://npmjs.com/package/ccxt) [![PyPI](https://img.shields.io/pypi/v/ccxt.svg)](https://pypi.python.org/pypi/ccxt) [![NuGet version](https://img.shields.io/nuget/v/ccxt)](https://www.nuget.org/packages/ccxt) [![GoDoc](https://pkg.go.dev/badge/github.com/ccxt/ccxt/go/v4?utm_source=godoc)](https://godoc.org/github.com/ccxt/ccxt/go/v4) [![Discord](https://img.shields.io/discord/690203284119617602?logo=discord&logoColor=white)](https://discord.gg/ccxt) [![Supported Exchanges](https://img.shields.io/badge/exchanges-109-blue.svg)](https://github.com/ccxt/ccxt/wiki/Exchange-Markets) [![Follow CCXT at x.com](https://img.shields.io/twitter/follow/ccxt_official.svg?style=social&label=CCXT)](https://x.com/ccxt_official)
53
53
 
54
54
  A `JavaScript` / `Python` / `PHP` / `C#` / `Go` library for cryptocurrency trading and e-commerce with support for many bitcoin/ether/altcoin exchange markets and merchant APIs.
55
55
 
@@ -275,13 +275,13 @@ console.log(version, Object.keys(exchanges));
275
275
 
276
276
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
277
277
 
278
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.72/dist/ccxt.browser.min.js
279
- * unpkg: https://unpkg.com/ccxt@4.4.72/dist/ccxt.browser.min.js
278
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.73/dist/ccxt.browser.min.js
279
+ * unpkg: https://unpkg.com/ccxt@4.4.73/dist/ccxt.browser.min.js
280
280
 
281
281
  CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
282
282
 
283
283
  ```HTML
284
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.72/dist/ccxt.browser.min.js"></script>
284
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.73/dist/ccxt.browser.min.js"></script>
285
285
  ```
286
286
 
287
287
  Creates a global `ccxt` object:
@@ -1,28 +1,28 @@
1
- ccxt/__init__.py,sha256=3LVIMhq_lHbIefb2hpE1v8eYAyJPP2a2_libLCieXG0,16670
2
- ccxt/ace.py,sha256=l_4-pNkkJBINgPsBtM4b9Ff6t8Tp59tKCXstLesMzvc,44752
3
- ccxt/alpaca.py,sha256=t8ahjPZQEENMElUyPzH_1-I0i5VGsJpoUknpKl-IkKM,78428
4
- ccxt/ascendex.py,sha256=GhYPzSBRgwywQAXzLeog16aDydpl8jQXklyAMeZA1rA,155991
1
+ ccxt/__init__.py,sha256=RztRo9FpPzhLT86r6771MPBMQbE3EcsgxYGM4MiVGug,16570
2
+ ccxt/ace.py,sha256=BcblXVAXk7fiUdnosjRxZSiUFvH4KWpc1gYeBbXwvYc,46360
3
+ ccxt/alpaca.py,sha256=LHKHJ2Xcb-35lbzfb7CabINWiVSgmOWITYnT2WDzceg,80557
4
+ ccxt/ascendex.py,sha256=EsSZIh86lwNrpfSDu4p_3a5zlC9LPZCqavgK4Ol2wu0,156009
5
5
  ccxt/bequant.py,sha256=gNe6tFy91-lEW8pEYv2-SmmjpwAm403ZxIpuN_QZqVw,1193
6
6
  ccxt/bigone.py,sha256=3FADYcYU_fryjR1a3EoLFc4VRnY5pa7bUaWx1gnoA-s,95960
7
- ccxt/binance.py,sha256=sVP1qflHIb4koLVj3503yBqgRutpWQ-FmTl73OmI9fg,688251
7
+ ccxt/binance.py,sha256=BcOYc0qeMHJu2lvkTCDw5MUsnmDPYQtk1WkrW2TKJnM,688461
8
8
  ccxt/binancecoinm.py,sha256=UEJd_dZQkrLdJpaCE_t9aHCwJdxpjheyTaWJ8RKWIm8,1720
9
9
  ccxt/binanceus.py,sha256=fPaJxinZbmJbrXMW1aYW32n6fXX_VL7odjLEng77wdI,9500
10
10
  ccxt/binanceusdm.py,sha256=BI4hya6nydNHC7hiYw6FVk7QaQWHG6emVnCx1K6R02k,2650
11
11
  ccxt/bingx.py,sha256=z_a38o2AqO-0Yu6fxtBaYU9biV5wD8oHXIypfxVPq-8,274636
12
- ccxt/bit2c.py,sha256=cphPmWwrnHYSGpHJz48BYu3zPGkj_oJIUYFXNLdl_Q4,39471
12
+ ccxt/bit2c.py,sha256=jk_JV782RhYLYJlI8YuhPS_e9O01fhOboB1yKEo50o4,39965
13
13
  ccxt/bitbank.py,sha256=eoSBMt-CZi6p2Xy5dq17N0sGNlfiERmPRdqlhVZHOG4,46286
14
14
  ccxt/bitbns.py,sha256=rysY94AjfqPhC3rvPBp-7OL79rJgMS5gKMnYc200A0Y,50903
15
15
  ccxt/bitcoincom.py,sha256=kpGs1gz2443UrgEsWYeCR5L6FJyYqK5XLmFWaL-I0xM,541
16
16
  ccxt/bitfinex.py,sha256=fwh4ENtKOMlPI3UtE1urj71r220zz6v4tT1kMLUk5o8,166096
17
17
  ccxt/bitfinex1.py,sha256=cC6NuPoQlWY5RoTnoRRgNK8yCr1GbF1NrOaZ341ZOkc,74223
18
18
  ccxt/bitflyer.py,sha256=tSKipH_SKEK8iChF94sxIjizx_volR1xaElIF2PGABI,46888
19
- ccxt/bitget.py,sha256=IKtzvX7WNU5MJyDWd0YhrB5AwUYLlXW5ZLq0zDAWNUY,436218
19
+ ccxt/bitget.py,sha256=Gv8LW2P3dVT0d79eTlQUU5m-BiFLm3bMwogSqgUdnIE,436199
20
20
  ccxt/bithumb.py,sha256=akxyY_PY_7qnAkSEvG8V2DbOhfHZnCNW_OkJDUzUawY,50065
21
21
  ccxt/bitmart.py,sha256=hWhCICJl9EMFzcESneSAA9eANyBi6b89On5Z09SpBgM,245514
22
22
  ccxt/bitmex.py,sha256=bCgSeL8i0djDfb5aPXVljngTmmMpx73Cp6Kou5ngDGw,131447
23
23
  ccxt/bitopro.py,sha256=UGH7MklI1wSm0yjXstw7E3Rj-pQjQ2su3sXcgsi_TM4,73487
24
24
  ccxt/bitpanda.py,sha256=X1xluJEGWtDs5ovAf8djIMZNW-V-3brs4UjdqiWoanE,510
25
- ccxt/bitrue.py,sha256=srpRNYirNWoteG11-LKcDA_agRwjRxvPHd_iMEtJBhM,139698
25
+ ccxt/bitrue.py,sha256=d6d61DB0luJf9q1jzerKERADt4GJcOLWRpcP-Rp8yuw,139716
26
26
  ccxt/bitso.py,sha256=e2_gds0NESHx1EyRmQDwGPKBJu_-wRmZ06PuSxT3yy0,74161
27
27
  ccxt/bitstamp.py,sha256=nus2MaPtVHbewqnexouhrDRmlCSL7EwaPz8FD3cZEEQ,95597
28
28
  ccxt/bitteam.py,sha256=8vxluU2p50rTg9XzQTsWLH3Fye-F79DmZhvza_Xk9h0,105198
@@ -34,7 +34,7 @@ ccxt/btcalpha.py,sha256=t9ku28FD2yE4rc-V4U-eRhsHKz4izMSCK8xb7wQ4kNE,39704
34
34
  ccxt/btcbox.py,sha256=nsJrbfky_4wC-O1oXb4oWr3EYiO49L-sa4-0NxB9Zkg,30034
35
35
  ccxt/btcmarkets.py,sha256=jC6RA5Tn1DR4FZpZln-KZKkz9WYT6o_MNJ6s6G-Dhjs,55829
36
36
  ccxt/btcturk.py,sha256=mNG1uJqcPgTQ0g2sozq5Up1xNndrF_vraYEYsOs3jKw,39482
37
- ccxt/bybit.py,sha256=6gWHCc6mke9rPv62ZRO3oBteEtW7jC8Q_X2QEN8_z9w,437013
37
+ ccxt/bybit.py,sha256=-eJalOjxBi7rIBpQIN2SeEBjsVW3hYhoJhjk-kqL66M,437859
38
38
  ccxt/cex.py,sha256=5yB96CM_tmyANEzTS2KM2yvbCfSListIRhGD2QR1OFQ,72422
39
39
  ccxt/coinbase.py,sha256=vrwEzhBSqn-ix9ISm1C3VF5i16YZPl5Lmilj_uN_cPY,235254
40
40
  ccxt/coinbaseadvanced.py,sha256=Eb1X4_VtdNEu1q0Anr-MzdHG55OhCiZYgdeZv2kFuPg,577
@@ -51,10 +51,10 @@ ccxt/coinsph.py,sha256=kc8u9WFexGiD4EjDlsktLU5goZekE6rQ3P2vDGv1kWo,94117
51
51
  ccxt/coinspot.py,sha256=jQsrrLsUbHKpG1fe1lYEed4LNVLG3TJhx49NrkVyN2w,25997
52
52
  ccxt/cryptocom.py,sha256=MqHql1i3rEqSdJHunGVHlqv6gl4p68YyPENMnseYJiU,141103
53
53
  ccxt/cryptomus.py,sha256=s6tum4nnC5DYt8Ki0Ci83Art3dlNsure_J3TGV8-qyQ,49365
54
- ccxt/defx.py,sha256=iji6X8h3qclX-CIbu5PmiA6-4qWfDQ3jIPsY31Ulw1k,85272
54
+ ccxt/defx.py,sha256=De6JxZmnWS5uqxpJiqvYI7oOTFZs7KCCqayqsChDN1I,85273
55
55
  ccxt/delta.py,sha256=JPSd5GoqifEZU1bVRTd_OiO0e8AK28XkGwNQuGIgoJw,154855
56
56
  ccxt/deribit.py,sha256=po5t94NF-pqzmQ6KKcqQ7WHUnEuNgEhQ_OrMckgpCOg,166136
57
- ccxt/derive.py,sha256=1PkHSXUwA8p-EkER1oXjm6J3okEhJU6f2ejkwYDz_bY,120402
57
+ ccxt/derive.py,sha256=hqzzxeBDAL8W24lIW7vh_cYmPBO1-WFcW5_86do4Il4,120456
58
58
  ccxt/digifinex.py,sha256=8ctj-Nrgt2gM9UWB8DpGIYqtgaLA7eVEbsMaBhCUSpc,177404
59
59
  ccxt/ellipx.py,sha256=oBPWB0503KrU-FmD3w27IZCvEqGoqUu2c8QZ33dGl9E,78966
60
60
  ccxt/exmo.py,sha256=unemEt52-1fmPvdp51TFXX0ctNaNwAj6LJVpWTXFx-I,120604
@@ -126,7 +126,6 @@ ccxt/abstract/bitbank.py,sha256=7NfcFZ4u4osVPeYc9VVBuw65thDCr8qSrlzk_1P3D1U,3398
126
126
  ccxt/abstract/bitbns.py,sha256=3T3cHS7SgzGipd6F8vzPnmM0x3XNfQXEPjoInD-C1Sw,4082
127
127
  ccxt/abstract/bitcoincom.py,sha256=OTBtNu3DQeAqAC_Lbi0NePUs-ZQQllcLrVDI2G04nwQ,15601
128
128
  ccxt/abstract/bitfinex.py,sha256=LvMGq5mhAfkGTah3YDrvbU95jnX5_8v18NI-5QRlrgc,19290
129
- ccxt/abstract/bitfinex1.py,sha256=OLUXdJEycyN_qrBhPuTTOVlwu3jkqVWenoTmS-W3bOE,7605
130
129
  ccxt/abstract/bitflyer.py,sha256=fcVd6Nm4o2Rn8MaSuclvNbBBrIL5JCnWcXoXsOxZFbw,3679
131
130
  ccxt/abstract/bitget.py,sha256=jbL-2S9MlDloP2yACzptr6DkUwzoWH5ALpcjPCHInj0,91042
132
131
  ccxt/abstract/bithumb.py,sha256=GR7QJ6CwTBne59SaGRVj9Rdz_zecG-8imRWX7oe6MoQ,3443
@@ -221,31 +220,31 @@ ccxt/abstract/xt.py,sha256=p0fG3O8kIeMYIvMlqxrhpXeo7lraee6lIlu9yqu6f10,27340
221
220
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
222
221
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
223
222
  ccxt/abstract/zonda.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
224
- ccxt/async_support/__init__.py,sha256=69JPEUQMNC9iFwiDEJLa_8uO5HxMx2fEJYlqidmLnHQ,16493
225
- ccxt/async_support/ace.py,sha256=BCcZ8TexOxR93v8dEICqhRlDvvzJPiLz999kp58GzwM,44976
226
- ccxt/async_support/alpaca.py,sha256=VHP3C7c3jIefKBSleXbTWjnY6RQnBGRNYe5HgrG0PVg,78874
227
- ccxt/async_support/ascendex.py,sha256=JSgYodmeKLokC8HGE-HbHl8k--5rNIkt5ufP6cmCa-Q,156804
223
+ ccxt/async_support/__init__.py,sha256=D8dPDkkV5rkVm6cL0kb8gMijrC4AEN_2YXO7eLUuubQ,16383
224
+ ccxt/async_support/ace.py,sha256=H9NZRmxbizv_YHeP8x-b-9D7vI7wNqeITf5nGjlxtlQ,46584
225
+ ccxt/async_support/alpaca.py,sha256=4SgXk9xPZ3q4WTXufu4N83ZaYYwXcVfsbLAboN9kx60,81003
226
+ ccxt/async_support/ascendex.py,sha256=8IdgSV_n1rwf_1OdD7k3i-s59bC91mBaF0hei1mxHoo,156822
228
227
  ccxt/async_support/bequant.py,sha256=Szyla1q_L8o_mX09QYxltw4tfMWpxXkj95I4WxnjB8A,1207
229
228
  ccxt/async_support/bigone.py,sha256=1g0eoESEzEwVy7ryotNtSh8Tv8WuVPI4C1KG-NspU3Y,96414
230
- ccxt/async_support/binance.py,sha256=tl5LJNQ_a3M1SPcDEERaFWIObpzFW5LqGRVm4ne39ZM,691164
229
+ ccxt/async_support/binance.py,sha256=jGkyd7nTbFRlZsyCQhEeB107vAYgeGHMYd5xj3nBWF0,691374
231
230
  ccxt/async_support/binancecoinm.py,sha256=1NC5yuHlkNgXH5mEz20lU7O7u3pODa6fluSmHO7W5Lc,1758
232
231
  ccxt/async_support/binanceus.py,sha256=fD4Rm2iJZ6YZuJAbRt5TPh2p8dIyN8yQkovnSWKF6F8,9514
233
232
  ccxt/async_support/binanceusdm.py,sha256=7SvgLSpu0-VWHDP_WH8Zo-SEORsyF-tuHhWdQnFMf80,2688
234
233
  ccxt/async_support/bingx.py,sha256=g3ZQb9WHDpOhicO7txVOEJbrDwsNmg60U4zMeN_qvrc,276002
235
- ccxt/async_support/bit2c.py,sha256=iIOBj76HMlV1iCqUGnWZje_MOwZeVIa1e8Yj6S6IvQA,39683
234
+ ccxt/async_support/bit2c.py,sha256=FERAhmsi5xZ-E77MxMKt-ckEGa6qCSJ6ik1si_Skaeg,40177
236
235
  ccxt/async_support/bitbank.py,sha256=xi8LvBORSMhn5jQk8AlPG6-F_PDXDE4mMzyR1FybQ1I,46546
237
236
  ccxt/async_support/bitbns.py,sha256=L2_GDjTTycASkstkfizQ7pcBVzOWYvC7CoBk1nt4h-4,51157
238
237
  ccxt/async_support/bitcoincom.py,sha256=NN_AWmT0tzikiwFDtf3aUqRXbgFTbdRIeL0kPbL5QpQ,555
239
238
  ccxt/async_support/bitfinex.py,sha256=OQLjMJVv-6D1FoIV1Oa2nUJgCbKTWaxoBST815iGYg4,166856
240
239
  ccxt/async_support/bitfinex1.py,sha256=5wTplLdKMIEoWUwrG5_W5rXhrPbrch1358Bwa6TU1ek,74689
241
240
  ccxt/async_support/bitflyer.py,sha256=DoKSbGzqMRXt2d91fHG-DFd6ZuH0qIqzj9cYr0FyYCk,47214
242
- ccxt/async_support/bitget.py,sha256=IijXQHDVtKjUojgj7t7yRbAwZuciBMtGQ9aD6vhiuBY,437908
241
+ ccxt/async_support/bitget.py,sha256=B0KcbXhCO4g6ahGBHC1b05Fa-rHLKsJYtvqVR7Qm56o,437889
243
242
  ccxt/async_support/bithumb.py,sha256=JUj5gTAtb71KlO-rpNOacV-m7isAzkjRfh3iS0JhSpY,50344
244
243
  ccxt/async_support/bitmart.py,sha256=2KJA_yqf_br2WvOSQUvQE5yPyTif68NNHyL5Ks54ULg,246608
245
244
  ccxt/async_support/bitmex.py,sha256=BG2V3EfAb0omoPnvfi3CcaWrernaMeJJ8WeEH2CiW1Y,132025
246
245
  ccxt/async_support/bitopro.py,sha256=pjKbqTBiaD5qUkz7LRd9-ohkrkFGol9FjUgFLUxBOqs,73897
247
246
  ccxt/async_support/bitpanda.py,sha256=zj2ad7e9spjosP19nGH2s9oJnlSsJ7CZFNK4alIt51w,524
248
- ccxt/async_support/bitrue.py,sha256=B4kiD4YDPORyeLcB476UxKQBaRzBI5ygyNu3Sne_00c,140356
247
+ ccxt/async_support/bitrue.py,sha256=qJoihFg5EZQAHvsReXGwbM9xJWBvIkVrOn32roWDwTw,140374
249
248
  ccxt/async_support/bitso.py,sha256=PbF9iC4-Wea_msXhO614VPX6o-8RAqzK0reSC_dxwIc,74547
250
249
  ccxt/async_support/bitstamp.py,sha256=7MNcyr9yI9jR4e3CzIp2H9sku979VtjM4Tp2hGfWJSo,96097
251
250
  ccxt/async_support/bitteam.py,sha256=hucr7t-uGSsn6otP90c4ohzW4U9DwrWRieHZcW_J2Ig,105530
@@ -257,7 +256,7 @@ ccxt/async_support/btcalpha.py,sha256=KXc-Xl6ZeSwYkYYXPPMSQalbY-XwFCOvNCcVx9_qCZ
257
256
  ccxt/async_support/btcbox.py,sha256=bY4LZaCVh2eEyrHF0rRc65D8ws53oAcC0MqbJyU_odE,30258
258
257
  ccxt/async_support/btcmarkets.py,sha256=ByaubB2c6aGB5BQGi6mZq65EYHAWEEu7Tuoj9Kauucw,56179
259
258
  ccxt/async_support/btcturk.py,sha256=ox_4BvoFHyn8BJJTmJMX5-UB8tZt03KGAMMCqe8yUhE,39700
260
- ccxt/async_support/bybit.py,sha256=8-WWI5FDCBLKvimlvsoGr4bjjJp2WhvzC_Mh0hwe1LA,438827
259
+ ccxt/async_support/bybit.py,sha256=mS3iZ35cxkmtBMVfrK6dZNrYWhH-hHY3tu34GN1_r9s,439679
261
260
  ccxt/async_support/cex.py,sha256=KFwJCXNn653tOiRKnwgd2Dxav2KNMwexrzJF8G-oekU,72894
262
261
  ccxt/async_support/coinbase.py,sha256=Wz0ePPCxWRfLgl5dcYmN0eOfwdWVnOmOdw3BsDPhqQI,236498
263
262
  ccxt/async_support/coinbaseadvanced.py,sha256=TnsUS2r5fvHIEfQmJh7J6Muyg8tPqDJphKYmK7gUQGE,591
@@ -274,10 +273,10 @@ ccxt/async_support/coinsph.py,sha256=-Ah82PH0mChd3T9ZQcHyCN_1ZTRsux8zR3cD4d_O00U
274
273
  ccxt/async_support/coinspot.py,sha256=TpccNE4N4g2lVcPPVzDVR5P2rD8TxqYXzpmNqpxRulQ,26155
275
274
  ccxt/async_support/cryptocom.py,sha256=GCtbWxu0SD3kW4SuECPYKP-ZQiV0VuIhVswWjuCmikE,141711
276
275
  ccxt/async_support/cryptomus.py,sha256=p6hDlvDUyOic62x_SM7QPA13Y0jNzuxRxQ-u5ZqIXFE,49565
277
- ccxt/async_support/defx.py,sha256=n3QTbZzLmtrwGJg6SEE0P7ZMfe71HZsjeCdM7Slgyig,85774
276
+ ccxt/async_support/defx.py,sha256=un6WAsBM-xkHk6Hj7Xgi21swWoPiTjGhIfk8pnYgYPc,85775
278
277
  ccxt/async_support/delta.py,sha256=ZgrxGTbXprUn9XrsNtbo7wasyVoAAy5W0gf-v-4wiI4,155463
279
278
  ccxt/async_support/deribit.py,sha256=zYlQZfmIcGs-4Qtrxw1oTu7E-o_7MS5dUoa4X-G0u-w,166918
280
- ccxt/async_support/derive.py,sha256=BwrAI5_Couk-iXxdUgj1uGHNaXX8cHOgvy-9fqvvBQA,120898
279
+ ccxt/async_support/derive.py,sha256=iLumdamXnz1WNM4iY9ZeSyUClK_OAhwOhF_0DR4CpMc,120952
281
280
  ccxt/async_support/digifinex.py,sha256=dHYmMTTwAslYtwcsYarCwBV0e1omt5EoJjEzgEVP3Y8,178392
282
281
  ccxt/async_support/ellipx.py,sha256=rNGNBp2Wko2yG-Fx0p9TM862Md6MOmloxbugb4ngh9U,79274
283
282
  ccxt/async_support/exmo.py,sha256=G8SrYyKO0yIjLXjM9MYdBN6n0AU2a8aHN11RbXf-66I,121290
@@ -334,7 +333,7 @@ ccxt/async_support/yobit.py,sha256=B2T9UXo0ke-YyXxNW9avOPJ8cReVGXWD9OpkORI9ZSU,5
334
333
  ccxt/async_support/zaif.py,sha256=jZZv3ZjGQgkPNRfY5B5p5DNMvanHWTTS8m6BLBWm9tA,31357
335
334
  ccxt/async_support/zonda.py,sha256=2QL_B9CmBu4SU4K-Y8segpj57vzAd4aUT2H2cD3b07g,85320
336
335
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
337
- ccxt/async_support/base/exchange.py,sha256=KAsKEfcM2w4vjLa0zmUEMXiBsNduSWfo1A6h15pOLGA,117223
336
+ ccxt/async_support/base/exchange.py,sha256=GtxvJNOBbMV_e_7TSY6GnRnQ4e5KG4rn-UtzgpDhVDk,117223
338
337
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
339
338
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
340
339
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=Y5HxAVXyyYduj6b6SbbUZETlq3GrVMzrkW1r-TMgpb8,6329
@@ -348,10 +347,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9produGjmB
348
347
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
349
348
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
350
349
  ccxt/base/errors.py,sha256=MvCrL_sAM3de616T6RE0PSxiF2xV6Qqz5b1y1ghidbk,4888
351
- ccxt/base/exchange.py,sha256=Fr_Du0LL1ud6tVY0ldQ0Vl3PZVDAo_lkqkEIuQi-8hI,321957
350
+ ccxt/base/exchange.py,sha256=skWoCo-W0G1uEjFjc6rdFwjuJ1kGCUWozMCTY0re3u4,321798
352
351
  ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
353
352
  ccxt/base/types.py,sha256=SfxIKDSsxP7MPHWiOVI965Nr5NSEPpAno5fuveTRi3w,11423
354
- ccxt/pro/__init__.py,sha256=0OdIkYROyYVwM7r8eHPT07F0_SPcxtswURaQq3smQBE,7908
353
+ ccxt/pro/__init__.py,sha256=cGlZqC6X6c89ogyyuUEzu-VqDHx52Lbmze40wTj6R38,7804
355
354
  ccxt/pro/alpaca.py,sha256=_WEorh5thYhvhn7R8hBvHW2m1P2foIbp8URjIt_9vcg,27623
356
355
  ccxt/pro/ascendex.py,sha256=P6a81iK_T6uyEK6JHcNQbjJwLvurrUeQVoQqvp2_IU8,37512
357
356
  ccxt/pro/bequant.py,sha256=reG2yXBhxn_TuOIg4J2BiLxl8Lw5Lag3IBMGBkiQCd0,1591
@@ -654,12 +653,12 @@ ccxt/static_dependencies/toolz/curried/operator.py,sha256=ML92mknkAwzBl2NCm-4wer
654
653
  ccxt/static_dependencies/typing_inspect/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
655
654
  ccxt/static_dependencies/typing_inspect/typing_inspect.py,sha256=5gIWomLPfuDpgd3gX1GlnX0MuXM3VorR4j2W2qXORiQ,28269
656
655
  ccxt/test/__init__.py,sha256=GKPbEcj0Rrz5HG-GUm-iY1IHhDYmlvcBXZAGk6-m2CI,141
657
- ccxt/test/tests_async.py,sha256=xgTuZheAP_s_alGbYh8AJ-9duVljLXLV4Mi2nh4C3YI,92496
656
+ ccxt/test/tests_async.py,sha256=_eOeOojWW2Twyd62H485whALy9IKSlUd4JlrKN26qws,92582
658
657
  ccxt/test/tests_helpers.py,sha256=egM69A2ZFYeVF5hwC1Qt-c5DOeClY5bv4jowmceeFV8,9736
659
658
  ccxt/test/tests_init.py,sha256=qM0-Gb0h0p6CANWTkyYZI7wl-iYOcrPur7aj_OKh7m0,1212
660
- ccxt/test/tests_sync.py,sha256=bSMMVJjBRapF6YuWUvp0KT-rnG-Lc_H1EdsyeQNC6WU,91480
661
- ccxt-4.4.72.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
662
- ccxt-4.4.72.dist-info/METADATA,sha256=9BVZ2cnVqs5lvI0aeu3b8UVBdvEASgaHzTEzOGuLCB4,131033
663
- ccxt-4.4.72.dist-info/WHEEL,sha256=Kh9pAotZVRFj97E15yTA4iADqXdQfIVTHcNaZTjxeGM,110
664
- ccxt-4.4.72.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
665
- ccxt-4.4.72.dist-info/RECORD,,
659
+ ccxt/test/tests_sync.py,sha256=5qKpTyujmxiXJ0jNwYNdYzzwbkXHHfiO0QuQCBCjbqI,91566
660
+ ccxt-4.4.73.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
661
+ ccxt-4.4.73.dist-info/METADATA,sha256=fdfH1HwnMA6iHxRWiZ2-mgjXdTgDcPXgL7B2wVHAlRw,131033
662
+ ccxt-4.4.73.dist-info/WHEEL,sha256=Kh9pAotZVRFj97E15yTA4iADqXdQfIVTHcNaZTjxeGM,110
663
+ ccxt-4.4.73.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
664
+ ccxt-4.4.73.dist-info/RECORD,,