ccxt 4.3.27__py2.py3-none-any.whl → 4.3.28__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ccxt might be problematic. Click here for more details.
- ccxt/__init__.py +1 -1
- ccxt/abstract/bitget.py +1 -0
- ccxt/abstract/bitmart.py +2 -1
- ccxt/ascendex.py +1 -1
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/ascendex.py +1 -1
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/bingx.py +40 -7
- ccxt/async_support/bitget.py +1 -0
- ccxt/async_support/bitmart.py +57 -2
- ccxt/async_support/bybit.py +2 -2
- ccxt/async_support/coinbase.py +1 -1
- ccxt/async_support/krakenfutures.py +1 -1
- ccxt/base/exchange.py +3 -2
- ccxt/bingx.py +40 -7
- ccxt/bitget.py +1 -0
- ccxt/bitmart.py +57 -2
- ccxt/bybit.py +2 -2
- ccxt/coinbase.py +1 -1
- ccxt/krakenfutures.py +1 -1
- ccxt/pro/__init__.py +1 -1
- ccxt/pro/coinbase.py +5 -1
- {ccxt-4.3.27.dist-info → ccxt-4.3.28.dist-info}/METADATA +4 -4
- {ccxt-4.3.27.dist-info → ccxt-4.3.28.dist-info}/RECORD +26 -26
- {ccxt-4.3.27.dist-info → ccxt-4.3.28.dist-info}/WHEEL +0 -0
- {ccxt-4.3.27.dist-info → ccxt-4.3.28.dist-info}/top_level.txt +0 -0
ccxt/__init__.py
CHANGED
ccxt/abstract/bitget.py
CHANGED
@@ -498,6 +498,7 @@ class ImplicitAPI:
|
|
498
498
|
private_earn_get_v2_earn_loan_borrow_history = privateEarnGetV2EarnLoanBorrowHistory = Entry('v2/earn/loan/borrow-history', ['private', 'earn'], 'GET', {'cost': 2})
|
499
499
|
private_earn_get_v2_earn_loan_debts = privateEarnGetV2EarnLoanDebts = Entry('v2/earn/loan/debts', ['private', 'earn'], 'GET', {'cost': 2})
|
500
500
|
private_earn_get_v2_earn_loan_reduces = privateEarnGetV2EarnLoanReduces = Entry('v2/earn/loan/reduces', ['private', 'earn'], 'GET', {'cost': 2})
|
501
|
+
private_earn_get_v2_earn_account_assets = privateEarnGetV2EarnAccountAssets = Entry('v2/earn/account/assets', ['private', 'earn'], 'GET', {'cost': 2})
|
501
502
|
private_earn_post_v2_earn_savings_subscribe = privateEarnPostV2EarnSavingsSubscribe = Entry('v2/earn/savings/subscribe', ['private', 'earn'], 'POST', {'cost': 2})
|
502
503
|
private_earn_post_v2_earn_savings_redeem = privateEarnPostV2EarnSavingsRedeem = Entry('v2/earn/savings/redeem', ['private', 'earn'], 'POST', {'cost': 2})
|
503
504
|
private_earn_post_v2_earn_sharkfin_subscribe = privateEarnPostV2EarnSharkfinSubscribe = Entry('v2/earn/sharkfin/subscribe', ['private', 'earn'], 'POST', {'cost': 2})
|
ccxt/abstract/bitmart.py
CHANGED
@@ -44,7 +44,7 @@ class ImplicitAPI:
|
|
44
44
|
private_get_spot_v1_order_detail = privateGetSpotV1OrderDetail = Entry('spot/v1/order_detail', 'private', 'GET', {'cost': 1})
|
45
45
|
private_get_spot_v2_orders = privateGetSpotV2Orders = Entry('spot/v2/orders', 'private', 'GET', {'cost': 5})
|
46
46
|
private_get_spot_v1_trades = privateGetSpotV1Trades = Entry('spot/v1/trades', 'private', 'GET', {'cost': 5})
|
47
|
-
private_get_spot_v2_trades = privateGetSpotV2Trades = Entry('spot/v2/trades', 'private', 'GET', {'cost':
|
47
|
+
private_get_spot_v2_trades = privateGetSpotV2Trades = Entry('spot/v2/trades', 'private', 'GET', {'cost': 4})
|
48
48
|
private_get_spot_v3_orders = privateGetSpotV3Orders = Entry('spot/v3/orders', 'private', 'GET', {'cost': 5})
|
49
49
|
private_get_spot_v2_order_detail = privateGetSpotV2OrderDetail = Entry('spot/v2/order_detail', 'private', 'GET', {'cost': 1})
|
50
50
|
private_get_spot_v1_margin_isolated_borrow_record = privateGetSpotV1MarginIsolatedBorrowRecord = Entry('spot/v1/margin/isolated/borrow_record', 'private', 'GET', {'cost': 1})
|
@@ -80,6 +80,7 @@ class ImplicitAPI:
|
|
80
80
|
private_post_spot_v4_query_history_orders = privatePostSpotV4QueryHistoryOrders = Entry('spot/v4/query/history-orders', 'private', 'POST', {'cost': 5})
|
81
81
|
private_post_spot_v4_query_trades = privatePostSpotV4QueryTrades = Entry('spot/v4/query/trades', 'private', 'POST', {'cost': 5})
|
82
82
|
private_post_spot_v4_query_order_trades = privatePostSpotV4QueryOrderTrades = Entry('spot/v4/query/order-trades', 'private', 'POST', {'cost': 5})
|
83
|
+
private_post_spot_v4_cancel_orders = privatePostSpotV4CancelOrders = Entry('spot/v4/cancel_orders', 'private', 'POST', {'cost': 3})
|
83
84
|
private_post_spot_v3_cancel_order = privatePostSpotV3CancelOrder = Entry('spot/v3/cancel_order', 'private', 'POST', {'cost': 1})
|
84
85
|
private_post_spot_v2_batch_orders = privatePostSpotV2BatchOrders = Entry('spot/v2/batch_orders', 'private', 'POST', {'cost': 1})
|
85
86
|
private_post_spot_v2_submit_order = privatePostSpotV2SubmitOrder = Entry('spot/v2/submit_order', 'private', 'POST', {'cost': 1})
|
ccxt/ascendex.py
CHANGED
@@ -1362,7 +1362,7 @@ class ascendex(Exchange, ImplicitAPI):
|
|
1362
1362
|
'cost': feeCost,
|
1363
1363
|
'currency': feeCurrencyCode,
|
1364
1364
|
}
|
1365
|
-
stopPrice = self.
|
1365
|
+
stopPrice = self.omit_zero(self.safe_string(order, 'stopPrice'))
|
1366
1366
|
reduceOnly = None
|
1367
1367
|
execInst = self.safe_string(order, 'execInst')
|
1368
1368
|
if execInst == 'reduceOnly':
|
ccxt/async_support/__init__.py
CHANGED
ccxt/async_support/ascendex.py
CHANGED
@@ -1362,7 +1362,7 @@ class ascendex(Exchange, ImplicitAPI):
|
|
1362
1362
|
'cost': feeCost,
|
1363
1363
|
'currency': feeCurrencyCode,
|
1364
1364
|
}
|
1365
|
-
stopPrice = self.
|
1365
|
+
stopPrice = self.omit_zero(self.safe_string(order, 'stopPrice'))
|
1366
1366
|
reduceOnly = None
|
1367
1367
|
execInst = self.safe_string(order, 'execInst')
|
1368
1368
|
if execInst == 'reduceOnly':
|
ccxt/async_support/bingx.py
CHANGED
@@ -2079,6 +2079,10 @@ class bingx(Exchange, ImplicitAPI):
|
|
2079
2079
|
types = {
|
2080
2080
|
'trigger_market': 'market',
|
2081
2081
|
'trigger_limit': 'limit',
|
2082
|
+
'stop_limit': 'limit',
|
2083
|
+
'stop_market': 'market',
|
2084
|
+
'take_profit_market': 'market',
|
2085
|
+
'stop': 'limit',
|
2082
2086
|
}
|
2083
2087
|
return self.safe_string(types, type, type)
|
2084
2088
|
|
@@ -2282,6 +2286,25 @@ class bingx(Exchange, ImplicitAPI):
|
|
2282
2286
|
# side: 'SELL'
|
2283
2287
|
# }
|
2284
2288
|
# }
|
2289
|
+
# stop loss order
|
2290
|
+
# {
|
2291
|
+
# "symbol": "ETH-USDT",
|
2292
|
+
# "orderId": "1792461744476422144",
|
2293
|
+
# "price": "2775.65",
|
2294
|
+
# "StopPrice": "2778.42",
|
2295
|
+
# "origQty": "0.032359",
|
2296
|
+
# "executedQty": "0",
|
2297
|
+
# "cummulativeQuoteQty": "0",
|
2298
|
+
# "status": "NEW",
|
2299
|
+
# "type": "TAKE_STOP_LIMIT",
|
2300
|
+
# "side": "SELL",
|
2301
|
+
# "time": "1716191156868",
|
2302
|
+
# "updateTime": "1716191156868",
|
2303
|
+
# "origQuoteOrderQty": "0",
|
2304
|
+
# "fee": "0",
|
2305
|
+
# "feeAsset": "USDT",
|
2306
|
+
# "clientOrderID": ""
|
2307
|
+
# }
|
2285
2308
|
#
|
2286
2309
|
info = order
|
2287
2310
|
newOrder = self.safe_dict_2(order, 'newOrderResponse', 'orderOpenResponse')
|
@@ -2309,21 +2332,31 @@ class bingx(Exchange, ImplicitAPI):
|
|
2309
2332
|
stopLoss = self.safe_value(order, 'stopLoss')
|
2310
2333
|
stopLossPrice = None
|
2311
2334
|
if (stopLoss is not None) and (stopLoss != ''):
|
2312
|
-
stopLossPrice = self.
|
2335
|
+
stopLossPrice = self.omit_zero(self.safe_string(stopLoss, 'stopLoss'))
|
2313
2336
|
if (stopLoss is not None) and ((not isinstance(stopLoss, numbers.Real))) and (stopLoss != ''):
|
2314
2337
|
# stopLoss: '{"stopPrice":50,"workingType":"MARK_PRICE","type":"STOP_MARKET","quantity":1}',
|
2315
2338
|
if isinstance(stopLoss, str):
|
2316
2339
|
stopLoss = self.parse_json(stopLoss)
|
2317
|
-
stopLossPrice = self.
|
2340
|
+
stopLossPrice = self.omit_zero(self.safe_string(stopLoss, 'stopPrice'))
|
2318
2341
|
takeProfit = self.safe_value(order, 'takeProfit')
|
2319
2342
|
takeProfitPrice = None
|
2320
2343
|
if takeProfit is not None and (takeProfit != ''):
|
2321
|
-
takeProfitPrice = self.
|
2344
|
+
takeProfitPrice = self.omit_zero(self.safe_string(takeProfit, 'takeProfit'))
|
2322
2345
|
if (takeProfit is not None) and ((not isinstance(takeProfit, numbers.Real))) and (takeProfit != ''):
|
2323
2346
|
# takeProfit: '{"stopPrice":150,"workingType":"MARK_PRICE","type":"TAKE_PROFIT_MARKET","quantity":1}',
|
2324
2347
|
if isinstance(takeProfit, str):
|
2325
2348
|
takeProfit = self.parse_json(takeProfit)
|
2326
|
-
takeProfitPrice = self.
|
2349
|
+
takeProfitPrice = self.omit_zero(self.safe_string(takeProfit, 'stopPrice'))
|
2350
|
+
rawType = self.safe_string_lower_2(order, 'type', 'o')
|
2351
|
+
stopPrice = self.omit_zero(self.safe_string_2(order, 'StopPrice', 'stopPrice'))
|
2352
|
+
triggerPrice = stopPrice
|
2353
|
+
if stopPrice is not None:
|
2354
|
+
if (rawType.find('stop') > -1) and (stopLossPrice is None):
|
2355
|
+
stopLossPrice = stopPrice
|
2356
|
+
triggerPrice = None
|
2357
|
+
if (rawType.find('take') > -1) and (takeProfitPrice is None):
|
2358
|
+
takeProfitPrice = stopPrice
|
2359
|
+
triggerPrice = None
|
2327
2360
|
return self.safe_order({
|
2328
2361
|
'info': info,
|
2329
2362
|
'id': self.safe_string_2(order, 'orderId', 'i'),
|
@@ -2333,13 +2366,13 @@ class bingx(Exchange, ImplicitAPI):
|
|
2333
2366
|
'datetime': self.iso8601(timestamp),
|
2334
2367
|
'lastTradeTimestamp': lastTradeTimestamp,
|
2335
2368
|
'lastUpdateTimestamp': self.safe_integer(order, 'updateTime'),
|
2336
|
-
'type': self.parse_order_type(
|
2369
|
+
'type': self.parse_order_type(rawType),
|
2337
2370
|
'timeInForce': self.safe_string(order, 'timeInForce'),
|
2338
2371
|
'postOnly': None,
|
2339
2372
|
'side': self.parse_order_side(side),
|
2340
2373
|
'price': self.safe_string_2(order, 'price', 'p'),
|
2341
|
-
'stopPrice':
|
2342
|
-
'triggerPrice':
|
2374
|
+
'stopPrice': triggerPrice,
|
2375
|
+
'triggerPrice': triggerPrice,
|
2343
2376
|
'stopLossPrice': stopLossPrice,
|
2344
2377
|
'takeProfitPrice': takeProfitPrice,
|
2345
2378
|
'average': self.safe_string_2(order, 'avgPrice', 'ap'),
|
ccxt/async_support/bitget.py
CHANGED
ccxt/async_support/bitmart.py
CHANGED
@@ -54,7 +54,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
54
54
|
'borrowIsolatedMargin': True,
|
55
55
|
'cancelAllOrders': True,
|
56
56
|
'cancelOrder': True,
|
57
|
-
'cancelOrders':
|
57
|
+
'cancelOrders': True,
|
58
58
|
'createMarketBuyOrderWithCost': True,
|
59
59
|
'createMarketOrderWithCost': False,
|
60
60
|
'createMarketSellOrderWithCost': False,
|
@@ -198,7 +198,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
198
198
|
'spot/v2/orders': 5,
|
199
199
|
'spot/v1/trades': 5,
|
200
200
|
# newer order endpoint
|
201
|
-
'spot/v2/trades':
|
201
|
+
'spot/v2/trades': 4,
|
202
202
|
'spot/v3/orders': 5,
|
203
203
|
'spot/v2/order_detail': 1,
|
204
204
|
# margin
|
@@ -242,6 +242,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
242
242
|
'spot/v4/query/history-orders': 5, # 12 times/2 sec = 6/s => 30/6 = 5
|
243
243
|
'spot/v4/query/trades': 5, # 12 times/2 sec = 6/s => 30/6 = 5
|
244
244
|
'spot/v4/query/order-trades': 5, # 12 times/2 sec = 6/s => 30/6 = 5
|
245
|
+
'spot/v4/cancel_orders': 3,
|
245
246
|
# newer endpoint
|
246
247
|
'spot/v3/cancel_order': 1,
|
247
248
|
'spot/v2/batch_orders': 1,
|
@@ -2523,6 +2524,60 @@ class bitmart(Exchange, ImplicitAPI):
|
|
2523
2524
|
order = self.parse_order(id, market)
|
2524
2525
|
return self.extend(order, {'id': id})
|
2525
2526
|
|
2527
|
+
async def cancel_orders(self, ids: List[str], symbol: Str = None, params={}):
|
2528
|
+
"""
|
2529
|
+
cancel multiple orders
|
2530
|
+
:see: https://developer-pro.bitmart.com/en/spot/#cancel-batch-order-v4-signed
|
2531
|
+
:param str[] ids: order ids
|
2532
|
+
:param str symbol: unified symbol of the market the order was made in
|
2533
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2534
|
+
:param str[] [params.clientOrderIds]: client order ids
|
2535
|
+
:returns dict: an list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
2536
|
+
"""
|
2537
|
+
if symbol is None:
|
2538
|
+
raise ArgumentsRequired(self.id + ' cancelOrders() requires a symbol argument')
|
2539
|
+
await self.load_markets()
|
2540
|
+
market = self.market(symbol)
|
2541
|
+
if not market['spot']:
|
2542
|
+
raise NotSupported(self.id + ' cancelOrders() does not support ' + market['type'] + ' orders, only spot orders are accepted')
|
2543
|
+
clientOrderIds = self.safe_list(params, 'clientOrderIds')
|
2544
|
+
params = self.omit(params, ['clientOrderIds'])
|
2545
|
+
request = {
|
2546
|
+
'symbol': market['id'],
|
2547
|
+
}
|
2548
|
+
if clientOrderIds is not None:
|
2549
|
+
request['clientOrderIds'] = clientOrderIds
|
2550
|
+
else:
|
2551
|
+
request['orderIds'] = ids
|
2552
|
+
response = await self.privatePostSpotV4CancelOrders(self.extend(request, params))
|
2553
|
+
#
|
2554
|
+
# {
|
2555
|
+
# "message": "OK",
|
2556
|
+
# "code": 1000,
|
2557
|
+
# "trace": "c4edbce860164203954f7c3c81d60fc6.309.17022669632770001",
|
2558
|
+
# "data": {
|
2559
|
+
# "successIds": [
|
2560
|
+
# "213055379155243012"
|
2561
|
+
# ],
|
2562
|
+
# "failIds": [],
|
2563
|
+
# "totalCount": 1,
|
2564
|
+
# "successCount": 1,
|
2565
|
+
# "failedCount": 0
|
2566
|
+
# }
|
2567
|
+
# }
|
2568
|
+
#
|
2569
|
+
data = self.safe_dict(response, 'data', {})
|
2570
|
+
allOrders = []
|
2571
|
+
successIds = self.safe_list(data, 'successIds', [])
|
2572
|
+
for i in range(0, len(successIds)):
|
2573
|
+
id = successIds[i]
|
2574
|
+
allOrders.append(self.safe_order({'id': id, 'status': 'canceled'}, market))
|
2575
|
+
failIds = self.safe_list(data, 'failIds', [])
|
2576
|
+
for i in range(0, len(failIds)):
|
2577
|
+
id = failIds[i]
|
2578
|
+
allOrders.append(self.safe_order({'id': id, 'status': 'failed'}, market))
|
2579
|
+
return allOrders
|
2580
|
+
|
2526
2581
|
async def cancel_all_orders(self, symbol: Str = None, params={}):
|
2527
2582
|
"""
|
2528
2583
|
cancel all open orders in a market
|
ccxt/async_support/bybit.py
CHANGED
@@ -2401,12 +2401,12 @@ class bybit(Exchange, ImplicitAPI):
|
|
2401
2401
|
if symbol is None:
|
2402
2402
|
raise ArgumentsRequired(self.id + ' fetchFundingRateHistory() requires a symbol argument')
|
2403
2403
|
await self.load_markets()
|
2404
|
-
if limit is None:
|
2405
|
-
limit = 200
|
2406
2404
|
paginate = False
|
2407
2405
|
paginate, params = self.handle_option_and_params(params, 'fetchFundingRateHistory', 'paginate')
|
2408
2406
|
if paginate:
|
2409
2407
|
return await self.fetch_paginated_call_deterministic('fetchFundingRateHistory', symbol, since, limit, '8h', params, 200)
|
2408
|
+
if limit is None:
|
2409
|
+
limit = 200
|
2410
2410
|
request = {
|
2411
2411
|
# 'category': '', # Product type. linear,inverse
|
2412
2412
|
# 'symbol': '', # Symbol name
|
ccxt/async_support/coinbase.py
CHANGED
@@ -2845,7 +2845,7 @@ class coinbase(Exchange, ImplicitAPI):
|
|
2845
2845
|
marketId = self.safe_string(order, 'product_id')
|
2846
2846
|
symbol = self.safe_symbol(marketId, market, '-')
|
2847
2847
|
if symbol is not None:
|
2848
|
-
market = self.
|
2848
|
+
market = self.safe_market(symbol, market)
|
2849
2849
|
orderConfiguration = self.safe_dict(order, 'order_configuration', {})
|
2850
2850
|
limitGTC = self.safe_dict(orderConfiguration, 'limit_limit_gtc')
|
2851
2851
|
limitGTD = self.safe_dict(orderConfiguration, 'limit_limit_gtd')
|
@@ -2099,7 +2099,7 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
2099
2099
|
|
2100
2100
|
async def fetch_positions(self, symbols: Strings = None, params={}):
|
2101
2101
|
"""
|
2102
|
-
:see: https://docs.futures.kraken.com/#
|
2102
|
+
:see: https://docs.futures.kraken.com/#http-api-trading-v3-api-account-information-get-open-positions
|
2103
2103
|
Fetches current contract trading positions
|
2104
2104
|
:param str[] symbols: List of unified symbols
|
2105
2105
|
:param dict [params]: Not used by krakenfutures
|
ccxt/base/exchange.py
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
# -----------------------------------------------------------------------------
|
6
6
|
|
7
|
-
__version__ = '4.3.
|
7
|
+
__version__ = '4.3.28'
|
8
8
|
|
9
9
|
# -----------------------------------------------------------------------------
|
10
10
|
|
@@ -2655,6 +2655,7 @@ class Exchange(object):
|
|
2655
2655
|
shouldParseFees = parseFee or parseFees
|
2656
2656
|
fees = self.safe_list(order, 'fees', [])
|
2657
2657
|
trades = []
|
2658
|
+
isTriggerOrSLTpOrder = ((self.safe_string(order, 'triggerPrice') is not None or (self.safe_string(order, 'stopLossPrice') is not None)) or (self.safe_string(order, 'takeProfitPrice') is not None))
|
2658
2659
|
if parseFilled or parseCost or shouldParseFees:
|
2659
2660
|
rawTrades = self.safe_value(order, 'trades', trades)
|
2660
2661
|
oldNumber = self.number
|
@@ -2805,7 +2806,7 @@ class Exchange(object):
|
|
2805
2806
|
postOnly = self.safe_value(order, 'postOnly')
|
2806
2807
|
# timeInForceHandling
|
2807
2808
|
if timeInForce is None:
|
2808
|
-
if self.safe_string(order, 'type') == 'market':
|
2809
|
+
if not isTriggerOrSLTpOrder and (self.safe_string(order, 'type') == 'market'):
|
2809
2810
|
timeInForce = 'IOC'
|
2810
2811
|
# allow postOnly override
|
2811
2812
|
if postOnly:
|
ccxt/bingx.py
CHANGED
@@ -2078,6 +2078,10 @@ class bingx(Exchange, ImplicitAPI):
|
|
2078
2078
|
types = {
|
2079
2079
|
'trigger_market': 'market',
|
2080
2080
|
'trigger_limit': 'limit',
|
2081
|
+
'stop_limit': 'limit',
|
2082
|
+
'stop_market': 'market',
|
2083
|
+
'take_profit_market': 'market',
|
2084
|
+
'stop': 'limit',
|
2081
2085
|
}
|
2082
2086
|
return self.safe_string(types, type, type)
|
2083
2087
|
|
@@ -2281,6 +2285,25 @@ class bingx(Exchange, ImplicitAPI):
|
|
2281
2285
|
# side: 'SELL'
|
2282
2286
|
# }
|
2283
2287
|
# }
|
2288
|
+
# stop loss order
|
2289
|
+
# {
|
2290
|
+
# "symbol": "ETH-USDT",
|
2291
|
+
# "orderId": "1792461744476422144",
|
2292
|
+
# "price": "2775.65",
|
2293
|
+
# "StopPrice": "2778.42",
|
2294
|
+
# "origQty": "0.032359",
|
2295
|
+
# "executedQty": "0",
|
2296
|
+
# "cummulativeQuoteQty": "0",
|
2297
|
+
# "status": "NEW",
|
2298
|
+
# "type": "TAKE_STOP_LIMIT",
|
2299
|
+
# "side": "SELL",
|
2300
|
+
# "time": "1716191156868",
|
2301
|
+
# "updateTime": "1716191156868",
|
2302
|
+
# "origQuoteOrderQty": "0",
|
2303
|
+
# "fee": "0",
|
2304
|
+
# "feeAsset": "USDT",
|
2305
|
+
# "clientOrderID": ""
|
2306
|
+
# }
|
2284
2307
|
#
|
2285
2308
|
info = order
|
2286
2309
|
newOrder = self.safe_dict_2(order, 'newOrderResponse', 'orderOpenResponse')
|
@@ -2308,21 +2331,31 @@ class bingx(Exchange, ImplicitAPI):
|
|
2308
2331
|
stopLoss = self.safe_value(order, 'stopLoss')
|
2309
2332
|
stopLossPrice = None
|
2310
2333
|
if (stopLoss is not None) and (stopLoss != ''):
|
2311
|
-
stopLossPrice = self.
|
2334
|
+
stopLossPrice = self.omit_zero(self.safe_string(stopLoss, 'stopLoss'))
|
2312
2335
|
if (stopLoss is not None) and ((not isinstance(stopLoss, numbers.Real))) and (stopLoss != ''):
|
2313
2336
|
# stopLoss: '{"stopPrice":50,"workingType":"MARK_PRICE","type":"STOP_MARKET","quantity":1}',
|
2314
2337
|
if isinstance(stopLoss, str):
|
2315
2338
|
stopLoss = self.parse_json(stopLoss)
|
2316
|
-
stopLossPrice = self.
|
2339
|
+
stopLossPrice = self.omit_zero(self.safe_string(stopLoss, 'stopPrice'))
|
2317
2340
|
takeProfit = self.safe_value(order, 'takeProfit')
|
2318
2341
|
takeProfitPrice = None
|
2319
2342
|
if takeProfit is not None and (takeProfit != ''):
|
2320
|
-
takeProfitPrice = self.
|
2343
|
+
takeProfitPrice = self.omit_zero(self.safe_string(takeProfit, 'takeProfit'))
|
2321
2344
|
if (takeProfit is not None) and ((not isinstance(takeProfit, numbers.Real))) and (takeProfit != ''):
|
2322
2345
|
# takeProfit: '{"stopPrice":150,"workingType":"MARK_PRICE","type":"TAKE_PROFIT_MARKET","quantity":1}',
|
2323
2346
|
if isinstance(takeProfit, str):
|
2324
2347
|
takeProfit = self.parse_json(takeProfit)
|
2325
|
-
takeProfitPrice = self.
|
2348
|
+
takeProfitPrice = self.omit_zero(self.safe_string(takeProfit, 'stopPrice'))
|
2349
|
+
rawType = self.safe_string_lower_2(order, 'type', 'o')
|
2350
|
+
stopPrice = self.omit_zero(self.safe_string_2(order, 'StopPrice', 'stopPrice'))
|
2351
|
+
triggerPrice = stopPrice
|
2352
|
+
if stopPrice is not None:
|
2353
|
+
if (rawType.find('stop') > -1) and (stopLossPrice is None):
|
2354
|
+
stopLossPrice = stopPrice
|
2355
|
+
triggerPrice = None
|
2356
|
+
if (rawType.find('take') > -1) and (takeProfitPrice is None):
|
2357
|
+
takeProfitPrice = stopPrice
|
2358
|
+
triggerPrice = None
|
2326
2359
|
return self.safe_order({
|
2327
2360
|
'info': info,
|
2328
2361
|
'id': self.safe_string_2(order, 'orderId', 'i'),
|
@@ -2332,13 +2365,13 @@ class bingx(Exchange, ImplicitAPI):
|
|
2332
2365
|
'datetime': self.iso8601(timestamp),
|
2333
2366
|
'lastTradeTimestamp': lastTradeTimestamp,
|
2334
2367
|
'lastUpdateTimestamp': self.safe_integer(order, 'updateTime'),
|
2335
|
-
'type': self.parse_order_type(
|
2368
|
+
'type': self.parse_order_type(rawType),
|
2336
2369
|
'timeInForce': self.safe_string(order, 'timeInForce'),
|
2337
2370
|
'postOnly': None,
|
2338
2371
|
'side': self.parse_order_side(side),
|
2339
2372
|
'price': self.safe_string_2(order, 'price', 'p'),
|
2340
|
-
'stopPrice':
|
2341
|
-
'triggerPrice':
|
2373
|
+
'stopPrice': triggerPrice,
|
2374
|
+
'triggerPrice': triggerPrice,
|
2342
2375
|
'stopLossPrice': stopLossPrice,
|
2343
2376
|
'takeProfitPrice': takeProfitPrice,
|
2344
2377
|
'average': self.safe_string_2(order, 'avgPrice', 'ap'),
|
ccxt/bitget.py
CHANGED
ccxt/bitmart.py
CHANGED
@@ -54,7 +54,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
54
54
|
'borrowIsolatedMargin': True,
|
55
55
|
'cancelAllOrders': True,
|
56
56
|
'cancelOrder': True,
|
57
|
-
'cancelOrders':
|
57
|
+
'cancelOrders': True,
|
58
58
|
'createMarketBuyOrderWithCost': True,
|
59
59
|
'createMarketOrderWithCost': False,
|
60
60
|
'createMarketSellOrderWithCost': False,
|
@@ -198,7 +198,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
198
198
|
'spot/v2/orders': 5,
|
199
199
|
'spot/v1/trades': 5,
|
200
200
|
# newer order endpoint
|
201
|
-
'spot/v2/trades':
|
201
|
+
'spot/v2/trades': 4,
|
202
202
|
'spot/v3/orders': 5,
|
203
203
|
'spot/v2/order_detail': 1,
|
204
204
|
# margin
|
@@ -242,6 +242,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
242
242
|
'spot/v4/query/history-orders': 5, # 12 times/2 sec = 6/s => 30/6 = 5
|
243
243
|
'spot/v4/query/trades': 5, # 12 times/2 sec = 6/s => 30/6 = 5
|
244
244
|
'spot/v4/query/order-trades': 5, # 12 times/2 sec = 6/s => 30/6 = 5
|
245
|
+
'spot/v4/cancel_orders': 3,
|
245
246
|
# newer endpoint
|
246
247
|
'spot/v3/cancel_order': 1,
|
247
248
|
'spot/v2/batch_orders': 1,
|
@@ -2523,6 +2524,60 @@ class bitmart(Exchange, ImplicitAPI):
|
|
2523
2524
|
order = self.parse_order(id, market)
|
2524
2525
|
return self.extend(order, {'id': id})
|
2525
2526
|
|
2527
|
+
def cancel_orders(self, ids: List[str], symbol: Str = None, params={}):
|
2528
|
+
"""
|
2529
|
+
cancel multiple orders
|
2530
|
+
:see: https://developer-pro.bitmart.com/en/spot/#cancel-batch-order-v4-signed
|
2531
|
+
:param str[] ids: order ids
|
2532
|
+
:param str symbol: unified symbol of the market the order was made in
|
2533
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2534
|
+
:param str[] [params.clientOrderIds]: client order ids
|
2535
|
+
:returns dict: an list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
2536
|
+
"""
|
2537
|
+
if symbol is None:
|
2538
|
+
raise ArgumentsRequired(self.id + ' cancelOrders() requires a symbol argument')
|
2539
|
+
self.load_markets()
|
2540
|
+
market = self.market(symbol)
|
2541
|
+
if not market['spot']:
|
2542
|
+
raise NotSupported(self.id + ' cancelOrders() does not support ' + market['type'] + ' orders, only spot orders are accepted')
|
2543
|
+
clientOrderIds = self.safe_list(params, 'clientOrderIds')
|
2544
|
+
params = self.omit(params, ['clientOrderIds'])
|
2545
|
+
request = {
|
2546
|
+
'symbol': market['id'],
|
2547
|
+
}
|
2548
|
+
if clientOrderIds is not None:
|
2549
|
+
request['clientOrderIds'] = clientOrderIds
|
2550
|
+
else:
|
2551
|
+
request['orderIds'] = ids
|
2552
|
+
response = self.privatePostSpotV4CancelOrders(self.extend(request, params))
|
2553
|
+
#
|
2554
|
+
# {
|
2555
|
+
# "message": "OK",
|
2556
|
+
# "code": 1000,
|
2557
|
+
# "trace": "c4edbce860164203954f7c3c81d60fc6.309.17022669632770001",
|
2558
|
+
# "data": {
|
2559
|
+
# "successIds": [
|
2560
|
+
# "213055379155243012"
|
2561
|
+
# ],
|
2562
|
+
# "failIds": [],
|
2563
|
+
# "totalCount": 1,
|
2564
|
+
# "successCount": 1,
|
2565
|
+
# "failedCount": 0
|
2566
|
+
# }
|
2567
|
+
# }
|
2568
|
+
#
|
2569
|
+
data = self.safe_dict(response, 'data', {})
|
2570
|
+
allOrders = []
|
2571
|
+
successIds = self.safe_list(data, 'successIds', [])
|
2572
|
+
for i in range(0, len(successIds)):
|
2573
|
+
id = successIds[i]
|
2574
|
+
allOrders.append(self.safe_order({'id': id, 'status': 'canceled'}, market))
|
2575
|
+
failIds = self.safe_list(data, 'failIds', [])
|
2576
|
+
for i in range(0, len(failIds)):
|
2577
|
+
id = failIds[i]
|
2578
|
+
allOrders.append(self.safe_order({'id': id, 'status': 'failed'}, market))
|
2579
|
+
return allOrders
|
2580
|
+
|
2526
2581
|
def cancel_all_orders(self, symbol: Str = None, params={}):
|
2527
2582
|
"""
|
2528
2583
|
cancel all open orders in a market
|
ccxt/bybit.py
CHANGED
@@ -2400,12 +2400,12 @@ class bybit(Exchange, ImplicitAPI):
|
|
2400
2400
|
if symbol is None:
|
2401
2401
|
raise ArgumentsRequired(self.id + ' fetchFundingRateHistory() requires a symbol argument')
|
2402
2402
|
self.load_markets()
|
2403
|
-
if limit is None:
|
2404
|
-
limit = 200
|
2405
2403
|
paginate = False
|
2406
2404
|
paginate, params = self.handle_option_and_params(params, 'fetchFundingRateHistory', 'paginate')
|
2407
2405
|
if paginate:
|
2408
2406
|
return self.fetch_paginated_call_deterministic('fetchFundingRateHistory', symbol, since, limit, '8h', params, 200)
|
2407
|
+
if limit is None:
|
2408
|
+
limit = 200
|
2409
2409
|
request = {
|
2410
2410
|
# 'category': '', # Product type. linear,inverse
|
2411
2411
|
# 'symbol': '', # Symbol name
|
ccxt/coinbase.py
CHANGED
@@ -2844,7 +2844,7 @@ class coinbase(Exchange, ImplicitAPI):
|
|
2844
2844
|
marketId = self.safe_string(order, 'product_id')
|
2845
2845
|
symbol = self.safe_symbol(marketId, market, '-')
|
2846
2846
|
if symbol is not None:
|
2847
|
-
market = self.
|
2847
|
+
market = self.safe_market(symbol, market)
|
2848
2848
|
orderConfiguration = self.safe_dict(order, 'order_configuration', {})
|
2849
2849
|
limitGTC = self.safe_dict(orderConfiguration, 'limit_limit_gtc')
|
2850
2850
|
limitGTD = self.safe_dict(orderConfiguration, 'limit_limit_gtd')
|
ccxt/krakenfutures.py
CHANGED
@@ -2099,7 +2099,7 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
2099
2099
|
|
2100
2100
|
def fetch_positions(self, symbols: Strings = None, params={}):
|
2101
2101
|
"""
|
2102
|
-
:see: https://docs.futures.kraken.com/#
|
2102
|
+
:see: https://docs.futures.kraken.com/#http-api-trading-v3-api-account-information-get-open-positions
|
2103
2103
|
Fetches current contract trading positions
|
2104
2104
|
:param str[] symbols: List of unified symbols
|
2105
2105
|
:param dict [params]: Not used by krakenfutures
|
ccxt/pro/__init__.py
CHANGED
ccxt/pro/coinbase.py
CHANGED
@@ -235,13 +235,17 @@ class coinbase(ccxt.async_support.coinbase):
|
|
235
235
|
#
|
236
236
|
channel = self.safe_string(message, 'channel')
|
237
237
|
events = self.safe_value(message, 'events', [])
|
238
|
+
datetime = self.safe_string(message, 'timestamp')
|
239
|
+
timestamp = self.parse8601(datetime)
|
238
240
|
newTickers = []
|
239
241
|
for i in range(0, len(events)):
|
240
242
|
tickersObj = events[i]
|
241
|
-
tickers = self.
|
243
|
+
tickers = self.safe_list(tickersObj, 'tickers', [])
|
242
244
|
for j in range(0, len(tickers)):
|
243
245
|
ticker = tickers[j]
|
244
246
|
result = self.parse_ws_ticker(ticker)
|
247
|
+
result['timestamp'] = timestamp
|
248
|
+
result['datetime'] = datetime
|
245
249
|
symbol = result['symbol']
|
246
250
|
self.tickers[symbol] = result
|
247
251
|
wsMarketId = self.safe_string(ticker, 'product_id')
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 4.3.
|
3
|
+
Version: 4.3.28
|
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
|
@@ -264,13 +264,13 @@ console.log(version, Object.keys(exchanges));
|
|
264
264
|
|
265
265
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
266
266
|
|
267
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.
|
268
|
-
* unpkg: https://unpkg.com/ccxt@4.3.
|
267
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.28/dist/ccxt.browser.js
|
268
|
+
* unpkg: https://unpkg.com/ccxt@4.3.28/dist/ccxt.browser.js
|
269
269
|
|
270
270
|
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.
|
271
271
|
|
272
272
|
```HTML
|
273
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.
|
273
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.28/dist/ccxt.browser.js"></script>
|
274
274
|
```
|
275
275
|
|
276
276
|
Creates a global `ccxt` object:
|
@@ -1,14 +1,14 @@
|
|
1
|
-
ccxt/__init__.py,sha256=
|
1
|
+
ccxt/__init__.py,sha256=y9ibHoknr34vyvCrhDBH-r14mG_nf8qe0VS_YRQiEbw,15950
|
2
2
|
ccxt/ace.py,sha256=IAbVQ73OhU5xdTLO6dtedqa3bSuZ63Me55Se1zotYUY,41656
|
3
3
|
ccxt/alpaca.py,sha256=NadHil-XkNFteqE7GwzIhKCCRjQ7m0xBQBCUlKxS6Sc,47215
|
4
|
-
ccxt/ascendex.py,sha256=
|
4
|
+
ccxt/ascendex.py,sha256=ZlHotewbbcpvMJfqBoAD1UqWo-xTw3qBJO5wfX5z6hs,151487
|
5
5
|
ccxt/bequant.py,sha256=RBiAmaTbL35DgiV3Hl6uchLUd78V0z1T9riTlNsrpdc,1174
|
6
6
|
ccxt/bigone.py,sha256=XyWou4LP3aF9QoA8tro4DfAmDNDwcIRp_L3J7pTNICc,92209
|
7
7
|
ccxt/binance.py,sha256=IojU3Tkcp9qPaaoYYcbpnZ2Mu8SmA6mS-R7KMOghJus,617548
|
8
8
|
ccxt/binancecoinm.py,sha256=pncdw6Xw2X1Po-vEvAB4nL37scoS_axGAVxetPy1YQs,1645
|
9
9
|
ccxt/binanceus.py,sha256=hdcT4OnadcdFFFjF3GtM0nWv90jqojqwdVS3xWGuW40,9163
|
10
10
|
ccxt/binanceusdm.py,sha256=KPQGlCalQ0eGlPCs2tSanOxaP8O0zFRQjGntA16Yprw,2480
|
11
|
-
ccxt/bingx.py,sha256=
|
11
|
+
ccxt/bingx.py,sha256=3pm-A5kbgmShKYAxPWNe6oermixpZHM7-Di7m_JiKFM,186172
|
12
12
|
ccxt/bit2c.py,sha256=cuqPGkIRA7k0nDLLkL2wFjQLi7SJPiO_IMw6kAckIHM,36907
|
13
13
|
ccxt/bitbank.py,sha256=DcA2I_e1tLJyIeLqcDiFsfLuDJxFDUFfcQery4gn1lc,41845
|
14
14
|
ccxt/bitbay.py,sha256=xAIjzGRDVGwoy-Gygd99H0YN4wiaz_0lR0Z14oxaaxc,478
|
@@ -17,9 +17,9 @@ ccxt/bitcoincom.py,sha256=PyWIl4nC4jp5Uba2lI1At0N_hhNyWD0DoZC_MSyL_s4,502
|
|
17
17
|
ccxt/bitfinex.py,sha256=vxAmPp9rZKPLb1k8hkWjdv8r8lMx9WmdL5uRs-rZIgY,72278
|
18
18
|
ccxt/bitfinex2.py,sha256=vM8zqvKqufDCcgXjNlUTrJf069f_-ZgLA6kdGFdlhuI,158515
|
19
19
|
ccxt/bitflyer.py,sha256=xY72j19f0YM8CnU0UN_Kv-RteE1NdtMvs_kMxBimCVA,41397
|
20
|
-
ccxt/bitget.py,sha256=
|
20
|
+
ccxt/bitget.py,sha256=4eCSkzz-DuRoBIXdm3aeuevJksBWa4t9I4qDGxbIWa4,422574
|
21
21
|
ccxt/bithumb.py,sha256=JPlhrlnPGyvSztPiNVHSDIx5fjVoHvPGsD8vx1yFfF8,45534
|
22
|
-
ccxt/bitmart.py,sha256=
|
22
|
+
ccxt/bitmart.py,sha256=v_HgD8hwiandqWHbTkvgpJTbfc4IMpHEKYhvGewsbWI,201529
|
23
23
|
ccxt/bitmex.py,sha256=PxRDGNFOToB2fFulw0Z3XEklLhFmKF_rRfx8LpDtgoo,126584
|
24
24
|
ccxt/bitopro.py,sha256=Ph0uhgzUJzNKji_bIs9SxbY72U7Fu-6QWr2i6WMKB7M,68522
|
25
25
|
ccxt/bitpanda.py,sha256=aiwPkx9lKbVzt4ggoYdq_mIbMGtg5ZtGl2yRHO5xyz8,471
|
@@ -35,9 +35,9 @@ ccxt/btcalpha.py,sha256=gr0o6e__HMwRLaaiLpuMCEHuow4ipjwa5vCY80bgR6w,36701
|
|
35
35
|
ccxt/btcbox.py,sha256=M-aOkxcyv6N3-32u1gfCWAo9_tO98mY9Z6pqNQprtYw,23492
|
36
36
|
ccxt/btcmarkets.py,sha256=hz5nGYJUku1EjoCFGlq3Wfas-H9nInG4gKYw6kPyU74,51484
|
37
37
|
ccxt/btcturk.py,sha256=9RFC0mCWjW_jW8Hgz5cuwb1gaeLf469FOXae4p_KQJM,36657
|
38
|
-
ccxt/bybit.py,sha256
|
38
|
+
ccxt/bybit.py,sha256=-vuoIx5NvDwpfLxHzf87S9X19JrkpJvTIK0OG77-JzA,412519
|
39
39
|
ccxt/cex.py,sha256=_EDbKQQiIKS5UVztu1wrQq-WQPJxa3GnLelfOkd6O2k,69930
|
40
|
-
ccxt/coinbase.py,sha256=
|
40
|
+
ccxt/coinbase.py,sha256=cU-5zjrlYCX_QdH7j8EGRL2xSkZxsrtD1czXvNJY7lU,212324
|
41
41
|
ccxt/coinbaseadvanced.py,sha256=d5g6nRx-NCcCwZDdtp8FsI2D-pRjSvnAP9ISSKY_nCQ,538
|
42
42
|
ccxt/coinbaseexchange.py,sha256=FeSNMY_lAzYAs3X9QmDCMSHScdyUW-nLv78AoMIPK78,78704
|
43
43
|
ccxt/coinbaseinternational.py,sha256=wieWUwsLsBYAgNpvnnrKseqAE7aOw__apSP6MQK9u9E,87240
|
@@ -70,7 +70,7 @@ ccxt/idex.py,sha256=yU8HDWBpXS3GREJFdYdGXcp18vj9RAB1E0R4BoXbWVQ,72998
|
|
70
70
|
ccxt/independentreserve.py,sha256=iobtHiT8KlD1-mDJeoZCzPEPteSZz512mxgnrTnsECo,32175
|
71
71
|
ccxt/indodax.py,sha256=ulvlP7-xpQWXrBfvRn-GWMoOXr_4MBBMrkTDDgM4fbQ,51921
|
72
72
|
ccxt/kraken.py,sha256=dQfatDpJQ7jfMd6lHbpvI509HrYOsREg-Pxtq-fFeAY,128194
|
73
|
-
ccxt/krakenfutures.py,sha256=
|
73
|
+
ccxt/krakenfutures.py,sha256=LRG3FXlYbjnEVi5KUESy9OBPDevTGvnWEWPAtvX0CVU,116855
|
74
74
|
ccxt/kucoin.py,sha256=0YqwMhzxBt_cmOgZj_JPJ5tOF7QrFJXzyvBrheJiuT4,217796
|
75
75
|
ccxt/kucoinfutures.py,sha256=x5m2yqC5ZEIaKCBmM8alKJ7tk2r9nzpMC-PcpfadnRo,124327
|
76
76
|
ccxt/kuna.py,sha256=Q1FuK9RvZmEYN87G3bHsVhcUcclMApuFVDNv5njyaRU,95991
|
@@ -123,9 +123,9 @@ ccxt/abstract/bitcoincom.py,sha256=OTBtNu3DQeAqAC_Lbi0NePUs-ZQQllcLrVDI2G04nwQ,1
|
|
123
123
|
ccxt/abstract/bitfinex.py,sha256=OLUXdJEycyN_qrBhPuTTOVlwu3jkqVWenoTmS-W3bOE,7605
|
124
124
|
ccxt/abstract/bitfinex2.py,sha256=82sdkbjDb6D2JePGAa2yYwApDwdeF9Tvlo-hWB2ZUBs,19194
|
125
125
|
ccxt/abstract/bitflyer.py,sha256=3ngG1GJJCNMzYMWoNXCEEgLxmTl7eRf7_JU4M0P2rqo,3576
|
126
|
-
ccxt/abstract/bitget.py,sha256=
|
126
|
+
ccxt/abstract/bitget.py,sha256=3xGAFBJkaFWD3WvaGtb0rE0zBO9b0QkIysMJRDZDxNQ,90491
|
127
127
|
ccxt/abstract/bithumb.py,sha256=GR7QJ6CwTBne59SaGRVj9Rdz_zecG-8imRWX7oe6MoQ,3443
|
128
|
-
ccxt/abstract/bitmart.py,sha256=
|
128
|
+
ccxt/abstract/bitmart.py,sha256=wJlSj1eh_Qp9duxPS5StlhAC-SH97-HxMvHEf3lYO_4,14167
|
129
129
|
ccxt/abstract/bitmex.py,sha256=v15OP-vSO_eotD6KVf1BgKrbPxCPl2eXXYIuzWF1dl4,10774
|
130
130
|
ccxt/abstract/bitopro.py,sha256=KCWuN9bc4W2fWIbWL_OboHc5DtbCjXXLnd23gYl9r3s,3295
|
131
131
|
ccxt/abstract/bitpanda.py,sha256=TtJq4d44lrutV8wcK0lX4v0EfQ72ly6fxR-zB7-FSuI,3859
|
@@ -210,17 +210,17 @@ ccxt/abstract/woofipro.py,sha256=El50vWGAV-4QPIDhgSnd4egfvk246NB6vTC-8h722vs,160
|
|
210
210
|
ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
|
211
211
|
ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
|
212
212
|
ccxt/abstract/zonda.py,sha256=aSfewvRojzmuymX6QbOnDR8v9VFqWTULMHX9Y7kKD1M,5820
|
213
|
-
ccxt/async_support/__init__.py,sha256=
|
213
|
+
ccxt/async_support/__init__.py,sha256=j8EPzBLj1ajFe2SWl97Qb1Cpz5IrDQhdt03vR-2qcVU,15723
|
214
214
|
ccxt/async_support/ace.py,sha256=xVxaTocpMapAIl4ApPApw69Rd-RDuU0_vleJnVt_qhI,41880
|
215
215
|
ccxt/async_support/alpaca.py,sha256=rjD8PdQr1B5e9hvaoTQBKVtWwHLs04e6_-gooXl4eEE,47427
|
216
|
-
ccxt/async_support/ascendex.py,sha256=
|
216
|
+
ccxt/async_support/ascendex.py,sha256=cYw-zMHB5QuadbI2fNBI_ywe8emGKsBgI8pdyQZp8Os,152275
|
217
217
|
ccxt/async_support/bequant.py,sha256=1hTwHovo1bW1XTIc8ZKjvJ-Xg6LfmpGdzT7TepykaVM,1188
|
218
218
|
ccxt/async_support/bigone.py,sha256=_uNS1hUzXNxkVJ227FHU1N0BeojYws-Fs0qNXpm4T_w,92663
|
219
219
|
ccxt/async_support/binance.py,sha256=sgPD5mSPMpsM2Gwp-Y-s3wyUGcgYtafJxJhTxwdQ8Fs,620258
|
220
220
|
ccxt/async_support/binancecoinm.py,sha256=IY3RLZptQA2nmZaUYRGfTa5ZY4VMWBpFYfwHc8zTHw0,1683
|
221
221
|
ccxt/async_support/binanceus.py,sha256=c-K3Tk7LaRJjmYdCx8vBOqsx01uXrtvt0PC2ekBiD0g,9177
|
222
222
|
ccxt/async_support/binanceusdm.py,sha256=-1r4A4tmV2pCiLGO80hzq7MIIj4MTzOD7buZGv6JauA,2518
|
223
|
-
ccxt/async_support/bingx.py,sha256=
|
223
|
+
ccxt/async_support/bingx.py,sha256=tmuaoG5nQ_VcEJuF-KKxhn-ZgYFn9h0sovoTbeOAbnY,187208
|
224
224
|
ccxt/async_support/bit2c.py,sha256=doMZLyPCUF4KPe-P3-MlXNxTr2GD7EAkmXqI7zM3frY,37119
|
225
225
|
ccxt/async_support/bitbank.py,sha256=Vu3C5eHq9SndHeX_plwLdSSPFmrwpVVvUKSg7AI-c9A,42105
|
226
226
|
ccxt/async_support/bitbay.py,sha256=jcaEXi2IhYTva8ezO_SfJhwxEZk7HST4J3NaxD16BQA,492
|
@@ -229,9 +229,9 @@ ccxt/async_support/bitcoincom.py,sha256=RiqwhK3RfxQ_PXTa860fphDCvwA8dalL-_rXlK85
|
|
229
229
|
ccxt/async_support/bitfinex.py,sha256=oS5QBr6YaR5PKR2Lca0S8mEkz_mBczGfMuAIUKQ6kKU,72718
|
230
230
|
ccxt/async_support/bitfinex2.py,sha256=aXWqz-Ub3HMd-eHyrAZEAV8FYkOX9ej-uBLG30Byn2E,159249
|
231
231
|
ccxt/async_support/bitflyer.py,sha256=KNOVDnBONry4JUJiyPKXQvP_OkxKTluly7ZdtCl-_M0,41705
|
232
|
-
ccxt/async_support/bitget.py,sha256=
|
232
|
+
ccxt/async_support/bitget.py,sha256=PKjF_ZNOMXWS7e4n-YvhRL7OPNZjtMi7hhS70_7Idcw,424198
|
233
233
|
ccxt/async_support/bithumb.py,sha256=gasefOqFJX0Aav2PWMILHS1kr1lcHhJf3OdKaXuVF6M,45764
|
234
|
-
ccxt/async_support/bitmart.py,sha256=
|
234
|
+
ccxt/async_support/bitmart.py,sha256=pkJ8TwEqjFOaOH6noIsUIXMxZGIEd-NNVsrRzXsW5JE,202467
|
235
235
|
ccxt/async_support/bitmex.py,sha256=tnw76bg38oOvz-luU-c7K4A75MwSsfwJs9VrzRW5OHs,127162
|
236
236
|
ccxt/async_support/bitopro.py,sha256=kIorVevTcOvIqfsCn0z-QXscJjIDcG3qq9_WzC6C_ks,68926
|
237
237
|
ccxt/async_support/bitpanda.py,sha256=2k3URBWrpnh2xHa7JiYenI7_4MW5UeOPGzetlmRkR4U,485
|
@@ -247,9 +247,9 @@ ccxt/async_support/btcalpha.py,sha256=U51IdY13evFeA9q6tdT-Br83yPJ5quVgF_EHho_fDM
|
|
247
247
|
ccxt/async_support/btcbox.py,sha256=byG2YtL1rhzH5_vuDaKCLinCQxOppRwvgqZRQYEZCxM,23686
|
248
248
|
ccxt/async_support/btcmarkets.py,sha256=vQQN9ITp68EYWjY8UiXFNDvL9gXUhNIZjlfZ3i7PkbA,51834
|
249
249
|
ccxt/async_support/btcturk.py,sha256=EMrvQcRRGtO9Hu3StUvalUiaTgueI7UM86IYS0Dgj6I,36875
|
250
|
-
ccxt/async_support/bybit.py,sha256=
|
250
|
+
ccxt/async_support/bybit.py,sha256=np47KUeHRvsiono4aLzjIY8srsO2YHSq5lzuKbisOCk,414323
|
251
251
|
ccxt/async_support/cex.py,sha256=MMVgApSlmqtfnEJHdsL4WXd7_5uFri-F0QjSWOsyoEU,70280
|
252
|
-
ccxt/async_support/coinbase.py,sha256=
|
252
|
+
ccxt/async_support/coinbase.py,sha256=R2oPuXrhq06tSVX0Dq0e3pRGnaLmIuec8OrwvuSLmwI,213430
|
253
253
|
ccxt/async_support/coinbaseadvanced.py,sha256=Kupwnuxiu_qTjwCNV2asacoDUNFQvcaHNAznUJPhdQs,552
|
254
254
|
ccxt/async_support/coinbaseexchange.py,sha256=3wEfbKBAVn9JkOfukopSRPhM8unRA6BQLqvm5c2VLBE,79210
|
255
255
|
ccxt/async_support/coinbaseinternational.py,sha256=fuU-h5UpO_nVs1j8KA7oGsQlP0kQefuPycZrc8ph6OQ,87794
|
@@ -282,7 +282,7 @@ ccxt/async_support/idex.py,sha256=etgzMUryt3ssiJDmrNWh4Hmo_xP61V-TX1uShRWjXiU,73
|
|
282
282
|
ccxt/async_support/independentreserve.py,sha256=8UTpFWJtrfZTeMhRfNK8mGiOu0-p-JCbK13G6spPueY,32435
|
283
283
|
ccxt/async_support/indodax.py,sha256=Duu0r6PCzPlQLNqj2v2smCh6xE65S9LpP7wwQWa5ygM,52229
|
284
284
|
ccxt/async_support/kraken.py,sha256=6rHDgOa8EBfU1Uelit73ekfrOqPObxWoMBcqQBk-rpc,128832
|
285
|
-
ccxt/async_support/krakenfutures.py,sha256=
|
285
|
+
ccxt/async_support/krakenfutures.py,sha256=IAXHOgB-puM4-R_2x9Yzqwh3bMXJay4Sno5EFopaEo8,117343
|
286
286
|
ccxt/async_support/kucoin.py,sha256=-7kAVv2ghUIBXL6QLWmuZUsgCdq2wW6cHGSFMFGDyMA,218868
|
287
287
|
ccxt/async_support/kucoinfutures.py,sha256=3gdO1HK5avmyseAXEEiufyNifvJAUpW75mUQNYhlmzQ,124965
|
288
288
|
ccxt/async_support/kuna.py,sha256=jcgPCS4_wHsWbBni6yuj6iMa641AYsiZr8ZBNGoxCe8,96407
|
@@ -317,7 +317,7 @@ ccxt/async_support/yobit.py,sha256=kvMIVVjf8XxE7cKt51iHtqH7zgmFKc5ZVhk1dKDtlxE,5
|
|
317
317
|
ccxt/async_support/zaif.py,sha256=lzrmIYPlNJquYkK-fq9DjqS8EfiAtofXnPcTMf3XOMM,28161
|
318
318
|
ccxt/async_support/zonda.py,sha256=bS_Oq8FVjbLxnxFVVg-_5ZlNS0CH9QxSUVKL91IR9rc,80912
|
319
319
|
ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
|
320
|
-
ccxt/async_support/base/exchange.py,sha256=
|
320
|
+
ccxt/async_support/base/exchange.py,sha256=JaGgzaPYCHzjahWALnl4iy2czADd-km049kI0g6ZL24,108722
|
321
321
|
ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
|
322
322
|
ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
|
323
323
|
ccxt/async_support/base/ws/aiohttp_client.py,sha256=Ed1765emEde2Hj8Ys6f5EjS54ZI1wQ0qIhd04eB7yhU,5751
|
@@ -331,10 +331,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=Pxrq22nCODckJ6G1OXkYEmUunIu
|
|
331
331
|
ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
|
332
332
|
ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
|
333
333
|
ccxt/base/errors.py,sha256=FGdyULeNCNcl52gA_CNhe2dZmat9GJGkTdlIyDXAF_A,4213
|
334
|
-
ccxt/base/exchange.py,sha256=
|
334
|
+
ccxt/base/exchange.py,sha256=tHGwC33roPlkxTU8WCz0RKtm1M5ZuZKXmFqzSPaxpEg,278296
|
335
335
|
ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
|
336
336
|
ccxt/base/types.py,sha256=3hBdiD2EO7W-pwmBrDeDYMEdFGcnT0QqQZa3l8ywTVM,9027
|
337
|
-
ccxt/pro/__init__.py,sha256=
|
337
|
+
ccxt/pro/__init__.py,sha256=Ku1y6DwmywpXdM720CxghiCikboIrw5U82YAuxyKeq8,7107
|
338
338
|
ccxt/pro/alpaca.py,sha256=7ePyWli0949ti5UheIn553xmnFpedrNc2W5CKauSZio,27167
|
339
339
|
ccxt/pro/ascendex.py,sha256=fCM3EujSfJvtvffqI56UAstTtwjXFIocwukm15cF8rE,35432
|
340
340
|
ccxt/pro/bequant.py,sha256=5zbsP8BHQTUZ8ZNL6uaACxDbUClgkOV4SYfXT_LfQVg,1351
|
@@ -358,7 +358,7 @@ ccxt/pro/bitvavo.py,sha256=ueyEkwp1KLedmh0fTjHLV2M_yiOWPPfr-bTR9N6hXsw,56145
|
|
358
358
|
ccxt/pro/blockchaincom.py,sha256=Uv1ijvxvFGrqFPH6iifCk5AgQYTDsXUa5n0ktpusVjM,29560
|
359
359
|
ccxt/pro/bybit.py,sha256=FWN3ixxNYBIlHBkfD5wg5kaJ_lxLppvTDySvCvyOebI,85098
|
360
360
|
ccxt/pro/cex.py,sha256=psU0k-icE931Z_wpkr16IdSZ2iDUwLnqJz3KUmQ5Xls,58380
|
361
|
-
ccxt/pro/coinbase.py,sha256=
|
361
|
+
ccxt/pro/coinbase.py,sha256=wrClkP6VMpxEtAG7RRaJNqLSHK8dqpu5KtsJACrzSiU,29520
|
362
362
|
ccxt/pro/coinbaseexchange.py,sha256=vhW-SIPSaSidXkQk1WDAU1-0Vj1S9kRJl6U-5CnyPcQ,38975
|
363
363
|
ccxt/pro/coinbaseinternational.py,sha256=4LMDA9RJhwT2T55kyryGCJBrdRgh_XBVYlJjXGS_AMc,25794
|
364
364
|
ccxt/pro/coincheck.py,sha256=MKAPHJeVifQaCKPla-7RY86TIWyDGe4nvjRhNmi617w,7789
|
@@ -534,7 +534,7 @@ ccxt/test/base/test_ticker.py,sha256=cMTIMb1oySNORUCmqI5ZzMswlEyCF6gJMah3vfvo8wQ
|
|
534
534
|
ccxt/test/base/test_trade.py,sha256=PMtmB8V38dpaP-eb8h488xYMlR6D69yCOhsA1RuWrUA,2336
|
535
535
|
ccxt/test/base/test_trading_fee.py,sha256=2aDCNJtqBkTC_AieO0l1HYGq5hz5qkWlkWb9Nv_fcwk,1066
|
536
536
|
ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
|
537
|
-
ccxt-4.3.
|
538
|
-
ccxt-4.3.
|
539
|
-
ccxt-4.3.
|
540
|
-
ccxt-4.3.
|
537
|
+
ccxt-4.3.28.dist-info/METADATA,sha256=wib-wi2ZDcZbxemrk91XeBJKEOO5Z076g1WgOrhqBCE,112795
|
538
|
+
ccxt-4.3.28.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
|
539
|
+
ccxt-4.3.28.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
|
540
|
+
ccxt-4.3.28.dist-info/RECORD,,
|
File without changes
|
File without changes
|