ccxt 4.2.94__py2.py3-none-any.whl → 4.2.96__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/__init__.py +2 -2
- ccxt/abstract/bitstamp.py +6 -0
- ccxt/abstract/coinbase.py +1 -0
- ccxt/ace.py +1 -1
- ccxt/ascendex.py +1 -1
- ccxt/async_support/__init__.py +2 -2
- ccxt/async_support/ace.py +1 -1
- ccxt/async_support/ascendex.py +1 -1
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/bigone.py +1 -1
- ccxt/async_support/binance.py +3 -3
- ccxt/async_support/bingx.py +1 -1
- ccxt/async_support/bit2c.py +1 -1
- ccxt/async_support/bitbank.py +1 -1
- ccxt/async_support/bitfinex.py +1 -1
- ccxt/async_support/bitfinex2.py +1 -1
- ccxt/async_support/bitget.py +1 -1
- ccxt/async_support/bithumb.py +1 -1
- ccxt/async_support/bitmart.py +1 -1
- ccxt/async_support/bitmex.py +1 -1
- ccxt/async_support/bitopro.py +1 -1
- ccxt/async_support/bitrue.py +1 -1
- ccxt/async_support/bitso.py +1 -1
- ccxt/async_support/bitstamp.py +7 -1
- ccxt/async_support/bitteam.py +1 -1
- ccxt/async_support/bitvavo.py +1 -1
- ccxt/async_support/blockchaincom.py +1 -1
- ccxt/async_support/blofin.py +1 -1
- ccxt/async_support/btcalpha.py +1 -1
- ccxt/async_support/btcbox.py +1 -1
- ccxt/async_support/bybit.py +2 -2
- ccxt/async_support/cex.py +1 -1
- ccxt/async_support/coinbase.py +587 -103
- ccxt/async_support/coinbaseinternational.py +1 -1
- ccxt/async_support/coinbasepro.py +1 -1
- ccxt/async_support/coincheck.py +1 -1
- ccxt/async_support/coinex.py +62 -56
- ccxt/async_support/coinlist.py +1 -1
- ccxt/async_support/coinmate.py +1 -1
- ccxt/async_support/coinsph.py +1 -1
- ccxt/async_support/cryptocom.py +1 -1
- ccxt/async_support/currencycom.py +1 -1
- ccxt/async_support/delta.py +1 -1
- ccxt/async_support/deribit.py +1 -1
- ccxt/async_support/digifinex.py +1 -1
- ccxt/async_support/exmo.py +1 -1
- ccxt/async_support/gate.py +1 -1
- ccxt/async_support/gemini.py +27 -11
- ccxt/async_support/hitbtc.py +1 -1
- ccxt/async_support/hollaex.py +1 -1
- ccxt/async_support/htx.py +117 -116
- ccxt/async_support/huobijp.py +1 -1
- ccxt/async_support/idex.py +1 -1
- ccxt/async_support/indodax.py +1 -1
- ccxt/async_support/kraken.py +1 -1
- ccxt/async_support/krakenfutures.py +2 -2
- ccxt/async_support/kucoin.py +1 -1
- ccxt/async_support/kucoinfutures.py +1 -1
- ccxt/async_support/latoken.py +1 -1
- ccxt/async_support/lbank.py +1 -1
- ccxt/async_support/mexc.py +1 -1
- ccxt/async_support/ndax.py +1 -1
- ccxt/async_support/novadax.py +1 -1
- ccxt/async_support/oceanex.py +1 -1
- ccxt/async_support/okcoin.py +1 -1
- ccxt/async_support/okx.py +42 -42
- ccxt/async_support/onetrading.py +1 -1
- ccxt/async_support/p2b.py +1 -1
- ccxt/async_support/phemex.py +1 -1
- ccxt/async_support/poloniex.py +1 -1
- ccxt/async_support/poloniexfutures.py +1 -1
- ccxt/async_support/probit.py +1 -1
- ccxt/async_support/timex.py +1 -1
- ccxt/async_support/tokocrypto.py +1 -1
- ccxt/async_support/tradeogre.py +1 -1
- ccxt/async_support/upbit.py +2 -2
- ccxt/async_support/wavesexchange.py +1 -1
- ccxt/async_support/whitebit.py +1 -1
- ccxt/async_support/woo.py +1 -1
- ccxt/async_support/yobit.py +1 -1
- ccxt/async_support/zonda.py +1 -1
- ccxt/base/errors.py +7 -7
- ccxt/base/exchange.py +2 -2
- ccxt/bigone.py +1 -1
- ccxt/binance.py +3 -3
- ccxt/bingx.py +1 -1
- ccxt/bit2c.py +1 -1
- ccxt/bitbank.py +1 -1
- ccxt/bitfinex.py +1 -1
- ccxt/bitfinex2.py +1 -1
- ccxt/bitget.py +1 -1
- ccxt/bithumb.py +1 -1
- ccxt/bitmart.py +1 -1
- ccxt/bitmex.py +1 -1
- ccxt/bitopro.py +1 -1
- ccxt/bitrue.py +1 -1
- ccxt/bitso.py +1 -1
- ccxt/bitstamp.py +7 -1
- ccxt/bitteam.py +1 -1
- ccxt/bitvavo.py +1 -1
- ccxt/blockchaincom.py +1 -1
- ccxt/blofin.py +1 -1
- ccxt/btcalpha.py +1 -1
- ccxt/btcbox.py +1 -1
- ccxt/bybit.py +2 -2
- ccxt/cex.py +1 -1
- ccxt/coinbase.py +587 -103
- ccxt/coinbaseinternational.py +1 -1
- ccxt/coinbasepro.py +1 -1
- ccxt/coincheck.py +1 -1
- ccxt/coinex.py +62 -56
- ccxt/coinlist.py +1 -1
- ccxt/coinmate.py +1 -1
- ccxt/coinsph.py +1 -1
- ccxt/cryptocom.py +1 -1
- ccxt/currencycom.py +1 -1
- ccxt/delta.py +1 -1
- ccxt/deribit.py +1 -1
- ccxt/digifinex.py +1 -1
- ccxt/exmo.py +1 -1
- ccxt/gate.py +1 -1
- ccxt/gemini.py +27 -11
- ccxt/hitbtc.py +1 -1
- ccxt/hollaex.py +1 -1
- ccxt/htx.py +117 -116
- ccxt/huobijp.py +1 -1
- ccxt/idex.py +1 -1
- ccxt/indodax.py +1 -1
- ccxt/kraken.py +1 -1
- ccxt/krakenfutures.py +2 -2
- ccxt/kucoin.py +1 -1
- ccxt/kucoinfutures.py +1 -1
- ccxt/latoken.py +1 -1
- ccxt/lbank.py +1 -1
- ccxt/mexc.py +1 -1
- ccxt/ndax.py +1 -1
- ccxt/novadax.py +1 -1
- ccxt/oceanex.py +1 -1
- ccxt/okcoin.py +1 -1
- ccxt/okx.py +42 -42
- ccxt/onetrading.py +1 -1
- ccxt/p2b.py +1 -1
- ccxt/phemex.py +1 -1
- ccxt/poloniex.py +1 -1
- ccxt/poloniexfutures.py +1 -1
- ccxt/pro/__init__.py +1 -1
- ccxt/pro/ascendex.py +1 -1
- ccxt/pro/bitfinex2.py +1 -1
- ccxt/pro/bitget.py +1 -1
- ccxt/pro/bitmart.py +1 -1
- ccxt/pro/bitmex.py +1 -1
- ccxt/pro/bitstamp.py +1 -1
- ccxt/pro/bitvavo.py +1 -1
- ccxt/pro/blockchaincom.py +1 -1
- ccxt/pro/bybit.py +1 -1
- ccxt/pro/coinbase.py +31 -4
- ccxt/pro/coinbaseinternational.py +1 -1
- ccxt/pro/coinbasepro.py +1 -1
- ccxt/pro/coinex.py +1 -1
- ccxt/pro/cryptocom.py +1 -1
- ccxt/pro/gate.py +1 -1
- ccxt/pro/hitbtc.py +1 -1
- ccxt/pro/hollaex.py +1 -1
- ccxt/pro/htx.py +1 -1
- ccxt/pro/kraken.py +1 -1
- ccxt/pro/krakenfutures.py +1 -1
- ccxt/pro/okcoin.py +1 -1
- ccxt/pro/okx.py +1 -1
- ccxt/pro/poloniex.py +1 -1
- ccxt/pro/poloniexfutures.py +1 -1
- ccxt/pro/whitebit.py +1 -1
- ccxt/probit.py +1 -1
- ccxt/timex.py +1 -1
- ccxt/tokocrypto.py +1 -1
- ccxt/tradeogre.py +1 -1
- ccxt/upbit.py +2 -2
- ccxt/wavesexchange.py +1 -1
- ccxt/whitebit.py +1 -1
- ccxt/woo.py +1 -1
- ccxt/yobit.py +1 -1
- ccxt/zonda.py +1 -1
- {ccxt-4.2.94.dist-info → ccxt-4.2.96.dist-info}/METADATA +4 -4
- {ccxt-4.2.94.dist-info → ccxt-4.2.96.dist-info}/RECORD +185 -185
- {ccxt-4.2.94.dist-info → ccxt-4.2.96.dist-info}/WHEEL +0 -0
- {ccxt-4.2.94.dist-info → ccxt-4.2.96.dist-info}/top_level.txt +0 -0
ccxt/htx.py
CHANGED
@@ -9,6 +9,7 @@ import hashlib
|
|
9
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
|
+
from ccxt.base.errors import AuthenticationError
|
12
13
|
from ccxt.base.errors import PermissionDenied
|
13
14
|
from ccxt.base.errors import AccountNotEnabled
|
14
15
|
from ccxt.base.errors import ArgumentsRequired
|
@@ -18,12 +19,11 @@ from ccxt.base.errors import InsufficientFunds
|
|
18
19
|
from ccxt.base.errors import InvalidOrder
|
19
20
|
from ccxt.base.errors import OrderNotFound
|
20
21
|
from ccxt.base.errors import NotSupported
|
21
|
-
from ccxt.base.errors import
|
22
|
+
from ccxt.base.errors import OperationFailed
|
22
23
|
from ccxt.base.errors import RateLimitExceeded
|
23
24
|
from ccxt.base.errors import ExchangeNotAvailable
|
24
25
|
from ccxt.base.errors import OnMaintenance
|
25
26
|
from ccxt.base.errors import RequestTimeout
|
26
|
-
from ccxt.base.errors import AuthenticationError
|
27
27
|
from ccxt.base.decimal_to_precision import TRUNCATE
|
28
28
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
29
29
|
from ccxt.base.precise import Precise
|
@@ -958,14 +958,8 @@ class htx(Exchange, ImplicitAPI):
|
|
958
958
|
'fetchMarkets': {
|
959
959
|
'types': {
|
960
960
|
'spot': True,
|
961
|
-
'
|
962
|
-
|
963
|
-
'inverse': True,
|
964
|
-
},
|
965
|
-
'swap': {
|
966
|
-
'linear': True,
|
967
|
-
'inverse': True,
|
968
|
-
},
|
961
|
+
'linear': True,
|
962
|
+
'inverse': True,
|
969
963
|
},
|
970
964
|
},
|
971
965
|
'fetchOHLCV': {
|
@@ -1609,52 +1603,41 @@ class htx(Exchange, ImplicitAPI):
|
|
1609
1603
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1610
1604
|
:returns dict[]: an array of objects representing market data
|
1611
1605
|
"""
|
1612
|
-
|
1613
|
-
types = self.
|
1606
|
+
types = None
|
1607
|
+
types, params = self.handle_option_and_params(params, 'fetchMarkets', 'types', {})
|
1614
1608
|
allMarkets = []
|
1615
1609
|
promises = []
|
1616
1610
|
keys = list(types.keys())
|
1617
1611
|
for i in range(0, len(keys)):
|
1618
|
-
|
1619
|
-
|
1620
|
-
|
1621
|
-
|
1622
|
-
|
1623
|
-
|
1624
|
-
|
1625
|
-
|
1626
|
-
|
1627
|
-
if subValue:
|
1628
|
-
promises.append(self.fetch_markets_by_type_and_sub_type(type, subType, params))
|
1612
|
+
key = keys[i]
|
1613
|
+
if self.safe_bool(types, key):
|
1614
|
+
if key == 'spot':
|
1615
|
+
promises.append(self.fetch_markets_by_type_and_sub_type('spot', None, params))
|
1616
|
+
elif key == 'linear':
|
1617
|
+
promises.append(self.fetch_markets_by_type_and_sub_type(None, 'linear', params))
|
1618
|
+
elif key == 'inverse':
|
1619
|
+
promises.append(self.fetch_markets_by_type_and_sub_type('swap', 'inverse', params))
|
1620
|
+
promises.append(self.fetch_markets_by_type_and_sub_type('future', 'inverse', params))
|
1629
1621
|
promises = promises
|
1630
1622
|
for i in range(0, len(promises)):
|
1631
1623
|
allMarkets = self.array_concat(allMarkets, promises[i])
|
1632
1624
|
return allMarkets
|
1633
1625
|
|
1634
1626
|
def fetch_markets_by_type_and_sub_type(self, type, subType, params={}):
|
1635
|
-
|
1636
|
-
spot = (type == 'spot')
|
1637
|
-
contract = (type != 'spot')
|
1638
|
-
future = (type == 'future')
|
1639
|
-
swap = (type == 'swap')
|
1640
|
-
linear = None
|
1641
|
-
inverse = None
|
1627
|
+
isSpot = (type == 'spot')
|
1642
1628
|
request = {}
|
1643
1629
|
response = None
|
1644
|
-
if
|
1645
|
-
|
1646
|
-
|
1647
|
-
|
1648
|
-
|
1649
|
-
|
1650
|
-
|
1651
|
-
|
1652
|
-
|
1653
|
-
response = self.contractPublicGetApiV1ContractContractInfo(self.extend(request, query))
|
1654
|
-
elif swap:
|
1655
|
-
response = self.contractPublicGetSwapApiV1SwapContractInfo(self.extend(request, query))
|
1630
|
+
if not isSpot:
|
1631
|
+
if subType == 'linear':
|
1632
|
+
request['business_type'] = 'all' # override default to fetch all linear markets
|
1633
|
+
response = self.contractPublicGetLinearSwapApiV1SwapContractInfo(self.extend(request, params))
|
1634
|
+
elif subType == 'inverse':
|
1635
|
+
if type == 'future':
|
1636
|
+
response = self.contractPublicGetApiV1ContractContractInfo(self.extend(request, params))
|
1637
|
+
elif type == 'swap':
|
1638
|
+
response = self.contractPublicGetSwapApiV1SwapContractInfo(self.extend(request, params))
|
1656
1639
|
else:
|
1657
|
-
response = self.spotPublicGetV1CommonSymbols(self.extend(request,
|
1640
|
+
response = self.spotPublicGetV1CommonSymbols(self.extend(request, params))
|
1658
1641
|
#
|
1659
1642
|
# spot
|
1660
1643
|
#
|
@@ -1693,75 +1676,58 @@ class htx(Exchange, ImplicitAPI):
|
|
1693
1676
|
# ]
|
1694
1677
|
# }
|
1695
1678
|
#
|
1696
|
-
# inverse future
|
1679
|
+
# inverse(swap & future)
|
1697
1680
|
#
|
1698
1681
|
# {
|
1699
1682
|
# "status":"ok",
|
1700
1683
|
# "data":[
|
1701
1684
|
# {
|
1702
1685
|
# "symbol":"BTC",
|
1703
|
-
# "contract_code":"BTC211126",
|
1704
|
-
# "contract_type":"self_week",
|
1705
|
-
# "contract_size":100
|
1706
|
-
# "price_tick":0.
|
1707
|
-
# "delivery_date":"20211126",
|
1708
|
-
# "delivery_time":"1637913600000",
|
1686
|
+
# "contract_code":"BTC211126", #/ BTC-USD in swap
|
1687
|
+
# "contract_type":"self_week", # only in future
|
1688
|
+
# "contract_size":100,
|
1689
|
+
# "price_tick":0.1,
|
1690
|
+
# "delivery_date":"20211126", # only in future
|
1691
|
+
# "delivery_time":"1637913600000", # empty in swap
|
1709
1692
|
# "create_date":"20211112",
|
1710
1693
|
# "contract_status":1,
|
1711
|
-
# "settlement_time":"1637481600000"
|
1694
|
+
# "settlement_time":"1637481600000" # only in future
|
1695
|
+
# "settlement_date":"16xxxxxxxxxxx" # only in swap
|
1712
1696
|
# },
|
1697
|
+
# ...
|
1713
1698
|
# ],
|
1714
1699
|
# "ts":1637474595140
|
1715
1700
|
# }
|
1716
1701
|
#
|
1717
|
-
# linear
|
1702
|
+
# linear(swap & future)
|
1718
1703
|
#
|
1719
1704
|
# {
|
1720
1705
|
# "status":"ok",
|
1721
1706
|
# "data":[
|
1722
1707
|
# {
|
1723
1708
|
# "symbol":"BTC",
|
1724
|
-
# "contract_code":"BTC-USDT-211231",
|
1725
|
-
# "contract_size":0.
|
1726
|
-
# "price_tick":0.
|
1727
|
-
# "delivery_date":"20211231",
|
1728
|
-
# "delivery_time":"1640937600000",
|
1709
|
+
# "contract_code":"BTC-USDT-211231", # or "BTC-USDT" in swap
|
1710
|
+
# "contract_size":0.001,
|
1711
|
+
# "price_tick":0.1,
|
1712
|
+
# "delivery_date":"20211231", # empty in swap
|
1713
|
+
# "delivery_time":"1640937600000", # empty in swap
|
1729
1714
|
# "create_date":"20211228",
|
1730
1715
|
# "contract_status":1,
|
1731
1716
|
# "settlement_date":"1640764800000",
|
1732
|
-
# "support_margin_mode":"cross",
|
1733
|
-
# "business_type":"futures",
|
1717
|
+
# "support_margin_mode":"cross", # "all" or "cross"
|
1718
|
+
# "business_type":"futures", # "swap" or "futures"
|
1734
1719
|
# "pair":"BTC-USDT",
|
1735
|
-
# "contract_type":"self_week" # next_week, quarter
|
1736
|
-
#
|
1720
|
+
# "contract_type":"self_week", # "swap", "self_week", "next_week", "quarter"
|
1721
|
+
# "trade_partition":"USDT",
|
1722
|
+
# }
|
1737
1723
|
# ],
|
1738
1724
|
# "ts":1640736207263
|
1739
1725
|
# }
|
1740
1726
|
#
|
1741
|
-
|
1742
|
-
#
|
1743
|
-
# {
|
1744
|
-
# "status":"ok",
|
1745
|
-
# "data":[
|
1746
|
-
# {
|
1747
|
-
# "symbol":"BTC",
|
1748
|
-
# "contract_code":"BTC-USDT",
|
1749
|
-
# "contract_size":0.001000000000000000,
|
1750
|
-
# "price_tick":0.100000000000000000,
|
1751
|
-
# "delivery_time":"",
|
1752
|
-
# "create_date":"20201021",
|
1753
|
-
# "contract_status":1,
|
1754
|
-
# "settlement_date":"1637481600000",
|
1755
|
-
# "support_margin_mode":"all", # isolated
|
1756
|
-
# },
|
1757
|
-
# ],
|
1758
|
-
# "ts":1637474774467
|
1759
|
-
# }
|
1760
|
-
#
|
1761
|
-
markets = self.safe_value(response, 'data', [])
|
1727
|
+
markets = self.safe_list(response, 'data', [])
|
1762
1728
|
numMarkets = len(markets)
|
1763
1729
|
if numMarkets < 1:
|
1764
|
-
raise
|
1730
|
+
raise OperationFailed(self.id + ' fetchMarkets() returned an empty response: ' + self.json(response))
|
1765
1731
|
result = []
|
1766
1732
|
for i in range(0, len(markets)):
|
1767
1733
|
market = markets[i]
|
@@ -1770,15 +1736,30 @@ class htx(Exchange, ImplicitAPI):
|
|
1770
1736
|
settleId = None
|
1771
1737
|
id = None
|
1772
1738
|
lowercaseId = None
|
1739
|
+
contract = ('contract_code' in market)
|
1740
|
+
spot = not contract
|
1741
|
+
swap = False
|
1742
|
+
future = False
|
1743
|
+
linear = None
|
1744
|
+
inverse = None
|
1745
|
+
# check if parsed market is contract
|
1773
1746
|
if contract:
|
1774
1747
|
id = self.safe_string(market, 'contract_code')
|
1775
1748
|
lowercaseId = id.lower()
|
1749
|
+
delivery_date = self.safe_string(market, 'delivery_date')
|
1750
|
+
business_type = self.safe_string(market, 'business_type')
|
1751
|
+
future = delivery_date is not None
|
1752
|
+
swap = not future
|
1753
|
+
linear = business_type is not None
|
1754
|
+
inverse = not linear
|
1776
1755
|
if swap:
|
1756
|
+
type = 'swap'
|
1777
1757
|
parts = id.split('-')
|
1778
1758
|
baseId = self.safe_string_lower(market, 'symbol')
|
1779
1759
|
quoteId = self.safe_string_lower(parts, 1)
|
1780
1760
|
settleId = baseId if inverse else quoteId
|
1781
1761
|
elif future:
|
1762
|
+
type = 'future'
|
1782
1763
|
baseId = self.safe_string_lower(market, 'symbol')
|
1783
1764
|
if inverse:
|
1784
1765
|
quoteId = 'USD'
|
@@ -1789,6 +1770,7 @@ class htx(Exchange, ImplicitAPI):
|
|
1789
1770
|
quoteId = self.safe_string_lower(parts, 1)
|
1790
1771
|
settleId = quoteId
|
1791
1772
|
else:
|
1773
|
+
type = 'spot'
|
1792
1774
|
baseId = self.safe_string(market, 'base-currency')
|
1793
1775
|
quoteId = self.safe_string(market, 'quote-currency')
|
1794
1776
|
id = baseId + quoteId
|
@@ -1911,6 +1893,40 @@ class htx(Exchange, ImplicitAPI):
|
|
1911
1893
|
})
|
1912
1894
|
return result
|
1913
1895
|
|
1896
|
+
def try_get_symbol_from_future_markets(self, symbolOrMarketId: str):
|
1897
|
+
if symbolOrMarketId in self.markets:
|
1898
|
+
return symbolOrMarketId
|
1899
|
+
# only on "future" market type(inverse & linear), market-id differs between "fetchMarkets" and "fetchTicker"
|
1900
|
+
# so we have to create a mapping
|
1901
|
+
# - market-id from fetchMarkts: `BTC-USDT-240419`(linear future) or `BTC240412`(inverse future)
|
1902
|
+
# - market-id from fetchTciker[s]: `BTC-USDT-CW` (linear future) or `BTC_CW` (inverse future)
|
1903
|
+
if not ('futureMarketIdsForSymbols' in self.options):
|
1904
|
+
self.options['futureMarketIdsForSymbols'] = {}
|
1905
|
+
futureMarketIdsForSymbols = self.safe_dict(self.options, 'futureMarketIdsForSymbols', {})
|
1906
|
+
if symbolOrMarketId in futureMarketIdsForSymbols:
|
1907
|
+
return futureMarketIdsForSymbols[symbolOrMarketId]
|
1908
|
+
futureMarkets = self.filter_by(self.markets, 'future', True)
|
1909
|
+
futuresCharsMaps = {
|
1910
|
+
'this_week': 'CW',
|
1911
|
+
'next_week': 'NW',
|
1912
|
+
'quarter': 'CQ',
|
1913
|
+
'next_quarter': 'NQ',
|
1914
|
+
}
|
1915
|
+
for i in range(0, len(futureMarkets)):
|
1916
|
+
market = futureMarkets[i]
|
1917
|
+
info = self.safe_value(market, 'info', {})
|
1918
|
+
contractType = self.safe_string(info, 'contract_type')
|
1919
|
+
contractSuffix = futuresCharsMaps[contractType]
|
1920
|
+
# see comment on formats a bit above
|
1921
|
+
constructedId = market['base'] + '-' + market['quote'] + '-' + contractSuffix if market['linear'] else market['base'] + '_' + contractSuffix
|
1922
|
+
if constructedId == symbolOrMarketId:
|
1923
|
+
symbol = market['symbol']
|
1924
|
+
self.options['futureMarketIdsForSymbols'][symbolOrMarketId] = symbol
|
1925
|
+
return symbol
|
1926
|
+
# if not found, just save it to avoid unnecessary future iterations
|
1927
|
+
self.options['futureMarketIdsForSymbols'][symbolOrMarketId] = symbolOrMarketId
|
1928
|
+
return symbolOrMarketId
|
1929
|
+
|
1914
1930
|
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
1915
1931
|
#
|
1916
1932
|
# fetchTicker
|
@@ -1959,6 +1975,7 @@ class htx(Exchange, ImplicitAPI):
|
|
1959
1975
|
#
|
1960
1976
|
marketId = self.safe_string_2(ticker, 'symbol', 'contract_code')
|
1961
1977
|
symbol = self.safe_symbol(marketId, market)
|
1978
|
+
symbol = self.try_get_symbol_from_future_markets(symbol)
|
1962
1979
|
timestamp = self.safe_integer_2(ticker, 'ts', 'quoteTime')
|
1963
1980
|
bid = None
|
1964
1981
|
bidVolume = None
|
@@ -2086,7 +2103,7 @@ class htx(Exchange, ImplicitAPI):
|
|
2086
2103
|
:see: https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-get-a-batch-of-market-data-overview
|
2087
2104
|
:see: https://huobiapi.github.io/docs/dm/v1/en/#get-a-batch-of-market-data-overview
|
2088
2105
|
:see: https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#get-a-batch-of-market-data-overview-v2
|
2089
|
-
:param str[]
|
2106
|
+
:param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
2090
2107
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2091
2108
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
2092
2109
|
"""
|
@@ -2096,27 +2113,37 @@ class htx(Exchange, ImplicitAPI):
|
|
2096
2113
|
market = None
|
2097
2114
|
if first is not None:
|
2098
2115
|
market = self.market(first)
|
2116
|
+
isSubTypeRequested = ('subType' in params) or ('business_type' in params)
|
2099
2117
|
type = None
|
2100
2118
|
subType = None
|
2101
2119
|
type, params = self.handle_market_type_and_params('fetchTickers', market, params)
|
2102
2120
|
subType, params = self.handle_sub_type_and_params('fetchTickers', market, params)
|
2103
2121
|
request = {}
|
2122
|
+
isSpot = (type == 'spot')
|
2104
2123
|
future = (type == 'future')
|
2105
2124
|
swap = (type == 'swap')
|
2106
2125
|
linear = (subType == 'linear')
|
2107
2126
|
inverse = (subType == 'inverse')
|
2108
|
-
params = self.omit(params, ['type', 'subType'])
|
2109
2127
|
response = None
|
2110
|
-
if
|
2128
|
+
if not isSpot or isSubTypeRequested:
|
2111
2129
|
if linear:
|
2130
|
+
# independently of type, supports calling all linear symbols i.e. fetchTickers(None, {subType:'linear'})
|
2112
2131
|
if future:
|
2113
2132
|
request['business_type'] = 'futures'
|
2133
|
+
elif swap:
|
2134
|
+
request['business_type'] = 'swap'
|
2135
|
+
else:
|
2136
|
+
request['business_type'] = 'all'
|
2114
2137
|
response = self.contractPublicGetLinearSwapExMarketDetailBatchMerged(self.extend(request, params))
|
2115
2138
|
elif inverse:
|
2116
2139
|
if future:
|
2117
2140
|
response = self.contractPublicGetMarketDetailBatchMerged(self.extend(request, params))
|
2118
2141
|
elif swap:
|
2119
2142
|
response = self.contractPublicGetSwapExMarketDetailBatchMerged(self.extend(request, params))
|
2143
|
+
else:
|
2144
|
+
raise NotSupported(self.id + ' fetchTickers() you have to set params["type"] to either "swap" or "future" for inverse contracts')
|
2145
|
+
else:
|
2146
|
+
raise NotSupported(self.id + ' fetchTickers() you have to set params["subType"] to either "linear" or "inverse" for contracts')
|
2120
2147
|
else:
|
2121
2148
|
response = self.spotPublicGetMarketTickers(self.extend(request, params))
|
2122
2149
|
#
|
@@ -2169,35 +2196,9 @@ class htx(Exchange, ImplicitAPI):
|
|
2169
2196
|
# "ts":1637504679376
|
2170
2197
|
# }
|
2171
2198
|
#
|
2172
|
-
|
2173
|
-
|
2174
|
-
|
2175
|
-
for i in range(0, len(tickers)):
|
2176
|
-
ticker = self.parse_ticker(tickers[i])
|
2177
|
-
# the market ids for linear futures are non-standard and differ from all the other endpoints
|
2178
|
-
# we are doing a linear-matching here
|
2179
|
-
if future and linear:
|
2180
|
-
for j in range(0, len(self.symbols)):
|
2181
|
-
symbolInner = self.symbols[j]
|
2182
|
-
marketInner = self.market(symbolInner)
|
2183
|
-
contractType = self.safe_string(marketInner['info'], 'contract_type')
|
2184
|
-
if (contractType == 'this_week') and (ticker['symbol'] == (marketInner['baseId'] + '-' + marketInner['quoteId'] + '-CW')):
|
2185
|
-
ticker['symbol'] = marketInner['symbol']
|
2186
|
-
break
|
2187
|
-
elif (contractType == 'next_week') and (ticker['symbol'] == (marketInner['baseId'] + '-' + marketInner['quoteId'] + '-NW')):
|
2188
|
-
ticker['symbol'] = marketInner['symbol']
|
2189
|
-
break
|
2190
|
-
elif (contractType == 'this_quarter') and (ticker['symbol'] == (marketInner['baseId'] + '-' + marketInner['quoteId'] + '-CQ')):
|
2191
|
-
ticker['symbol'] = marketInner['symbol']
|
2192
|
-
break
|
2193
|
-
elif (contractType == 'next_quarter') and (ticker['symbol'] == (marketInner['baseId'] + '-' + marketInner['quoteId'] + '-NQ')):
|
2194
|
-
ticker['symbol'] = marketInner['symbol']
|
2195
|
-
break
|
2196
|
-
symbol = ticker['symbol']
|
2197
|
-
ticker['timestamp'] = timestamp
|
2198
|
-
ticker['datetime'] = self.iso8601(timestamp)
|
2199
|
-
result[symbol] = ticker
|
2200
|
-
return self.filter_by_array_tickers(result, 'symbol', symbols)
|
2199
|
+
rawTickers = self.safe_list_2(response, 'data', 'ticks', [])
|
2200
|
+
tickers = self.parse_tickers(rawTickers, symbols, params)
|
2201
|
+
return self.filter_by_array_tickers(tickers, 'symbol', symbols)
|
2201
2202
|
|
2202
2203
|
def fetch_last_prices(self, symbols: Strings = None, params={}):
|
2203
2204
|
"""
|
@@ -2205,7 +2206,7 @@ class htx(Exchange, ImplicitAPI):
|
|
2205
2206
|
:see: https://www.htx.com/en-us/opend/newApiPages/?id=8cb81024-77b5-11ed-9966-0242ac110003 linear swap & linear future
|
2206
2207
|
:see: https://www.htx.com/en-us/opend/newApiPages/?id=28c2e8fc-77ae-11ed-9966-0242ac110003 inverse future
|
2207
2208
|
:see: https://www.htx.com/en-us/opend/newApiPages/?id=5d517ef5-77b6-11ed-9966-0242ac110003 inverse swap
|
2208
|
-
:param str[]
|
2209
|
+
:param str[] [symbols]: unified symbols of the markets to fetch the last prices
|
2209
2210
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2210
2211
|
:returns dict: a dictionary of lastprices structures
|
2211
2212
|
"""
|
ccxt/huobijp.py
CHANGED
@@ -9,6 +9,7 @@ import hashlib
|
|
9
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
|
+
from ccxt.base.errors import AuthenticationError
|
12
13
|
from ccxt.base.errors import PermissionDenied
|
13
14
|
from ccxt.base.errors import ArgumentsRequired
|
14
15
|
from ccxt.base.errors import BadRequest
|
@@ -21,7 +22,6 @@ from ccxt.base.errors import NetworkError
|
|
21
22
|
from ccxt.base.errors import ExchangeNotAvailable
|
22
23
|
from ccxt.base.errors import OnMaintenance
|
23
24
|
from ccxt.base.errors import RequestTimeout
|
24
|
-
from ccxt.base.errors import AuthenticationError
|
25
25
|
from ccxt.base.decimal_to_precision import TRUNCATE
|
26
26
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
27
27
|
from ccxt.base.precise import Precise
|
ccxt/idex.py
CHANGED
@@ -9,6 +9,7 @@ import hashlib
|
|
9
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
|
+
from ccxt.base.errors import AuthenticationError
|
12
13
|
from ccxt.base.errors import BadRequest
|
13
14
|
from ccxt.base.errors import InsufficientFunds
|
14
15
|
from ccxt.base.errors import InvalidAddress
|
@@ -16,7 +17,6 @@ from ccxt.base.errors import InvalidOrder
|
|
16
17
|
from ccxt.base.errors import NotSupported
|
17
18
|
from ccxt.base.errors import DDoSProtection
|
18
19
|
from ccxt.base.errors import ExchangeNotAvailable
|
19
|
-
from ccxt.base.errors import AuthenticationError
|
20
20
|
from ccxt.base.decimal_to_precision import ROUND
|
21
21
|
from ccxt.base.decimal_to_precision import TRUNCATE
|
22
22
|
from ccxt.base.decimal_to_precision import DECIMAL_PLACES
|
ccxt/indodax.py
CHANGED
@@ -10,12 +10,12 @@ import math
|
|
10
10
|
from ccxt.base.types import Balances, 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
|
+
from ccxt.base.errors import AuthenticationError
|
13
14
|
from ccxt.base.errors import ArgumentsRequired
|
14
15
|
from ccxt.base.errors import BadSymbol
|
15
16
|
from ccxt.base.errors import InsufficientFunds
|
16
17
|
from ccxt.base.errors import InvalidOrder
|
17
18
|
from ccxt.base.errors import OrderNotFound
|
18
|
-
from ccxt.base.errors import AuthenticationError
|
19
19
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
20
20
|
|
21
21
|
|
ccxt/kraken.py
CHANGED
@@ -9,6 +9,7 @@ import hashlib
|
|
9
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
|
+
from ccxt.base.errors import AuthenticationError
|
12
13
|
from ccxt.base.errors import PermissionDenied
|
13
14
|
from ccxt.base.errors import AccountSuspended
|
14
15
|
from ccxt.base.errors import ArgumentsRequired
|
@@ -25,7 +26,6 @@ from ccxt.base.errors import RateLimitExceeded
|
|
25
26
|
from ccxt.base.errors import ExchangeNotAvailable
|
26
27
|
from ccxt.base.errors import OnMaintenance
|
27
28
|
from ccxt.base.errors import InvalidNonce
|
28
|
-
from ccxt.base.errors import AuthenticationError
|
29
29
|
from ccxt.base.decimal_to_precision import TRUNCATE
|
30
30
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
31
31
|
from ccxt.base.precise import Precise
|
ccxt/krakenfutures.py
CHANGED
@@ -9,6 +9,7 @@ import hashlib
|
|
9
9
|
from ccxt.base.types import Balances, Currency, Int, Leverage, Leverages, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TransferEntry
|
10
10
|
from typing import List
|
11
11
|
from ccxt.base.errors import ExchangeError
|
12
|
+
from ccxt.base.errors import AuthenticationError
|
12
13
|
from ccxt.base.errors import ArgumentsRequired
|
13
14
|
from ccxt.base.errors import BadRequest
|
14
15
|
from ccxt.base.errors import InsufficientFunds
|
@@ -17,12 +18,11 @@ from ccxt.base.errors import OrderNotFound
|
|
17
18
|
from ccxt.base.errors import OrderImmediatelyFillable
|
18
19
|
from ccxt.base.errors import OrderNotFillable
|
19
20
|
from ccxt.base.errors import DuplicateOrderId
|
21
|
+
from ccxt.base.errors import ContractUnavailable
|
20
22
|
from ccxt.base.errors import DDoSProtection
|
21
23
|
from ccxt.base.errors import RateLimitExceeded
|
22
24
|
from ccxt.base.errors import ExchangeNotAvailable
|
23
25
|
from ccxt.base.errors import InvalidNonce
|
24
|
-
from ccxt.base.errors import AuthenticationError
|
25
|
-
from ccxt.base.errors import ContractUnavailable
|
26
26
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
27
27
|
from ccxt.base.precise import Precise
|
28
28
|
|
ccxt/kucoin.py
CHANGED
@@ -11,6 +11,7 @@ import json
|
|
11
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
|
+
from ccxt.base.errors import AuthenticationError
|
14
15
|
from ccxt.base.errors import PermissionDenied
|
15
16
|
from ccxt.base.errors import AccountSuspended
|
16
17
|
from ccxt.base.errors import ArgumentsRequired
|
@@ -24,7 +25,6 @@ from ccxt.base.errors import NotSupported
|
|
24
25
|
from ccxt.base.errors import RateLimitExceeded
|
25
26
|
from ccxt.base.errors import ExchangeNotAvailable
|
26
27
|
from ccxt.base.errors import InvalidNonce
|
27
|
-
from ccxt.base.errors import AuthenticationError
|
28
28
|
from ccxt.base.decimal_to_precision import TRUNCATE
|
29
29
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
30
30
|
from ccxt.base.precise import Precise
|
ccxt/kucoinfutures.py
CHANGED
@@ -7,6 +7,7 @@ from ccxt.kucoin import kucoin
|
|
7
7
|
from ccxt.abstract.kucoinfutures import ImplicitAPI
|
8
8
|
from ccxt.base.types import Balances, Currency, Int, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
|
9
9
|
from typing import List
|
10
|
+
from ccxt.base.errors import AuthenticationError
|
10
11
|
from ccxt.base.errors import PermissionDenied
|
11
12
|
from ccxt.base.errors import AccountSuspended
|
12
13
|
from ccxt.base.errors import ArgumentsRequired
|
@@ -18,7 +19,6 @@ from ccxt.base.errors import NotSupported
|
|
18
19
|
from ccxt.base.errors import RateLimitExceeded
|
19
20
|
from ccxt.base.errors import ExchangeNotAvailable
|
20
21
|
from ccxt.base.errors import InvalidNonce
|
21
|
-
from ccxt.base.errors import AuthenticationError
|
22
22
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
23
23
|
from ccxt.base.precise import Precise
|
24
24
|
|
ccxt/latoken.py
CHANGED
@@ -9,6 +9,7 @@ import hashlib
|
|
9
9
|
from ccxt.base.types import Balances, Currencies, Currency, 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
|
+
from ccxt.base.errors import AuthenticationError
|
12
13
|
from ccxt.base.errors import PermissionDenied
|
13
14
|
from ccxt.base.errors import AccountSuspended
|
14
15
|
from ccxt.base.errors import ArgumentsRequired
|
@@ -20,7 +21,6 @@ from ccxt.base.errors import NotSupported
|
|
20
21
|
from ccxt.base.errors import RateLimitExceeded
|
21
22
|
from ccxt.base.errors import ExchangeNotAvailable
|
22
23
|
from ccxt.base.errors import InvalidNonce
|
23
|
-
from ccxt.base.errors import AuthenticationError
|
24
24
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
25
25
|
|
26
26
|
|
ccxt/lbank.py
CHANGED
@@ -9,6 +9,7 @@ import hashlib
|
|
9
9
|
from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction
|
10
10
|
from typing import List
|
11
11
|
from ccxt.base.errors import ExchangeError
|
12
|
+
from ccxt.base.errors import AuthenticationError
|
12
13
|
from ccxt.base.errors import PermissionDenied
|
13
14
|
from ccxt.base.errors import ArgumentsRequired
|
14
15
|
from ccxt.base.errors import BadRequest
|
@@ -20,7 +21,6 @@ from ccxt.base.errors import DuplicateOrderId
|
|
20
21
|
from ccxt.base.errors import NotSupported
|
21
22
|
from ccxt.base.errors import RateLimitExceeded
|
22
23
|
from ccxt.base.errors import InvalidNonce
|
23
|
-
from ccxt.base.errors import AuthenticationError
|
24
24
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
25
25
|
from ccxt.base.precise import Precise
|
26
26
|
|
ccxt/mexc.py
CHANGED
@@ -9,6 +9,7 @@ import hashlib
|
|
9
9
|
from ccxt.base.types import Account, Balances, Currencies, Currency, IndexType, Int, Leverage, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction, TransferEntry
|
10
10
|
from typing import List
|
11
11
|
from ccxt.base.errors import ExchangeError
|
12
|
+
from ccxt.base.errors import AuthenticationError
|
12
13
|
from ccxt.base.errors import PermissionDenied
|
13
14
|
from ccxt.base.errors import AccountSuspended
|
14
15
|
from ccxt.base.errors import ArgumentsRequired
|
@@ -20,7 +21,6 @@ from ccxt.base.errors import InvalidOrder
|
|
20
21
|
from ccxt.base.errors import NotSupported
|
21
22
|
from ccxt.base.errors import OnMaintenance
|
22
23
|
from ccxt.base.errors import InvalidNonce
|
23
|
-
from ccxt.base.errors import AuthenticationError
|
24
24
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
25
25
|
from ccxt.base.precise import Precise
|
26
26
|
|
ccxt/ndax.py
CHANGED
@@ -10,10 +10,10 @@ import json
|
|
10
10
|
from ccxt.base.types import Account, Balances, Currencies, Currency, IndexType, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Ticker, Trade, Transaction
|
11
11
|
from typing import List
|
12
12
|
from ccxt.base.errors import ExchangeError
|
13
|
+
from ccxt.base.errors import AuthenticationError
|
13
14
|
from ccxt.base.errors import BadSymbol
|
14
15
|
from ccxt.base.errors import InsufficientFunds
|
15
16
|
from ccxt.base.errors import OrderNotFound
|
16
|
-
from ccxt.base.errors import AuthenticationError
|
17
17
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
18
18
|
from ccxt.base.precise import Precise
|
19
19
|
|
ccxt/novadax.py
CHANGED
@@ -9,6 +9,7 @@ import hashlib
|
|
9
9
|
from ccxt.base.types import Account, Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
|
10
10
|
from typing import List
|
11
11
|
from ccxt.base.errors import ExchangeError
|
12
|
+
from ccxt.base.errors import AuthenticationError
|
12
13
|
from ccxt.base.errors import PermissionDenied
|
13
14
|
from ccxt.base.errors import AccountNotEnabled
|
14
15
|
from ccxt.base.errors import AccountSuspended
|
@@ -21,7 +22,6 @@ from ccxt.base.errors import OrderNotFound
|
|
21
22
|
from ccxt.base.errors import CancelPending
|
22
23
|
from ccxt.base.errors import RateLimitExceeded
|
23
24
|
from ccxt.base.errors import OnMaintenance
|
24
|
-
from ccxt.base.errors import AuthenticationError
|
25
25
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
26
26
|
from ccxt.base.precise import Precise
|
27
27
|
|
ccxt/oceanex.py
CHANGED
@@ -8,13 +8,13 @@ from ccxt.abstract.oceanex import ImplicitAPI
|
|
8
8
|
from ccxt.base.types import Balances, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees
|
9
9
|
from typing import List
|
10
10
|
from ccxt.base.errors import ExchangeError
|
11
|
+
from ccxt.base.errors import AuthenticationError
|
11
12
|
from ccxt.base.errors import PermissionDenied
|
12
13
|
from ccxt.base.errors import ArgumentsRequired
|
13
14
|
from ccxt.base.errors import BadRequest
|
14
15
|
from ccxt.base.errors import InsufficientFunds
|
15
16
|
from ccxt.base.errors import InvalidOrder
|
16
17
|
from ccxt.base.errors import OrderNotFound
|
17
|
-
from ccxt.base.errors import AuthenticationError
|
18
18
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
19
19
|
|
20
20
|
|
ccxt/okcoin.py
CHANGED
@@ -9,6 +9,7 @@ import hashlib
|
|
9
9
|
from ccxt.base.types import Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
|
10
10
|
from typing import List
|
11
11
|
from ccxt.base.errors import ExchangeError
|
12
|
+
from ccxt.base.errors import AuthenticationError
|
12
13
|
from ccxt.base.errors import PermissionDenied
|
13
14
|
from ccxt.base.errors import AccountNotEnabled
|
14
15
|
from ccxt.base.errors import AccountSuspended
|
@@ -27,7 +28,6 @@ from ccxt.base.errors import ExchangeNotAvailable
|
|
27
28
|
from ccxt.base.errors import OnMaintenance
|
28
29
|
from ccxt.base.errors import InvalidNonce
|
29
30
|
from ccxt.base.errors import RequestTimeout
|
30
|
-
from ccxt.base.errors import AuthenticationError
|
31
31
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
32
32
|
from ccxt.base.precise import Precise
|
33
33
|
|