ccxt 4.4.10__py2.py3-none-any.whl → 4.4.11__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 +1 -1
- ccxt/abstract/binance.py +1 -0
- ccxt/abstract/binancecoinm.py +1 -0
- ccxt/abstract/binanceus.py +1 -0
- ccxt/abstract/binanceusdm.py +1 -0
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/binance.py +1 -0
- ccxt/async_support/bitget.py +1 -1
- ccxt/async_support/htx.py +6 -0
- ccxt/async_support/kraken.py +35 -13
- ccxt/async_support/mexc.py +10 -4
- ccxt/async_support/okx.py +2 -0
- ccxt/base/exchange.py +1 -1
- ccxt/binance.py +1 -0
- ccxt/bitget.py +1 -1
- ccxt/htx.py +6 -0
- ccxt/kraken.py +35 -13
- ccxt/mexc.py +10 -4
- ccxt/okx.py +2 -0
- ccxt/pro/__init__.py +1 -1
- ccxt/pro/deribit.py +75 -0
- ccxt/pro/exmo.py +29 -2
- ccxt/pro/okx.py +1 -1
- {ccxt-4.4.10.dist-info → ccxt-4.4.11.dist-info}/METADATA +4 -4
- {ccxt-4.4.10.dist-info → ccxt-4.4.11.dist-info}/RECORD +29 -29
- {ccxt-4.4.10.dist-info → ccxt-4.4.11.dist-info}/LICENSE.txt +0 -0
- {ccxt-4.4.10.dist-info → ccxt-4.4.11.dist-info}/WHEEL +0 -0
- {ccxt-4.4.10.dist-info → ccxt-4.4.11.dist-info}/top_level.txt +0 -0
ccxt/__init__.py
CHANGED
ccxt/abstract/binance.py
CHANGED
@@ -703,6 +703,7 @@ class ImplicitAPI:
|
|
703
703
|
papi_post_listenkey = papiPostListenKey = Entry('listenKey', 'papi', 'POST', {'cost': 1})
|
704
704
|
papi_post_asset_collection = papiPostAssetCollection = Entry('asset-collection', 'papi', 'POST', {'cost': 3})
|
705
705
|
papi_post_margin_repay_debt = papiPostMarginRepayDebt = Entry('margin/repay-debt', 'papi', 'POST', {'cost': 0.4})
|
706
|
+
papi_post_um_feeburn = papiPostUmFeeBurn = Entry('um/feeBurn', 'papi', 'POST', {'cost': 1})
|
706
707
|
papi_put_listenkey = papiPutListenKey = Entry('listenKey', 'papi', 'PUT', {'cost': 1})
|
707
708
|
papi_delete_um_order = papiDeleteUmOrder = Entry('um/order', 'papi', 'DELETE', {'cost': 1})
|
708
709
|
papi_delete_um_conditional_order = papiDeleteUmConditionalOrder = Entry('um/conditional/order', 'papi', 'DELETE', {'cost': 1})
|
ccxt/abstract/binancecoinm.py
CHANGED
@@ -703,6 +703,7 @@ class ImplicitAPI:
|
|
703
703
|
papi_post_listenkey = papiPostListenKey = Entry('listenKey', 'papi', 'POST', {'cost': 1})
|
704
704
|
papi_post_asset_collection = papiPostAssetCollection = Entry('asset-collection', 'papi', 'POST', {'cost': 3})
|
705
705
|
papi_post_margin_repay_debt = papiPostMarginRepayDebt = Entry('margin/repay-debt', 'papi', 'POST', {'cost': 0.4})
|
706
|
+
papi_post_um_feeburn = papiPostUmFeeBurn = Entry('um/feeBurn', 'papi', 'POST', {'cost': 1})
|
706
707
|
papi_put_listenkey = papiPutListenKey = Entry('listenKey', 'papi', 'PUT', {'cost': 1})
|
707
708
|
papi_delete_um_order = papiDeleteUmOrder = Entry('um/order', 'papi', 'DELETE', {'cost': 1})
|
708
709
|
papi_delete_um_conditional_order = papiDeleteUmConditionalOrder = Entry('um/conditional/order', 'papi', 'DELETE', {'cost': 1})
|
ccxt/abstract/binanceus.py
CHANGED
@@ -755,6 +755,7 @@ class ImplicitAPI:
|
|
755
755
|
papi_post_listenkey = papiPostListenKey = Entry('listenKey', 'papi', 'POST', {'cost': 1})
|
756
756
|
papi_post_asset_collection = papiPostAssetCollection = Entry('asset-collection', 'papi', 'POST', {'cost': 3})
|
757
757
|
papi_post_margin_repay_debt = papiPostMarginRepayDebt = Entry('margin/repay-debt', 'papi', 'POST', {'cost': 0.4})
|
758
|
+
papi_post_um_feeburn = papiPostUmFeeBurn = Entry('um/feeBurn', 'papi', 'POST', {'cost': 1})
|
758
759
|
papi_put_listenkey = papiPutListenKey = Entry('listenKey', 'papi', 'PUT', {'cost': 1})
|
759
760
|
papi_delete_um_order = papiDeleteUmOrder = Entry('um/order', 'papi', 'DELETE', {'cost': 1})
|
760
761
|
papi_delete_um_conditional_order = papiDeleteUmConditionalOrder = Entry('um/conditional/order', 'papi', 'DELETE', {'cost': 1})
|
ccxt/abstract/binanceusdm.py
CHANGED
@@ -703,6 +703,7 @@ class ImplicitAPI:
|
|
703
703
|
papi_post_listenkey = papiPostListenKey = Entry('listenKey', 'papi', 'POST', {'cost': 1})
|
704
704
|
papi_post_asset_collection = papiPostAssetCollection = Entry('asset-collection', 'papi', 'POST', {'cost': 3})
|
705
705
|
papi_post_margin_repay_debt = papiPostMarginRepayDebt = Entry('margin/repay-debt', 'papi', 'POST', {'cost': 0.4})
|
706
|
+
papi_post_um_feeburn = papiPostUmFeeBurn = Entry('um/feeBurn', 'papi', 'POST', {'cost': 1})
|
706
707
|
papi_put_listenkey = papiPutListenKey = Entry('listenKey', 'papi', 'PUT', {'cost': 1})
|
707
708
|
papi_delete_um_order = papiDeleteUmOrder = Entry('um/order', 'papi', 'DELETE', {'cost': 1})
|
708
709
|
papi_delete_um_conditional_order = papiDeleteUmConditionalOrder = Entry('um/conditional/order', 'papi', 'DELETE', {'cost': 1})
|
ccxt/async_support/__init__.py
CHANGED
ccxt/async_support/binance.py
CHANGED
ccxt/async_support/bitget.py
CHANGED
ccxt/async_support/htx.py
CHANGED
@@ -1237,6 +1237,7 @@ class htx(Exchange, ImplicitAPI):
|
|
1237
1237
|
# https://github.com/ccxt/ccxt/issues/6081
|
1238
1238
|
# https://github.com/ccxt/ccxt/issues/3365
|
1239
1239
|
# https://github.com/ccxt/ccxt/issues/2873
|
1240
|
+
'NGL': 'GFNGL',
|
1240
1241
|
'GET': 'THEMIS', # conflict with GET(Guaranteed Entrance Token, GET Protocol)
|
1241
1242
|
'GTC': 'GAMECOM', # conflict with Gitcoin and Gastrocoin
|
1242
1243
|
'HIT': 'HITCHAIN',
|
@@ -1248,6 +1249,7 @@ class htx(Exchange, ImplicitAPI):
|
|
1248
1249
|
'SBTC': 'SUPERBITCOIN',
|
1249
1250
|
'SOUL': 'SOULSAVER',
|
1250
1251
|
'BIFI': 'BITCOINFILE', # conflict with Beefy.Finance https://github.com/ccxt/ccxt/issues/8706
|
1252
|
+
'FUD': 'FTX Users\' Debt',
|
1251
1253
|
},
|
1252
1254
|
})
|
1253
1255
|
|
@@ -6854,6 +6856,10 @@ class htx(Exchange, ImplicitAPI):
|
|
6854
6856
|
async def set_leverage(self, leverage: Int, symbol: Str = None, params={}):
|
6855
6857
|
"""
|
6856
6858
|
set the level of leverage for a market
|
6859
|
+
:see: https://huobiapi.github.io/docs/usdt_swap/v1/en/#isolated-switch-leverage
|
6860
|
+
:see: https://huobiapi.github.io/docs/usdt_swap/v1/en/#cross-switch-leverage
|
6861
|
+
:see: https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#switch-leverage
|
6862
|
+
:see: https://huobiapi.github.io/docs/dm/v1/en/#switch-leverage # Coin-m futures
|
6857
6863
|
:param float leverage: the rate of leverage
|
6858
6864
|
:param str symbol: unified market symbol
|
6859
6865
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
ccxt/async_support/kraken.py
CHANGED
@@ -66,6 +66,7 @@ class kraken(Exchange, ImplicitAPI):
|
|
66
66
|
'createStopMarketOrder': True,
|
67
67
|
'createStopOrder': True,
|
68
68
|
'createTrailingAmountOrder': True,
|
69
|
+
'createTrailingPercentOrder': True,
|
69
70
|
'editOrder': True,
|
70
71
|
'fetchBalance': True,
|
71
72
|
'fetchBorrowInterest': False,
|
@@ -456,7 +457,9 @@ class kraken(Exchange, ImplicitAPI):
|
|
456
457
|
'EGeneral:Internal error': ExchangeNotAvailable,
|
457
458
|
'EGeneral:Temporary lockout': DDoSProtection,
|
458
459
|
'EGeneral:Permission denied': PermissionDenied,
|
460
|
+
'EGeneral:Invalid arguments:price': InvalidOrder,
|
459
461
|
'EOrder:Unknown order': InvalidOrder,
|
462
|
+
'EOrder:Invalid price:Invalid price argument': InvalidOrder,
|
460
463
|
'EOrder:Order minimum not met': InvalidOrder,
|
461
464
|
'EGeneral:Invalid arguments': BadRequest,
|
462
465
|
'ESession:Invalid session': AuthenticationError,
|
@@ -1397,8 +1400,8 @@ class kraken(Exchange, ImplicitAPI):
|
|
1397
1400
|
|
1398
1401
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1399
1402
|
"""
|
1400
|
-
:see: https://docs.kraken.com/rest/#tag/Spot-Trading/operation/addOrder
|
1401
1403
|
create a trade order
|
1404
|
+
:see: https://docs.kraken.com/api/docs/rest-api/add-order
|
1402
1405
|
:param str symbol: unified symbol of the market to create an order in
|
1403
1406
|
:param str type: 'market' or 'limit'
|
1404
1407
|
:param str side: 'buy' or 'sell'
|
@@ -1410,7 +1413,9 @@ class kraken(Exchange, ImplicitAPI):
|
|
1410
1413
|
:param float [params.stopLossPrice]: *margin only* the price that a stop loss order is triggered at
|
1411
1414
|
:param float [params.takeProfitPrice]: *margin only* the price that a take profit order is triggered at
|
1412
1415
|
:param str [params.trailingAmount]: *margin only* the quote amount to trail away from the current market price
|
1416
|
+
:param str [params.trailingPercent]: *margin only* the percent to trail away from the current market price
|
1413
1417
|
:param str [params.trailingLimitAmount]: *margin only* the quote amount away from the trailingAmount
|
1418
|
+
:param str [params.trailingLimitPercent]: *margin only* the percent away from the trailingAmount
|
1414
1419
|
:param str [params.offset]: *margin only* '+' or '-' whether you want the trailingLimitAmount value to be positive or negative, default is negative '-'
|
1415
1420
|
:param str [params.trigger]: *margin only* the activation price type, 'last' or 'index', default is 'last'
|
1416
1421
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1717,8 +1722,11 @@ class kraken(Exchange, ImplicitAPI):
|
|
1717
1722
|
isTakeProfitTriggerOrder = takeProfitTriggerPrice is not None
|
1718
1723
|
isStopLossOrTakeProfitTrigger = isStopLossTriggerOrder or isTakeProfitTriggerOrder
|
1719
1724
|
trailingAmount = self.safe_string(params, 'trailingAmount')
|
1725
|
+
trailingPercent = self.safe_string(params, 'trailingPercent')
|
1720
1726
|
trailingLimitAmount = self.safe_string(params, 'trailingLimitAmount')
|
1727
|
+
trailingLimitPercent = self.safe_string(params, 'trailingLimitPercent')
|
1721
1728
|
isTrailingAmountOrder = trailingAmount is not None
|
1729
|
+
isTrailingPercentOrder = trailingPercent is not None
|
1722
1730
|
isLimitOrder = type.endswith('limit') # supporting limit, stop-loss-limit, take-profit-limit, etc
|
1723
1731
|
isMarketOrder = type == 'market'
|
1724
1732
|
cost = self.safe_string(params, 'cost')
|
@@ -1750,19 +1758,30 @@ class kraken(Exchange, ImplicitAPI):
|
|
1750
1758
|
request['ordertype'] = 'take-profit'
|
1751
1759
|
if isLimitOrder:
|
1752
1760
|
request['price2'] = self.price_to_precision(symbol, price)
|
1753
|
-
elif isTrailingAmountOrder:
|
1761
|
+
elif isTrailingAmountOrder or isTrailingPercentOrder:
|
1762
|
+
trailingPercentString = None
|
1763
|
+
if isTrailingPercentOrder:
|
1764
|
+
trailingPercentString = trailingPercent if (trailingPercent.endswith('%')) else '+' + (self.number_to_string(trailingPercent) + '%')
|
1765
|
+
trailingAmountString = '+' + trailingAmount if (trailingAmount is not None) else None # must use + for self
|
1766
|
+
offset = self.safe_string(params, 'offset', '-') # can use + or - for self
|
1767
|
+
trailingLimitAmountString = offset + self.number_to_string(trailingLimitAmount) if (trailingLimitAmount is not None) else None
|
1754
1768
|
trailingActivationPriceType = self.safe_string(params, 'trigger', 'last')
|
1755
|
-
trailingAmountString = '+' + trailingAmount
|
1756
1769
|
request['trigger'] = trailingActivationPriceType
|
1757
|
-
if isLimitOrder or (trailingLimitAmount is not None):
|
1758
|
-
offset = self.safe_string(params, 'offset', '-')
|
1759
|
-
trailingLimitAmountString = offset + self.number_to_string(trailingLimitAmount)
|
1760
|
-
request['price'] = trailingAmountString
|
1761
|
-
request['price2'] = trailingLimitAmountString
|
1770
|
+
if isLimitOrder or (trailingLimitAmount is not None) or (trailingLimitPercent is not None):
|
1762
1771
|
request['ordertype'] = 'trailing-stop-limit'
|
1772
|
+
if trailingLimitPercent is not None:
|
1773
|
+
trailingLimitPercentString = trailingLimitPercent if (trailingLimitPercent.endswith('%')) else (self.number_to_string(trailingLimitPercent) + '%')
|
1774
|
+
request['price'] = trailingPercentString
|
1775
|
+
request['price2'] = trailingLimitPercentString
|
1776
|
+
elif trailingLimitAmount is not None:
|
1777
|
+
request['price'] = trailingAmountString
|
1778
|
+
request['price2'] = trailingLimitAmountString
|
1763
1779
|
else:
|
1764
|
-
request['price'] = trailingAmountString
|
1765
1780
|
request['ordertype'] = 'trailing-stop'
|
1781
|
+
if trailingPercent is not None:
|
1782
|
+
request['price'] = trailingPercentString
|
1783
|
+
else:
|
1784
|
+
request['price'] = trailingAmountString
|
1766
1785
|
if reduceOnly:
|
1767
1786
|
if method == 'createOrderWs':
|
1768
1787
|
request['reduce_only'] = True # ws request can't have stringified bool
|
@@ -1789,7 +1808,7 @@ class kraken(Exchange, ImplicitAPI):
|
|
1789
1808
|
request['oflags'] = extendedPostFlags
|
1790
1809
|
if (flags is not None) and not ('oflags' in request):
|
1791
1810
|
request['oflags'] = flags
|
1792
|
-
params = self.omit(params, ['timeInForce', 'reduceOnly', 'stopLossPrice', 'takeProfitPrice', 'trailingAmount', 'trailingLimitAmount', 'offset'])
|
1811
|
+
params = self.omit(params, ['timeInForce', 'reduceOnly', 'stopLossPrice', 'takeProfitPrice', 'trailingAmount', 'trailingPercent', 'trailingLimitAmount', 'trailingLimitPercent', 'offset'])
|
1793
1812
|
return [request, params]
|
1794
1813
|
|
1795
1814
|
async def edit_order(self, id: str, symbol: str, type: OrderType, side: OrderSide, amount: Num = None, price: Num = None, params={}):
|
@@ -2916,11 +2935,15 @@ class kraken(Exchange, ImplicitAPI):
|
|
2916
2935
|
# urlencodeNested is used to address https://github.com/ccxt/ccxt/issues/12872
|
2917
2936
|
url += '?' + self.urlencode_nested(params)
|
2918
2937
|
elif api == 'private':
|
2938
|
+
price = self.safe_string(params, 'price')
|
2939
|
+
isTriggerPercent = False
|
2940
|
+
if price is not None:
|
2941
|
+
isTriggerPercent = True if (price.endswith('%')) else False
|
2919
2942
|
isCancelOrderBatch = (path == 'CancelOrderBatch')
|
2920
2943
|
self.check_required_credentials()
|
2921
2944
|
nonce = str(self.nonce())
|
2922
2945
|
# urlencodeNested is used to address https://github.com/ccxt/ccxt/issues/12872
|
2923
|
-
if isCancelOrderBatch:
|
2946
|
+
if isCancelOrderBatch or isTriggerPercent:
|
2924
2947
|
body = self.json(self.extend({'nonce': nonce}, params))
|
2925
2948
|
else:
|
2926
2949
|
body = self.urlencode_nested(self.extend({'nonce': nonce}, params))
|
@@ -2933,9 +2956,8 @@ class kraken(Exchange, ImplicitAPI):
|
|
2933
2956
|
headers = {
|
2934
2957
|
'API-Key': self.apiKey,
|
2935
2958
|
'API-Sign': signature,
|
2936
|
-
# 'Content-Type': 'application/x-www-form-urlencoded',
|
2937
2959
|
}
|
2938
|
-
if isCancelOrderBatch:
|
2960
|
+
if isCancelOrderBatch or isTriggerPercent:
|
2939
2961
|
headers['Content-Type'] = 'application/json'
|
2940
2962
|
else:
|
2941
2963
|
headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
ccxt/async_support/mexc.py
CHANGED
@@ -3616,23 +3616,29 @@ class mexc(Exchange, ImplicitAPI):
|
|
3616
3616
|
:param int [since]: the earliest time in ms to fetch trades for
|
3617
3617
|
:param int [limit]: the maximum number of trades structures to retrieve
|
3618
3618
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3619
|
+
:param int [params.until]: the latest time in ms to fetch trades for
|
3619
3620
|
:returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
3620
3621
|
"""
|
3621
3622
|
if symbol is None:
|
3622
3623
|
raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
|
3623
3624
|
await self.load_markets()
|
3624
3625
|
market = self.market(symbol)
|
3625
|
-
marketType
|
3626
|
+
marketType: Str = None
|
3627
|
+
marketType, params = self.handle_market_type_and_params('fetchMyTrades', market, params)
|
3626
3628
|
request: dict = {
|
3627
3629
|
'symbol': market['id'],
|
3628
3630
|
}
|
3629
3631
|
trades = None
|
3630
3632
|
if marketType == 'spot':
|
3631
3633
|
if since is not None:
|
3632
|
-
request['
|
3634
|
+
request['startTime'] = since
|
3633
3635
|
if limit is not None:
|
3634
3636
|
request['limit'] = limit
|
3635
|
-
|
3637
|
+
until = self.safe_integer(params, 'until')
|
3638
|
+
if until is not None:
|
3639
|
+
params = self.omit(params, 'until')
|
3640
|
+
request['endTime'] = until
|
3641
|
+
trades = await self.spotPrivateGetMyTrades(self.extend(request, params))
|
3636
3642
|
#
|
3637
3643
|
# spot
|
3638
3644
|
#
|
@@ -3662,7 +3668,7 @@ class mexc(Exchange, ImplicitAPI):
|
|
3662
3668
|
request['end_time'] = self.sum(since, self.options['maxTimeTillEnd'])
|
3663
3669
|
if limit is not None:
|
3664
3670
|
request['page_size'] = limit
|
3665
|
-
response = await self.contractPrivateGetOrderListOrderDeals(self.extend(request,
|
3671
|
+
response = await self.contractPrivateGetOrderListOrderDeals(self.extend(request, params))
|
3666
3672
|
#
|
3667
3673
|
# {
|
3668
3674
|
# "success": True,
|
ccxt/async_support/okx.py
CHANGED
@@ -18,6 +18,7 @@ from ccxt.base.errors import AccountSuspended
|
|
18
18
|
from ccxt.base.errors import ArgumentsRequired
|
19
19
|
from ccxt.base.errors import BadRequest
|
20
20
|
from ccxt.base.errors import BadSymbol
|
21
|
+
from ccxt.base.errors import ManualInteractionNeeded
|
21
22
|
from ccxt.base.errors import InsufficientFunds
|
22
23
|
from ccxt.base.errors import InvalidAddress
|
23
24
|
from ccxt.base.errors import InvalidOrder
|
@@ -600,6 +601,7 @@ class okx(Exchange, ImplicitAPI):
|
|
600
601
|
# General Class
|
601
602
|
'1': ExchangeError, # Operation failed
|
602
603
|
'2': ExchangeError, # Bulk operation partially succeeded
|
604
|
+
'4088': ManualInteractionNeeded, # {"code":"4088","data":[],"msg":"You can’t trade or deposit until you’ve verified your identity again. Head to Identity Verification to complete it."}
|
603
605
|
'50000': BadRequest, # Body can not be empty
|
604
606
|
'50001': OnMaintenance, # Matching engine upgrading. Please try again later
|
605
607
|
'50002': BadRequest, # Json data format error
|
ccxt/base/exchange.py
CHANGED
ccxt/binance.py
CHANGED
ccxt/bitget.py
CHANGED
ccxt/htx.py
CHANGED
@@ -1236,6 +1236,7 @@ class htx(Exchange, ImplicitAPI):
|
|
1236
1236
|
# https://github.com/ccxt/ccxt/issues/6081
|
1237
1237
|
# https://github.com/ccxt/ccxt/issues/3365
|
1238
1238
|
# https://github.com/ccxt/ccxt/issues/2873
|
1239
|
+
'NGL': 'GFNGL',
|
1239
1240
|
'GET': 'THEMIS', # conflict with GET(Guaranteed Entrance Token, GET Protocol)
|
1240
1241
|
'GTC': 'GAMECOM', # conflict with Gitcoin and Gastrocoin
|
1241
1242
|
'HIT': 'HITCHAIN',
|
@@ -1247,6 +1248,7 @@ class htx(Exchange, ImplicitAPI):
|
|
1247
1248
|
'SBTC': 'SUPERBITCOIN',
|
1248
1249
|
'SOUL': 'SOULSAVER',
|
1249
1250
|
'BIFI': 'BITCOINFILE', # conflict with Beefy.Finance https://github.com/ccxt/ccxt/issues/8706
|
1251
|
+
'FUD': 'FTX Users\' Debt',
|
1250
1252
|
},
|
1251
1253
|
})
|
1252
1254
|
|
@@ -6853,6 +6855,10 @@ class htx(Exchange, ImplicitAPI):
|
|
6853
6855
|
def set_leverage(self, leverage: Int, symbol: Str = None, params={}):
|
6854
6856
|
"""
|
6855
6857
|
set the level of leverage for a market
|
6858
|
+
:see: https://huobiapi.github.io/docs/usdt_swap/v1/en/#isolated-switch-leverage
|
6859
|
+
:see: https://huobiapi.github.io/docs/usdt_swap/v1/en/#cross-switch-leverage
|
6860
|
+
:see: https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#switch-leverage
|
6861
|
+
:see: https://huobiapi.github.io/docs/dm/v1/en/#switch-leverage # Coin-m futures
|
6856
6862
|
:param float leverage: the rate of leverage
|
6857
6863
|
:param str symbol: unified market symbol
|
6858
6864
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
ccxt/kraken.py
CHANGED
@@ -66,6 +66,7 @@ class kraken(Exchange, ImplicitAPI):
|
|
66
66
|
'createStopMarketOrder': True,
|
67
67
|
'createStopOrder': True,
|
68
68
|
'createTrailingAmountOrder': True,
|
69
|
+
'createTrailingPercentOrder': True,
|
69
70
|
'editOrder': True,
|
70
71
|
'fetchBalance': True,
|
71
72
|
'fetchBorrowInterest': False,
|
@@ -456,7 +457,9 @@ class kraken(Exchange, ImplicitAPI):
|
|
456
457
|
'EGeneral:Internal error': ExchangeNotAvailable,
|
457
458
|
'EGeneral:Temporary lockout': DDoSProtection,
|
458
459
|
'EGeneral:Permission denied': PermissionDenied,
|
460
|
+
'EGeneral:Invalid arguments:price': InvalidOrder,
|
459
461
|
'EOrder:Unknown order': InvalidOrder,
|
462
|
+
'EOrder:Invalid price:Invalid price argument': InvalidOrder,
|
460
463
|
'EOrder:Order minimum not met': InvalidOrder,
|
461
464
|
'EGeneral:Invalid arguments': BadRequest,
|
462
465
|
'ESession:Invalid session': AuthenticationError,
|
@@ -1397,8 +1400,8 @@ class kraken(Exchange, ImplicitAPI):
|
|
1397
1400
|
|
1398
1401
|
def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1399
1402
|
"""
|
1400
|
-
:see: https://docs.kraken.com/rest/#tag/Spot-Trading/operation/addOrder
|
1401
1403
|
create a trade order
|
1404
|
+
:see: https://docs.kraken.com/api/docs/rest-api/add-order
|
1402
1405
|
:param str symbol: unified symbol of the market to create an order in
|
1403
1406
|
:param str type: 'market' or 'limit'
|
1404
1407
|
:param str side: 'buy' or 'sell'
|
@@ -1410,7 +1413,9 @@ class kraken(Exchange, ImplicitAPI):
|
|
1410
1413
|
:param float [params.stopLossPrice]: *margin only* the price that a stop loss order is triggered at
|
1411
1414
|
:param float [params.takeProfitPrice]: *margin only* the price that a take profit order is triggered at
|
1412
1415
|
:param str [params.trailingAmount]: *margin only* the quote amount to trail away from the current market price
|
1416
|
+
:param str [params.trailingPercent]: *margin only* the percent to trail away from the current market price
|
1413
1417
|
:param str [params.trailingLimitAmount]: *margin only* the quote amount away from the trailingAmount
|
1418
|
+
:param str [params.trailingLimitPercent]: *margin only* the percent away from the trailingAmount
|
1414
1419
|
:param str [params.offset]: *margin only* '+' or '-' whether you want the trailingLimitAmount value to be positive or negative, default is negative '-'
|
1415
1420
|
:param str [params.trigger]: *margin only* the activation price type, 'last' or 'index', default is 'last'
|
1416
1421
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1717,8 +1722,11 @@ class kraken(Exchange, ImplicitAPI):
|
|
1717
1722
|
isTakeProfitTriggerOrder = takeProfitTriggerPrice is not None
|
1718
1723
|
isStopLossOrTakeProfitTrigger = isStopLossTriggerOrder or isTakeProfitTriggerOrder
|
1719
1724
|
trailingAmount = self.safe_string(params, 'trailingAmount')
|
1725
|
+
trailingPercent = self.safe_string(params, 'trailingPercent')
|
1720
1726
|
trailingLimitAmount = self.safe_string(params, 'trailingLimitAmount')
|
1727
|
+
trailingLimitPercent = self.safe_string(params, 'trailingLimitPercent')
|
1721
1728
|
isTrailingAmountOrder = trailingAmount is not None
|
1729
|
+
isTrailingPercentOrder = trailingPercent is not None
|
1722
1730
|
isLimitOrder = type.endswith('limit') # supporting limit, stop-loss-limit, take-profit-limit, etc
|
1723
1731
|
isMarketOrder = type == 'market'
|
1724
1732
|
cost = self.safe_string(params, 'cost')
|
@@ -1750,19 +1758,30 @@ class kraken(Exchange, ImplicitAPI):
|
|
1750
1758
|
request['ordertype'] = 'take-profit'
|
1751
1759
|
if isLimitOrder:
|
1752
1760
|
request['price2'] = self.price_to_precision(symbol, price)
|
1753
|
-
elif isTrailingAmountOrder:
|
1761
|
+
elif isTrailingAmountOrder or isTrailingPercentOrder:
|
1762
|
+
trailingPercentString = None
|
1763
|
+
if isTrailingPercentOrder:
|
1764
|
+
trailingPercentString = trailingPercent if (trailingPercent.endswith('%')) else '+' + (self.number_to_string(trailingPercent) + '%')
|
1765
|
+
trailingAmountString = '+' + trailingAmount if (trailingAmount is not None) else None # must use + for self
|
1766
|
+
offset = self.safe_string(params, 'offset', '-') # can use + or - for self
|
1767
|
+
trailingLimitAmountString = offset + self.number_to_string(trailingLimitAmount) if (trailingLimitAmount is not None) else None
|
1754
1768
|
trailingActivationPriceType = self.safe_string(params, 'trigger', 'last')
|
1755
|
-
trailingAmountString = '+' + trailingAmount
|
1756
1769
|
request['trigger'] = trailingActivationPriceType
|
1757
|
-
if isLimitOrder or (trailingLimitAmount is not None):
|
1758
|
-
offset = self.safe_string(params, 'offset', '-')
|
1759
|
-
trailingLimitAmountString = offset + self.number_to_string(trailingLimitAmount)
|
1760
|
-
request['price'] = trailingAmountString
|
1761
|
-
request['price2'] = trailingLimitAmountString
|
1770
|
+
if isLimitOrder or (trailingLimitAmount is not None) or (trailingLimitPercent is not None):
|
1762
1771
|
request['ordertype'] = 'trailing-stop-limit'
|
1772
|
+
if trailingLimitPercent is not None:
|
1773
|
+
trailingLimitPercentString = trailingLimitPercent if (trailingLimitPercent.endswith('%')) else (self.number_to_string(trailingLimitPercent) + '%')
|
1774
|
+
request['price'] = trailingPercentString
|
1775
|
+
request['price2'] = trailingLimitPercentString
|
1776
|
+
elif trailingLimitAmount is not None:
|
1777
|
+
request['price'] = trailingAmountString
|
1778
|
+
request['price2'] = trailingLimitAmountString
|
1763
1779
|
else:
|
1764
|
-
request['price'] = trailingAmountString
|
1765
1780
|
request['ordertype'] = 'trailing-stop'
|
1781
|
+
if trailingPercent is not None:
|
1782
|
+
request['price'] = trailingPercentString
|
1783
|
+
else:
|
1784
|
+
request['price'] = trailingAmountString
|
1766
1785
|
if reduceOnly:
|
1767
1786
|
if method == 'createOrderWs':
|
1768
1787
|
request['reduce_only'] = True # ws request can't have stringified bool
|
@@ -1789,7 +1808,7 @@ class kraken(Exchange, ImplicitAPI):
|
|
1789
1808
|
request['oflags'] = extendedPostFlags
|
1790
1809
|
if (flags is not None) and not ('oflags' in request):
|
1791
1810
|
request['oflags'] = flags
|
1792
|
-
params = self.omit(params, ['timeInForce', 'reduceOnly', 'stopLossPrice', 'takeProfitPrice', 'trailingAmount', 'trailingLimitAmount', 'offset'])
|
1811
|
+
params = self.omit(params, ['timeInForce', 'reduceOnly', 'stopLossPrice', 'takeProfitPrice', 'trailingAmount', 'trailingPercent', 'trailingLimitAmount', 'trailingLimitPercent', 'offset'])
|
1793
1812
|
return [request, params]
|
1794
1813
|
|
1795
1814
|
def edit_order(self, id: str, symbol: str, type: OrderType, side: OrderSide, amount: Num = None, price: Num = None, params={}):
|
@@ -2916,11 +2935,15 @@ class kraken(Exchange, ImplicitAPI):
|
|
2916
2935
|
# urlencodeNested is used to address https://github.com/ccxt/ccxt/issues/12872
|
2917
2936
|
url += '?' + self.urlencode_nested(params)
|
2918
2937
|
elif api == 'private':
|
2938
|
+
price = self.safe_string(params, 'price')
|
2939
|
+
isTriggerPercent = False
|
2940
|
+
if price is not None:
|
2941
|
+
isTriggerPercent = True if (price.endswith('%')) else False
|
2919
2942
|
isCancelOrderBatch = (path == 'CancelOrderBatch')
|
2920
2943
|
self.check_required_credentials()
|
2921
2944
|
nonce = str(self.nonce())
|
2922
2945
|
# urlencodeNested is used to address https://github.com/ccxt/ccxt/issues/12872
|
2923
|
-
if isCancelOrderBatch:
|
2946
|
+
if isCancelOrderBatch or isTriggerPercent:
|
2924
2947
|
body = self.json(self.extend({'nonce': nonce}, params))
|
2925
2948
|
else:
|
2926
2949
|
body = self.urlencode_nested(self.extend({'nonce': nonce}, params))
|
@@ -2933,9 +2956,8 @@ class kraken(Exchange, ImplicitAPI):
|
|
2933
2956
|
headers = {
|
2934
2957
|
'API-Key': self.apiKey,
|
2935
2958
|
'API-Sign': signature,
|
2936
|
-
# 'Content-Type': 'application/x-www-form-urlencoded',
|
2937
2959
|
}
|
2938
|
-
if isCancelOrderBatch:
|
2960
|
+
if isCancelOrderBatch or isTriggerPercent:
|
2939
2961
|
headers['Content-Type'] = 'application/json'
|
2940
2962
|
else:
|
2941
2963
|
headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
ccxt/mexc.py
CHANGED
@@ -3615,23 +3615,29 @@ class mexc(Exchange, ImplicitAPI):
|
|
3615
3615
|
:param int [since]: the earliest time in ms to fetch trades for
|
3616
3616
|
:param int [limit]: the maximum number of trades structures to retrieve
|
3617
3617
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3618
|
+
:param int [params.until]: the latest time in ms to fetch trades for
|
3618
3619
|
:returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
3619
3620
|
"""
|
3620
3621
|
if symbol is None:
|
3621
3622
|
raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
|
3622
3623
|
self.load_markets()
|
3623
3624
|
market = self.market(symbol)
|
3624
|
-
marketType
|
3625
|
+
marketType: Str = None
|
3626
|
+
marketType, params = self.handle_market_type_and_params('fetchMyTrades', market, params)
|
3625
3627
|
request: dict = {
|
3626
3628
|
'symbol': market['id'],
|
3627
3629
|
}
|
3628
3630
|
trades = None
|
3629
3631
|
if marketType == 'spot':
|
3630
3632
|
if since is not None:
|
3631
|
-
request['
|
3633
|
+
request['startTime'] = since
|
3632
3634
|
if limit is not None:
|
3633
3635
|
request['limit'] = limit
|
3634
|
-
|
3636
|
+
until = self.safe_integer(params, 'until')
|
3637
|
+
if until is not None:
|
3638
|
+
params = self.omit(params, 'until')
|
3639
|
+
request['endTime'] = until
|
3640
|
+
trades = self.spotPrivateGetMyTrades(self.extend(request, params))
|
3635
3641
|
#
|
3636
3642
|
# spot
|
3637
3643
|
#
|
@@ -3661,7 +3667,7 @@ class mexc(Exchange, ImplicitAPI):
|
|
3661
3667
|
request['end_time'] = self.sum(since, self.options['maxTimeTillEnd'])
|
3662
3668
|
if limit is not None:
|
3663
3669
|
request['page_size'] = limit
|
3664
|
-
response = self.contractPrivateGetOrderListOrderDeals(self.extend(request,
|
3670
|
+
response = self.contractPrivateGetOrderListOrderDeals(self.extend(request, params))
|
3665
3671
|
#
|
3666
3672
|
# {
|
3667
3673
|
# "success": True,
|
ccxt/okx.py
CHANGED
@@ -17,6 +17,7 @@ from ccxt.base.errors import AccountSuspended
|
|
17
17
|
from ccxt.base.errors import ArgumentsRequired
|
18
18
|
from ccxt.base.errors import BadRequest
|
19
19
|
from ccxt.base.errors import BadSymbol
|
20
|
+
from ccxt.base.errors import ManualInteractionNeeded
|
20
21
|
from ccxt.base.errors import InsufficientFunds
|
21
22
|
from ccxt.base.errors import InvalidAddress
|
22
23
|
from ccxt.base.errors import InvalidOrder
|
@@ -599,6 +600,7 @@ class okx(Exchange, ImplicitAPI):
|
|
599
600
|
# General Class
|
600
601
|
'1': ExchangeError, # Operation failed
|
601
602
|
'2': ExchangeError, # Bulk operation partially succeeded
|
603
|
+
'4088': ManualInteractionNeeded, # {"code":"4088","data":[],"msg":"You can’t trade or deposit until you’ve verified your identity again. Head to Identity Verification to complete it."}
|
602
604
|
'50000': BadRequest, # Body can not be empty
|
603
605
|
'50001': OnMaintenance, # Matching engine upgrading. Please try again later
|
604
606
|
'50002': BadRequest, # Json data format error
|
ccxt/pro/__init__.py
CHANGED
ccxt/pro/deribit.py
CHANGED
@@ -23,6 +23,7 @@ class deribit(ccxt.async_support.deribit):
|
|
23
23
|
'watchBalance': True,
|
24
24
|
'watchTicker': True,
|
25
25
|
'watchTickers': True,
|
26
|
+
'watchBidsAsks': True,
|
26
27
|
'watchTrades': True,
|
27
28
|
'watchTradesForSymbols': True,
|
28
29
|
'watchMyTrades': True,
|
@@ -265,6 +266,79 @@ class deribit(ccxt.async_support.deribit):
|
|
265
266
|
self.tickers[symbol] = ticker
|
266
267
|
client.resolve(ticker, messageHash)
|
267
268
|
|
269
|
+
async def watch_bids_asks(self, symbols: Strings = None, params={}) -> Tickers:
|
270
|
+
"""
|
271
|
+
:see: https://docs.deribit.com/#quote-instrument_name
|
272
|
+
watches best bid & ask for symbols
|
273
|
+
:param str[] [symbols]: unified symbol of the market to fetch the ticker for
|
274
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
275
|
+
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
276
|
+
"""
|
277
|
+
await self.load_markets()
|
278
|
+
symbols = self.market_symbols(symbols, None, False)
|
279
|
+
url = self.urls['api']['ws']
|
280
|
+
channels = []
|
281
|
+
for i in range(0, len(symbols)):
|
282
|
+
market = self.market(symbols[i])
|
283
|
+
channels.append('quote.' + market['id'])
|
284
|
+
message: dict = {
|
285
|
+
'jsonrpc': '2.0',
|
286
|
+
'method': 'public/subscribe',
|
287
|
+
'params': {
|
288
|
+
'channels': channels,
|
289
|
+
},
|
290
|
+
'id': self.request_id(),
|
291
|
+
}
|
292
|
+
request = self.deep_extend(message, params)
|
293
|
+
newTickers = await self.watch_multiple(url, channels, request, channels, request)
|
294
|
+
if self.newUpdates:
|
295
|
+
tickers: dict = {}
|
296
|
+
tickers[newTickers['symbol']] = newTickers
|
297
|
+
return tickers
|
298
|
+
return self.filter_by_array(self.bidsasks, 'symbol', symbols)
|
299
|
+
|
300
|
+
def handle_bid_ask(self, client: Client, message):
|
301
|
+
#
|
302
|
+
# {
|
303
|
+
# "jsonrpc": "2.0",
|
304
|
+
# "method": "subscription",
|
305
|
+
# "params": {
|
306
|
+
# "channel": "quote.BTC_USDT",
|
307
|
+
# "data": {
|
308
|
+
# "best_bid_amount": 0.026,
|
309
|
+
# "best_ask_amount": 0.026,
|
310
|
+
# "best_bid_price": 63908,
|
311
|
+
# "best_ask_price": 63940,
|
312
|
+
# "instrument_name": "BTC_USDT",
|
313
|
+
# "timestamp": 1727765131750
|
314
|
+
# }
|
315
|
+
# }
|
316
|
+
# }
|
317
|
+
#
|
318
|
+
params = self.safe_dict(message, 'params', {})
|
319
|
+
data = self.safe_dict(params, 'data', {})
|
320
|
+
ticker = self.parse_ws_bid_ask(data)
|
321
|
+
symbol = ticker['symbol']
|
322
|
+
self.bidsasks[symbol] = ticker
|
323
|
+
messageHash = self.safe_string(params, 'channel')
|
324
|
+
client.resolve(ticker, messageHash)
|
325
|
+
|
326
|
+
def parse_ws_bid_ask(self, ticker, market=None):
|
327
|
+
marketId = self.safe_string(ticker, 'instrument_name')
|
328
|
+
market = self.safe_market(marketId, market)
|
329
|
+
symbol = self.safe_string(market, 'symbol')
|
330
|
+
timestamp = self.safe_integer(ticker, 'timestamp')
|
331
|
+
return self.safe_ticker({
|
332
|
+
'symbol': symbol,
|
333
|
+
'timestamp': timestamp,
|
334
|
+
'datetime': self.iso8601(timestamp),
|
335
|
+
'ask': self.safe_string(ticker, 'best_ask_price'),
|
336
|
+
'askVolume': self.safe_string(ticker, 'best_ask_amount'),
|
337
|
+
'bid': self.safe_string(ticker, 'best_bid_price'),
|
338
|
+
'bidVolume': self.safe_string(ticker, 'best_bid_amount'),
|
339
|
+
'info': ticker,
|
340
|
+
}, market)
|
341
|
+
|
268
342
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
269
343
|
"""
|
270
344
|
get the list of most recent trades for a particular symbol
|
@@ -862,6 +936,7 @@ class deribit(ccxt.async_support.deribit):
|
|
862
936
|
}
|
863
937
|
handlers: dict = {
|
864
938
|
'ticker': self.handle_ticker,
|
939
|
+
'quote': self.handle_bid_ask,
|
865
940
|
'book': self.handle_order_book,
|
866
941
|
'trades': self.handle_trades,
|
867
942
|
'chart': self.handle_ohlcv,
|
ccxt/pro/exmo.py
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
import ccxt.async_support
|
7
7
|
from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById
|
8
8
|
import hashlib
|
9
|
-
from ccxt.base.types import Balances, Int, OrderBook, Str, Ticker, Trade
|
9
|
+
from ccxt.base.types import Balances, Int, OrderBook, Str, Strings, Ticker, Tickers, Trade
|
10
10
|
from ccxt.async_support.base.ws.client import Client
|
11
11
|
from typing import List
|
12
12
|
from ccxt.base.errors import NotSupported
|
@@ -20,7 +20,7 @@ class exmo(ccxt.async_support.exmo):
|
|
20
20
|
'ws': True,
|
21
21
|
'watchBalance': True,
|
22
22
|
'watchTicker': True,
|
23
|
-
'watchTickers':
|
23
|
+
'watchTickers': True,
|
24
24
|
'watchTrades': True,
|
25
25
|
'watchMyTrades': True,
|
26
26
|
'watchOrders': False, # TODO
|
@@ -199,6 +199,7 @@ class exmo(ccxt.async_support.exmo):
|
|
199
199
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
200
200
|
"""
|
201
201
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
202
|
+
:see: https://documenter.getpostman.com/view/10287440/SzYXWKPi#fd8f47bc-8517-43c0-bb60-1d61a86d4471
|
202
203
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
203
204
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
204
205
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -218,6 +219,32 @@ class exmo(ccxt.async_support.exmo):
|
|
218
219
|
request = self.deep_extend(message, params)
|
219
220
|
return await self.watch(url, messageHash, request, messageHash, request)
|
220
221
|
|
222
|
+
async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
223
|
+
"""
|
224
|
+
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
|
225
|
+
:see: https://documenter.getpostman.com/view/10287440/SzYXWKPi#fd8f47bc-8517-43c0-bb60-1d61a86d4471
|
226
|
+
:param str[] [symbols]: unified symbol of the market to fetch the ticker for
|
227
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
228
|
+
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
229
|
+
"""
|
230
|
+
await self.load_markets()
|
231
|
+
symbols = self.market_symbols(symbols, None, False)
|
232
|
+
messageHashes = []
|
233
|
+
args = []
|
234
|
+
for i in range(0, len(symbols)):
|
235
|
+
market = self.market(symbols[i])
|
236
|
+
messageHashes.append('ticker:' + market['symbol'])
|
237
|
+
args.append('spot/ticker:' + market['id'])
|
238
|
+
url = self.urls['api']['ws']['public']
|
239
|
+
message: dict = {
|
240
|
+
'method': 'subscribe',
|
241
|
+
'topics': args,
|
242
|
+
'id': self.request_id(),
|
243
|
+
}
|
244
|
+
request = self.deep_extend(message, params)
|
245
|
+
await self.watch_multiple(url, messageHashes, request, messageHashes, request)
|
246
|
+
return self.filter_by_array(self.tickers, 'symbol', symbols)
|
247
|
+
|
221
248
|
def handle_ticker(self, client: Client, message):
|
222
249
|
#
|
223
250
|
# spot
|
ccxt/pro/okx.py
CHANGED
@@ -1813,7 +1813,7 @@ class okx(ccxt.async_support.okx):
|
|
1813
1813
|
tradeSymbols = list(symbols.keys())
|
1814
1814
|
for i in range(0, len(tradeSymbols)):
|
1815
1815
|
symbolMessageHash = messageHash + '::' + tradeSymbols[i]
|
1816
|
-
client.resolve(self.
|
1816
|
+
client.resolve(self.myTrades, symbolMessageHash)
|
1817
1817
|
|
1818
1818
|
def request_id(self):
|
1819
1819
|
ts = str(self.milliseconds())
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 4.4.
|
3
|
+
Version: 4.4.11
|
4
4
|
Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
|
5
5
|
Home-page: https://ccxt.com
|
6
6
|
Author: Igor Kroitor
|
@@ -272,13 +272,13 @@ console.log(version, Object.keys(exchanges));
|
|
272
272
|
|
273
273
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
274
274
|
|
275
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.
|
276
|
-
* unpkg: https://unpkg.com/ccxt@4.4.
|
275
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.11/dist/ccxt.browser.min.js
|
276
|
+
* unpkg: https://unpkg.com/ccxt@4.4.11/dist/ccxt.browser.min.js
|
277
277
|
|
278
278
|
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.
|
279
279
|
|
280
280
|
```HTML
|
281
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.
|
281
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.11/dist/ccxt.browser.min.js"></script>
|
282
282
|
```
|
283
283
|
|
284
284
|
Creates a global `ccxt` object:
|
@@ -1,10 +1,10 @@
|
|
1
|
-
ccxt/__init__.py,sha256=
|
1
|
+
ccxt/__init__.py,sha256=Gax7ltl-abmr5WE-fBwP-o4TICuEFP9YFkoyKoOuvZk,16486
|
2
2
|
ccxt/ace.py,sha256=3KFlbRm6N9hXsKUsgZbQCFPZT5WGLm4HOjR19Q3uPts,42419
|
3
3
|
ccxt/alpaca.py,sha256=nVQJ8vG4JrjEvMlu_nPoyR2lBq41j9Z2smPq95nDhng,47504
|
4
4
|
ccxt/ascendex.py,sha256=LIC9mnNkXzkxUWJDsgyDkL4gQUkzMHq5peHlD8EBKPw,151624
|
5
5
|
ccxt/bequant.py,sha256=RBiAmaTbL35DgiV3Hl6uchLUd78V0z1T9riTlNsrpdc,1174
|
6
6
|
ccxt/bigone.py,sha256=Gu9bXaa4rVRRVZEkUEKDWEUZ2Hjly22C6jrbseGv-r8,90980
|
7
|
-
ccxt/binance.py,sha256=
|
7
|
+
ccxt/binance.py,sha256=PWeiyyXaUij99E96WS3-47uSBYmibyRzskorlS4OlAQ,647761
|
8
8
|
ccxt/binancecoinm.py,sha256=arFnEh8mErSyi23eVPWE4iwoT7PWQyxGGVJCKCy6UJY,1702
|
9
9
|
ccxt/binanceus.py,sha256=HRsk0fIoi8AAFdzRCUMkkXUGLqBrf0guUOfUxupHFeY,9202
|
10
10
|
ccxt/binanceusdm.py,sha256=bAPcJj5HLxoCdPolriM8sJpoTBwbV78vBTbKRmWhNP4,2632
|
@@ -17,7 +17,7 @@ ccxt/bitcoincom.py,sha256=PyWIl4nC4jp5Uba2lI1At0N_hhNyWD0DoZC_MSyL_s4,502
|
|
17
17
|
ccxt/bitfinex.py,sha256=w3t0YAwtOfCwLy5_w2wTq90qkTgUUyn0sqdO22zD-9U,73527
|
18
18
|
ccxt/bitfinex2.py,sha256=4374ASOWdG6FMPEQAliCVnGX1w1ZGQrYZJHg-pb0wPs,160678
|
19
19
|
ccxt/bitflyer.py,sha256=nh1EDzO66S-Ps9xBy-U4CErt6Q06E77wbWF_aTRw6RI,41663
|
20
|
-
ccxt/bitget.py,sha256=
|
20
|
+
ccxt/bitget.py,sha256=CAecOpBVLlorL4I1S1iVfcNN57BZo8Od01FgtcLiQ94,424354
|
21
21
|
ccxt/bithumb.py,sha256=8oTnFWi8Ai9fnm5FPXvNmaUAVJEOqYi-18VC23cWmXY,47935
|
22
22
|
ccxt/bitmart.py,sha256=xhBbJO2vxoKdMA4MKTQfmtJ4j8DRsstCg3P2VaTyDTk,221980
|
23
23
|
ccxt/bitmex.py,sha256=7ipuNwCEqU8KduLJIvhxxF4GLNmtP6SOsVHBnRcHH74,127309
|
@@ -63,14 +63,14 @@ ccxt/hashkey.py,sha256=bJAXP1YkNOB92oT0WUVpygn0eKREvW43wu7ntdN9yhI,191991
|
|
63
63
|
ccxt/hitbtc.py,sha256=dY9ghNwp76I9_xhoCIH2W1jMahq7FYn5rWRDPbPnU88,153572
|
64
64
|
ccxt/hitbtc3.py,sha256=qRAr4Zvaju9IQWRZUohdoN7xRnzIMPq8AyYb3gPv-Is,455
|
65
65
|
ccxt/hollaex.py,sha256=2KIbenZ3vcBDN_rs2CxG5_foKLaYxJd73vVV7M8n_8E,76140
|
66
|
-
ccxt/htx.py,sha256=
|
66
|
+
ccxt/htx.py,sha256=On5IPppcM_KQ-KdMj2K62QKyu5FJEezLF4YZUo_HxbM,430944
|
67
67
|
ccxt/huobi.py,sha256=4vaG7IRN7fyjaJ_ac6S-njlHOfSEN5de7aq0noznxYw,438
|
68
68
|
ccxt/huobijp.py,sha256=m9rYCCApGDtpbiqCK6Gw4GDd5EskEmho4xSemGbY1kY,89852
|
69
69
|
ccxt/hyperliquid.py,sha256=QTly1QFJoFse-ioADxf7KRQWCvK-Ksiopemg0D9y59k,122981
|
70
70
|
ccxt/idex.py,sha256=P2jNsxiwIlMgrfPKbtmjLJQrzFcWp_TjgJaLq793oco,73255
|
71
71
|
ccxt/independentreserve.py,sha256=k2T7rA1zcvlHC8QpmkKYO7ik44SayiElaSpW0EsTevA,37847
|
72
72
|
ccxt/indodax.py,sha256=o5YLVpQzm1LFWPAsvUOnvJxeBEWtaB_jQCvCOmXEw1Y,54758
|
73
|
-
ccxt/kraken.py,sha256=
|
73
|
+
ccxt/kraken.py,sha256=XbdltZVqZqZuLWxCxNfSPj6D_68aGzJxnFujNXvSPwc,135729
|
74
74
|
ccxt/krakenfutures.py,sha256=3hMs_WJWkt5numbsdT4ip8AaY5SLLeRQe98c4N_sJrU,119709
|
75
75
|
ccxt/kucoin.py,sha256=kD33ixY0cJKSrkAyDFhcy4Qt2nbTrjh-fBGHTwygwf0,229853
|
76
76
|
ccxt/kucoinfutures.py,sha256=ACYvHVWNoidt5Y9taKnBLt1qs1iui7hvpkFn46WvvkE,132560
|
@@ -80,12 +80,12 @@ ccxt/lbank.py,sha256=Glx9CN_jdQMiUngJLYioxzwDfgFTdusdOfK53_Bg6A8,116045
|
|
80
80
|
ccxt/luno.py,sha256=P3cZ_CnVyjMjDFn5e7jaev-pqs_rgmWQTsiJThRtffE,46353
|
81
81
|
ccxt/lykke.py,sha256=gmjb8bQsPztMtoZsHxWGe_T2381HLb1ar1S667UZzIE,51411
|
82
82
|
ccxt/mercado.py,sha256=LWCh89IzXu-yhPGqhkdPW6wqOqfO8nmbSQhAyYiSH8U,35710
|
83
|
-
ccxt/mexc.py,sha256=
|
83
|
+
ccxt/mexc.py,sha256=rxYgPUGCEM7jrFmE0u4f2SjBSLxxQ2WgmtIbPxr1eJI,249595
|
84
84
|
ccxt/ndax.py,sha256=m9MhE8i8JmaSf7Lc-I_CcvUpQ5VNTRcfYZLrFEwk3UI,109097
|
85
85
|
ccxt/novadax.py,sha256=_xFkuZ72vHhpJb1N9h_MQHRD05GDWlqUeLQQcOp43BM,64436
|
86
86
|
ccxt/oceanex.py,sha256=jBXRD1hZk_wa9PXVp9feistAO_jK7UvzG5zznhPQgH4,41120
|
87
87
|
ccxt/okcoin.py,sha256=nKWsJTRprIODYHUTIoXRz6eANM2zdRPF7BHY86ExEyQ,151126
|
88
|
-
ccxt/okx.py,sha256=
|
88
|
+
ccxt/okx.py,sha256=SZSb6orS2-b1i8-PEEUFfJDxhu-_xgz6xxLaZH6jaxM,380566
|
89
89
|
ccxt/onetrading.py,sha256=evWWr4z7-HglV2ma2z-R34_JYJqlr6LQT0rV_OyWKGs,88375
|
90
90
|
ccxt/oxfun.py,sha256=iHy_pywYS8t-cbmh-AkhGc8Kfp9aMgawVr0VloKW_ik,124760
|
91
91
|
ccxt/p2b.py,sha256=iPzHv663K8F1F0uTWEYpfQBcaqowY8MQ5tZt2ZNpoQE,54290
|
@@ -115,10 +115,10 @@ ccxt/abstract/alpaca.py,sha256=vgzqnRTvEnAbLYgfDzGpmVUZxRLWC8BWA6nQ16m-xXY,10382
|
|
115
115
|
ccxt/abstract/ascendex.py,sha256=5A8Zgq77jsdHlEzlTW_2nDybUUVfNVVOu6BgY3TWqRM,11394
|
116
116
|
ccxt/abstract/bequant.py,sha256=OTBtNu3DQeAqAC_Lbi0NePUs-ZQQllcLrVDI2G04nwQ,15601
|
117
117
|
ccxt/abstract/bigone.py,sha256=ChHXrnz1zHqLHJn162SxjfgbO8ocQppy7lXWGsHEtcI,4887
|
118
|
-
ccxt/abstract/binance.py,sha256=
|
119
|
-
ccxt/abstract/binancecoinm.py,sha256=
|
120
|
-
ccxt/abstract/binanceus.py,sha256=
|
121
|
-
ccxt/abstract/binanceusdm.py,sha256=
|
118
|
+
ccxt/abstract/binance.py,sha256=xPATItq927O8iMFqAhslAajMGxWlfmpWbHOQWDiFmCU,93951
|
119
|
+
ccxt/abstract/binancecoinm.py,sha256=xPATItq927O8iMFqAhslAajMGxWlfmpWbHOQWDiFmCU,93951
|
120
|
+
ccxt/abstract/binanceus.py,sha256=e7M1Py8HI1BWX5PSxz35WTsmEVPS5ZNI5TyOdYEYAlQ,100613
|
121
|
+
ccxt/abstract/binanceusdm.py,sha256=xPATItq927O8iMFqAhslAajMGxWlfmpWbHOQWDiFmCU,93951
|
122
122
|
ccxt/abstract/bingx.py,sha256=Rb93j2sCYAi0egAE4TAAOG7XuC5XdHQaGQZC9V-meqQ,20662
|
123
123
|
ccxt/abstract/bit2c.py,sha256=np6i756kSB5dO3Nj6POLKxkWkpYcsGg-4LS8BwPrizI,2830
|
124
124
|
ccxt/abstract/bitbank.py,sha256=hrHsD7Uvtyy2o2lzCHau3-eNq16pnZ3-YDQ6Tq_sxYU,2735
|
@@ -218,13 +218,13 @@ ccxt/abstract/xt.py,sha256=JkWvsic3L2O968BCr9H5Wd5NIbRE9aTT2A-9WbAtl0c,27146
|
|
218
218
|
ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
|
219
219
|
ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
|
220
220
|
ccxt/abstract/zonda.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
|
221
|
-
ccxt/async_support/__init__.py,sha256=
|
221
|
+
ccxt/async_support/__init__.py,sha256=14BDk1kiL1YsotKP9oLDSiWj8nVvmywySk4775RgbsA,16289
|
222
222
|
ccxt/async_support/ace.py,sha256=ucCkKaWRkILAIK9g4iEi1Q_-zmn0V89-rX8Al4WdK8s,42643
|
223
223
|
ccxt/async_support/alpaca.py,sha256=HxonsP_MzbE7Z9r6hZ1rgmf_jPcP4H7H3z1YQgCv4qc,47716
|
224
224
|
ccxt/async_support/ascendex.py,sha256=rSsbtR8BKtun-QFKduQ4rHr_h4rKqU0eB_-jYdWeWuM,152437
|
225
225
|
ccxt/async_support/bequant.py,sha256=1hTwHovo1bW1XTIc8ZKjvJ-Xg6LfmpGdzT7TepykaVM,1188
|
226
226
|
ccxt/async_support/bigone.py,sha256=0Ljt-JAt4i4Hvl7Jxd-MOggzqC0ra1v9_NlTgCbtptM,91434
|
227
|
-
ccxt/async_support/binance.py,sha256
|
227
|
+
ccxt/async_support/binance.py,sha256=-jntdp26Spw4vW0tWGhFb5mLQ8VaCGuWaOAqQHtOxmY,650518
|
228
228
|
ccxt/async_support/binancecoinm.py,sha256=yeE73xG5UXD_X3VPul6DMGnV_mgJfWYskpas1BUDdCU,1740
|
229
229
|
ccxt/async_support/binanceus.py,sha256=ZkGgQGB0bWYZTz7PqBCgw22yyOZbvd7GuJAJzzgDTCA,9216
|
230
230
|
ccxt/async_support/binanceusdm.py,sha256=8ugRkx7vyYmn67wdkEEf2f-DFMGAoC4t09usKlPVNyw,2670
|
@@ -237,7 +237,7 @@ ccxt/async_support/bitcoincom.py,sha256=RiqwhK3RfxQ_PXTa860fphDCvwA8dalL-_rXlK85
|
|
237
237
|
ccxt/async_support/bitfinex.py,sha256=pzyfQzUSxFYd6Ted0hNLgL545S8rFCrsoJc9Odk3zoo,73993
|
238
238
|
ccxt/async_support/bitfinex2.py,sha256=Dn20G_rQ2Z5TdDWjjg45MiNrSuSRR8JowZ1X7Th7Nh0,161420
|
239
239
|
ccxt/async_support/bitflyer.py,sha256=DTyHe4QBOED0xUEYoDfpGFL0sULp_3CxTXCWfDPbGbE,41971
|
240
|
-
ccxt/async_support/bitget.py,sha256=
|
240
|
+
ccxt/async_support/bitget.py,sha256=zcOkulMNUCYvt5SzJc2C1ThxhbEaD56bIx1ryqKn2zw,425966
|
241
241
|
ccxt/async_support/bithumb.py,sha256=Q0Cx_cRKZRfdpBAhQyINm63Qw3M6BRYQRiF0UqYzfis,48214
|
242
242
|
ccxt/async_support/bitmart.py,sha256=DK5e-GZvF66oeJrwhclxlumdW9e-FUxI5PUZ0H73qxs,222972
|
243
243
|
ccxt/async_support/bitmex.py,sha256=Kd_Mw3VuNB1PGxhpz3my295tzkAVQlT_GZVadTHR6nY,127887
|
@@ -283,14 +283,14 @@ ccxt/async_support/hashkey.py,sha256=xiS8FXemxDKVKQNJBtyOYG5-QaizyyGR8-I1CusmFcY
|
|
283
283
|
ccxt/async_support/hitbtc.py,sha256=_CPsYQhE-1wDAOFGi4Xq9OxTqMuZ4ABwXbpSuOvMuNg,154618
|
284
284
|
ccxt/async_support/hitbtc3.py,sha256=dmSYoD2o4av_zzbZI8HNIoj8BWxA7QozsVpy8JaOXzU,469
|
285
285
|
ccxt/async_support/hollaex.py,sha256=msUnnbWLNeCxFW77BnfLoFWBdvQIDwV7Rtbi9TA4TYY,76574
|
286
|
-
ccxt/async_support/htx.py,sha256=
|
286
|
+
ccxt/async_support/htx.py,sha256=RpgDpDJ5LRmeBQliDvJgjvJ1VVtRZkO85DvMiWwuwLU,433336
|
287
287
|
ccxt/async_support/huobi.py,sha256=fup0j6wQ1khAtfbb1H4CSyJAOzhxuoHMmrM6sgTuhr8,452
|
288
288
|
ccxt/async_support/huobijp.py,sha256=OeEHn0GXQ56YGeUM21zwRqsEm8d2LD_SDspBsQMlds4,90352
|
289
289
|
ccxt/async_support/hyperliquid.py,sha256=sjt1Z2dv2YCWdhSfOmjYLmxYhcp2zd7M-_3Wh1S4lWE,123645
|
290
290
|
ccxt/async_support/idex.py,sha256=UcAvdMc2CP_6E8lET4rmQiIP-RaUfZHSo6pQeA17v-g,73731
|
291
291
|
ccxt/async_support/independentreserve.py,sha256=-W-SMPkJwY9FMN5I6l5eL8cPwC0_UuqmfU5yMmyJoiw,38145
|
292
292
|
ccxt/async_support/indodax.py,sha256=-dcr5VdpSkcLgy2KUlumm0NhGs4_mNstysIlunhF2-4,55066
|
293
|
-
ccxt/async_support/kraken.py,sha256=
|
293
|
+
ccxt/async_support/kraken.py,sha256=rAqVk8LnAqlbUVCPelyUOjmreiCsfKh5lfwDR00WPVU,136385
|
294
294
|
ccxt/async_support/krakenfutures.py,sha256=qtXSy52rlCa8LeqrqFWkiPvO7Og-nCoqXJlL3ZDph5A,120197
|
295
295
|
ccxt/async_support/kucoin.py,sha256=5Tf9244VECUmOvckxH-_6ug1_i-SJimUo_LUv1XnBEc,230996
|
296
296
|
ccxt/async_support/kucoinfutures.py,sha256=KYqgQcDQMaOEHHKA_XChoF4V6uLTHv5Qkdc44HjJwy4,133288
|
@@ -300,12 +300,12 @@ ccxt/async_support/lbank.py,sha256=MeqPjECSmsplCtatu7Ns6sHRwzAGP_6S5MwB2BomnXk,1
|
|
300
300
|
ccxt/async_support/luno.py,sha256=WRQ5uH3Wr1HHZa9ZtcWCYdrmz-Y8proS5XOGZpBtiZo,46691
|
301
301
|
ccxt/async_support/lykke.py,sha256=JW9HaTjFCQJzk1tbczjMGKie0BkKdZF2Kmm2Hg69qQE,51725
|
302
302
|
ccxt/async_support/mercado.py,sha256=mb7ULqvEr9PQ7jBOpQxiufgYzwTeAfr0G2NZmrUeUgs,35952
|
303
|
-
ccxt/async_support/mexc.py,sha256=
|
303
|
+
ccxt/async_support/mexc.py,sha256=Ot2-4RSf1ahqd0gEBtbxdRgiqaadi_v-uJYMuFt1jsY,250847
|
304
304
|
ccxt/async_support/ndax.py,sha256=IX7cFNjCELJIImof_jVsNzihXjCOmMyqRnlFHnzOq_w,109621
|
305
305
|
ccxt/async_support/novadax.py,sha256=YNKUM1CGFK7lpBwbxSSL1IAEJCRVsNxeITkwtw6VWCM,64804
|
306
306
|
ccxt/async_support/oceanex.py,sha256=nU_3t_nXz4WP0k3m5cHL3i67REZMpFSgtboeKPrwY-c,41458
|
307
307
|
ccxt/async_support/okcoin.py,sha256=TV0xooV4DIw1M8DrMNQBsDv4fhSTEp7Xtb5WK-F9bvc,151650
|
308
|
-
ccxt/async_support/okx.py,sha256=
|
308
|
+
ccxt/async_support/okx.py,sha256=W7oaFg-Uz6RcQAyrJtapwrLMgXnWkpg9BETs5GmMqsE,382153
|
309
309
|
ccxt/async_support/onetrading.py,sha256=cZSvu7ZIavao-bqv1CgQatPfsrfXDgCt2UfxMtYsOMM,88827
|
310
310
|
ccxt/async_support/oxfun.py,sha256=dwBuBi8-JFyU4IoNQCtq73zoiU_i6CK4vhEi2YT02Dc,125304
|
311
311
|
ccxt/async_support/p2b.py,sha256=VKUX8u7gtHkKDwBjAyskScm2FEs6xxDuKLXE-jSHXwY,54532
|
@@ -330,7 +330,7 @@ ccxt/async_support/yobit.py,sha256=GQhvYrsGHQrVdTrNHQxx9isEGqUABexlllzao9HL3f8,5
|
|
330
330
|
ccxt/async_support/zaif.py,sha256=-ZTr8M2JaIRCL90VrbCDXBMAsZwbiwsFChSQ2rWODuQ,29044
|
331
331
|
ccxt/async_support/zonda.py,sha256=njWK4t42n7BowCvc3j5WKwCxEDc2Y8vi0d-yp296-q0,81883
|
332
332
|
ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
|
333
|
-
ccxt/async_support/base/exchange.py,sha256=
|
333
|
+
ccxt/async_support/base/exchange.py,sha256=2f2lzJRVhrxhV4BqceHQOZbRmAj824zXkL58h2Q-R8A,111720
|
334
334
|
ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
|
335
335
|
ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
|
336
336
|
ccxt/async_support/base/ws/aiohttp_client.py,sha256=5IEiT0elWI9a7Vr-KV0jgmlbpLJWBzIlrLaCkTKGaqY,5752
|
@@ -344,10 +344,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9produGjmB
|
|
344
344
|
ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
|
345
345
|
ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
|
346
346
|
ccxt/base/errors.py,sha256=Pad-6ugvGUwhoYuKUliX-N7FTrcnKCQGFjsaq2tMn0I,4610
|
347
|
-
ccxt/base/exchange.py,sha256=
|
347
|
+
ccxt/base/exchange.py,sha256=JxtlI0_lmff261S-1D6bIVzovfRBeuNT48xVnP_vCdg,299018
|
348
348
|
ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
|
349
349
|
ccxt/base/types.py,sha256=M9-wX1o2UqZxMMuLZgTGuQ8J6LpiGQsen17QhKwDc0k,9634
|
350
|
-
ccxt/pro/__init__.py,sha256=
|
350
|
+
ccxt/pro/__init__.py,sha256=RqYWiGMbyRUvF4lY3Hp0p4FcemFyS8Aosg_gzWEI5iw,7710
|
351
351
|
ccxt/pro/alpaca.py,sha256=xh1yg1Ok-Zh_Mfx-MBjNrfJDs6MUU0exFfEj3GuQPC4,27631
|
352
352
|
ccxt/pro/ascendex.py,sha256=QueLgISoIxgGSOta2W7En4pwAsEXbTP5q5ef4UjpTQQ,37524
|
353
353
|
ccxt/pro/bequant.py,sha256=33OEUWBi4D9-2w8CmkwN3aF1qS-AlLqX3pxrWwNbXPY,1552
|
@@ -380,8 +380,8 @@ ccxt/pro/coinex.py,sha256=oONeBMtz9ylneI3vxrbf6Wt00JGey2nV1Q64O9FRHbU,56380
|
|
380
380
|
ccxt/pro/coinone.py,sha256=XxJeMDbg3tSDoC3H8p9y7MB_yBR3ZN6PiQyEGaziAZs,15734
|
381
381
|
ccxt/pro/cryptocom.py,sha256=kykIsupDkYAxQ2Eb9z4K3qa2QBayaanJR5RITiHA4zw,60174
|
382
382
|
ccxt/pro/currencycom.py,sha256=8B9pSuPyO0ROCWOROUFoNbJBeOU3bRmlKXSj1CBMkPI,22459
|
383
|
-
ccxt/pro/deribit.py,sha256=
|
384
|
-
ccxt/pro/exmo.py,sha256=
|
383
|
+
ccxt/pro/deribit.py,sha256=wWvy6Anwqm9F_h3nyEnX8UV4mRG2GJXH-G0Boz1KBlw,46070
|
384
|
+
ccxt/pro/exmo.py,sha256=ExNxds38W0TKiwQL5FLxFgTLRaz7QY0fi2yrLOiZ8FE,26025
|
385
385
|
ccxt/pro/gate.py,sha256=GulP9oRrMfiP2qMXwdq4NNwPApDmBk1GNzcRyGFkA14,86198
|
386
386
|
ccxt/pro/gateio.py,sha256=_uBWXYQbmsHRivKnZOJDmxJ9tWLO_0HAxmOjAEUy9nE,391
|
387
387
|
ccxt/pro/gemini.py,sha256=8B8dbYPbKbZb3lzhlt8-x0oybQxOHr8Q4R_f5edLwbU,36899
|
@@ -403,7 +403,7 @@ ccxt/pro/luno.py,sha256=ThXkXNrLvp9BW8XXxRcbpRaw9QcLCS2f2tCqbF6qpEU,12384
|
|
403
403
|
ccxt/pro/mexc.py,sha256=kVw1d5lOJlvU9lyo3545EM3j1sck3Gr5A3qznBH04Dk,50361
|
404
404
|
ccxt/pro/ndax.py,sha256=De7ohX5Dp2PSfFmt50mGH9cB9Me53Wb-B8S6N4_Flvk,22979
|
405
405
|
ccxt/pro/okcoin.py,sha256=h8niyeq67h-oBmxiMMy2JdNgOI0fBQuEC3QdUW4-NFs,31048
|
406
|
-
ccxt/pro/okx.py,sha256=
|
406
|
+
ccxt/pro/okx.py,sha256=qDpd2gicssg6LnVdmZsBrwU_cogrMwGQ2gZqa2JrOwA,101895
|
407
407
|
ccxt/pro/onetrading.py,sha256=2LP1LvwbQrwsyXDPRU6_ez4fWR3htKFuzC-4CenHzhU,54817
|
408
408
|
ccxt/pro/oxfun.py,sha256=-O1xdbfnF5Q3lC16vxc4J2NnYMhAGbafiOZTn0yEsVE,46741
|
409
409
|
ccxt/pro/p2b.py,sha256=S-gzeaSOW_WBZdsllE75RuxCi9KGnJ25trlCt1OG0Z8,20919
|
@@ -650,8 +650,8 @@ ccxt/test/tests_async.py,sha256=Hfdxrjw3nP7lGyjYs35ZgTBM7pF6UIJrkZWz-ycceRw,8457
|
|
650
650
|
ccxt/test/tests_helpers.py,sha256=xhOILoZ_x3RSfQjtKt6AQlkp9DkOtpTQe8GAUUZoM6s,10069
|
651
651
|
ccxt/test/tests_init.py,sha256=eVwwUHujX9t4rjgo4TqEeg7DDhR1Hb_e2SJN8NVGyl0,998
|
652
652
|
ccxt/test/tests_sync.py,sha256=tQNiZZi3ulprLY513aSadwieBCuNyzyRLE8nSTZIUvw,83641
|
653
|
-
ccxt-4.4.
|
654
|
-
ccxt-4.4.
|
655
|
-
ccxt-4.4.
|
656
|
-
ccxt-4.4.
|
657
|
-
ccxt-4.4.
|
653
|
+
ccxt-4.4.11.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
|
654
|
+
ccxt-4.4.11.dist-info/METADATA,sha256=TVO9IKasFQ23Jim4DhfCIJtNJzvEcemjYwW_S5k3rFY,114994
|
655
|
+
ccxt-4.4.11.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
|
656
|
+
ccxt-4.4.11.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
|
657
|
+
ccxt-4.4.11.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|