ccxt 4.3.53__py2.py3-none-any.whl → 4.3.54__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/async_support/__init__.py +1 -1
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/bingx.py +1 -1
- ccxt/async_support/phemex.py +28 -1
- ccxt/async_support/poloniex.py +2 -1
- ccxt/async_support/woo.py +26 -18
- ccxt/base/exchange.py +1 -1
- ccxt/bingx.py +1 -1
- ccxt/phemex.py +28 -1
- ccxt/poloniex.py +2 -1
- ccxt/pro/__init__.py +1 -1
- ccxt/pro/binance.py +1 -1
- ccxt/pro/bybit.py +18 -12
- ccxt/pro/kucoin.py +63 -26
- ccxt/pro/vertex.py +1 -1
- ccxt/woo.py +26 -18
- {ccxt-4.3.53.dist-info → ccxt-4.3.54.dist-info}/METADATA +4 -4
- {ccxt-4.3.53.dist-info → ccxt-4.3.54.dist-info}/RECORD +22 -22
- {ccxt-4.3.53.dist-info → ccxt-4.3.54.dist-info}/LICENSE.txt +0 -0
- {ccxt-4.3.53.dist-info → ccxt-4.3.54.dist-info}/WHEEL +0 -0
- {ccxt-4.3.53.dist-info → ccxt-4.3.54.dist-info}/top_level.txt +0 -0
ccxt/__init__.py
CHANGED
ccxt/async_support/__init__.py
CHANGED
ccxt/async_support/bingx.py
CHANGED
@@ -704,7 +704,7 @@ class bingx(Exchange, ImplicitAPI):
|
|
704
704
|
'limits': {
|
705
705
|
'leverage': {
|
706
706
|
'min': None,
|
707
|
-
'max':
|
707
|
+
'max': None,
|
708
708
|
},
|
709
709
|
'amount': {
|
710
710
|
'min': self.safe_number_2(market, 'minQty', 'tradeMinQuantity'),
|
ccxt/async_support/phemex.py
CHANGED
@@ -2763,11 +2763,38 @@ class phemex(Exchange, ImplicitAPI):
|
|
2763
2763
|
response = None
|
2764
2764
|
if market['settle'] == 'USDT':
|
2765
2765
|
response = await self.privateDeleteGOrdersAll(self.extend(request, params))
|
2766
|
+
#
|
2767
|
+
# {
|
2768
|
+
# code: '0',
|
2769
|
+
# msg: '',
|
2770
|
+
# data: '1'
|
2771
|
+
# }
|
2772
|
+
#
|
2766
2773
|
elif market['swap']:
|
2767
2774
|
response = await self.privateDeleteOrdersAll(self.extend(request, params))
|
2775
|
+
#
|
2776
|
+
# {
|
2777
|
+
# code: '0',
|
2778
|
+
# msg: '',
|
2779
|
+
# data: '1'
|
2780
|
+
# }
|
2781
|
+
#
|
2768
2782
|
else:
|
2769
2783
|
response = await self.privateDeleteSpotOrdersAll(self.extend(request, params))
|
2770
|
-
|
2784
|
+
#
|
2785
|
+
# {
|
2786
|
+
# code: '0',
|
2787
|
+
# msg: '',
|
2788
|
+
# data: {
|
2789
|
+
# total: '1'
|
2790
|
+
# }
|
2791
|
+
# }
|
2792
|
+
#
|
2793
|
+
return [
|
2794
|
+
self.safe_order({
|
2795
|
+
'info': response,
|
2796
|
+
}),
|
2797
|
+
]
|
2771
2798
|
|
2772
2799
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
2773
2800
|
"""
|
ccxt/async_support/poloniex.py
CHANGED
ccxt/async_support/woo.py
CHANGED
@@ -52,7 +52,7 @@ class woo(Exchange, ImplicitAPI):
|
|
52
52
|
'createMarketBuyOrderWithCost': True,
|
53
53
|
'createMarketOrder': False,
|
54
54
|
'createMarketOrderWithCost': False,
|
55
|
-
'createMarketSellOrderWithCost':
|
55
|
+
'createMarketSellOrderWithCost': True,
|
56
56
|
'createOrder': True,
|
57
57
|
'createOrderWithTakeProfitAndStopLoss': True,
|
58
58
|
'createReduceOnlyOrder': True,
|
@@ -832,8 +832,22 @@ class woo(Exchange, ImplicitAPI):
|
|
832
832
|
market = self.market(symbol)
|
833
833
|
if not market['spot']:
|
834
834
|
raise NotSupported(self.id + ' createMarketBuyOrderWithCost() supports spot orders only')
|
835
|
-
|
836
|
-
|
835
|
+
return await self.create_order(symbol, 'market', 'buy', cost, 1, params)
|
836
|
+
|
837
|
+
async def create_market_sell_order_with_cost(self, symbol: str, cost: float, params={}):
|
838
|
+
"""
|
839
|
+
create a market sell order by providing the symbol and cost
|
840
|
+
:see: https://docs.woo.org/#send-order
|
841
|
+
:param str symbol: unified symbol of the market to create an order in
|
842
|
+
:param float cost: how much you want to trade in units of the quote currency
|
843
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
844
|
+
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
845
|
+
"""
|
846
|
+
await self.load_markets()
|
847
|
+
market = self.market(symbol)
|
848
|
+
if not market['spot']:
|
849
|
+
raise NotSupported(self.id + ' createMarketSellOrderWithCost() supports spot orders only')
|
850
|
+
return await self.create_order(symbol, 'market', 'sell', cost, 1, params)
|
837
851
|
|
838
852
|
async def create_trailing_amount_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, trailingAmount=None, trailingTriggerPrice=None, params={}) -> Order:
|
839
853
|
"""
|
@@ -941,28 +955,22 @@ class woo(Exchange, ImplicitAPI):
|
|
941
955
|
request['order_type'] = 'IOC'
|
942
956
|
if reduceOnly:
|
943
957
|
request[reduceOnlyKey] = reduceOnly
|
944
|
-
if price is not None:
|
958
|
+
if not isMarket and price is not None:
|
945
959
|
request[priceKey] = self.price_to_precision(symbol, price)
|
946
960
|
if isMarket and not isStop:
|
947
961
|
# for market buy it requires the amount of quote currency to spend
|
948
|
-
|
962
|
+
cost = self.safe_string_2(params, 'cost', 'order_amount')
|
963
|
+
params = self.omit(params, ['cost', 'order_amount'])
|
964
|
+
isPriceProvided = price is not None
|
965
|
+
if market['spot'] and (isPriceProvided or (cost is not None)):
|
949
966
|
quoteAmount = None
|
950
|
-
createMarketBuyOrderRequiresPrice = True
|
951
|
-
createMarketBuyOrderRequiresPrice, params = self.handle_option_and_params(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', True)
|
952
|
-
cost = self.safe_number_2(params, 'cost', 'order_amount')
|
953
|
-
params = self.omit(params, ['cost', 'order_amount'])
|
954
967
|
if cost is not None:
|
955
968
|
quoteAmount = self.cost_to_precision(symbol, cost)
|
956
|
-
elif createMarketBuyOrderRequiresPrice:
|
957
|
-
if price is None:
|
958
|
-
raise InvalidOrder(self.id + ' createOrder() requires the price argument for market buy orders to calculate the total cost to spend(amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to False and pass the cost to spend(quote quantity) in the amount argument')
|
959
|
-
else:
|
960
|
-
amountString = self.number_to_string(amount)
|
961
|
-
priceString = self.number_to_string(price)
|
962
|
-
costRequest = Precise.string_mul(amountString, priceString)
|
963
|
-
quoteAmount = self.cost_to_precision(symbol, costRequest)
|
964
969
|
else:
|
965
|
-
|
970
|
+
amountString = self.number_to_string(amount)
|
971
|
+
priceString = self.number_to_string(price)
|
972
|
+
costRequest = Precise.string_mul(amountString, priceString)
|
973
|
+
quoteAmount = self.cost_to_precision(symbol, costRequest)
|
966
974
|
request['order_amount'] = quoteAmount
|
967
975
|
else:
|
968
976
|
request['order_quantity'] = self.amount_to_precision(symbol, amount)
|
ccxt/base/exchange.py
CHANGED
ccxt/bingx.py
CHANGED
@@ -703,7 +703,7 @@ class bingx(Exchange, ImplicitAPI):
|
|
703
703
|
'limits': {
|
704
704
|
'leverage': {
|
705
705
|
'min': None,
|
706
|
-
'max':
|
706
|
+
'max': None,
|
707
707
|
},
|
708
708
|
'amount': {
|
709
709
|
'min': self.safe_number_2(market, 'minQty', 'tradeMinQuantity'),
|
ccxt/phemex.py
CHANGED
@@ -2763,11 +2763,38 @@ class phemex(Exchange, ImplicitAPI):
|
|
2763
2763
|
response = None
|
2764
2764
|
if market['settle'] == 'USDT':
|
2765
2765
|
response = self.privateDeleteGOrdersAll(self.extend(request, params))
|
2766
|
+
#
|
2767
|
+
# {
|
2768
|
+
# code: '0',
|
2769
|
+
# msg: '',
|
2770
|
+
# data: '1'
|
2771
|
+
# }
|
2772
|
+
#
|
2766
2773
|
elif market['swap']:
|
2767
2774
|
response = self.privateDeleteOrdersAll(self.extend(request, params))
|
2775
|
+
#
|
2776
|
+
# {
|
2777
|
+
# code: '0',
|
2778
|
+
# msg: '',
|
2779
|
+
# data: '1'
|
2780
|
+
# }
|
2781
|
+
#
|
2768
2782
|
else:
|
2769
2783
|
response = self.privateDeleteSpotOrdersAll(self.extend(request, params))
|
2770
|
-
|
2784
|
+
#
|
2785
|
+
# {
|
2786
|
+
# code: '0',
|
2787
|
+
# msg: '',
|
2788
|
+
# data: {
|
2789
|
+
# total: '1'
|
2790
|
+
# }
|
2791
|
+
# }
|
2792
|
+
#
|
2793
|
+
return [
|
2794
|
+
self.safe_order({
|
2795
|
+
'info': response,
|
2796
|
+
}),
|
2797
|
+
]
|
2771
2798
|
|
2772
2799
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
2773
2800
|
"""
|
ccxt/poloniex.py
CHANGED
ccxt/pro/__init__.py
CHANGED
ccxt/pro/binance.py
CHANGED
@@ -3409,7 +3409,7 @@ class binance(ccxt.async_support.binance):
|
|
3409
3409
|
rejected = True
|
3410
3410
|
# private endpoint uses id
|
3411
3411
|
client.reject(e, id)
|
3412
|
-
# public endpoint stores messageHash in
|
3412
|
+
# public endpoint stores messageHash in subscriptions
|
3413
3413
|
subscriptionKeys = list(client.subscriptions.keys())
|
3414
3414
|
for i in range(0, len(subscriptionKeys)):
|
3415
3415
|
subscriptionHash = subscriptionKeys[i]
|
ccxt/pro/bybit.py
CHANGED
@@ -142,7 +142,7 @@ class bybit(ccxt.async_support.bybit):
|
|
142
142
|
self.options['requestId'] = requestId
|
143
143
|
return requestId
|
144
144
|
|
145
|
-
def get_url_by_market_type(self, symbol: Str = None, isPrivate=False, method: Str = None, params={}):
|
145
|
+
async def get_url_by_market_type(self, symbol: Str = None, isPrivate=False, method: Str = None, params={}):
|
146
146
|
accessibility = 'private' if isPrivate else 'public'
|
147
147
|
isUsdcSettled = None
|
148
148
|
isSpot = None
|
@@ -160,7 +160,13 @@ class bybit(ccxt.async_support.bybit):
|
|
160
160
|
isUsdcSettled = (defaultSettle == 'USDC')
|
161
161
|
isSpot = (type == 'spot')
|
162
162
|
if isPrivate:
|
163
|
-
|
163
|
+
unified = await self.isUnifiedEnabled()
|
164
|
+
isUnifiedMargin = self.safe_bool(unified, 0, False)
|
165
|
+
isUnifiedAccount = self.safe_bool(unified, 1, False)
|
166
|
+
if isUsdcSettled and not isUnifiedMargin and not isUnifiedAccount:
|
167
|
+
url = url[accessibility]['usdc']
|
168
|
+
else:
|
169
|
+
url = url[accessibility]['contract']
|
164
170
|
else:
|
165
171
|
if isSpot:
|
166
172
|
url = url[accessibility]['spot']
|
@@ -313,7 +319,7 @@ class bybit(ccxt.async_support.bybit):
|
|
313
319
|
market = self.market(symbol)
|
314
320
|
symbol = market['symbol']
|
315
321
|
messageHash = 'ticker:' + symbol
|
316
|
-
url = self.get_url_by_market_type(symbol, False, 'watchTicker', params)
|
322
|
+
url = await self.get_url_by_market_type(symbol, False, 'watchTicker', params)
|
317
323
|
params = self.clean_params(params)
|
318
324
|
options = self.safe_value(self.options, 'watchTicker', {})
|
319
325
|
topic = self.safe_string(options, 'name', 'tickers')
|
@@ -335,7 +341,7 @@ class bybit(ccxt.async_support.bybit):
|
|
335
341
|
await self.load_markets()
|
336
342
|
symbols = self.market_symbols(symbols, None, False)
|
337
343
|
messageHashes = []
|
338
|
-
url = self.get_url_by_market_type(symbols[0], False, 'watchTickers', params)
|
344
|
+
url = await self.get_url_by_market_type(symbols[0], False, 'watchTickers', params)
|
339
345
|
params = self.clean_params(params)
|
340
346
|
options = self.safe_value(self.options, 'watchTickers', {})
|
341
347
|
topic = self.safe_string(options, 'name', 'tickers')
|
@@ -510,7 +516,7 @@ class bybit(ccxt.async_support.bybit):
|
|
510
516
|
await self.load_markets()
|
511
517
|
market = self.market(symbol)
|
512
518
|
symbol = market['symbol']
|
513
|
-
url = self.get_url_by_market_type(symbol, False, 'watchOHLCV', params)
|
519
|
+
url = await self.get_url_by_market_type(symbol, False, 'watchOHLCV', params)
|
514
520
|
params = self.clean_params(params)
|
515
521
|
ohlcv = None
|
516
522
|
timeframeId = self.safe_string(self.timeframes, timeframe, timeframe)
|
@@ -619,7 +625,7 @@ class bybit(ccxt.async_support.bybit):
|
|
619
625
|
if symbolsLength == 0:
|
620
626
|
raise ArgumentsRequired(self.id + ' watchOrderBookForSymbols() requires a non-empty array of symbols')
|
621
627
|
symbols = self.market_symbols(symbols)
|
622
|
-
url = self.get_url_by_market_type(symbols[0], False, 'watchOrderBook', params)
|
628
|
+
url = await self.get_url_by_market_type(symbols[0], False, 'watchOrderBook', params)
|
623
629
|
params = self.clean_params(params)
|
624
630
|
market = self.market(symbols[0])
|
625
631
|
if limit is None:
|
@@ -737,7 +743,7 @@ class bybit(ccxt.async_support.bybit):
|
|
737
743
|
if symbolsLength == 0:
|
738
744
|
raise ArgumentsRequired(self.id + ' watchTradesForSymbols() requires a non-empty array of symbols')
|
739
745
|
params = self.clean_params(params)
|
740
|
-
url = self.get_url_by_market_type(symbols[0], False, 'watchTrades', params)
|
746
|
+
url = await self.get_url_by_market_type(symbols[0], False, 'watchTrades', params)
|
741
747
|
topics = []
|
742
748
|
messageHashes = []
|
743
749
|
for i in range(0, len(symbols)):
|
@@ -887,7 +893,7 @@ class bybit(ccxt.async_support.bybit):
|
|
887
893
|
if symbol is not None:
|
888
894
|
symbol = self.symbol(symbol)
|
889
895
|
messageHash += ':' + symbol
|
890
|
-
url = self.get_url_by_market_type(symbol, True, method, params)
|
896
|
+
url = await self.get_url_by_market_type(symbol, True, method, params)
|
891
897
|
await self.authenticate(url)
|
892
898
|
topicByMarket: dict = {
|
893
899
|
'spot': 'ticketInfo',
|
@@ -1006,7 +1012,7 @@ class bybit(ccxt.async_support.bybit):
|
|
1006
1012
|
symbols = self.market_symbols(symbols)
|
1007
1013
|
messageHash = '::' + ','.join(symbols)
|
1008
1014
|
firstSymbol = self.safe_string(symbols, 0)
|
1009
|
-
url = self.get_url_by_market_type(firstSymbol, True, method, params)
|
1015
|
+
url = await self.get_url_by_market_type(firstSymbol, True, method, params)
|
1010
1016
|
messageHash = 'positions' + messageHash
|
1011
1017
|
client = self.client(url)
|
1012
1018
|
await self.authenticate(url)
|
@@ -1141,7 +1147,7 @@ class bybit(ccxt.async_support.bybit):
|
|
1141
1147
|
await self.load_markets()
|
1142
1148
|
market = self.market(symbol)
|
1143
1149
|
symbol = market['symbol']
|
1144
|
-
url = self.get_url_by_market_type(symbol, False, 'watchLiquidations', params)
|
1150
|
+
url = await self.get_url_by_market_type(symbol, False, 'watchLiquidations', params)
|
1145
1151
|
params = self.clean_params(params)
|
1146
1152
|
messageHash = 'liquidations::' + symbol
|
1147
1153
|
topic = 'liquidation.' + market['id']
|
@@ -1220,7 +1226,7 @@ class bybit(ccxt.async_support.bybit):
|
|
1220
1226
|
if symbol is not None:
|
1221
1227
|
symbol = self.symbol(symbol)
|
1222
1228
|
messageHash += ':' + symbol
|
1223
|
-
url = self.get_url_by_market_type(symbol, True, method, params)
|
1229
|
+
url = await self.get_url_by_market_type(symbol, True, method, params)
|
1224
1230
|
await self.authenticate(url)
|
1225
1231
|
topicsByMarket: dict = {
|
1226
1232
|
'spot': ['order', 'stopOrder'],
|
@@ -1518,7 +1524,7 @@ class bybit(ccxt.async_support.bybit):
|
|
1518
1524
|
unified = await self.isUnifiedEnabled()
|
1519
1525
|
isUnifiedMargin = self.safe_bool(unified, 0, False)
|
1520
1526
|
isUnifiedAccount = self.safe_bool(unified, 1, False)
|
1521
|
-
url = self.get_url_by_market_type(None, True, method, params)
|
1527
|
+
url = await self.get_url_by_market_type(None, True, method, params)
|
1522
1528
|
await self.authenticate(url)
|
1523
1529
|
topicByMarket: dict = {
|
1524
1530
|
'spot': 'outboundAccountInfo',
|
ccxt/pro/kucoin.py
CHANGED
@@ -153,6 +153,7 @@ class kucoin(ccxt.async_support.kucoin):
|
|
153
153
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
154
154
|
"""
|
155
155
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
156
|
+
:see: https://www.kucoin.com/docs/websocket/spot-trading/public-channels/market-snapshot
|
156
157
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
157
158
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
158
159
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -367,6 +368,7 @@ class kucoin(ccxt.async_support.kucoin):
|
|
367
368
|
async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
368
369
|
"""
|
369
370
|
watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
371
|
+
:see: https://www.kucoin.com/docs/websocket/spot-trading/public-channels/klines
|
370
372
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
371
373
|
:param str timeframe: the length of time each candle represents
|
372
374
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -431,6 +433,7 @@ class kucoin(ccxt.async_support.kucoin):
|
|
431
433
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
432
434
|
"""
|
433
435
|
get the list of most recent trades for a particular symbol
|
436
|
+
:see: https://www.kucoin.com/docs/websocket/spot-trading/public-channels/match-execution-data
|
434
437
|
:param str symbol: unified symbol of the market to fetch trades for
|
435
438
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
436
439
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -442,6 +445,7 @@ class kucoin(ccxt.async_support.kucoin):
|
|
442
445
|
async def watch_trades_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
443
446
|
"""
|
444
447
|
get the list of most recent trades for a particular symbol
|
448
|
+
:see: https://www.kucoin.com/docs/websocket/spot-trading/public-channels/match-execution-data
|
445
449
|
:param str symbol: unified symbol of the market to fetch trades for
|
446
450
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
447
451
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -741,6 +745,8 @@ class kucoin(ccxt.async_support.kucoin):
|
|
741
745
|
async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
742
746
|
"""
|
743
747
|
watches information on multiple orders made by the user
|
748
|
+
:see: https://www.kucoin.com/docs/websocket/spot-trading/private-channels/private-order-change
|
749
|
+
:see: https://www.kucoin.com/docs/websocket/spot-trading/private-channels/stop-order-event
|
744
750
|
:param str symbol: unified market symbol of the market orders were made in
|
745
751
|
:param int [since]: the earliest time in ms to fetch orders for
|
746
752
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -874,6 +880,9 @@ class kucoin(ccxt.async_support.kucoin):
|
|
874
880
|
#
|
875
881
|
messageHash = 'orders'
|
876
882
|
data = self.safe_value(message, 'data')
|
883
|
+
tradeId = self.safe_string(data, 'tradeId')
|
884
|
+
if tradeId is not None:
|
885
|
+
self.handle_my_trade(client, message)
|
877
886
|
parsed = self.parse_ws_order(data)
|
878
887
|
symbol = self.safe_string(parsed, 'symbol')
|
879
888
|
orderId = self.safe_string(parsed, 'id')
|
@@ -898,6 +907,7 @@ class kucoin(ccxt.async_support.kucoin):
|
|
898
907
|
async def watch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
899
908
|
"""
|
900
909
|
watches information on multiple trades made by the user
|
910
|
+
:see: https://www.kucoin.com/docs/websocket/spot-trading/private-channels/private-order-change
|
901
911
|
:param str symbol: unified market symbol of the market trades were made in
|
902
912
|
:param int [since]: the earliest time in ms to fetch trades for
|
903
913
|
:param int [limit]: the maximum number of trade structures to retrieve
|
@@ -906,7 +916,7 @@ class kucoin(ccxt.async_support.kucoin):
|
|
906
916
|
"""
|
907
917
|
await self.load_markets()
|
908
918
|
url = await self.negotiate(True)
|
909
|
-
topic = '/
|
919
|
+
topic = '/spotMarket/tradeOrders'
|
910
920
|
request: dict = {
|
911
921
|
'privateChannel': True,
|
912
922
|
}
|
@@ -921,6 +931,34 @@ class kucoin(ccxt.async_support.kucoin):
|
|
921
931
|
return self.filter_by_symbol_since_limit(trades, symbol, since, limit, True)
|
922
932
|
|
923
933
|
def handle_my_trade(self, client: Client, message):
|
934
|
+
#
|
935
|
+
# {
|
936
|
+
# "type": "message",
|
937
|
+
# "topic": "/spotMarket/tradeOrders",
|
938
|
+
# "subject": "orderChange",
|
939
|
+
# "channelType": "private",
|
940
|
+
# "data": {
|
941
|
+
# "symbol": "KCS-USDT",
|
942
|
+
# "orderType": "limit",
|
943
|
+
# "side": "sell",
|
944
|
+
# "orderId": "5efab07953bdea00089965fa",
|
945
|
+
# "liquidity": "taker",
|
946
|
+
# "type": "match",
|
947
|
+
# "feeType": "takerFee",
|
948
|
+
# "orderTime": 1670329987026,
|
949
|
+
# "size": "0.1",
|
950
|
+
# "filledSize": "0.1",
|
951
|
+
# "price": "0.938",
|
952
|
+
# "matchPrice": "0.96738",
|
953
|
+
# "matchSize": "0.1",
|
954
|
+
# "tradeId": "5efab07a4ee4c7000a82d6d9",
|
955
|
+
# "clientOid": "1593487481000313",
|
956
|
+
# "remainSize": "0",
|
957
|
+
# "status": "match",
|
958
|
+
# "ts": 1670329987311000000
|
959
|
+
# }
|
960
|
+
# }
|
961
|
+
#
|
924
962
|
if self.myTrades is None:
|
925
963
|
limit = self.safe_integer(self.options, 'tradesLimit', 1000)
|
926
964
|
self.myTrades = ArrayCacheBySymbolById(limit)
|
@@ -934,19 +972,26 @@ class kucoin(ccxt.async_support.kucoin):
|
|
934
972
|
|
935
973
|
def parse_ws_trade(self, trade, market=None):
|
936
974
|
#
|
937
|
-
#
|
938
|
-
#
|
939
|
-
#
|
940
|
-
#
|
941
|
-
#
|
942
|
-
#
|
943
|
-
#
|
944
|
-
#
|
945
|
-
#
|
946
|
-
#
|
947
|
-
#
|
948
|
-
#
|
949
|
-
#
|
975
|
+
# {
|
976
|
+
# "symbol": "KCS-USDT",
|
977
|
+
# "orderType": "limit",
|
978
|
+
# "side": "sell",
|
979
|
+
# "orderId": "5efab07953bdea00089965fa",
|
980
|
+
# "liquidity": "taker",
|
981
|
+
# "type": "match",
|
982
|
+
# "feeType": "takerFee",
|
983
|
+
# "orderTime": 1670329987026,
|
984
|
+
# "size": "0.1",
|
985
|
+
# "filledSize": "0.1",
|
986
|
+
# "price": "0.938",
|
987
|
+
# "matchPrice": "0.96738",
|
988
|
+
# "matchSize": "0.1",
|
989
|
+
# "tradeId": "5efab07a4ee4c7000a82d6d9",
|
990
|
+
# "clientOid": "1593487481000313",
|
991
|
+
# "remainSize": "0",
|
992
|
+
# "status": "match",
|
993
|
+
# "ts": 1670329987311000000
|
994
|
+
# }
|
950
995
|
#
|
951
996
|
marketId = self.safe_string(trade, 'symbol')
|
952
997
|
market = self.safe_market(marketId, market, '-')
|
@@ -957,15 +1002,7 @@ class kucoin(ccxt.async_support.kucoin):
|
|
957
1002
|
price = self.safe_string(trade, 'price')
|
958
1003
|
amount = self.safe_string(trade, 'size')
|
959
1004
|
order = self.safe_string(trade, 'orderId')
|
960
|
-
timestamp = self.safe_integer_product(trade, '
|
961
|
-
feeCurrency = market['quote']
|
962
|
-
feeRate = self.safe_string(trade, 'feeRate')
|
963
|
-
feeCost = self.safe_string(trade, 'fee')
|
964
|
-
fee = {
|
965
|
-
'cost': feeCost,
|
966
|
-
'rate': feeRate,
|
967
|
-
'currency': feeCurrency,
|
968
|
-
}
|
1005
|
+
timestamp = self.safe_integer_product(trade, 'ts', 0.000001)
|
969
1006
|
return self.safe_trade({
|
970
1007
|
'info': trade,
|
971
1008
|
'timestamp': timestamp,
|
@@ -974,17 +1011,18 @@ class kucoin(ccxt.async_support.kucoin):
|
|
974
1011
|
'id': tradeId,
|
975
1012
|
'order': order,
|
976
1013
|
'type': type,
|
977
|
-
'takerOrMaker':
|
1014
|
+
'takerOrMaker': self.safe_string(trade, 'liquidity'),
|
978
1015
|
'side': side,
|
979
1016
|
'price': price,
|
980
1017
|
'amount': amount,
|
981
1018
|
'cost': None,
|
982
|
-
'fee':
|
1019
|
+
'fee': None,
|
983
1020
|
}, market)
|
984
1021
|
|
985
1022
|
async def watch_balance(self, params={}) -> Balances:
|
986
1023
|
"""
|
987
1024
|
watch balance and get the amount of funds available for trading or funds locked in orders
|
1025
|
+
:see: https://www.kucoin.com/docs/websocket/spot-trading/private-channels/account-balance-change
|
988
1026
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
989
1027
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
990
1028
|
"""
|
@@ -1079,7 +1117,6 @@ class kucoin(ccxt.async_support.kucoin):
|
|
1079
1117
|
'trade.l3match': self.handle_trade,
|
1080
1118
|
'trade.candles.update': self.handle_ohlcv,
|
1081
1119
|
'account.balance': self.handle_balance,
|
1082
|
-
'/spot/tradeFills': self.handle_my_trade,
|
1083
1120
|
'orderChange': self.handle_order,
|
1084
1121
|
'stopOrder': self.handle_order,
|
1085
1122
|
}
|
ccxt/pro/vertex.py
CHANGED
@@ -317,7 +317,7 @@ class vertex(ccxt.async_support.vertex):
|
|
317
317
|
# "ask_qty": "1000" # quantity at the lowest ask
|
318
318
|
# }
|
319
319
|
#
|
320
|
-
timestamp =
|
320
|
+
timestamp = self.safe_integer_product(ticker, 'timestamp', 0.000001)
|
321
321
|
return self.safe_ticker({
|
322
322
|
'symbol': self.safe_symbol(None, market),
|
323
323
|
'timestamp': timestamp,
|
ccxt/woo.py
CHANGED
@@ -52,7 +52,7 @@ class woo(Exchange, ImplicitAPI):
|
|
52
52
|
'createMarketBuyOrderWithCost': True,
|
53
53
|
'createMarketOrder': False,
|
54
54
|
'createMarketOrderWithCost': False,
|
55
|
-
'createMarketSellOrderWithCost':
|
55
|
+
'createMarketSellOrderWithCost': True,
|
56
56
|
'createOrder': True,
|
57
57
|
'createOrderWithTakeProfitAndStopLoss': True,
|
58
58
|
'createReduceOnlyOrder': True,
|
@@ -832,8 +832,22 @@ class woo(Exchange, ImplicitAPI):
|
|
832
832
|
market = self.market(symbol)
|
833
833
|
if not market['spot']:
|
834
834
|
raise NotSupported(self.id + ' createMarketBuyOrderWithCost() supports spot orders only')
|
835
|
-
|
836
|
-
|
835
|
+
return self.create_order(symbol, 'market', 'buy', cost, 1, params)
|
836
|
+
|
837
|
+
def create_market_sell_order_with_cost(self, symbol: str, cost: float, params={}):
|
838
|
+
"""
|
839
|
+
create a market sell order by providing the symbol and cost
|
840
|
+
:see: https://docs.woo.org/#send-order
|
841
|
+
:param str symbol: unified symbol of the market to create an order in
|
842
|
+
:param float cost: how much you want to trade in units of the quote currency
|
843
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
844
|
+
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
845
|
+
"""
|
846
|
+
self.load_markets()
|
847
|
+
market = self.market(symbol)
|
848
|
+
if not market['spot']:
|
849
|
+
raise NotSupported(self.id + ' createMarketSellOrderWithCost() supports spot orders only')
|
850
|
+
return self.create_order(symbol, 'market', 'sell', cost, 1, params)
|
837
851
|
|
838
852
|
def create_trailing_amount_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, trailingAmount=None, trailingTriggerPrice=None, params={}) -> Order:
|
839
853
|
"""
|
@@ -941,28 +955,22 @@ class woo(Exchange, ImplicitAPI):
|
|
941
955
|
request['order_type'] = 'IOC'
|
942
956
|
if reduceOnly:
|
943
957
|
request[reduceOnlyKey] = reduceOnly
|
944
|
-
if price is not None:
|
958
|
+
if not isMarket and price is not None:
|
945
959
|
request[priceKey] = self.price_to_precision(symbol, price)
|
946
960
|
if isMarket and not isStop:
|
947
961
|
# for market buy it requires the amount of quote currency to spend
|
948
|
-
|
962
|
+
cost = self.safe_string_2(params, 'cost', 'order_amount')
|
963
|
+
params = self.omit(params, ['cost', 'order_amount'])
|
964
|
+
isPriceProvided = price is not None
|
965
|
+
if market['spot'] and (isPriceProvided or (cost is not None)):
|
949
966
|
quoteAmount = None
|
950
|
-
createMarketBuyOrderRequiresPrice = True
|
951
|
-
createMarketBuyOrderRequiresPrice, params = self.handle_option_and_params(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', True)
|
952
|
-
cost = self.safe_number_2(params, 'cost', 'order_amount')
|
953
|
-
params = self.omit(params, ['cost', 'order_amount'])
|
954
967
|
if cost is not None:
|
955
968
|
quoteAmount = self.cost_to_precision(symbol, cost)
|
956
|
-
elif createMarketBuyOrderRequiresPrice:
|
957
|
-
if price is None:
|
958
|
-
raise InvalidOrder(self.id + ' createOrder() requires the price argument for market buy orders to calculate the total cost to spend(amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to False and pass the cost to spend(quote quantity) in the amount argument')
|
959
|
-
else:
|
960
|
-
amountString = self.number_to_string(amount)
|
961
|
-
priceString = self.number_to_string(price)
|
962
|
-
costRequest = Precise.string_mul(amountString, priceString)
|
963
|
-
quoteAmount = self.cost_to_precision(symbol, costRequest)
|
964
969
|
else:
|
965
|
-
|
970
|
+
amountString = self.number_to_string(amount)
|
971
|
+
priceString = self.number_to_string(price)
|
972
|
+
costRequest = Precise.string_mul(amountString, priceString)
|
973
|
+
quoteAmount = self.cost_to_precision(symbol, costRequest)
|
966
974
|
request['order_amount'] = quoteAmount
|
967
975
|
else:
|
968
976
|
request['order_quantity'] = self.amount_to_precision(symbol, amount)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 4.3.
|
3
|
+
Version: 4.3.54
|
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
|
@@ -270,13 +270,13 @@ console.log(version, Object.keys(exchanges));
|
|
270
270
|
|
271
271
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
272
272
|
|
273
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.
|
274
|
-
* unpkg: https://unpkg.com/ccxt@4.3.
|
273
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.54/dist/ccxt.browser.min.js
|
274
|
+
* unpkg: https://unpkg.com/ccxt@4.3.54/dist/ccxt.browser.min.js
|
275
275
|
|
276
276
|
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.
|
277
277
|
|
278
278
|
```HTML
|
279
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.
|
279
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.54/dist/ccxt.browser.min.js"></script>
|
280
280
|
```
|
281
281
|
|
282
282
|
Creates a global `ccxt` object:
|
@@ -1,4 +1,4 @@
|
|
1
|
-
ccxt/__init__.py,sha256=
|
1
|
+
ccxt/__init__.py,sha256=sGJGLlNmnszjgoZCRPGuhCXTJxBTQK5N9dqM43kTbqg,16236
|
2
2
|
ccxt/ace.py,sha256=RC6jY5dSbiE4cI_MS0thZbDArWn3Drl8Vm1NFzTTQaI,41675
|
3
3
|
ccxt/alpaca.py,sha256=EZ7uF3XI8EXXIsCZ-UVpruBXS96Kps6WOOukmdcgCn0,47326
|
4
4
|
ccxt/ascendex.py,sha256=rUUU3n4j8QrMrJCk4pVwVastIYzS3eDTUAL9R2ePErk,151832
|
@@ -8,7 +8,7 @@ ccxt/binance.py,sha256=m_RMYP-HttHnP8ziEF49YwjElAuLi1LiRmKgX2WDOyg,629410
|
|
8
8
|
ccxt/binancecoinm.py,sha256=arFnEh8mErSyi23eVPWE4iwoT7PWQyxGGVJCKCy6UJY,1702
|
9
9
|
ccxt/binanceus.py,sha256=hdcT4OnadcdFFFjF3GtM0nWv90jqojqwdVS3xWGuW40,9163
|
10
10
|
ccxt/binanceusdm.py,sha256=bAPcJj5HLxoCdPolriM8sJpoTBwbV78vBTbKRmWhNP4,2632
|
11
|
-
ccxt/bingx.py,sha256=
|
11
|
+
ccxt/bingx.py,sha256=biXpvytbEnU9o7p7Xvbabu3LDP8o6kjAMO0coPxN8QA,188744
|
12
12
|
ccxt/bit2c.py,sha256=un1ZuLNvEt7bkceNeue3UctEoFA-xpoKQlnq4bX5Slc,37062
|
13
13
|
ccxt/bitbank.py,sha256=yxS-W5FeA2Kqp7VbdNt6960GjuMflKVqUlTbtKPgqUY,43535
|
14
14
|
ccxt/bitbay.py,sha256=xAIjzGRDVGwoy-Gygd99H0YN4wiaz_0lR0Z14oxaaxc,478
|
@@ -89,8 +89,8 @@ ccxt/onetrading.py,sha256=2nSe_Z_Jy7O4rPggwbY17M6oimu-t0PkeTejTu26XcA,88340
|
|
89
89
|
ccxt/oxfun.py,sha256=k_0Wixo0hQt6MVHR4g61IgWG5qJazAoYoZ3ux2EtD4Y,124653
|
90
90
|
ccxt/p2b.py,sha256=_kQjmJ1O9sgb5HnNsefD0Jy-DejW4chndqraV5jV3ak,54334
|
91
91
|
ccxt/paymium.py,sha256=9TfMe2ViBYYodGcbVTPm6QOyuIxI6vmbl46xa5bl8D8,24420
|
92
|
-
ccxt/phemex.py,sha256=
|
93
|
-
ccxt/poloniex.py,sha256=
|
92
|
+
ccxt/phemex.py,sha256=kT95mRifeiJEPjbdeQd1fPYWbP5k2y7MgIovIaL60yE,223120
|
93
|
+
ccxt/poloniex.py,sha256=QqpVP0SDTGgtp-BIom4uBlmrRt_xMnHprb_-g1YhTKs,102268
|
94
94
|
ccxt/poloniexfutures.py,sha256=cPMhbame1K_I1d8JgI2GzFQ8bFh54O0WfA0UTGmqSjg,78106
|
95
95
|
ccxt/probit.py,sha256=DqmkL7v9K6TsY0OwlyNxgOjU7OvpcThApyBOXOQi4Zg,76166
|
96
96
|
ccxt/timex.py,sha256=jTXj6mGZcmsfmDFHbJyWiScLK-vdY7AYsD5gUyk1x0s,71451
|
@@ -101,7 +101,7 @@ ccxt/vertex.py,sha256=oUeywsZNJFFg0Amd-yeYfZmmUuVfsJrpNvUhK7JdJ-I,121429
|
|
101
101
|
ccxt/wavesexchange.py,sha256=7vQjJl7C5uT1tDh-oRewkpqeqM9w3vWYEaTSpLL7rIo,114826
|
102
102
|
ccxt/wazirx.py,sha256=_JRQvSh0XLPKjE-0Fi_YqYyz38GObXkyXLM1Pg3hipI,52406
|
103
103
|
ccxt/whitebit.py,sha256=xENpt5u6txhUlLfc4IR_FHCAJMw3u1nj17voGoq0zus,118756
|
104
|
-
ccxt/woo.py,sha256=
|
104
|
+
ccxt/woo.py,sha256=8BhndXS-XONYFCxKPfzwLUTgGoLveD0NK5EKK_Bsu4s,140143
|
105
105
|
ccxt/woofipro.py,sha256=jAvxPnpn6ib0e8x0iYqHLg7X7aD_8iTzGAJvnw72HrU,115353
|
106
106
|
ccxt/xt.py,sha256=LIV1YnyhpM2lfPYvEfMg5H2aMP-wkeikm1CxdqgSsPY,200367
|
107
107
|
ccxt/yobit.py,sha256=MFrd_ZvzSPP0T8RWrC3aLNrQN2rDZz3m2cbCnOqXr6s,53372
|
@@ -216,7 +216,7 @@ ccxt/abstract/xt.py,sha256=xHHv2viFGK0_iPZ4gu6Wb0aOrpcKhr9zoY-BIPWh5bs,27028
|
|
216
216
|
ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
|
217
217
|
ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
|
218
218
|
ccxt/abstract/zonda.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
|
219
|
-
ccxt/async_support/__init__.py,sha256=
|
219
|
+
ccxt/async_support/__init__.py,sha256=3XCOQxq-O9TY3MK4nbmAcDN_EqvcfgqExOf3efYhz5A,16039
|
220
220
|
ccxt/async_support/ace.py,sha256=ffpHbADxBOtT3QliUmoex2pTS7sSWB7CwO_SAPKJqDs,41899
|
221
221
|
ccxt/async_support/alpaca.py,sha256=3845DgojoA1p0pxrqnDIqHbbRcEwZhZIkE4aygD5ics,47538
|
222
222
|
ccxt/async_support/ascendex.py,sha256=7tZ4C7FfzmuB_ADYjl6IkyQQ5JG0Vt1AD_B3fTeY6V0,152620
|
@@ -226,7 +226,7 @@ ccxt/async_support/binance.py,sha256=HgyAf1iI1fyxXjkbGPx1a69UB0Bt6z4YhlgC2MTNnpM
|
|
226
226
|
ccxt/async_support/binancecoinm.py,sha256=yeE73xG5UXD_X3VPul6DMGnV_mgJfWYskpas1BUDdCU,1740
|
227
227
|
ccxt/async_support/binanceus.py,sha256=c-K3Tk7LaRJjmYdCx8vBOqsx01uXrtvt0PC2ekBiD0g,9177
|
228
228
|
ccxt/async_support/binanceusdm.py,sha256=8ugRkx7vyYmn67wdkEEf2f-DFMGAoC4t09usKlPVNyw,2670
|
229
|
-
ccxt/async_support/bingx.py,sha256=
|
229
|
+
ccxt/async_support/bingx.py,sha256=2H-kbaXPdUrv5p4RHjZwS2YAYi_mkQmeUKSCnMy7hx0,189780
|
230
230
|
ccxt/async_support/bit2c.py,sha256=5div5D1LV3QHZUqL3CDdKaBDATQ3c2Phglx9JpAb7fY,37274
|
231
231
|
ccxt/async_support/bitbank.py,sha256=47jVvH8--NkV11uL-1X22vEg0YMyLc--SVtVuTLrFCI,43795
|
232
232
|
ccxt/async_support/bitbay.py,sha256=jcaEXi2IhYTva8ezO_SfJhwxEZk7HST4J3NaxD16BQA,492
|
@@ -307,8 +307,8 @@ ccxt/async_support/onetrading.py,sha256=u6Y7zWjfVBVBl9RLIUfwAneZzE4fOENx7Y11zE7M
|
|
307
307
|
ccxt/async_support/oxfun.py,sha256=a_xP9hsjcsooDGO7fLmZPvW-Rlyfis6JRKmsnF0w-hk,125197
|
308
308
|
ccxt/async_support/p2b.py,sha256=vwavNnMyU7tJF1FIIBhZe4az58clzptk0bEuIDPmOAA,54576
|
309
309
|
ccxt/async_support/paymium.py,sha256=WKPElafAfmg06ATcLLIS0V09kZIGlSbn0L7Z3rcLvQA,24608
|
310
|
-
ccxt/async_support/phemex.py,sha256=
|
311
|
-
ccxt/async_support/poloniex.py,sha256=
|
310
|
+
ccxt/async_support/phemex.py,sha256=r4qfgA2IXaNWvhTAzldvpwFueszroj-yJcSU1pc-ess,223938
|
311
|
+
ccxt/async_support/poloniex.py,sha256=DqZ9Kp9dOyaVVw0Nk_ayMuexiIiiEoXAau3S9h9YcaE,102816
|
312
312
|
ccxt/async_support/poloniexfutures.py,sha256=xNrXcZ8OjafniqtcJD8AhXq58GC3jKeMqNPJSEsFlJM,78492
|
313
313
|
ccxt/async_support/probit.py,sha256=0W5NjycP_GYZO-FaL0wyId9ZGYvQSA3Wd1RXDneiQSU,76558
|
314
314
|
ccxt/async_support/timex.py,sha256=6_SBBYk3IW3iFFpHejYBPOTvmoOAFROygbh7TR0YvXM,71813
|
@@ -319,14 +319,14 @@ ccxt/async_support/vertex.py,sha256=UGWLIXgptaVtDawWKCek4SaRlV-mGvox-uP_Pd9CkrE,
|
|
319
319
|
ccxt/async_support/wavesexchange.py,sha256=D12ssbQvRl4zkQLKwpELn5EYDHjfi-cp6zjXRAhqiI8,115376
|
320
320
|
ccxt/async_support/wazirx.py,sha256=C3Y4R4aMyj4404n5LtotvqlZDt5ILp_MvauyvL06e1k,52708
|
321
321
|
ccxt/async_support/whitebit.py,sha256=mwoolQKWL_9ZpC-zU5Ti4rM7QsK3Fmmo_MRUgj_Nno8,119406
|
322
|
-
ccxt/async_support/woo.py,sha256=
|
322
|
+
ccxt/async_support/woo.py,sha256=GUcZ7n4le5T3RJsjO00M9QSRQcWhdMAYGneco0JrFzM,141051
|
323
323
|
ccxt/async_support/woofipro.py,sha256=ePRdVtl3hUBXWfy1cMEPvJl1fzRGbe67sD_bl5_BIUY,116033
|
324
324
|
ccxt/async_support/xt.py,sha256=naduJ9l9TxQXFYGDOVrhIC-rX8CJhwrRyyR8Ps2cLPY,201521
|
325
325
|
ccxt/async_support/yobit.py,sha256=KQcu9nXJPDlAodZyxOXKIn6eTSLmlvUlgRFE6EBLfug,53656
|
326
326
|
ccxt/async_support/zaif.py,sha256=jTK5pLZSpKL1Pt0qAJTjN09TDS5AfhptGgGAqw7sNwE,29045
|
327
327
|
ccxt/async_support/zonda.py,sha256=skMMmUUjXJmnQpzlFrJfmg4-vEIOsTGz2zSW9nI4C90,81721
|
328
328
|
ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
|
329
|
-
ccxt/async_support/base/exchange.py,sha256=
|
329
|
+
ccxt/async_support/base/exchange.py,sha256=KKwZWvW4HIuwEJY2soRNX1HuB-KJAU0VsbGzxQ8A2x8,109872
|
330
330
|
ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
|
331
331
|
ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
|
332
332
|
ccxt/async_support/base/ws/aiohttp_client.py,sha256=5IEiT0elWI9a7Vr-KV0jgmlbpLJWBzIlrLaCkTKGaqY,5752
|
@@ -340,14 +340,14 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9produGjmB
|
|
340
340
|
ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
|
341
341
|
ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
|
342
342
|
ccxt/base/errors.py,sha256=FGdyULeNCNcl52gA_CNhe2dZmat9GJGkTdlIyDXAF_A,4213
|
343
|
-
ccxt/base/exchange.py,sha256
|
343
|
+
ccxt/base/exchange.py,sha256=-gJA5hHpo_qToi34mBLxJMdEv0sReafTCOhUtNpfWaE,280900
|
344
344
|
ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
|
345
345
|
ccxt/base/types.py,sha256=RGGcbz86cVtrmU602zoFO5gSWrv_J7IHxQkPnzmNirs,9247
|
346
|
-
ccxt/pro/__init__.py,sha256=
|
346
|
+
ccxt/pro/__init__.py,sha256=I0o_74-e5Mzo6Bqz9Ik_6uvq_hNPRJZte2A9d-OJHZQ,7308
|
347
347
|
ccxt/pro/alpaca.py,sha256=QA_Dmxu1ockCSYJMbOodbNke3t1tAl0hFL-q56UMQWE,27224
|
348
348
|
ccxt/pro/ascendex.py,sha256=181FIeztchLqGmgecRJEN8F8xEM45D5aMKhC-5nuNfU,35467
|
349
349
|
ccxt/pro/bequant.py,sha256=5zbsP8BHQTUZ8ZNL6uaACxDbUClgkOV4SYfXT_LfQVg,1351
|
350
|
-
ccxt/pro/binance.py,sha256=
|
350
|
+
ccxt/pro/binance.py,sha256=dS62U05hIgXqw66c170o5NPIP7JRuyYCdjB0ao9T-rI,171501
|
351
351
|
ccxt/pro/binancecoinm.py,sha256=LlgF4rXHHrsQMaklhTEzSiE6U9V25AjHHg_DRat7Mf0,1036
|
352
352
|
ccxt/pro/binanceus.py,sha256=_IXpS_wyH0nEtsLR7cJLtrUlsNQoG0MSUVo3PV0RDDc,1946
|
353
353
|
ccxt/pro/binanceusdm.py,sha256=lLdOv0d-lM-1wfCc_y_POb6GdmVIiX7PFzmKTWsVyNw,1512
|
@@ -365,7 +365,7 @@ ccxt/pro/bitrue.py,sha256=aDbPloGgsEN_DnoAJCkM0Y4MJ1r57OvoKpinynhRNrA,16463
|
|
365
365
|
ccxt/pro/bitstamp.py,sha256=P8Td5HqWiO6GMdLj-cKqPTZD28fltWlZQ7Z-omDbO60,20916
|
366
366
|
ccxt/pro/bitvavo.py,sha256=vn70dtyWs2TSZieCevvwKliRInmvvzMrvTyGq0fTIYM,56229
|
367
367
|
ccxt/pro/blockchaincom.py,sha256=LtCL3habcuB2IRXXK_oeqdzqpnkj01Gr79X82nK8Mnk,29600
|
368
|
-
ccxt/pro/bybit.py,sha256=
|
368
|
+
ccxt/pro/bybit.py,sha256=drnZo2-cL5qXzcxl2T2Ow57qwMnHCN0_sznmPhnM6LU,89272
|
369
369
|
ccxt/pro/cex.py,sha256=ri0fnWYa4tFeeuJ_edqUziI5VJ921rRjIapion9Emug,58495
|
370
370
|
ccxt/pro/coinbase.py,sha256=q5PQ--k9q50UrgWCPYV0y2tx5hQ32nmWXBp4nvJsQag,30628
|
371
371
|
ccxt/pro/coinbaseexchange.py,sha256=taV-mCliIcc6XQjxSl2HmYHpBkOIDkxUxF2LrBSXfCc,39035
|
@@ -390,7 +390,7 @@ ccxt/pro/idex.py,sha256=WAY58yMHFUPoqZUGFvzxqcKizvMuFXqdZ6BD0WgstQA,28361
|
|
390
390
|
ccxt/pro/independentreserve.py,sha256=1RDkNQ0IKyC84GQRmgl-Mvo0qoOXD3-sxX6zecGbGvU,11214
|
391
391
|
ccxt/pro/kraken.py,sha256=zzDhQN3h80gZu_JNTOx1jsIKMH4oHpzbA-_Mx7cmM5s,60920
|
392
392
|
ccxt/pro/krakenfutures.py,sha256=3qn_aDwiDtgSz31-J9dzLYNaVywhSksz39hhl0v9DoM,63989
|
393
|
-
ccxt/pro/kucoin.py,sha256=
|
393
|
+
ccxt/pro/kucoin.py,sha256=FASilISOBbj0bCxyAr0Jgpnz7riNkboWH14q1gvhwkE,52871
|
394
394
|
ccxt/pro/kucoinfutures.py,sha256=NSd0cxEGoO_yytG0KRgZUOoCvjj5UjjXD8m_tlp3pIo,50319
|
395
395
|
ccxt/pro/lbank.py,sha256=ip7zjZFvGKufpu30WN2_lFQ-ODcJVNkcJQHbz-uLfHo,35203
|
396
396
|
ccxt/pro/luno.py,sha256=AzLK0_C0Hu25ukMNkMLP_sY3D4UG9FT38oawpo4jzTg,12336
|
@@ -406,7 +406,7 @@ ccxt/pro/poloniex.py,sha256=XlnwsZYmA6p93T2C_ZE_wfWUUwujBpwWvCrkl0uDQdA,51289
|
|
406
406
|
ccxt/pro/poloniexfutures.py,sha256=iyA57Gre_58DaAUnWLGdnBEue2xSWznCuQ6c1qxTH3c,41719
|
407
407
|
ccxt/pro/probit.py,sha256=ngY30aRwNClc_q_Pirajg4-K-mJ3bvipgD2-jBuPs6g,23110
|
408
408
|
ccxt/pro/upbit.py,sha256=jxL1twQsfh0pQ_HcmPbevAcl4WdLZk7_Pg-jhapmGUs,22098
|
409
|
-
ccxt/pro/vertex.py,sha256=
|
409
|
+
ccxt/pro/vertex.py,sha256=rY_KF5iSlL6V4BlDgCNJ3lEROa6Rfqh11PiGt5JDFLI,40481
|
410
410
|
ccxt/pro/wazirx.py,sha256=LXpotTduk3fhtcJP2TWpssiOOAZGxhou5_MTK-0G7n0,30082
|
411
411
|
ccxt/pro/whitebit.py,sha256=ZoWKxOYFG3flOYHosUo6LGRs83PVgCC3trLxJbbFLpk,35069
|
412
412
|
ccxt/pro/woo.py,sha256=8TtJpGJxo1zMF5DRKyhS4L4fT4i7S1dvAgJgheU_Dhc,43677
|
@@ -546,8 +546,8 @@ ccxt/test/base/test_ticker.py,sha256=cMTIMb1oySNORUCmqI5ZzMswlEyCF6gJMah3vfvo8wQ
|
|
546
546
|
ccxt/test/base/test_trade.py,sha256=PMtmB8V38dpaP-eb8h488xYMlR6D69yCOhsA1RuWrUA,2336
|
547
547
|
ccxt/test/base/test_trading_fee.py,sha256=2aDCNJtqBkTC_AieO0l1HYGq5hz5qkWlkWb9Nv_fcwk,1066
|
548
548
|
ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
|
549
|
-
ccxt-4.3.
|
550
|
-
ccxt-4.3.
|
551
|
-
ccxt-4.3.
|
552
|
-
ccxt-4.3.
|
553
|
-
ccxt-4.3.
|
549
|
+
ccxt-4.3.54.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
|
550
|
+
ccxt-4.3.54.dist-info/METADATA,sha256=syeixMSx3faA9AqJ64WZbu2P0LRRVLBkl6GQqUCot-E,115971
|
551
|
+
ccxt-4.3.54.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
|
552
|
+
ccxt-4.3.54.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
|
553
|
+
ccxt-4.3.54.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|