ccxt 4.0.48__py2.py3-none-any.whl → 4.0.49__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.

Potentially problematic release.


This version of ccxt might be problematic. Click here for more details.

ccxt/__init__.py CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.0.48'
25
+ __version__ = '4.0.49'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
ccxt/abstract/binance.py CHANGED
@@ -595,6 +595,7 @@ class ImplicitAPI:
595
595
  papi_post_portfolio_repay_futures_switch = papiPostPortfolioRepayFuturesSwitch = Entry('portfolio/repay-futures-switch', 'papi', 'POST', {'cost': 150})
596
596
  papi_post_portfolio_repay_futures_negative_balance = papiPostPortfolioRepayFuturesNegativeBalance = Entry('portfolio/repay-futures-negative-balance', 'papi', 'POST', {'cost': 150})
597
597
  papi_post_listenkey = papiPostListenKey = Entry('listenKey', 'papi', 'POST', {'cost': 1})
598
+ papi_post_asset_collection = papiPostAssetCollection = Entry('asset-collection', 'papi', 'POST', {'cost': 3})
598
599
  papi_put_listenkey = papiPutListenKey = Entry('listenKey', 'papi', 'PUT', {'cost': 1})
599
600
  papi_delete_um_order = papiDeleteUmOrder = Entry('um/order', 'papi', 'DELETE', {'cost': 1})
600
601
  papi_delete_um_allopenorders = papiDeleteUmAllOpenOrders = Entry('um/allOpenOrders', 'papi', 'DELETE', {'cost': 1})
@@ -595,6 +595,7 @@ class ImplicitAPI:
595
595
  papi_post_portfolio_repay_futures_switch = papiPostPortfolioRepayFuturesSwitch = Entry('portfolio/repay-futures-switch', 'papi', 'POST', {'cost': 150})
596
596
  papi_post_portfolio_repay_futures_negative_balance = papiPostPortfolioRepayFuturesNegativeBalance = Entry('portfolio/repay-futures-negative-balance', 'papi', 'POST', {'cost': 150})
597
597
  papi_post_listenkey = papiPostListenKey = Entry('listenKey', 'papi', 'POST', {'cost': 1})
598
+ papi_post_asset_collection = papiPostAssetCollection = Entry('asset-collection', 'papi', 'POST', {'cost': 3})
598
599
  papi_put_listenkey = papiPutListenKey = Entry('listenKey', 'papi', 'PUT', {'cost': 1})
599
600
  papi_delete_um_order = papiDeleteUmOrder = Entry('um/order', 'papi', 'DELETE', {'cost': 1})
600
601
  papi_delete_um_allopenorders = papiDeleteUmAllOpenOrders = Entry('um/allOpenOrders', 'papi', 'DELETE', {'cost': 1})
@@ -595,6 +595,7 @@ class ImplicitAPI:
595
595
  papi_post_portfolio_repay_futures_switch = papiPostPortfolioRepayFuturesSwitch = Entry('portfolio/repay-futures-switch', 'papi', 'POST', {'cost': 150})
596
596
  papi_post_portfolio_repay_futures_negative_balance = papiPostPortfolioRepayFuturesNegativeBalance = Entry('portfolio/repay-futures-negative-balance', 'papi', 'POST', {'cost': 150})
597
597
  papi_post_listenkey = papiPostListenKey = Entry('listenKey', 'papi', 'POST', {'cost': 1})
598
+ papi_post_asset_collection = papiPostAssetCollection = Entry('asset-collection', 'papi', 'POST', {'cost': 3})
598
599
  papi_put_listenkey = papiPutListenKey = Entry('listenKey', 'papi', 'PUT', {'cost': 1})
599
600
  papi_delete_um_order = papiDeleteUmOrder = Entry('um/order', 'papi', 'DELETE', {'cost': 1})
600
601
  papi_delete_um_allopenorders = papiDeleteUmAllOpenOrders = Entry('um/allOpenOrders', 'papi', 'DELETE', {'cost': 1})
@@ -595,6 +595,7 @@ class ImplicitAPI:
595
595
  papi_post_portfolio_repay_futures_switch = papiPostPortfolioRepayFuturesSwitch = Entry('portfolio/repay-futures-switch', 'papi', 'POST', {'cost': 150})
596
596
  papi_post_portfolio_repay_futures_negative_balance = papiPostPortfolioRepayFuturesNegativeBalance = Entry('portfolio/repay-futures-negative-balance', 'papi', 'POST', {'cost': 150})
597
597
  papi_post_listenkey = papiPostListenKey = Entry('listenKey', 'papi', 'POST', {'cost': 1})
598
+ papi_post_asset_collection = papiPostAssetCollection = Entry('asset-collection', 'papi', 'POST', {'cost': 3})
598
599
  papi_put_listenkey = papiPutListenKey = Entry('listenKey', 'papi', 'PUT', {'cost': 1})
599
600
  papi_delete_um_order = papiDeleteUmOrder = Entry('um/order', 'papi', 'DELETE', {'cost': 1})
600
601
  papi_delete_um_allopenorders = papiDeleteUmAllOpenOrders = Entry('um/allOpenOrders', 'papi', 'DELETE', {'cost': 1})
ccxt/abstract/bitget.py CHANGED
@@ -94,6 +94,8 @@ class ImplicitAPI:
94
94
  private_spot_post_trace_profit_profithisdetaillist = privateSpotPostTraceProfitProfitHisDetailList = Entry('trace/profit/profitHisDetailList', ['private', 'spot'], 'POST', {'cost': 2})
95
95
  private_spot_post_trace_profit_waitprofitdetaillist = privateSpotPostTraceProfitWaitProfitDetailList = Entry('trace/profit/waitProfitDetailList', ['private', 'spot'], 'POST', {'cost': 2})
96
96
  private_spot_post_trace_user_gettraderinfo = privateSpotPostTraceUserGetTraderInfo = Entry('trace/user/getTraderInfo', ['private', 'spot'], 'POST', {'cost': 2})
97
+ private_spot_post_trace_getremovablefollower = privateSpotPostTraceGetRemovableFollower = Entry('trace/getRemovableFollower', ['private', 'spot'], 'POST', {'cost': 2})
98
+ private_spot_post_trace_user_removefollower = privateSpotPostTraceUserRemoveFollower = Entry('trace/user/removeFollower', ['private', 'spot'], 'POST', {'cost': 2})
97
99
  private_spot_post_convert_quoted_price = privateSpotPostConvertQuotedPrice = Entry('convert/quoted-price', ['private', 'spot'], 'POST', {'cost': 4})
98
100
  private_spot_post_convert_trade = privateSpotPostConvertTrade = Entry('convert/trade', ['private', 'spot'], 'POST', {'cost': 4})
99
101
  private_mix_get_account_account = privateMixGetAccountAccount = Entry('account/account', ['private', 'mix'], 'GET', {'cost': 2})
@@ -168,6 +170,7 @@ class ImplicitAPI:
168
170
  private_mix_post_trace_report_order_currentlist = privateMixPostTraceReportOrderCurrentList = Entry('trace/report/order/currentList', ['private', 'mix'], 'POST', {'cost': 2})
169
171
  private_mix_post_trace_querytradertpslratioconfig = privateMixPostTraceQueryTraderTpslRatioConfig = Entry('trace/queryTraderTpslRatioConfig', ['private', 'mix'], 'POST', {'cost': 2})
170
172
  private_mix_post_trace_traderupdatetpslratioconfig = privateMixPostTraceTraderUpdateTpslRatioConfig = Entry('trace/traderUpdateTpslRatioConfig', ['private', 'mix'], 'POST', {'cost': 2})
173
+ private_mix_post_trace_closetrackorderbysymbol = privateMixPostTraceCloseTrackOrderBySymbol = Entry('trace/closeTrackOrderBySymbol', ['private', 'mix'], 'POST', {'cost': 2})
171
174
  private_user_get_fee_query = privateUserGetFeeQuery = Entry('fee/query', ['private', 'user'], 'GET', {'cost': 2})
172
175
  private_user_get_sub_virtual_list = privateUserGetSubVirtualList = Entry('sub/virtual-list', ['private', 'user'], 'GET', {'cost': 2})
173
176
  private_user_get_sub_virtual_api_list = privateUserGetSubVirtualApiList = Entry('sub/virtual-api-list', ['private', 'user'], 'GET', {'cost': 2})
ccxt/abstract/kraken.py CHANGED
@@ -34,6 +34,7 @@ class ImplicitAPI:
34
34
  private_post_querytrades = privatePostQueryTrades = Entry('QueryTrades', 'private', 'POST', {'cost': 3})
35
35
  private_post_retrieveexport = privatePostRetrieveExport = Entry('RetrieveExport', 'private', 'POST', {'cost': 3})
36
36
  private_post_removeexport = privatePostRemoveExport = Entry('RemoveExport', 'private', 'POST', {'cost': 3})
37
+ private_post_balanceex = privatePostBalanceEx = Entry('BalanceEx', 'private', 'POST', {'cost': 3})
37
38
  private_post_tradebalance = privatePostTradeBalance = Entry('TradeBalance', 'private', 'POST', {'cost': 3})
38
39
  private_post_tradeshistory = privatePostTradesHistory = Entry('TradesHistory', 'private', 'POST', {'cost': 6})
39
40
  private_post_tradevolume = privatePostTradeVolume = Entry('TradeVolume', 'private', 'POST', {'cost': 3})
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.0.48'
7
+ __version__ = '4.0.49'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.0.48'
5
+ __version__ = '4.0.49'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -952,6 +952,7 @@ class binance(Exchange, ImplicitAPI):
952
952
  'portfolio/repay-futures-switch': 150, # Weight(IP): 1500 => cost = 0.1 * 1500 = 150
953
953
  'portfolio/repay-futures-negative-balance': 150, # Weight(IP): 1500 => cost = 0.1 * 1500 = 150
954
954
  'listenKey': 1, # 1
955
+ 'asset-collection': 3,
955
956
  },
956
957
  'put': {
957
958
  'listenKey': 1, # 1
@@ -267,6 +267,8 @@ class bitget(Exchange, ImplicitAPI):
267
267
  'trace/profit/profitHisDetailList': 2, # 10 times/1s(UID) => 20/10 = 2
268
268
  'trace/profit/waitProfitDetailList': 2, # 10 times/1s(UID) => 20/10 = 2
269
269
  'trace/user/getTraderInfo': 2, # 10 times/1s(UID) => 20/10 = 2
270
+ 'trace/getRemovableFollower': 2,
271
+ 'trace/user/removeFollower': 2,
270
272
  'convert/quoted-price': 4,
271
273
  'convert/trade': 4,
272
274
  },
@@ -347,6 +349,7 @@ class bitget(Exchange, ImplicitAPI):
347
349
  'trace/report/order/currentList': 2, # 10 times/1s(IP) => 20/10 = 2
348
350
  'trace/queryTraderTpslRatioConfig': 2, # 10 times/1s(UID) => 20/10 = 2
349
351
  'trace/traderUpdateTpslRatioConfig': 2, # 10 times/1s(UID) => 20/10 = 2
352
+ 'trace/closeTrackOrderBySymbol': 2,
350
353
  },
351
354
  },
352
355
  'user': {
@@ -3797,8 +3797,8 @@ class gate(Exchange, ImplicitAPI):
3797
3797
  # "order_type": ""
3798
3798
  # }
3799
3799
  #
3800
- put = self.safe_value_2(order, 'put', 'initial')
3801
- trigger = self.safe_value(order, 'trigger')
3800
+ put = self.safe_value_2(order, 'put', 'initial', {})
3801
+ trigger = self.safe_value(order, 'trigger', {})
3802
3802
  contract = self.safe_string(put, 'contract')
3803
3803
  type = self.safe_string(put, 'type')
3804
3804
  timeInForce = self.safe_string_upper_2(put, 'time_in_force', 'tif')
@@ -761,17 +761,15 @@ class huobijp(Exchange, ImplicitAPI):
761
761
  side = typeParts[0]
762
762
  type = typeParts[1]
763
763
  takerOrMaker = self.safe_string(trade, 'role')
764
- priceString = self.safe_string(trade, 'price')
765
- amountString = self.safe_string_2(trade, 'filled-amount', 'amount')
766
- price = self.parse_number(priceString)
767
- amount = self.parse_number(amountString)
768
- cost = self.parse_number(Precise.string_mul(priceString, amountString))
764
+ price = self.safe_string(trade, 'price')
765
+ amount = self.safe_string_2(trade, 'filled-amount', 'amount')
766
+ cost = Precise.string_mul(price, amount)
769
767
  fee = None
770
- feeCost = self.safe_number(trade, 'filled-fees')
768
+ feeCost = self.safe_string(trade, 'filled-fees')
771
769
  feeCurrency = self.safe_currency_code(self.safe_string(trade, 'fee-currency'))
772
- filledPoints = self.safe_number(trade, 'filled-points')
770
+ filledPoints = self.safe_string(trade, 'filled-points')
773
771
  if filledPoints is not None:
774
- if (feeCost is None) or (feeCost == 0.0):
772
+ if (feeCost is None) or (Precise.string_eq(feeCost, '0.0')):
775
773
  feeCost = filledPoints
776
774
  feeCurrency = self.safe_currency_code(self.safe_string(trade, 'fee-deduct-currency'))
777
775
  if feeCost is not None:
@@ -781,13 +779,13 @@ class huobijp(Exchange, ImplicitAPI):
781
779
  }
782
780
  tradeId = self.safe_string_2(trade, 'trade-id', 'tradeId')
783
781
  id = self.safe_string(trade, 'id', tradeId)
784
- return {
785
- 'id': id,
782
+ return self.safe_trade({
786
783
  'info': trade,
784
+ 'id': id,
785
+ 'symbol': symbol,
787
786
  'order': order,
788
787
  'timestamp': timestamp,
789
788
  'datetime': self.iso8601(timestamp),
790
- 'symbol': symbol,
791
789
  'type': type,
792
790
  'side': side,
793
791
  'takerOrMaker': takerOrMaker,
@@ -795,7 +793,7 @@ class huobijp(Exchange, ImplicitAPI):
795
793
  'amount': amount,
796
794
  'cost': cost,
797
795
  'fee': fee,
798
- }
796
+ })
799
797
 
800
798
  async def fetch_order_trades(self, id: str, symbol: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None, params={}):
801
799
  """
@@ -203,6 +203,7 @@ class kraken(Exchange, ImplicitAPI):
203
203
  'QueryTrades': 3,
204
204
  'RetrieveExport': 3,
205
205
  'RemoveExport': 3,
206
+ 'BalanceEx': 3,
206
207
  'TradeBalance': 3,
207
208
  'TradesHistory': 6,
208
209
  'TradeVolume': 3,
@@ -489,8 +489,8 @@ class kucoin(Exchange, ImplicitAPI):
489
489
  'symbolSeparator': '-',
490
490
  'fetchMyTradesMethod': 'private_get_fills',
491
491
  'fetchCurrencies': {
492
- 'webApiEnable': False, # fetches from WEB
493
- 'webApiRetries': 5,
492
+ 'webApiEnable': True, # fetches from WEB
493
+ 'webApiRetries': 1,
494
494
  'webApiMuteFailure': True,
495
495
  },
496
496
  'fetchMarkets': {
ccxt/async_support/okx.py CHANGED
@@ -1243,6 +1243,7 @@ class okx(Exchange, ImplicitAPI):
1243
1243
  async def fetch_markets(self, params={}):
1244
1244
  """
1245
1245
  retrieves data on all markets for okx
1246
+ see https://www.okx.com/docs-v5/en/#rest-api-public-data-get-instruments
1246
1247
  :param dict [params]: extra parameters specific to the exchange api endpoint
1247
1248
  :returns dict[]: an array of objects representing market data
1248
1249
  """
@@ -1350,12 +1351,10 @@ class okx(Exchange, ImplicitAPI):
1350
1351
  symbol = symbol + '-' + ymd + '-' + strikePrice + '-' + optionType
1351
1352
  optionType = 'put' if (optionType == 'P') else 'call'
1352
1353
  tickSize = self.safe_string(market, 'tickSz')
1353
- minAmountString = self.safe_string(market, 'minSz')
1354
- minAmount = self.parse_number(minAmountString)
1355
1354
  fees = self.safe_value_2(self.fees, type, 'trading', {})
1356
- precisionPrice = self.parse_number(tickSize)
1357
1355
  maxLeverage = self.safe_string(market, 'lever', '1')
1358
1356
  maxLeverage = Precise.string_max(maxLeverage, '1')
1357
+ maxSpotCost = self.safe_number(market, 'maxMktSz')
1359
1358
  return self.extend(fees, {
1360
1359
  'id': id,
1361
1360
  'symbol': symbol,
@@ -1382,7 +1381,7 @@ class okx(Exchange, ImplicitAPI):
1382
1381
  'optionType': optionType,
1383
1382
  'precision': {
1384
1383
  'amount': self.safe_number(market, 'lotSz'),
1385
- 'price': precisionPrice,
1384
+ 'price': self.parse_number(tickSize),
1386
1385
  },
1387
1386
  'limits': {
1388
1387
  'leverage': {
@@ -1390,16 +1389,16 @@ class okx(Exchange, ImplicitAPI):
1390
1389
  'max': self.parse_number(maxLeverage),
1391
1390
  },
1392
1391
  'amount': {
1393
- 'min': minAmount,
1392
+ 'min': self.safe_number(market, 'minSz'),
1394
1393
  'max': None,
1395
1394
  },
1396
1395
  'price': {
1397
- 'min': precisionPrice,
1396
+ 'min': None,
1398
1397
  'max': None,
1399
1398
  },
1400
1399
  'cost': {
1401
1400
  'min': None,
1402
- 'max': None,
1401
+ 'max': None if contract else maxSpotCost,
1403
1402
  },
1404
1403
  },
1405
1404
  'info': market,
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.0.48'
7
+ __version__ = '4.0.49'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
ccxt/binance.py CHANGED
@@ -951,6 +951,7 @@ class binance(Exchange, ImplicitAPI):
951
951
  'portfolio/repay-futures-switch': 150, # Weight(IP): 1500 => cost = 0.1 * 1500 = 150
952
952
  'portfolio/repay-futures-negative-balance': 150, # Weight(IP): 1500 => cost = 0.1 * 1500 = 150
953
953
  'listenKey': 1, # 1
954
+ 'asset-collection': 3,
954
955
  },
955
956
  'put': {
956
957
  'listenKey': 1, # 1
ccxt/bitget.py CHANGED
@@ -266,6 +266,8 @@ class bitget(Exchange, ImplicitAPI):
266
266
  'trace/profit/profitHisDetailList': 2, # 10 times/1s(UID) => 20/10 = 2
267
267
  'trace/profit/waitProfitDetailList': 2, # 10 times/1s(UID) => 20/10 = 2
268
268
  'trace/user/getTraderInfo': 2, # 10 times/1s(UID) => 20/10 = 2
269
+ 'trace/getRemovableFollower': 2,
270
+ 'trace/user/removeFollower': 2,
269
271
  'convert/quoted-price': 4,
270
272
  'convert/trade': 4,
271
273
  },
@@ -346,6 +348,7 @@ class bitget(Exchange, ImplicitAPI):
346
348
  'trace/report/order/currentList': 2, # 10 times/1s(IP) => 20/10 = 2
347
349
  'trace/queryTraderTpslRatioConfig': 2, # 10 times/1s(UID) => 20/10 = 2
348
350
  'trace/traderUpdateTpslRatioConfig': 2, # 10 times/1s(UID) => 20/10 = 2
351
+ 'trace/closeTrackOrderBySymbol': 2,
349
352
  },
350
353
  },
351
354
  'user': {
ccxt/gate.py CHANGED
@@ -3796,8 +3796,8 @@ class gate(Exchange, ImplicitAPI):
3796
3796
  # "order_type": ""
3797
3797
  # }
3798
3798
  #
3799
- put = self.safe_value_2(order, 'put', 'initial')
3800
- trigger = self.safe_value(order, 'trigger')
3799
+ put = self.safe_value_2(order, 'put', 'initial', {})
3800
+ trigger = self.safe_value(order, 'trigger', {})
3801
3801
  contract = self.safe_string(put, 'contract')
3802
3802
  type = self.safe_string(put, 'type')
3803
3803
  timeInForce = self.safe_string_upper_2(put, 'time_in_force', 'tif')
ccxt/huobijp.py CHANGED
@@ -761,17 +761,15 @@ class huobijp(Exchange, ImplicitAPI):
761
761
  side = typeParts[0]
762
762
  type = typeParts[1]
763
763
  takerOrMaker = self.safe_string(trade, 'role')
764
- priceString = self.safe_string(trade, 'price')
765
- amountString = self.safe_string_2(trade, 'filled-amount', 'amount')
766
- price = self.parse_number(priceString)
767
- amount = self.parse_number(amountString)
768
- cost = self.parse_number(Precise.string_mul(priceString, amountString))
764
+ price = self.safe_string(trade, 'price')
765
+ amount = self.safe_string_2(trade, 'filled-amount', 'amount')
766
+ cost = Precise.string_mul(price, amount)
769
767
  fee = None
770
- feeCost = self.safe_number(trade, 'filled-fees')
768
+ feeCost = self.safe_string(trade, 'filled-fees')
771
769
  feeCurrency = self.safe_currency_code(self.safe_string(trade, 'fee-currency'))
772
- filledPoints = self.safe_number(trade, 'filled-points')
770
+ filledPoints = self.safe_string(trade, 'filled-points')
773
771
  if filledPoints is not None:
774
- if (feeCost is None) or (feeCost == 0.0):
772
+ if (feeCost is None) or (Precise.string_eq(feeCost, '0.0')):
775
773
  feeCost = filledPoints
776
774
  feeCurrency = self.safe_currency_code(self.safe_string(trade, 'fee-deduct-currency'))
777
775
  if feeCost is not None:
@@ -781,13 +779,13 @@ class huobijp(Exchange, ImplicitAPI):
781
779
  }
782
780
  tradeId = self.safe_string_2(trade, 'trade-id', 'tradeId')
783
781
  id = self.safe_string(trade, 'id', tradeId)
784
- return {
785
- 'id': id,
782
+ return self.safe_trade({
786
783
  'info': trade,
784
+ 'id': id,
785
+ 'symbol': symbol,
787
786
  'order': order,
788
787
  'timestamp': timestamp,
789
788
  'datetime': self.iso8601(timestamp),
790
- 'symbol': symbol,
791
789
  'type': type,
792
790
  'side': side,
793
791
  'takerOrMaker': takerOrMaker,
@@ -795,7 +793,7 @@ class huobijp(Exchange, ImplicitAPI):
795
793
  'amount': amount,
796
794
  'cost': cost,
797
795
  'fee': fee,
798
- }
796
+ })
799
797
 
800
798
  def fetch_order_trades(self, id: str, symbol: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None, params={}):
801
799
  """
ccxt/kraken.py CHANGED
@@ -203,6 +203,7 @@ class kraken(Exchange, ImplicitAPI):
203
203
  'QueryTrades': 3,
204
204
  'RetrieveExport': 3,
205
205
  'RemoveExport': 3,
206
+ 'BalanceEx': 3,
206
207
  'TradeBalance': 3,
207
208
  'TradesHistory': 6,
208
209
  'TradeVolume': 3,
ccxt/kucoin.py CHANGED
@@ -488,8 +488,8 @@ class kucoin(Exchange, ImplicitAPI):
488
488
  'symbolSeparator': '-',
489
489
  'fetchMyTradesMethod': 'private_get_fills',
490
490
  'fetchCurrencies': {
491
- 'webApiEnable': False, # fetches from WEB
492
- 'webApiRetries': 5,
491
+ 'webApiEnable': True, # fetches from WEB
492
+ 'webApiRetries': 1,
493
493
  'webApiMuteFailure': True,
494
494
  },
495
495
  'fetchMarkets': {
ccxt/okx.py CHANGED
@@ -1242,6 +1242,7 @@ class okx(Exchange, ImplicitAPI):
1242
1242
  def fetch_markets(self, params={}):
1243
1243
  """
1244
1244
  retrieves data on all markets for okx
1245
+ see https://www.okx.com/docs-v5/en/#rest-api-public-data-get-instruments
1245
1246
  :param dict [params]: extra parameters specific to the exchange api endpoint
1246
1247
  :returns dict[]: an array of objects representing market data
1247
1248
  """
@@ -1349,12 +1350,10 @@ class okx(Exchange, ImplicitAPI):
1349
1350
  symbol = symbol + '-' + ymd + '-' + strikePrice + '-' + optionType
1350
1351
  optionType = 'put' if (optionType == 'P') else 'call'
1351
1352
  tickSize = self.safe_string(market, 'tickSz')
1352
- minAmountString = self.safe_string(market, 'minSz')
1353
- minAmount = self.parse_number(minAmountString)
1354
1353
  fees = self.safe_value_2(self.fees, type, 'trading', {})
1355
- precisionPrice = self.parse_number(tickSize)
1356
1354
  maxLeverage = self.safe_string(market, 'lever', '1')
1357
1355
  maxLeverage = Precise.string_max(maxLeverage, '1')
1356
+ maxSpotCost = self.safe_number(market, 'maxMktSz')
1358
1357
  return self.extend(fees, {
1359
1358
  'id': id,
1360
1359
  'symbol': symbol,
@@ -1381,7 +1380,7 @@ class okx(Exchange, ImplicitAPI):
1381
1380
  'optionType': optionType,
1382
1381
  'precision': {
1383
1382
  'amount': self.safe_number(market, 'lotSz'),
1384
- 'price': precisionPrice,
1383
+ 'price': self.parse_number(tickSize),
1385
1384
  },
1386
1385
  'limits': {
1387
1386
  'leverage': {
@@ -1389,16 +1388,16 @@ class okx(Exchange, ImplicitAPI):
1389
1388
  'max': self.parse_number(maxLeverage),
1390
1389
  },
1391
1390
  'amount': {
1392
- 'min': minAmount,
1391
+ 'min': self.safe_number(market, 'minSz'),
1393
1392
  'max': None,
1394
1393
  },
1395
1394
  'price': {
1396
- 'min': precisionPrice,
1395
+ 'min': None,
1397
1396
  'max': None,
1398
1397
  },
1399
1398
  'cost': {
1400
1399
  'min': None,
1401
- 'max': None,
1400
+ 'max': None if contract else maxSpotCost,
1402
1401
  },
1403
1402
  },
1404
1403
  'info': market,
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.0.48'
7
+ __version__ = '4.0.49'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/pro/bitfinex.py CHANGED
@@ -325,13 +325,13 @@ class bitfinex(ccxt.async_support.bitfinex):
325
325
  orderbook = self.orderbooks[symbol]
326
326
  if isRaw:
327
327
  id = self.safe_string(message, 1)
328
- price = self.safe_float(message, 2)
328
+ price = self.safe_string(message, 2)
329
329
  size = -message[3] if (message[3] < 0) else message[3]
330
330
  side = 'asks' if (message[3] < 0) else 'bids'
331
331
  bookside = orderbook[side]
332
332
  # price = 0 means that you have to remove the order from your book
333
- amount = size if (price > 0) else 0
334
- bookside.store(price, amount, id)
333
+ amount = size if Precise.string_gt(price, '0') else '0'
334
+ bookside.store(self.parse_number(price), self.parse_number(amount), id)
335
335
  else:
336
336
  size = -message[3] if (message[3] < 0) else message[3]
337
337
  side = 'asks' if (message[3] < 0) else 'bids'
ccxt/pro/bitfinex2.py CHANGED
@@ -585,21 +585,21 @@ class bitfinex2(ccxt.async_support.bitfinex2):
585
585
  deltas = message[1]
586
586
  orderbook = self.orderbooks[symbol]
587
587
  if isRaw:
588
- price = self.safe_float(deltas, 1)
588
+ price = self.safe_string(deltas, 1)
589
589
  size = -deltas[2] if (deltas[2] < 0) else deltas[2]
590
590
  side = 'asks' if (deltas[2] < 0) else 'bids'
591
591
  bookside = orderbook[side]
592
592
  # price = 0 means that you have to remove the order from your book
593
- amount = size if (price > 0) else 0
594
- bookside.store(price, amount, id)
593
+ amount = size if Precise.string_gt(price, '0') else '0'
594
+ bookside.store(self.parse_number(price), self.parse_number(amount), id)
595
595
  else:
596
- amount = self.safe_number(deltas, 2)
597
- counter = self.safe_number(deltas, 1)
598
- price = self.safe_number(deltas, 0)
599
- size = -amount if (amount < 0) else amount
600
- side = 'asks' if (amount < 0) else 'bids'
596
+ amount = self.safe_string(deltas, 2)
597
+ counter = self.safe_string(deltas, 1)
598
+ price = self.safe_string(deltas, 0)
599
+ size = Precise.string_neg(amount) if Precise.string_lt(amount, '0') else amount
600
+ side = 'asks' if Precise.string_lt(amount, '0') else 'bids'
601
601
  bookside = orderbook[side]
602
- bookside.store(price, size, counter)
602
+ bookside.store(self.parse_number(price), self.parse_number(size), self.parse_number(counter))
603
603
  client.resolve(orderbook, messageHash)
604
604
 
605
605
  def handle_checksum(self, client: Client, message, subscription):
@@ -958,11 +958,11 @@ class bitfinex2(ccxt.async_support.bitfinex2):
958
958
  clientOrderId = self.safe_string(order, 1)
959
959
  marketId = self.safe_string(order, 3)
960
960
  symbol = self.safe_symbol(marketId)
961
- market = self.safe_market(marketId)
962
- amount = self.safe_number(order, 7)
961
+ market = self.safe_market(symbol)
962
+ amount = self.safe_string(order, 7)
963
963
  side = 'buy'
964
- if amount < 0:
965
- amount = abs(amount)
964
+ if Precise.string_lt(amount, '0'):
965
+ amount = Precise.string_abs(amount)
966
966
  side = 'sell'
967
967
  remaining = Precise.string_abs(self.safe_string(order, 6))
968
968
  type = self.safe_string(order, 8)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.0.48
3
+ Version: 4.0.49
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 130+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -263,20 +263,20 @@ console.log(version, Object.keys(exchanges));
263
263
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
264
264
 
265
265
  <<<<<<< HEAD
266
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.0.48/dist/ccxt.browser.js
267
- * unpkg: https://unpkg.com/ccxt@4.0.48/dist/ccxt.browser.js
266
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.0.49/dist/ccxt.browser.js
267
+ * unpkg: https://unpkg.com/ccxt@4.0.49/dist/ccxt.browser.js
268
268
  =======
269
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.0.48/dist/ccxt.browser.js
270
- * unpkg: https://unpkg.com/ccxt@4.0.48/dist/ccxt.browser.js
269
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.0.49/dist/ccxt.browser.js
270
+ * unpkg: https://unpkg.com/ccxt@4.0.49/dist/ccxt.browser.js
271
271
  >>>>>>> e74b18a3a8a8cbcfe45ce4c1d32b9c03d4fae41c
272
272
 
273
273
  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.
274
274
 
275
275
  ```HTML
276
276
  <<<<<<< HEAD
277
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.0.48/dist/ccxt.browser.js"></script>
277
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.0.49/dist/ccxt.browser.js"></script>
278
278
  =======
279
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.0.48/dist/ccxt.browser.js"></script>
279
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.0.49/dist/ccxt.browser.js"></script>
280
280
  >>>>>>> e74b18a3a8a8cbcfe45ce4c1d32b9c03d4fae41c
281
281
  ```
282
282
 
@@ -1,10 +1,10 @@
1
- ccxt/__init__.py,sha256=nToEK_kCr-2FBOOXtoAo1ua6e08t2SXtTQ8AUgWaSxg,15438
1
+ ccxt/__init__.py,sha256=7DTJO1M6ULgdgICEshdDlm3O9eneyAt7Keabm_yygxM,15438
2
2
  ccxt/ace.py,sha256=8uTO7fzyxHnEhE3Y8VDP2EcWxh9gjs9xPMbuXjkUA7A,41372
3
3
  ccxt/alpaca.py,sha256=_cPmZ0obENxKSzsqLu0t1Ae-rUwN8z1DUB3Af8Kh4sA,33434
4
4
  ccxt/ascendex.py,sha256=TlCKGbfrKuZ4OkDsq6ca70H--XiDDfChqVdWfmOGkng,132547
5
5
  ccxt/bequant.py,sha256=O9tDvk7O1De-k3-G5lwXUVoNqzgfo_AJqQy4bXifdhM,1148
6
6
  ccxt/bigone.py,sha256=3hAbaUMHIttNIte0xVSLUfiV914Fj6JsuyseQ4AIVk8,75446
7
- ccxt/binance.py,sha256=qAG59v3XIjJUgdl-NUbMs66OKwFYfJGplo36EzNAL5g,392094
7
+ ccxt/binance.py,sha256=OXQesWw1nPe7tx4U0o97JnYnLcFVHA2VibiIqxiedfQ,392141
8
8
  ccxt/binancecoinm.py,sha256=pncdw6Xw2X1Po-vEvAB4nL37scoS_axGAVxetPy1YQs,1645
9
9
  ccxt/binanceus.py,sha256=RoC8nReBHXUJzRNyqMe4vhta6gLGuh1fyFkI8FOMKBE,2151
10
10
  ccxt/binanceusdm.py,sha256=KPQGlCalQ0eGlPCs2tSanOxaP8O0zFRQjGntA16Yprw,2480
@@ -18,7 +18,7 @@ ccxt/bitfinex.py,sha256=wTB73lxlRYwpBbSBInGX3zO48bbAQ1Z3R4JVtPmDTKc,69410
18
18
  ccxt/bitfinex2.py,sha256=0jk9pp_5LbOEKsRikUi8dfaFnK_t1n4sYi1PHto3gJE,111694
19
19
  ccxt/bitflyer.py,sha256=cbFtkL0YMkE-1jHhxOWSZB8Hr7j8IrVd6DXvvciTNQU,37835
20
20
  ccxt/bitforex.py,sha256=t3e95zu6aVGmJcdNyXPSHX0BGmFXA7PR8VsbIM4LZuc,32164
21
- ccxt/bitget.py,sha256=m81j_EpWKDBm-cAMaAcM5PRA0uYZQMdScMIBfV6F5qc,233752
21
+ ccxt/bitget.py,sha256=PujFcqRATn8T793TWlpPQ2o3PC32XQ5BGuBvKSg3sUg,233937
22
22
  ccxt/bithumb.py,sha256=QI2sZWiLN1rfXnn2zur1wosFNEWcyFZv_r-7DIVWkpo,42616
23
23
  ccxt/bitmart.py,sha256=_naLKa09DI7xuLlkIKMIlTiORsJDdKoSyrym9HdEBv8,138642
24
24
  ccxt/bitmex.py,sha256=I3lprOlp6CeanQ06Y4uerq_A8y55A-i5HqjUAwVeLbE,111695
@@ -58,21 +58,21 @@ ccxt/digifinex.py,sha256=c5XU19BTvIJA1VfBj63b_pAX_CWNV2EgRGELxtUw4l8,150997
58
58
  ccxt/exmo.py,sha256=bZQg1t8yrKscH3FWDKd5DmGsjR9d5-vJnOIoGG1swfk,88943
59
59
  ccxt/flowbtc.py,sha256=YPvm6tbsHJJUQBspFcHuVPQfVmiWzwnVvfzRqBdQX6U,1169
60
60
  ccxt/fmfwio.py,sha256=RbVLvzPwnqfDsE7Ea-N13ISCC82eJVPsXYjrleASmew,1236
61
- ccxt/gate.py,sha256=1szvgJ-7kIohx9xvcbakRO98kS2P2OKPjaXE_RcBKpE,253173
61
+ ccxt/gate.py,sha256=2bzHCb4nVtqz2B7YJgAufCW5UpyOIo56nFqKO5qlu0Y,253181
62
62
  ccxt/gateio.py,sha256=86AETJWODl_vA5VNeQRHZprmpNIY1HAxCddKZcnKSi8,445
63
63
  ccxt/gemini.py,sha256=1VOPAe_VzFnMWuCXiVgP8Ra7wl7Osp3G_dvrGX6mHec,73902
64
64
  ccxt/hitbtc.py,sha256=pREXtptKTCKxLe_QPu3voj348kTaDdDwcIFabKKSNBk,125278
65
65
  ccxt/hitbtc3.py,sha256=qRAr4Zvaju9IQWRZUohdoN7xRnzIMPq8AyYb3gPv-Is,455
66
66
  ccxt/hollaex.py,sha256=Hp4igDEwICB-vE1vXlDfLmClnu_WY4SMV4VhCbUD9Tg,73800
67
67
  ccxt/huobi.py,sha256=qCzrbKaV85xLyKmyHXo1b_hgxdDyptjJ5u1Hkclq6f8,367886
68
- ccxt/huobijp.py,sha256=scCYmiz4qQMlPDu_Aha8sauQuPYyeou8aKK4P1bknFI,86583
68
+ ccxt/huobijp.py,sha256=jxwMeNrvNFD9vrx81rSw-X7mvUj7KmhD_i2VeLyvh90,86480
69
69
  ccxt/huobipro.py,sha256=zdi6Dk59pKqYoaHZDD-mJ57ZvomXBoIUiS5oT3B3BAE,572
70
70
  ccxt/idex.py,sha256=rciy-LBQTjVLvdLJlsJ6DiRCPc_uTx2XfavJRlso9u8,67324
71
71
  ccxt/independentreserve.py,sha256=573tBnujPiXdqIu2nTPQ-pXuY1MBSkXXbyyy50wMX5o,29830
72
72
  ccxt/indodax.py,sha256=PO9OVPOcGAXycM561K8Q0CQKsNLrGQh_kd43_re8L2w,42559
73
- ccxt/kraken.py,sha256=mrZ6eu-MUxmlFR0RpfGRlit-IKwL_DeZn0Q9RIcEt3g,105996
73
+ ccxt/kraken.py,sha256=tsXIgIhWTnFHoYLU-7G-mhHJ0fIY0xGHCYGU7UUG5Po,106036
74
74
  ccxt/krakenfutures.py,sha256=XNsd_ucgawglec57ivkLWIC5Pq27HbvJ7NLcO0zT780,87749
75
- ccxt/kucoin.py,sha256=eRjkn3wN_zzzJ0I7KyBiMkLCMC616rs5Swl6MgcaUT8,181470
75
+ ccxt/kucoin.py,sha256=bXDUc7D8OdjGxY71wRdVd2L6Fzoz4y2UT9lJW6sJ0Yg,181469
76
76
  ccxt/kucoinfutures.py,sha256=krR1tegD6QK2VqTy8GZid36mUodqggMrOrsFzhxwr_Y,101317
77
77
  ccxt/kuna.py,sha256=wGouWAHNqVceC-gKCxGvyatOaOskqKsGoDcZBKbX2S4,37785
78
78
  ccxt/latoken.py,sha256=IVaCUWRkZMcBIFM_l2V8wfoeSg7GU89NsWuVIg6hXcM,70184
@@ -89,7 +89,7 @@ ccxt/oceanex.py,sha256=H7iiIWo9WInk_wwxScMZBGxs2EH7kNpEui9IsLKYVAY,38242
89
89
  ccxt/okcoin.py,sha256=B5otctOYDvWkhckFWW7tfhUQsQaSbPiZh0X0eqR1K_w,177829
90
90
  ccxt/okex.py,sha256=nVDSzVztmboH593DVByjzFoOpFTzumcQFH_T9kdVKlE,434
91
91
  ccxt/okex5.py,sha256=LKTogVF1svNkqW_-Cx0AuAopu6esgFf7ucbv7CaodUg,441
92
- ccxt/okx.py,sha256=_KsP3q6dn4kzfK2FZbTwbBtYyp9ZwIV5TrQktN16qJ4,297934
92
+ ccxt/okx.py,sha256=bf0sV8B16Xy_Rc4XaCKkorJlyWSeiGqU9yAtHEVJAWw,297962
93
93
  ccxt/paymium.py,sha256=6nfQfBH6HWCfp4NoO7nxQh4GDTuQz75gDL_9uZnb7yI,23976
94
94
  ccxt/phemex.py,sha256=z_cd_aFqo1zSR_3llrcV22wvF09mYSG7OHEXBjvgWnE,198133
95
95
  ccxt/poloniex.py,sha256=x9lkjYRnGOKkZaAJwqdtz0EUATuknHgeTkXYXSN0ez4,93495
@@ -112,10 +112,10 @@ ccxt/abstract/alpaca.py,sha256=GKGGXKJ9WzW9V3SmOX_Jjaea_QTa04Eg5nYhQgFErGI,1861
112
112
  ccxt/abstract/ascendex.py,sha256=lMrOIR7VWJXoNaA8rjCNI8p-WTYsVlpC_D4jpDg5k_8,11197
113
113
  ccxt/abstract/bequant.py,sha256=-bjb83y_4FGdHtHMo-naHYoI5JyltlF2M-TzjAZJ3Hg,10949
114
114
  ccxt/abstract/bigone.py,sha256=kuQi7l8C_zqTHdfXiBOfDR7424mzST2OjtN9wMStkWc,2457
115
- ccxt/abstract/binance.py,sha256=2aF9mTT65cyPjioK2siADelfAKui-5PiiTz2xGn1wTc,78170
116
- ccxt/abstract/binancecoinm.py,sha256=2aF9mTT65cyPjioK2siADelfAKui-5PiiTz2xGn1wTc,78170
117
- ccxt/abstract/binanceus.py,sha256=2aF9mTT65cyPjioK2siADelfAKui-5PiiTz2xGn1wTc,78170
118
- ccxt/abstract/binanceusdm.py,sha256=2aF9mTT65cyPjioK2siADelfAKui-5PiiTz2xGn1wTc,78170
115
+ ccxt/abstract/binance.py,sha256=uHwTtLaCWfpOZOckbf0iKUOBgpEFBp9ubNv_BXmAICo,78284
116
+ ccxt/abstract/binancecoinm.py,sha256=uHwTtLaCWfpOZOckbf0iKUOBgpEFBp9ubNv_BXmAICo,78284
117
+ ccxt/abstract/binanceus.py,sha256=uHwTtLaCWfpOZOckbf0iKUOBgpEFBp9ubNv_BXmAICo,78284
118
+ ccxt/abstract/binanceusdm.py,sha256=uHwTtLaCWfpOZOckbf0iKUOBgpEFBp9ubNv_BXmAICo,78284
119
119
  ccxt/abstract/bingx.py,sha256=PJzOcIO960mxEAPy8bFEZ3vJHrqUM3hkCc-6QERkkwU,7635
120
120
  ccxt/abstract/bit2c.py,sha256=np6i756kSB5dO3Nj6POLKxkWkpYcsGg-4LS8BwPrizI,2830
121
121
  ccxt/abstract/bitbank.py,sha256=k5D8PoPW2N79K_24NL9yY0qkwaCgzi_VoYUlqnj2bs8,2606
@@ -126,7 +126,7 @@ ccxt/abstract/bitfinex.py,sha256=OLUXdJEycyN_qrBhPuTTOVlwu3jkqVWenoTmS-W3bOE,760
126
126
  ccxt/abstract/bitfinex2.py,sha256=PAch4aEMHMYjV8up6YHmibfLz6sn4wh-knkSTKZbJrY,19171
127
127
  ccxt/abstract/bitflyer.py,sha256=3ngG1GJJCNMzYMWoNXCEEgLxmTl7eRf7_JU4M0P2rqo,3576
128
128
  ccxt/abstract/bitforex.py,sha256=_vwOUvBfzQazUvoflGK53m8i7xRgsmzFL4qP5UzqnZ8,2789
129
- ccxt/abstract/bitget.py,sha256=mNo5c8YzGgrS13oKvRrZA2hpbz2nHGGmnjPACHNpr-U,35837
129
+ ccxt/abstract/bitget.py,sha256=s2fHgJ3HYPFTkks1S_vRZUrjwjcV6ibwGNGYE5gGPLw,36355
130
130
  ccxt/abstract/bithumb.py,sha256=I_ZNjXND1I4IRz6AsIwlZV-XoOt0vtMo4kUroAcC2Kk,2659
131
131
  ccxt/abstract/bitmart.py,sha256=Zw34giZABSCscioucHqX8aBT7EEbADrJW_vgmGqNS-Q,9098
132
132
  ccxt/abstract/bitmex.py,sha256=k00c5G7Tj9u00uV7Qj7tBm4uyr5oi4f73UDJA9nA_IY,8397
@@ -177,7 +177,7 @@ ccxt/abstract/huobipro.py,sha256=q7z217s-eusulW8dYKTDMc6rktX2GMnbrXhZCtIS55c,970
177
177
  ccxt/abstract/idex.py,sha256=kFcWa8PauxofzN_k2DyQ0aZxQ70VPNAWMcEUZrl7XqE,2129
178
178
  ccxt/abstract/independentreserve.py,sha256=Cue0hud5acRs2Q6oSvQ7Rx-YWS_fuACs6uV3aIE20ZM,4165
179
179
  ccxt/abstract/indodax.py,sha256=r8hOXU3ZXDRV90VSZ3a0Wjl75H_BA7sWCJVrXRUPHOc,2266
180
- ccxt/abstract/kraken.py,sha256=yX8UIbuFvTi_Ru0HZcsMy42uV--fy7lv6W60bjNTYFQ,5097
180
+ ccxt/abstract/kraken.py,sha256=L8CcnKbRbvEEnnhjXxHnx7RT2USdrMbYstSjQehh2gA,5200
181
181
  ccxt/abstract/krakenfutures.py,sha256=TeQnJLYSf3N98vMiNzHOc3BLFGEv4mLzHt1-2zC9YAc,3321
182
182
  ccxt/abstract/kucoin.py,sha256=926YxipycIcvb2QKWgCjcdJm65p7PLg4mFCpU7Se2EQ,21799
183
183
  ccxt/abstract/kucoinfutures.py,sha256=WEFmDsdDr5zw0TTlg0I0c841zDNH3teONR_-Oc6Aaz4,22954
@@ -213,13 +213,13 @@ ccxt/abstract/woo.py,sha256=ah_izsOyPt18l_rl1nzgbtwpRTeAo1_MJE8_qMvdCCg,7747
213
213
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
214
214
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
215
215
  ccxt/abstract/zonda.py,sha256=VoxuPkSq8vAvKnDvOqnByhwsIf09m7yIrs8HejFrDk4,5482
216
- ccxt/async_support/__init__.py,sha256=rhJ-xheT5S-4W57yFn5RRZIKluGlRoDsObLyEsfysbI,15221
216
+ ccxt/async_support/__init__.py,sha256=gQy737QkXLdCPwFjOPyuqfgigRe4cFK3SdZ47zbZZuA,15221
217
217
  ccxt/async_support/ace.py,sha256=xTtzqhVgpoDI4YgR9rRTRHTV2UsQmNYNfbuJc6aBKxA,41596
218
218
  ccxt/async_support/alpaca.py,sha256=hWimV0LrPixw15-FH7lMFB6s6EMEOjDlZOhWjznzu3g,33580
219
219
  ccxt/async_support/ascendex.py,sha256=Guhr-SXw2H0UliozUhFjg-Z7Dt1EZGVdkydv5csAWaI,133179
220
220
  ccxt/async_support/bequant.py,sha256=kLA0e9URC1rDEHgpb61pEGAn5jZXzE715lEcJjPdLRo,1162
221
221
  ccxt/async_support/bigone.py,sha256=rNfleAZHUqHUx20fXBH8_-rn4wpwjVDZkxERElUERcU,75844
222
- ccxt/async_support/binance.py,sha256=ssV_6Ev_NQThZzDdafvcrYKhe2SiIimLUuCX_ynKIhk,393328
222
+ ccxt/async_support/binance.py,sha256=Xy5VE_eNPNk0Bact2xlqLTs_fKcVajtZz-pw3yTZ3CQ,393375
223
223
  ccxt/async_support/binancecoinm.py,sha256=IY3RLZptQA2nmZaUYRGfTa5ZY4VMWBpFYfwHc8zTHw0,1683
224
224
  ccxt/async_support/binanceus.py,sha256=Jtyl0jtSOpdjAAAYcSUzH6YRVxe88RJ6f4_IUge5gWg,2165
225
225
  ccxt/async_support/binanceusdm.py,sha256=-1r4A4tmV2pCiLGO80hzq7MIIj4MTzOD7buZGv6JauA,2518
@@ -233,7 +233,7 @@ ccxt/async_support/bitfinex.py,sha256=26P6ZI55XcsPrsFf9s6-nqJl_kZFNL2kyEO5K4xuXX
233
233
  ccxt/async_support/bitfinex2.py,sha256=abKkmnJkBlQ-5bb8K882opTvPXwsaPivBLHYYmezmZQ,112164
234
234
  ccxt/async_support/bitflyer.py,sha256=UaA9r_Hu-BBHt_8w0TT3tfJwH-pAUDjhE5WGRBT_YYo,38143
235
235
  ccxt/async_support/bitforex.py,sha256=lI1Zz7snYpmCe10LEdO68kFQ8aRY2UXN3qoz2YUC8uc,32388
236
- ccxt/async_support/bitget.py,sha256=oN1wETq8wpJJkfEIDW2b9J2GAFGWlJ0ei2yhoPnseko,234674
236
+ ccxt/async_support/bitget.py,sha256=d4IdF8GBh7WZbZL5P6c2rgkw43c2GOmL7rdTXOLCeDc,234859
237
237
  ccxt/async_support/bithumb.py,sha256=PSbN5liXM68a3ZR13v72VLVEXODBo84dw_M-E-JrVuI,42834
238
238
  ccxt/async_support/bitmart.py,sha256=AMI3JYaYpj4WEbOcr7iqCzhDXfi2cqZwam4c8S_oNyM,139280
239
239
  ccxt/async_support/bitmex.py,sha256=u2XFnM88MO1kE1LJzxjtizNaby9jwch9QPLe8Ru2vGU,112189
@@ -273,21 +273,21 @@ ccxt/async_support/digifinex.py,sha256=q3wXZtkBVSP29_P97WSQo5v0zIUbO5rQwMzGZMRkh
273
273
  ccxt/async_support/exmo.py,sha256=ocg9JUh_6p3OFA_DJdhP5tVkTuYnFfgIeMqMNzvg9XY,89485
274
274
  ccxt/async_support/flowbtc.py,sha256=bCnvtcNnPxxaxqVjI1GGXKhIpz_1r4GIFWqqPokvCR0,1183
275
275
  ccxt/async_support/fmfwio.py,sha256=lzfSnPrB2ARcC3EIqAuBM4vyg6LJ6n8RE71Zvt3ez1s,1250
276
- ccxt/async_support/gate.py,sha256=FQmkDMDWPg4h_sm4p1gakyAQgXVfxuMAwtlWtxvlfp0,254113
276
+ ccxt/async_support/gate.py,sha256=iXBaw7rT_JuB352GVV0UJp51sYMefNflArAXpteZLB8,254121
277
277
  ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
278
278
  ccxt/async_support/gemini.py,sha256=dfyJ83asotNsCBLZAMVDn8kuQ1WliXM3hk4LVrPsU7k,74392
279
279
  ccxt/async_support/hitbtc.py,sha256=F-uPs4m6HeNUKdAOCix93ybgg3o6flf9-r75dTGdYUI,125964
280
280
  ccxt/async_support/hitbtc3.py,sha256=dmSYoD2o4av_zzbZI8HNIoj8BWxA7QozsVpy8JaOXzU,469
281
281
  ccxt/async_support/hollaex.py,sha256=YSxl-hCVL7GeilD6USDjMIET0pKJsWQwExNuekJsliw,74234
282
282
  ccxt/async_support/huobi.py,sha256=FTLG1UBTiMVlcIn5HgLKiX1mn9S9EIDLRI-NtbhCQO8,369432
283
- ccxt/async_support/huobijp.py,sha256=4RMbNd5OKwS8rUj4bI7KvpC1YWUkmFME6FKgvVv486U,87065
283
+ ccxt/async_support/huobijp.py,sha256=D0nbPfCOMc_v4BsLeyUSFJIDI9Pmft_nqHyGL-anz4w,86962
284
284
  ccxt/async_support/huobipro.py,sha256=Xb148Da6Mlf8nYhB_c8frd8ZMt6C59VjWgk4o9tIZWA,586
285
285
  ccxt/async_support/idex.py,sha256=hqSQOI4cVgbqBcE_gKxaRb1MvBlBK7TJuoGTJyj5j5c,67764
286
286
  ccxt/async_support/independentreserve.py,sha256=sCzjC8-8o1vj9Y1QEAWtQNHNB-8b5PTMGzjKpKBZXpA,30066
287
287
  ccxt/async_support/indodax.py,sha256=uLcWP-2WsMvgU6Al5T_RtoACudC-PZ1DYy9X9qRRBdA,42831
288
- ccxt/async_support/kraken.py,sha256=KSa2fdFaja0LQdMci4wh54y0eT3UbI2g70v5IJS4C7I,106568
288
+ ccxt/async_support/kraken.py,sha256=_ymeu34WTPE2B-WNvOrdmyEGyscncHxaQQu4dKv1_3s,106608
289
289
  ccxt/async_support/krakenfutures.py,sha256=paChQxb72h2v9QgJn6ieF0QpoLlSJ2uoWq6JyKQPkfc,88105
290
- ccxt/async_support/kucoin.py,sha256=h6-mscdOd28NhkhMMJ7bwVi3hc93R1ldMJNM_B4GjVE,182152
290
+ ccxt/async_support/kucoin.py,sha256=U7U1QaTzJ0cbAq1ZF908K7G7b6ERCKlfijLYpcavfbA,182151
291
291
  ccxt/async_support/kucoinfutures.py,sha256=YocJfbHDkE5Y_tapIGSYYj7rIG-CZnIApmUN8qIPOHo,101787
292
292
  ccxt/async_support/kuna.py,sha256=Myuc-CEhyAE9_RmYdYRWKnHuFq1L6la-p7pOO3WtKwA,38033
293
293
  ccxt/async_support/latoken.py,sha256=dx98HZkmPZVbTDjPJhF7aFRpCc5PvC_To6c1vpCJh_0,70576
@@ -304,7 +304,7 @@ ccxt/async_support/oceanex.py,sha256=uZcG5DwNv6hehxF8wMuHjBIW5sxkJ0_WOgeOPBhy9Go
304
304
  ccxt/async_support/okcoin.py,sha256=WvLWTmoUs8ARk7GTglgk4BwMtTj_kWUW6nRuuHVdNVk,178293
305
305
  ccxt/async_support/okex.py,sha256=6dbtH4bC1C2x4cQUK6W62y7PuDgO3YazuFa7DYhM4Jw,448
306
306
  ccxt/async_support/okex5.py,sha256=tq41tKx06j3DDO9pu9iKInpjayVprbobVNTK8qb7hoM,455
307
- ccxt/async_support/okx.py,sha256=CiQdmZNy_lTGvvb_GashECiQ8EG1lZ-s1ebIT45YcPk,299029
307
+ ccxt/async_support/okx.py,sha256=AbI8yv4FDERk3k_lheMK_YghPW2zFn_hryxYH4DEbUc,299057
308
308
  ccxt/async_support/paymium.py,sha256=A1vCDjoXiyu7pWs3E-MZfUdt1d-OXESOK1NxGOOUg7Y,24164
309
309
  ccxt/async_support/phemex.py,sha256=63_eryYdJlTQwOs427SVvZy2ol6khHeRekNWT1jP0-Q,198729
310
310
  ccxt/async_support/poloniex.py,sha256=t-_OcziYnb9dH9QCgRO9_MGcyJ17fEcqKCdU3ilhkgU,93995
@@ -322,7 +322,7 @@ ccxt/async_support/yobit.py,sha256=cRJgQNE-EfjXAligG8-iKxYA-yt9tKGilGnXg1PDrbg,5
322
322
  ccxt/async_support/zaif.py,sha256=Bg4Bfk63mluMSp1_8VE4_JPZEXSb940MocZGFisG9IA,28985
323
323
  ccxt/async_support/zonda.py,sha256=9je6awNUpQAHqF8uKfqIqjXyG8CQOPmzU1xDdxzpNDo,79823
324
324
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
325
- ccxt/async_support/base/exchange.py,sha256=Ml6aOZWRQwUDwjaX60OlzATTsgv3xQWk4F9cOJTpQ4A,144294
325
+ ccxt/async_support/base/exchange.py,sha256=mQThUcbseoPBnbsFMQ7oFMQuPq9xHcte1GpnXb816oY,144294
326
326
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
327
327
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
328
328
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=xmlZV30Vb9Kq7JCm3D5FuEmuj1zp5H4F4hrz8-Y-Ir4,4999
@@ -336,10 +336,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GH-475Ni0mLOx7mUDnz4jjzaGkh
336
336
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
337
337
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
338
338
  ccxt/base/errors.py,sha256=-LVeTNyXvu3QEgb-p-KzMpcBgzHlvFTwDzmZK7Gfc14,3401
339
- ccxt/base/exchange.py,sha256=7FApin1VPwrAjPapQcLXl6I7YUE1wJfZqPyXf4WqVuw,183893
339
+ ccxt/base/exchange.py,sha256=9LulvBWik4LXeMWe3wXRqM5Sxc5my1LMNU9IiOEO69M,183893
340
340
  ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
341
341
  ccxt/base/types.py,sha256=q_IpjVK54UQeaepaNNDVDXshmT87EFs1bWFuOnt4q-o,2053
342
- ccxt/pro/__init__.py,sha256=b3fr1fqrF6x74ma0thMFhlb28JEflkw-fmfYPUyvhow,6480
342
+ ccxt/pro/__init__.py,sha256=yXwXmpM5PzkfFnr9-ZUFb1zdPDIjYjWhPc9p0BJQQDk,6480
343
343
  ccxt/pro/alpaca.py,sha256=BBBvLzVQ6CNS2000QZp487Iwg99ZJbRycpQo3ETePtE,26671
344
344
  ccxt/pro/ascendex.py,sha256=ChYDvZALiyF0LylzEVeZE41oSXT2JWkCWI7SWwzzn-Q,34551
345
345
  ccxt/pro/bequant.py,sha256=3IeQ0vPg-eVqPiGMfX7yqH9qtXKm1ZqocQDeLwpA8EE,1093
@@ -348,8 +348,8 @@ ccxt/pro/binancecoinm.py,sha256=vu5SUgP70T1Dax-Am3rch7ZldGrmUwxr_rI51Y38xjw,724
348
348
  ccxt/pro/binanceus.py,sha256=xKL-1cOHyqlLTwLGg-DPf6g3JMM1oU2Kv708FiGJwrY,2016
349
349
  ccxt/pro/binanceusdm.py,sha256=S0eT662O2ReplsihWk42nhJWqw1XsODpeDQa9eFVVt8,1357
350
350
  ccxt/pro/bitcoincom.py,sha256=ipRe4xMqvwh81FAJhzQI8P_sGCmmHFw42owF-FwcoD4,914
351
- ccxt/pro/bitfinex.py,sha256=k5UtDq2L2j2VAxplkFkC-lDrEN-7Yvv60OcR88G7KYQ,24703
352
- ccxt/pro/bitfinex2.py,sha256=dhDEJkbBxPHY3mHzL0b_5u6GVRgf-K2ytSzuManEHNQ,42051
351
+ ccxt/pro/bitfinex.py,sha256=v8_nZxTwsmqDMOuSDgA6ulGIkWTVobgSn5o-wXDJEfU,24762
352
+ ccxt/pro/bitfinex2.py,sha256=T9gDoliXCAi9P7wbR76e4W4CimPPZn3aZDLDsQx0lpk,42255
353
353
  ccxt/pro/bitget.py,sha256=npGY_lTy1JDTwheySUzaztAX_yvQZKsELtOdlzQZ-yA,46219
354
354
  ccxt/pro/bitmart.py,sha256=Qlo6NR4AVOCmruCLk0D0q_1o_LBq4N3OjyVPL0t8mtk,24488
355
355
  ccxt/pro/bitmex.py,sha256=GpAPt73GrmbWZIz0cf4iyYuBqNXO-Uv8GQjx-M6ZUro,55687
@@ -450,7 +450,7 @@ ccxt/test/base/test_ticker.py,sha256=h9AV_O6s-Ax3vB3sFoN0Mz22rMOi65i9BDv0SNejH98
450
450
  ccxt/test/base/test_trade.py,sha256=bL9o3S_TGW8Nnlxu-BYkRG8NyRzKAWrU66uO5jJCM3A,2259
451
451
  ccxt/test/base/test_trading_fee.py,sha256=yRCpLHLg_ca9JQXdZB3_pIMHgHLGEfeQF95E6d1e2Bc,1125
452
452
  ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
453
- ccxt-4.0.48.dist-info/METADATA,sha256=t594lvQk8NnKzK_f8Tz5XU_FzyWYJKdmhKthvY7sx5U,111374
454
- ccxt-4.0.48.dist-info/WHEEL,sha256=a-zpFRIJzOq5QfuhBzbhiA1eHTzNCJn8OdRvhdNX0Rk,110
455
- ccxt-4.0.48.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
456
- ccxt-4.0.48.dist-info/RECORD,,
453
+ ccxt-4.0.49.dist-info/METADATA,sha256=L1b6CPB4uPs877eACBtF188kAUV5NDG8TPVPlBvTjWs,111374
454
+ ccxt-4.0.49.dist-info/WHEEL,sha256=a-zpFRIJzOq5QfuhBzbhiA1eHTzNCJn8OdRvhdNX0Rk,110
455
+ ccxt-4.0.49.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
456
+ ccxt-4.0.49.dist-info/RECORD,,
File without changes