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

Files changed (156) hide show
  1. ccxt/__init__.py +1 -1
  2. ccxt/abstract/bingx.py +2 -0
  3. ccxt/abstract/bybit.py +2 -0
  4. ccxt/ascendex.py +6 -3
  5. ccxt/async_support/__init__.py +1 -1
  6. ccxt/async_support/ascendex.py +6 -3
  7. ccxt/async_support/base/exchange.py +15 -2
  8. ccxt/async_support/bigone.py +2 -2
  9. ccxt/async_support/binance.py +88 -14
  10. ccxt/async_support/bingx.py +96 -3
  11. ccxt/async_support/bit2c.py +2 -2
  12. ccxt/async_support/bitbank.py +2 -2
  13. ccxt/async_support/bitfinex.py +2 -2
  14. ccxt/async_support/bitfinex2.py +4 -3
  15. ccxt/async_support/bitflyer.py +4 -2
  16. ccxt/async_support/bitget.py +12 -5
  17. ccxt/async_support/bitmart.py +6 -4
  18. ccxt/async_support/bitmex.py +3 -2
  19. ccxt/async_support/bitopro.py +3 -3
  20. ccxt/async_support/bitrue.py +3 -2
  21. ccxt/async_support/bitso.py +2 -2
  22. ccxt/async_support/bitstamp.py +89 -97
  23. ccxt/async_support/bitteam.py +2 -2
  24. ccxt/async_support/bitvavo.py +3 -3
  25. ccxt/async_support/bl3p.py +2 -2
  26. ccxt/async_support/blockchaincom.py +2 -2
  27. ccxt/async_support/blofin.py +4 -2
  28. ccxt/async_support/bybit.py +57 -5
  29. ccxt/async_support/cex.py +3 -3
  30. ccxt/async_support/coinbase.py +42 -22
  31. ccxt/async_support/coinbaseinternational.py +3 -2
  32. ccxt/async_support/coinbasepro.py +3 -3
  33. ccxt/async_support/coincheck.py +2 -2
  34. ccxt/async_support/coinex.py +101 -13
  35. ccxt/async_support/coinlist.py +3 -3
  36. ccxt/async_support/coinmate.py +2 -2
  37. ccxt/async_support/coinmetro.py +2 -2
  38. ccxt/async_support/coinone.py +2 -2
  39. ccxt/async_support/coinsph.py +6 -4
  40. ccxt/async_support/cryptocom.py +1 -0
  41. ccxt/async_support/currencycom.py +3 -3
  42. ccxt/async_support/delta.py +3 -2
  43. ccxt/async_support/deribit.py +3 -3
  44. ccxt/async_support/digifinex.py +7 -4
  45. ccxt/async_support/exmo.py +4 -3
  46. ccxt/async_support/gate.py +8 -4
  47. ccxt/async_support/gemini.py +13 -12
  48. ccxt/async_support/hitbtc.py +8 -5
  49. ccxt/async_support/hollaex.py +3 -3
  50. ccxt/async_support/htx.py +7 -4
  51. ccxt/async_support/huobijp.py +2 -2
  52. ccxt/async_support/hyperliquid.py +3 -2
  53. ccxt/async_support/idex.py +3 -3
  54. ccxt/async_support/independentreserve.py +2 -2
  55. ccxt/async_support/kraken.py +3 -3
  56. ccxt/async_support/kucoin.py +43 -18
  57. ccxt/async_support/kucoinfutures.py +32 -4
  58. ccxt/async_support/kuna.py +2 -2
  59. ccxt/async_support/latoken.py +7 -3
  60. ccxt/async_support/lbank.py +7 -5
  61. ccxt/async_support/luno.py +4 -2
  62. ccxt/async_support/lykke.py +2 -2
  63. ccxt/async_support/mexc.py +57 -9
  64. ccxt/async_support/ndax.py +2 -2
  65. ccxt/async_support/oceanex.py +2 -2
  66. ccxt/async_support/okcoin.py +2 -2
  67. ccxt/async_support/okx.py +149 -12
  68. ccxt/async_support/onetrading.py +3 -3
  69. ccxt/async_support/phemex.py +3 -2
  70. ccxt/async_support/poloniex.py +3 -3
  71. ccxt/async_support/probit.py +2 -2
  72. ccxt/async_support/timex.py +6 -4
  73. ccxt/async_support/upbit.py +2 -2
  74. ccxt/async_support/wazirx.py +2 -2
  75. ccxt/async_support/whitebit.py +3 -3
  76. ccxt/async_support/woo.py +4 -3
  77. ccxt/async_support/yobit.py +2 -2
  78. ccxt/base/exchange.py +65 -12
  79. ccxt/base/types.py +33 -0
  80. ccxt/bigone.py +2 -2
  81. ccxt/binance.py +88 -14
  82. ccxt/bingx.py +96 -3
  83. ccxt/bit2c.py +2 -2
  84. ccxt/bitbank.py +2 -2
  85. ccxt/bitfinex.py +2 -2
  86. ccxt/bitfinex2.py +4 -3
  87. ccxt/bitflyer.py +4 -2
  88. ccxt/bitget.py +12 -5
  89. ccxt/bitmart.py +6 -4
  90. ccxt/bitmex.py +3 -2
  91. ccxt/bitopro.py +3 -3
  92. ccxt/bitrue.py +3 -2
  93. ccxt/bitso.py +2 -2
  94. ccxt/bitstamp.py +89 -97
  95. ccxt/bitteam.py +2 -2
  96. ccxt/bitvavo.py +3 -3
  97. ccxt/bl3p.py +2 -2
  98. ccxt/blockchaincom.py +2 -2
  99. ccxt/blofin.py +4 -2
  100. ccxt/bybit.py +57 -5
  101. ccxt/cex.py +3 -3
  102. ccxt/coinbase.py +42 -22
  103. ccxt/coinbaseinternational.py +3 -2
  104. ccxt/coinbasepro.py +3 -3
  105. ccxt/coincheck.py +2 -2
  106. ccxt/coinex.py +101 -13
  107. ccxt/coinlist.py +3 -3
  108. ccxt/coinmate.py +2 -2
  109. ccxt/coinmetro.py +2 -2
  110. ccxt/coinone.py +2 -2
  111. ccxt/coinsph.py +6 -4
  112. ccxt/cryptocom.py +1 -0
  113. ccxt/currencycom.py +3 -3
  114. ccxt/delta.py +3 -2
  115. ccxt/deribit.py +3 -3
  116. ccxt/digifinex.py +7 -4
  117. ccxt/exmo.py +4 -3
  118. ccxt/gate.py +8 -4
  119. ccxt/gemini.py +13 -12
  120. ccxt/hitbtc.py +8 -5
  121. ccxt/hollaex.py +3 -3
  122. ccxt/htx.py +7 -4
  123. ccxt/huobijp.py +2 -2
  124. ccxt/hyperliquid.py +3 -2
  125. ccxt/idex.py +3 -3
  126. ccxt/independentreserve.py +2 -2
  127. ccxt/kraken.py +3 -3
  128. ccxt/kucoin.py +43 -18
  129. ccxt/kucoinfutures.py +32 -4
  130. ccxt/kuna.py +2 -2
  131. ccxt/latoken.py +7 -3
  132. ccxt/lbank.py +7 -5
  133. ccxt/luno.py +4 -2
  134. ccxt/lykke.py +2 -2
  135. ccxt/mexc.py +57 -9
  136. ccxt/ndax.py +2 -2
  137. ccxt/oceanex.py +2 -2
  138. ccxt/okcoin.py +2 -2
  139. ccxt/okx.py +149 -12
  140. ccxt/onetrading.py +3 -3
  141. ccxt/phemex.py +3 -2
  142. ccxt/poloniex.py +3 -3
  143. ccxt/pro/__init__.py +1 -1
  144. ccxt/pro/bitget.py +2 -0
  145. ccxt/pro/bitvavo.py +2 -2
  146. ccxt/probit.py +2 -2
  147. ccxt/timex.py +6 -4
  148. ccxt/upbit.py +2 -2
  149. ccxt/wazirx.py +2 -2
  150. ccxt/whitebit.py +3 -3
  151. ccxt/woo.py +4 -3
  152. ccxt/yobit.py +2 -2
  153. {ccxt-4.2.88.dist-info → ccxt-4.2.90.dist-info}/METADATA +4 -4
  154. {ccxt-4.2.88.dist-info → ccxt-4.2.90.dist-info}/RECORD +156 -156
  155. {ccxt-4.2.88.dist-info → ccxt-4.2.90.dist-info}/WHEEL +0 -0
  156. {ccxt-4.2.88.dist-info → ccxt-4.2.90.dist-info}/top_level.txt +0 -0
ccxt/exmo.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.exmo import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Int, MarginModification, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
9
+ from ccxt.base.types import Balances, Currencies, Currency, Int, MarginModification, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import PermissionDenied
@@ -273,6 +273,7 @@ class exmo(Exchange, ImplicitAPI):
273
273
  'info': data,
274
274
  'symbol': self.safe_symbol(None, market),
275
275
  'type': None,
276
+ 'marginMode': 'isolated',
276
277
  'amount': None,
277
278
  'total': None,
278
279
  'code': self.safe_value(market, 'quote'),
@@ -303,7 +304,7 @@ class exmo(Exchange, ImplicitAPI):
303
304
  """
304
305
  return self.modify_margin_helper(symbol, amount, 'add', params)
305
306
 
306
- def fetch_trading_fees(self, params={}):
307
+ def fetch_trading_fees(self, params={}) -> TradingFees:
307
308
  """
308
309
  fetch the trading fees for multiple markets
309
310
  :see: https://documenter.getpostman.com/view/10287440/SzYXWKPi#90927062-256c-4b03-900f-2b99131f9a54
@@ -573,7 +574,7 @@ class exmo(Exchange, ImplicitAPI):
573
574
  }
574
575
  return self.assign_default_deposit_withdraw_fees(result)
575
576
 
576
- def fetch_currencies(self, params={}):
577
+ def fetch_currencies(self, params={}) -> Currencies:
577
578
  """
578
579
  fetches all available currencies on an exchange
579
580
  :see: https://documenter.getpostman.com/view/10287440/SzYXWKPi#7cdf0ca8-9ff6-4cf3-aa33-bcec83155c49
ccxt/gate.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.gate import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, FundingHistory, Greeks, Int, Leverage, Leverages, MarginModification, Market, MarketInterface, Num, Option, OptionChain, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
9
+ from ccxt.base.types import Balances, Currencies, Currency, FundingHistory, Greeks, Int, Leverage, Leverages, MarginModification, Market, MarketInterface, Num, Option, OptionChain, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import PermissionDenied
@@ -138,6 +138,7 @@ class gate(Exchange, ImplicitAPI):
138
138
  'fetchLeverages': True,
139
139
  'fetchLeverageTiers': True,
140
140
  'fetchLiquidations': True,
141
+ 'fetchMarginAdjustmentHistory': False,
141
142
  'fetchMarginMode': False,
142
143
  'fetchMarketLeverageTiers': True,
143
144
  'fetchMarkets': True,
@@ -1520,7 +1521,7 @@ class gate(Exchange, ImplicitAPI):
1520
1521
  defaultSettle = ['usdt'] if (type == 'swap') else ['btc']
1521
1522
  return self.safe_value(fetchMarketsContractOptions, 'settlementCurrencies', defaultSettle)
1522
1523
 
1523
- def fetch_currencies(self, params={}):
1524
+ def fetch_currencies(self, params={}) -> Currencies:
1524
1525
  """
1525
1526
  fetches all available currencies on an exchange
1526
1527
  :see: https://www.gate.io/docs/developers/apiv4/en/#list-all-currencies-details
@@ -1928,7 +1929,7 @@ class gate(Exchange, ImplicitAPI):
1928
1929
  'network': network,
1929
1930
  }
1930
1931
 
1931
- def fetch_trading_fee(self, symbol: str, params={}):
1932
+ def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
1932
1933
  """
1933
1934
  fetch the trading fees for a market
1934
1935
  :see: https://www.gate.io/docs/developers/apiv4/en/#retrieve-personal-trading-fee
@@ -1958,7 +1959,7 @@ class gate(Exchange, ImplicitAPI):
1958
1959
  #
1959
1960
  return self.parse_trading_fee(response, market)
1960
1961
 
1961
- def fetch_trading_fees(self, params={}):
1962
+ def fetch_trading_fees(self, params={}) -> TradingFees:
1962
1963
  """
1963
1964
  fetch the trading fees for multiple markets
1964
1965
  :see: https://www.gate.io/docs/developers/apiv4/en/#retrieve-personal-trading-fee
@@ -2017,6 +2018,8 @@ class gate(Exchange, ImplicitAPI):
2017
2018
  'symbol': self.safe_string(market, 'symbol'),
2018
2019
  'maker': self.safe_number(info, makerKey),
2019
2020
  'taker': self.safe_number(info, takerKey),
2021
+ 'percentage': None,
2022
+ 'tierBased': None,
2020
2023
  }
2021
2024
 
2022
2025
  def fetch_transaction_fees(self, codes: List[str] = None, params={}):
@@ -5685,6 +5688,7 @@ class gate(Exchange, ImplicitAPI):
5685
5688
  'info': data,
5686
5689
  'symbol': market['symbol'],
5687
5690
  'type': None,
5691
+ 'marginMode': 'isolated',
5688
5692
  'amount': None,
5689
5693
  'total': total,
5690
5694
  'code': self.safe_value(market, 'quote'),
ccxt/gemini.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.gemini import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
9
+ from ccxt.base.types import Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import PermissionDenied
@@ -121,6 +121,7 @@ class gemini(Exchange, ImplicitAPI):
121
121
  # https://github.com/ccxt/ccxt/issues/7874
122
122
  # https://github.com/ccxt/ccxt/issues/7894
123
123
  'web': 'https://docs.gemini.com',
124
+ 'webExchange': 'https://exchange.gemini.com',
124
125
  },
125
126
  'fees': [
126
127
  'https://gemini.com/api-fee-schedule',
@@ -302,7 +303,7 @@ class gemini(Exchange, ImplicitAPI):
302
303
  },
303
304
  })
304
305
 
305
- def fetch_currencies(self, params={}):
306
+ def fetch_currencies(self, params={}) -> Currencies:
306
307
  """
307
308
  fetches all available currencies on an exchange
308
309
  :param dict [params]: extra parameters specific to the endpoint
@@ -629,7 +630,7 @@ class gemini(Exchange, ImplicitAPI):
629
630
  quoteId = None
630
631
  settleId = None
631
632
  tickSize = None
632
- increment = None
633
+ amountPrecision = None
633
634
  minSize = None
634
635
  status = None
635
636
  swap = False
@@ -640,9 +641,9 @@ class gemini(Exchange, ImplicitAPI):
640
641
  isArray = (isinstance(response, list))
641
642
  if not isString and not isArray:
642
643
  marketId = self.safe_string_lower(response, 'symbol')
644
+ amountPrecision = self.safe_number(response, 'tick_size') # right, exchange has an imperfect naming and self turns out to be an amount-precision
645
+ tickSize = self.safe_number(response, 'quote_increment') # self is tick-size actually
643
646
  minSize = self.safe_number(response, 'min_order_size')
644
- tickSize = self.safe_number(response, 'tick_size')
645
- increment = self.safe_number(response, 'quote_increment')
646
647
  status = self.parse_market_active(self.safe_string(response, 'status'))
647
648
  baseId = self.safe_string(response, 'base_currency')
648
649
  quoteId = self.safe_string(response, 'quote_currency')
@@ -653,9 +654,9 @@ class gemini(Exchange, ImplicitAPI):
653
654
  marketId = response
654
655
  else:
655
656
  marketId = self.safe_string_lower(response, 0)
656
- minSize = self.safe_number(response, 3)
657
- tickSize = self.parse_number(self.parse_precision(self.safe_string(response, 1)))
658
- increment = self.parse_number(self.parse_precision(self.safe_string(response, 2)))
657
+ tickSize = self.parse_number(self.parse_precision(self.safe_string(response, 1))) # priceTickDecimalPlaces
658
+ amountPrecision = self.parse_number(self.parse_precision(self.safe_string(response, 2))) # quantityTickDecimalPlaces
659
+ minSize = self.safe_number(response, 3) # quantityMinimum
659
660
  marketIdUpper = marketId.upper()
660
661
  isPerp = (marketIdUpper.find('PERP') >= 0)
661
662
  marketIdWithoutPerp = marketIdUpper.replace('PERP', '')
@@ -704,8 +705,8 @@ class gemini(Exchange, ImplicitAPI):
704
705
  'strike': None,
705
706
  'optionType': None,
706
707
  'precision': {
707
- 'price': increment,
708
- 'amount': tickSize,
708
+ 'price': tickSize,
709
+ 'amount': amountPrecision,
709
710
  },
710
711
  'limits': {
711
712
  'leverage': {
@@ -1048,7 +1049,7 @@ class gemini(Exchange, ImplicitAPI):
1048
1049
  result[code] = account
1049
1050
  return self.safe_balance(result)
1050
1051
 
1051
- def fetch_trading_fees(self, params={}):
1052
+ def fetch_trading_fees(self, params={}) -> TradingFees:
1052
1053
  """
1053
1054
  fetch the trading fees for multiple markets
1054
1055
  :see: https://docs.gemini.com/rest-api/#get-notional-volume
@@ -1707,7 +1708,7 @@ class gemini(Exchange, ImplicitAPI):
1707
1708
  apiKey = self.apiKey
1708
1709
  if apiKey.find('account') < 0:
1709
1710
  raise AuthenticationError(self.id + ' sign() requires an account-key, master-keys are not-supported')
1710
- nonce = self.nonce()
1711
+ nonce = str(self.nonce())
1711
1712
  request = self.extend({
1712
1713
  'request': url,
1713
1714
  'nonce': nonce,
ccxt/hitbtc.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.hitbtc import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Int, Leverage, MarginMode, MarginModes, MarginModification, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
9
+ from ccxt.base.types import Balances, Currencies, Currency, Int, Leverage, MarginMode, MarginModes, MarginModification, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import PermissionDenied
@@ -802,7 +802,7 @@ class hitbtc(Exchange, ImplicitAPI):
802
802
  })
803
803
  return result
804
804
 
805
- def fetch_currencies(self, params={}):
805
+ def fetch_currencies(self, params={}) -> Currencies:
806
806
  """
807
807
  fetches all available currencies on an exchange
808
808
  :see: https://api.hitbtc.com/#currencies
@@ -1547,7 +1547,7 @@ class hitbtc(Exchange, ImplicitAPI):
1547
1547
  timestamp = self.parse8601(self.safe_string(response, 'timestamp'))
1548
1548
  return self.parse_order_book(response, symbol, timestamp, 'bid', 'ask')
1549
1549
 
1550
- def parse_trading_fee(self, fee, market: Market = None):
1550
+ def parse_trading_fee(self, fee, market: Market = None) -> TradingFeeInterface:
1551
1551
  #
1552
1552
  # {
1553
1553
  # "symbol":"ARVUSDT", # returned from fetchTradingFees only
@@ -1564,9 +1564,11 @@ class hitbtc(Exchange, ImplicitAPI):
1564
1564
  'symbol': symbol,
1565
1565
  'taker': taker,
1566
1566
  'maker': maker,
1567
+ 'percentage': None,
1568
+ 'tierBased': None,
1567
1569
  }
1568
1570
 
1569
- def fetch_trading_fee(self, symbol: str, params={}):
1571
+ def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
1570
1572
  """
1571
1573
  fetch the trading fees for a market
1572
1574
  :see: https://api.hitbtc.com/#get-trading-commission
@@ -1595,7 +1597,7 @@ class hitbtc(Exchange, ImplicitAPI):
1595
1597
  #
1596
1598
  return self.parse_trading_fee(response, market)
1597
1599
 
1598
- def fetch_trading_fees(self, params={}):
1600
+ def fetch_trading_fees(self, params={}) -> TradingFees:
1599
1601
  """
1600
1602
  fetch the trading fees for multiple markets
1601
1603
  :see: https://api.hitbtc.com/#get-all-trading-commissions
@@ -3080,6 +3082,7 @@ class hitbtc(Exchange, ImplicitAPI):
3080
3082
  'info': data,
3081
3083
  'symbol': market['symbol'],
3082
3084
  'type': None,
3085
+ 'marginMode': 'isolated',
3083
3086
  'amount': None,
3084
3087
  'total': None,
3085
3088
  'code': self.safe_string(currencyInfo, 'code'),
ccxt/hollaex.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.hollaex import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
9
+ from ccxt.base.types import Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ArgumentsRequired
12
12
  from ccxt.base.errors import BadRequest
@@ -328,7 +328,7 @@ class hollaex(Exchange, ImplicitAPI):
328
328
  })
329
329
  return result
330
330
 
331
- def fetch_currencies(self, params={}):
331
+ def fetch_currencies(self, params={}) -> Currencies:
332
332
  """
333
333
  fetches all available currencies on an exchange
334
334
  :see: https://apidocs.hollaex.com/#constants
@@ -679,7 +679,7 @@ class hollaex(Exchange, ImplicitAPI):
679
679
  'fee': fee,
680
680
  }, market)
681
681
 
682
- def fetch_trading_fees(self, params={}):
682
+ def fetch_trading_fees(self, params={}) -> TradingFees:
683
683
  """
684
684
  fetch the trading fees for multiple markets
685
685
  :see: https://apidocs.hollaex.com/#tiers
ccxt/htx.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.htx import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Account, Balances, Currency, Int, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
9
+ from ccxt.base.types import Account, Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import PermissionDenied
@@ -102,6 +102,7 @@ class htx(Exchange, ImplicitAPI):
102
102
  'fetchLeverage': False,
103
103
  'fetchLeverageTiers': True,
104
104
  'fetchLiquidations': True,
105
+ 'fetchMarginAdjustmentHistory': False,
105
106
  'fetchMarketLeverageTiers': True,
106
107
  'fetchMarkets': True,
107
108
  'fetchMarkOHLCV': True,
@@ -1485,7 +1486,7 @@ class htx(Exchange, ImplicitAPI):
1485
1486
  #
1486
1487
  return self.safe_integer_2(response, 'data', 'ts')
1487
1488
 
1488
- def parse_trading_fee(self, fee, market: Market = None):
1489
+ def parse_trading_fee(self, fee, market: Market = None) -> TradingFeeInterface:
1489
1490
  #
1490
1491
  # {
1491
1492
  # "symbol":"btcusdt",
@@ -1501,9 +1502,11 @@ class htx(Exchange, ImplicitAPI):
1501
1502
  'symbol': self.safe_symbol(marketId, market),
1502
1503
  'maker': self.safe_number(fee, 'actualMakerRate'),
1503
1504
  'taker': self.safe_number(fee, 'actualTakerRate'),
1505
+ 'percentage': None,
1506
+ 'tierBased': None,
1504
1507
  }
1505
1508
 
1506
- def fetch_trading_fee(self, symbol: str, params={}):
1509
+ def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
1507
1510
  """
1508
1511
  fetch the trading fees for a market
1509
1512
  :param str symbol: unified market symbol
@@ -2986,7 +2989,7 @@ class htx(Exchange, ImplicitAPI):
2986
2989
  defaultAccount = self.safe_value(accounts, 0, {})
2987
2990
  return self.safe_string(defaultAccount, 'id')
2988
2991
 
2989
- def fetch_currencies(self, params={}):
2992
+ def fetch_currencies(self, params={}) -> Currencies:
2990
2993
  """
2991
2994
  fetches all available currencies on an exchange
2992
2995
  :param dict [params]: extra parameters specific to the exchange API endpoint
ccxt/huobijp.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.huobijp import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Account, Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
9
+ from ccxt.base.types import Account, Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import PermissionDenied
@@ -954,7 +954,7 @@ class huobijp(Exchange, ImplicitAPI):
954
954
  response = self.privateGetAccountAccounts(params)
955
955
  return response['data']
956
956
 
957
- def fetch_currencies(self, params={}):
957
+ def fetch_currencies(self, params={}) -> Currencies:
958
958
  """
959
959
  fetches all available currencies on an exchange
960
960
  :param dict [params]: extra parameters specific to the exchange API endpoint
ccxt/hyperliquid.py CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.hyperliquid import ImplicitAPI
8
- from ccxt.base.types import Balances, Int, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Trade, TransferEntry
8
+ from ccxt.base.types import Balances, Currencies, Int, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Trade, TransferEntry
9
9
  from typing import List
10
10
  from ccxt.base.errors import ExchangeError
11
11
  from ccxt.base.errors import ArgumentsRequired
@@ -207,7 +207,7 @@ class hyperliquid(Exchange, ImplicitAPI):
207
207
  super(hyperliquid, self).set_sandbox_mode(enabled)
208
208
  self.options['sandboxMode'] = enabled
209
209
 
210
- def fetch_currencies(self, params={}):
210
+ def fetch_currencies(self, params={}) -> Currencies:
211
211
  """
212
212
  fetches all available currencies on an exchange
213
213
  :see: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint#retrieve-exchange-metadata
@@ -2024,6 +2024,7 @@ class hyperliquid(Exchange, ImplicitAPI):
2024
2024
  'info': data,
2025
2025
  'symbol': self.safe_symbol(None, market),
2026
2026
  'type': None,
2027
+ 'marginMode': 'isolated',
2027
2028
  'amount': None,
2028
2029
  'total': None,
2029
2030
  'code': self.safe_string(market, 'settle'),
ccxt/idex.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.idex import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
9
+ from ccxt.base.types import Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import BadRequest
@@ -609,7 +609,7 @@ class idex(Exchange, ImplicitAPI):
609
609
  'fee': fee,
610
610
  }, market)
611
611
 
612
- def fetch_trading_fees(self, params={}):
612
+ def fetch_trading_fees(self, params={}) -> TradingFees:
613
613
  """
614
614
  fetch the trading fees for multiple markets
615
615
  :see: https://api-docs-v3.idex.io/#get-api-account
@@ -712,7 +712,7 @@ class idex(Exchange, ImplicitAPI):
712
712
  descending = side == 'bids'
713
713
  return self.sort_by(result, 0, descending)
714
714
 
715
- def fetch_currencies(self, params={}):
715
+ def fetch_currencies(self, params={}) -> Currencies:
716
716
  """
717
717
  fetches all available currencies on an exchange
718
718
  :see: https://api-docs-v3.idex.io/#get-assets
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.independentreserve import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Ticker, Trade
9
+ from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Ticker, Trade, TradingFees
10
10
  from typing import List
11
11
  from ccxt.base.decimal_to_precision import TICK_SIZE
12
12
  from ccxt.base.precise import Precise
@@ -586,7 +586,7 @@ class independentreserve(Exchange, ImplicitAPI):
586
586
  response = self.publicGetGetRecentTrades(self.extend(request, params))
587
587
  return self.parse_trades(response['Trades'], market, since, limit)
588
588
 
589
- def fetch_trading_fees(self, params={}):
589
+ def fetch_trading_fees(self, params={}) -> TradingFees:
590
590
  """
591
591
  fetch the trading fees for multiple markets
592
592
  :param dict [params]: extra parameters specific to the exchange API endpoint
ccxt/kraken.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.kraken import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, IndexType, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
9
+ from ccxt.base.types import Balances, Currencies, Currency, IndexType, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import PermissionDenied
@@ -641,7 +641,7 @@ class kraken(Exchange, ImplicitAPI):
641
641
  result.append(self.extend(defaults, markets[i]))
642
642
  return result
643
643
 
644
- def fetch_currencies(self, params={}):
644
+ def fetch_currencies(self, params={}) -> Currencies:
645
645
  """
646
646
  fetches all available currencies on an exchange
647
647
  :see: https://docs.kraken.com/rest/#tag/Spot-Market-Data/operation/getAssetInfo
@@ -697,7 +697,7 @@ class kraken(Exchange, ImplicitAPI):
697
697
  }
698
698
  return result
699
699
 
700
- def fetch_trading_fee(self, symbol: str, params={}):
700
+ def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
701
701
  """
702
702
  fetch the trading fees for a market
703
703
  :see: https://docs.kraken.com/rest/#tag/Account-Data/operation/getTradeVolume
ccxt/kucoin.py CHANGED
@@ -8,7 +8,7 @@ from ccxt.abstract.kucoin import ImplicitAPI
8
8
  import hashlib
9
9
  import math
10
10
  import json
11
- from ccxt.base.types import Account, Balances, Currency, Int, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
11
+ from ccxt.base.types import Account, Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction, TransferEntry
12
12
  from typing import List
13
13
  from ccxt.base.errors import ExchangeError
14
14
  from ccxt.base.errors import PermissionDenied
@@ -92,6 +92,7 @@ class kucoin(Exchange, ImplicitAPI):
92
92
  'fetchL3OrderBook': True,
93
93
  'fetchLedger': True,
94
94
  'fetchLeverageTiers': False,
95
+ 'fetchMarginAdjustmentHistory': False,
95
96
  'fetchMarginMode': False,
96
97
  'fetchMarketLeverageTiers': False,
97
98
  'fetchMarkets': True,
@@ -1130,7 +1131,7 @@ class kucoin(Exchange, ImplicitAPI):
1130
1131
  })
1131
1132
  return result
1132
1133
 
1133
- def fetch_currencies(self, params={}):
1134
+ def fetch_currencies(self, params={}) -> Currencies:
1134
1135
  """
1135
1136
  fetches all available currencies on an exchange
1136
1137
  :see: https://docs.kucoin.com/#get-currencies
@@ -2960,7 +2961,7 @@ class kucoin(Exchange, ImplicitAPI):
2960
2961
  'fee': fee,
2961
2962
  }, market)
2962
2963
 
2963
- def fetch_trading_fee(self, symbol: str, params={}):
2964
+ def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
2964
2965
  """
2965
2966
  fetch the trading fees for a market
2966
2967
  :see: https://docs.kucoin.com/#actual-fee-rate-of-the-trading-pair
@@ -3314,9 +3315,9 @@ class kucoin(Exchange, ImplicitAPI):
3314
3315
 
3315
3316
  def parse_balance_helper(self, entry):
3316
3317
  account = self.account()
3317
- account['used'] = self.safe_string(entry, 'holdBalance')
3318
- account['free'] = self.safe_string(entry, 'availableBalance')
3319
- account['total'] = self.safe_string(entry, 'totalBalance')
3318
+ account['used'] = self.safe_string_2(entry, 'holdBalance', 'hold')
3319
+ account['free'] = self.safe_string_2(entry, 'availableBalance', 'available')
3320
+ account['total'] = self.safe_string_2(entry, 'totalBalance', 'total')
3320
3321
  debt = self.safe_string(entry, 'liability')
3321
3322
  interest = self.safe_string(entry, 'interest')
3322
3323
  account['debt'] = Precise.string_add(debt, interest)
@@ -3365,7 +3366,7 @@ class kucoin(Exchange, ImplicitAPI):
3365
3366
  request['type'] = type
3366
3367
  response = self.privateGetAccounts(self.extend(request, query))
3367
3368
  #
3368
- # Spot and Cross
3369
+ # Spot
3369
3370
  #
3370
3371
  # {
3371
3372
  # "code": "200000",
@@ -3381,35 +3382,59 @@ class kucoin(Exchange, ImplicitAPI):
3381
3382
  # ]
3382
3383
  # }
3383
3384
  #
3385
+ # Cross
3386
+ #
3387
+ # {
3388
+ # "code": "200000",
3389
+ # "data": {
3390
+ # "debtRatio": "0",
3391
+ # "accounts": [
3392
+ # {
3393
+ # "currency": "USDT",
3394
+ # "totalBalance": "5",
3395
+ # "availableBalance": "5",
3396
+ # "holdBalance": "0",
3397
+ # "liability": "0",
3398
+ # "maxBorrowSize": "20"
3399
+ # },
3400
+ # ]
3401
+ # }
3402
+ # }
3403
+ #
3384
3404
  # Isolated
3385
3405
  #
3386
3406
  # {
3387
3407
  # "code": "200000",
3388
3408
  # "data": {
3389
- # "totalConversionBalance": "0",
3390
- # "liabilityConversionBalance": "0",
3409
+ # "totalAssetOfQuoteCurrency": "0",
3410
+ # "totalLiabilityOfQuoteCurrency": "0",
3411
+ # "timestamp": 1712085661155,
3391
3412
  # "assets": [
3392
3413
  # {
3393
3414
  # "symbol": "MANA-USDT",
3394
- # "status": "CLEAR",
3415
+ # "status": "EFFECTIVE",
3395
3416
  # "debtRatio": "0",
3396
3417
  # "baseAsset": {
3397
3418
  # "currency": "MANA",
3398
- # "totalBalance": "0",
3399
- # "holdBalance": "0",
3400
- # "availableBalance": "0",
3419
+ # "borrowEnabled": True,
3420
+ # "transferInEnabled": True,
3421
+ # "total": "0",
3422
+ # "hold": "0",
3423
+ # "available": "0",
3401
3424
  # "liability": "0",
3402
3425
  # "interest": "0",
3403
- # "borrowableAmount": "0"
3426
+ # "maxBorrowSize": "0"
3404
3427
  # },
3405
3428
  # "quoteAsset": {
3406
3429
  # "currency": "USDT",
3407
- # "totalBalance": "0",
3408
- # "holdBalance": "0",
3409
- # "availableBalance": "0",
3430
+ # "borrowEnabled": True,
3431
+ # "transferInEnabled": True,
3432
+ # "total": "0",
3433
+ # "hold": "0",
3434
+ # "available": "0",
3410
3435
  # "liability": "0",
3411
3436
  # "interest": "0",
3412
- # "borrowableAmount": "0"
3437
+ # "maxBorrowSize": "0"
3413
3438
  # }
3414
3439
  # },
3415
3440
  # ...
ccxt/kucoinfutures.py CHANGED
@@ -80,6 +80,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
80
80
  'fetchL3OrderBook': True,
81
81
  'fetchLedger': True,
82
82
  'fetchLeverageTiers': False,
83
+ 'fetchMarginAdjustmentHistory': False,
83
84
  'fetchMarginMode': False,
84
85
  'fetchMarketLeverageTiers': True,
85
86
  'fetchMarkets': True,
@@ -1497,7 +1498,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
1497
1498
  'direction': 'in',
1498
1499
  })
1499
1500
 
1500
- def parse_margin_modification(self, info, market: Market = None):
1501
+ def parse_margin_modification(self, info, market: Market = None) -> MarginModification:
1501
1502
  #
1502
1503
  # {
1503
1504
  # "id": "62311d26064e8f00013f2c6d",
@@ -1549,14 +1550,18 @@ class kucoinfutures(kucoin, ImplicitAPI):
1549
1550
  crossMode = self.safe_value(info, 'crossMode')
1550
1551
  mode = 'cross' if crossMode else 'isolated'
1551
1552
  marketId = self.safe_string(market, 'symbol')
1553
+ timestamp = self.safe_integer(info, 'currentTimestamp')
1552
1554
  return {
1553
1555
  'info': info,
1554
- 'direction': None,
1555
- 'mode': mode,
1556
+ 'symbol': self.safe_symbol(marketId, market),
1557
+ 'type': None,
1558
+ 'marginMode': mode,
1556
1559
  'amount': None,
1560
+ 'total': None,
1557
1561
  'code': self.safe_currency_code(currencyId),
1558
- 'symbol': self.safe_symbol(marketId, market),
1559
1562
  'status': None,
1563
+ 'timestamp': timestamp,
1564
+ 'datetime': self.iso8601(timestamp),
1560
1565
  }
1561
1566
 
1562
1567
  def fetch_orders_by_status(self, status, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
@@ -1682,6 +1687,29 @@ class kucoinfutures(kucoin, ImplicitAPI):
1682
1687
  return self.fetch_paginated_call_dynamic('fetchClosedOrders', symbol, since, limit, params)
1683
1688
  return self.fetch_orders_by_status('done', symbol, since, limit, params)
1684
1689
 
1690
+ def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1691
+ """
1692
+ fetches information on multiple open orders made by the user
1693
+ :see: https://docs.kucoin.com/futures/#get-order-list
1694
+ :see: https://docs.kucoin.com/futures/#get-untriggered-stop-order-list
1695
+ :param str symbol: unified market symbol of the market orders were made in
1696
+ :param int [since]: the earliest time in ms to fetch orders for
1697
+ :param int [limit]: the maximum number of order structures to retrieve
1698
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1699
+ :param int [params.till]: end time in ms
1700
+ :param str [params.side]: buy or sell
1701
+ :param str [params.type]: limit, or market
1702
+ :param boolean [params.trigger]: set to True to retrieve untriggered stop orders
1703
+ :param boolean [params.paginate]: default False, when True will automatically paginate by calling self endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
1704
+ :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1705
+ """
1706
+ self.load_markets()
1707
+ paginate = False
1708
+ paginate, params = self.handle_option_and_params(params, 'fetchOpenOrders', 'paginate')
1709
+ if paginate:
1710
+ return self.fetch_paginated_call_dynamic('fetchOpenOrders', symbol, since, limit, params)
1711
+ return self.fetch_orders_by_status('open', symbol, since, limit, params)
1712
+
1685
1713
  def fetch_order(self, id: Str = None, symbol: Str = None, params={}):
1686
1714
  """
1687
1715
  fetches information on an order made by the user
ccxt/kuna.py CHANGED
@@ -7,7 +7,7 @@ from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.kuna import ImplicitAPI
8
8
  import hashlib
9
9
  import json
10
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
10
+ from ccxt.base.types import Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
13
13
  from ccxt.base.errors import ArgumentsRequired
@@ -425,7 +425,7 @@ class kuna(Exchange, ImplicitAPI):
425
425
  data = self.safe_value(response, 'data', {})
426
426
  return self.safe_integer(data, 'timestamp_miliseconds')
427
427
 
428
- def fetch_currencies(self, params={}):
428
+ def fetch_currencies(self, params={}) -> Currencies:
429
429
  """
430
430
  fetches all available currencies on an exchange
431
431
  :see: https://docs.kuna.io/docs/get-information-about-available-currencies