ccxt 4.4.73__py2.py3-none-any.whl → 4.4.74__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 -5
- ccxt/abstract/bitmart.py +2 -0
- ccxt/ace.py +3 -0
- ccxt/alpaca.py +3 -0
- ccxt/ascendex.py +6 -0
- ccxt/async_support/__init__.py +1 -5
- ccxt/async_support/ace.py +3 -0
- ccxt/async_support/alpaca.py +3 -0
- ccxt/async_support/ascendex.py +6 -0
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/bequant.py +1 -0
- ccxt/async_support/binanceusdm.py +1 -1
- ccxt/async_support/bit2c.py +26 -0
- ccxt/async_support/bitbank.py +32 -0
- ccxt/async_support/bitbns.py +1 -1
- ccxt/async_support/bitflyer.py +1 -0
- ccxt/async_support/bithumb.py +34 -0
- ccxt/async_support/bitmart.py +70 -6
- ccxt/async_support/blofin.py +1 -1
- ccxt/async_support/bybit.py +10 -1
- ccxt/async_support/coinlist.py +81 -11
- ccxt/async_support/deribit.py +19 -0
- ccxt/async_support/gate.py +11 -7
- ccxt/async_support/hitbtc.py +7 -1
- ccxt/async_support/okx.py +4 -0
- ccxt/base/errors.py +0 -6
- ccxt/base/exchange.py +25 -7
- ccxt/bequant.py +1 -0
- ccxt/binanceusdm.py +1 -1
- ccxt/bit2c.py +26 -0
- ccxt/bitbank.py +32 -0
- ccxt/bitbns.py +1 -1
- ccxt/bitflyer.py +1 -0
- ccxt/bithumb.py +34 -0
- ccxt/bitmart.py +70 -6
- ccxt/blofin.py +1 -1
- ccxt/bybit.py +10 -1
- ccxt/coinlist.py +81 -11
- ccxt/deribit.py +19 -0
- ccxt/gate.py +11 -7
- ccxt/hitbtc.py +7 -1
- ccxt/okx.py +4 -0
- ccxt/pro/__init__.py +1 -5
- ccxt/pro/ascendex.py +1 -1
- ccxt/pro/bingx.py +9 -1
- ccxt/pro/bitget.py +9 -1
- ccxt/pro/bitmart.py +9 -1
- ccxt/pro/bitopro.py +5 -4
- {ccxt-4.4.73.dist-info → ccxt-4.4.74.dist-info}/METADATA +5 -5
- {ccxt-4.4.73.dist-info → ccxt-4.4.74.dist-info}/RECORD +53 -55
- ccxt/abstract/bitcoincom.py +0 -115
- ccxt/abstract/bitpanda.py +0 -23
- {ccxt-4.4.73.dist-info → ccxt-4.4.74.dist-info}/LICENSE.txt +0 -0
- {ccxt-4.4.73.dist-info → ccxt-4.4.74.dist-info}/WHEEL +0 -0
- {ccxt-4.4.73.dist-info → ccxt-4.4.74.dist-info}/top_level.txt +0 -0
ccxt/async_support/blofin.py
CHANGED
@@ -66,7 +66,7 @@ class blofin(Exchange, ImplicitAPI):
|
|
66
66
|
'fetchBorrowRateHistory': False,
|
67
67
|
'fetchCanceledOrders': False,
|
68
68
|
'fetchClosedOrder': False,
|
69
|
-
'fetchClosedOrders':
|
69
|
+
'fetchClosedOrders': True,
|
70
70
|
'fetchCrossBorrowRate': False,
|
71
71
|
'fetchCrossBorrowRates': False,
|
72
72
|
'fetchCurrencies': False,
|
ccxt/async_support/bybit.py
CHANGED
@@ -2390,6 +2390,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
2390
2390
|
:returns dict: an array of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
2391
2391
|
"""
|
2392
2392
|
await self.load_markets()
|
2393
|
+
code = self.safe_string_n(params, ['code', 'currency', 'baseCoin'])
|
2393
2394
|
market = None
|
2394
2395
|
parsedSymbols = None
|
2395
2396
|
if symbols is not None:
|
@@ -2411,6 +2412,12 @@ class bybit(Exchange, ImplicitAPI):
|
|
2411
2412
|
currentType = market['type']
|
2412
2413
|
elif market['type'] != currentType:
|
2413
2414
|
raise BadRequest(self.id + ' fetchTickers can only accept a list of symbols of the same type')
|
2415
|
+
if market['option']:
|
2416
|
+
if code is not None and code != market['base']:
|
2417
|
+
raise BadRequest(self.id + ' fetchTickers the base currency must be the same for all symbols, self endpoint only supports one base currency at a time. Read more about it here: https://bybit-exchange.github.io/docs/v5/market/tickers')
|
2418
|
+
if code is None:
|
2419
|
+
code = market['base']
|
2420
|
+
params = self.omit(params, ['code', 'currency'])
|
2414
2421
|
parsedSymbols.append(market['symbol'])
|
2415
2422
|
request: dict = {
|
2416
2423
|
# 'symbol': market['id'],
|
@@ -2430,7 +2437,9 @@ class bybit(Exchange, ImplicitAPI):
|
|
2430
2437
|
request['category'] = 'spot'
|
2431
2438
|
elif type == 'option':
|
2432
2439
|
request['category'] = 'option'
|
2433
|
-
|
2440
|
+
if code is None:
|
2441
|
+
code = 'BTC'
|
2442
|
+
request['baseCoin'] = code
|
2434
2443
|
elif type == 'swap' or type == 'future' or subType is not None:
|
2435
2444
|
request['category'] = subType
|
2436
2445
|
response = await self.publicGetV5MarketTickers(self.extend(request, params))
|
ccxt/async_support/coinlist.py
CHANGED
@@ -501,7 +501,7 @@ class coinlist(Exchange, ImplicitAPI):
|
|
501
501
|
# {
|
502
502
|
# "symbols": [
|
503
503
|
# {
|
504
|
-
# "symbol": "CQT-USDT",
|
504
|
+
# "symbol": "CQT-USDT", # spot
|
505
505
|
# "base_currency": "CQT",
|
506
506
|
# "is_trader_geofenced": False,
|
507
507
|
# "list_time": "2021-06-15T00:00:00.000Z",
|
@@ -526,6 +526,62 @@ class coinlist(Exchange, ImplicitAPI):
|
|
526
526
|
return self.parse_markets(markets)
|
527
527
|
|
528
528
|
def parse_market(self, market: dict) -> Market:
|
529
|
+
# perp
|
530
|
+
# {
|
531
|
+
# "symbol":"BTC-PERP",
|
532
|
+
# "base_currency":"BTC",
|
533
|
+
# "is_trader_geofenced":false,
|
534
|
+
# "expiry_name":null,
|
535
|
+
# "expiry_time":null,
|
536
|
+
# "list_time":"2024-09-16T00:00:00.000Z",
|
537
|
+
# "type":"perp-swap",
|
538
|
+
# "series_code":"BTC",
|
539
|
+
# "long_name":"Bitcoin",
|
540
|
+
# "asset_class":"CRYPTO",
|
541
|
+
# "minimum_price_increment":"0.01",
|
542
|
+
# "minimum_size_increment":"0.0001",
|
543
|
+
# "quote_currency":"USDT",
|
544
|
+
# "multiplier":"1",
|
545
|
+
# "contract_frequency":"FGHJKMNQUVXZ",
|
546
|
+
# "index_code":".BTC-USDT",
|
547
|
+
# "price_band_threshold_market":"0.05",
|
548
|
+
# "price_band_threshold_limit":"0.25",
|
549
|
+
# "maintenance_initial_ratio":"0.500000000000000000",
|
550
|
+
# "liquidation_initial_ratio":"0.500000000000000000",
|
551
|
+
# "last_price":"75881.36000000",
|
552
|
+
# "fair_price":"76256.00000000",
|
553
|
+
# "index_price":"77609.90000000",
|
554
|
+
# "mark_price":"76237.75000000",
|
555
|
+
# "mark_price_dollarizer":"0.99950000",
|
556
|
+
# "funding_interval":{
|
557
|
+
# "hours":"8"
|
558
|
+
# },
|
559
|
+
# "funding_rate_index_code":".BTC-USDT-FR8H",
|
560
|
+
# "initial_margin_base":"0.200000000000000000",
|
561
|
+
# "initial_margin_per_contract":"0.160000000000000000",
|
562
|
+
# "position_limit":"5.0000"
|
563
|
+
# }
|
564
|
+
# spot
|
565
|
+
# {
|
566
|
+
# "symbol": "CQT-USDT", # spot
|
567
|
+
# "base_currency": "CQT",
|
568
|
+
# "is_trader_geofenced": False,
|
569
|
+
# "list_time": "2021-06-15T00:00:00.000Z",
|
570
|
+
# "type": "spot",
|
571
|
+
# "series_code": "CQT-USDT-SPOT",
|
572
|
+
# "long_name": "Covalent",
|
573
|
+
# "asset_class": "CRYPTO",
|
574
|
+
# "minimum_price_increment": "0.0001",
|
575
|
+
# "minimum_size_increment": "0.0001",
|
576
|
+
# "quote_currency": "USDT",
|
577
|
+
# "index_code": null,
|
578
|
+
# "price_band_threshold_market": "0.05",
|
579
|
+
# "price_band_threshold_limit": "0.25",
|
580
|
+
# "last_price": "0.12160000",
|
581
|
+
# "fair_price": "0.12300000",
|
582
|
+
# "index_price": null
|
583
|
+
# }
|
584
|
+
isSwap = self.safe_string(market, 'type') == 'perp-swap'
|
529
585
|
id = self.safe_string(market, 'symbol')
|
530
586
|
baseId = self.safe_string(market, 'base_currency')
|
531
587
|
quoteId = self.safe_string(market, 'quote_currency')
|
@@ -534,26 +590,40 @@ class coinlist(Exchange, ImplicitAPI):
|
|
534
590
|
amountPrecision = self.safe_string(market, 'minimum_size_increment')
|
535
591
|
pricePrecision = self.safe_string(market, 'minimum_price_increment')
|
536
592
|
created = self.safe_string(market, 'list_time')
|
593
|
+
settledId = None
|
594
|
+
settled = None
|
595
|
+
linear = None
|
596
|
+
inverse = None
|
597
|
+
contractSize = None
|
598
|
+
symbol = base + '/' + quote
|
599
|
+
if isSwap:
|
600
|
+
contractSize = self.parse_number('1')
|
601
|
+
linear = True
|
602
|
+
inverse = False
|
603
|
+
settledId = quoteId
|
604
|
+
settled = quote
|
605
|
+
symbol = symbol + ':' + quote
|
606
|
+
type = 'swap' if isSwap else 'spot'
|
537
607
|
return {
|
538
608
|
'id': id,
|
539
|
-
'symbol':
|
609
|
+
'symbol': symbol,
|
540
610
|
'base': base,
|
541
611
|
'quote': quote,
|
542
|
-
'settle':
|
612
|
+
'settle': settled,
|
543
613
|
'baseId': baseId,
|
544
614
|
'quoteId': quoteId,
|
545
|
-
'settleId':
|
546
|
-
'type':
|
547
|
-
'spot':
|
615
|
+
'settleId': settledId,
|
616
|
+
'type': type,
|
617
|
+
'spot': not isSwap,
|
548
618
|
'margin': False,
|
549
|
-
'swap':
|
619
|
+
'swap': isSwap,
|
550
620
|
'future': False,
|
551
621
|
'option': False,
|
552
622
|
'active': True,
|
553
|
-
'contract':
|
554
|
-
'linear':
|
555
|
-
'inverse':
|
556
|
-
'contractSize':
|
623
|
+
'contract': isSwap,
|
624
|
+
'linear': linear,
|
625
|
+
'inverse': inverse,
|
626
|
+
'contractSize': contractSize,
|
557
627
|
'expiry': None,
|
558
628
|
'expiryDatetime': None,
|
559
629
|
'strike': None,
|
ccxt/async_support/deribit.py
CHANGED
@@ -1321,13 +1321,32 @@ class deribit(Exchange, ImplicitAPI):
|
|
1321
1321
|
await self.load_markets()
|
1322
1322
|
symbols = self.market_symbols(symbols)
|
1323
1323
|
code = self.safe_string_2(params, 'code', 'currency')
|
1324
|
+
type = None
|
1324
1325
|
params = self.omit(params, ['code'])
|
1326
|
+
if symbols is not None:
|
1327
|
+
for i in range(0, len(symbols)):
|
1328
|
+
market = self.market(symbols[i])
|
1329
|
+
if code is not None and code != market['base']:
|
1330
|
+
raise BadRequest(self.id + ' fetchTickers the base currency must be the same for all symbols, self endpoint only supports one base currency at a time. Read more about it here: https://docs.deribit.com/#public-get_book_summary_by_currency')
|
1331
|
+
if code is None:
|
1332
|
+
code = market['base']
|
1333
|
+
type = market['type']
|
1325
1334
|
if code is None:
|
1326
1335
|
raise ArgumentsRequired(self.id + ' fetchTickers requires a currency/code(eg: BTC/ETH/USDT) parameter to fetch tickers for')
|
1327
1336
|
currency = self.currency(code)
|
1328
1337
|
request: dict = {
|
1329
1338
|
'currency': currency['id'],
|
1330
1339
|
}
|
1340
|
+
if type is not None:
|
1341
|
+
requestType = None
|
1342
|
+
if type == 'spot':
|
1343
|
+
requestType = 'spot'
|
1344
|
+
elif type == 'future' or (type == 'contract'):
|
1345
|
+
requestType = 'future'
|
1346
|
+
elif type == 'option':
|
1347
|
+
requestType = 'option'
|
1348
|
+
if requestType is not None:
|
1349
|
+
request['kind'] = requestType
|
1331
1350
|
response = await self.publicGetGetBookSummaryByCurrency(self.extend(request, params))
|
1332
1351
|
#
|
1333
1352
|
# {
|
ccxt/async_support/gate.py
CHANGED
@@ -1485,6 +1485,10 @@ class gate(Exchange, ImplicitAPI):
|
|
1485
1485
|
takerPercent = self.safe_string(market, 'taker_fee_rate')
|
1486
1486
|
makerPercent = self.safe_string(market, 'maker_fee_rate', takerPercent)
|
1487
1487
|
isLinear = quote == settle
|
1488
|
+
contractSize = self.safe_string(market, 'quanto_multiplier')
|
1489
|
+
# exception only for one market: https://api.gateio.ws/api/v4/futures/btc/contracts
|
1490
|
+
if contractSize == '0':
|
1491
|
+
contractSize = '1' # 1 USD in WEB: https://i.imgur.com/MBBUI04.png
|
1488
1492
|
return {
|
1489
1493
|
'id': id,
|
1490
1494
|
'symbol': symbol,
|
@@ -1506,7 +1510,7 @@ class gate(Exchange, ImplicitAPI):
|
|
1506
1510
|
'inverse': not isLinear,
|
1507
1511
|
'taker': self.parse_number(Precise.string_div(takerPercent, '100')), # Fee is in %, so divide by 100
|
1508
1512
|
'maker': self.parse_number(Precise.string_div(makerPercent, '100')),
|
1509
|
-
'contractSize': self.
|
1513
|
+
'contractSize': self.parse_number(contractSize),
|
1510
1514
|
'expiry': expiry,
|
1511
1515
|
'expiryDatetime': self.iso8601(expiry),
|
1512
1516
|
'strike': None,
|
@@ -1819,9 +1823,9 @@ class gate(Exchange, ImplicitAPI):
|
|
1819
1823
|
partFirst = self.safe_string(parts, 0)
|
1820
1824
|
# if there's an underscore then the second part is always the chain name(except the _OLD suffix)
|
1821
1825
|
currencyName = currencyId if currencyId.endswith('_OLD') else partFirst
|
1822
|
-
|
1823
|
-
|
1824
|
-
tradeDisabled =
|
1826
|
+
withdrawDisabled = self.safe_bool(entry, 'withdraw_disabled', False)
|
1827
|
+
depositDisabled = self.safe_bool(entry, 'deposit_disabled', False)
|
1828
|
+
tradeDisabled = self.safe_bool(entry, 'trade_disabled', False)
|
1825
1829
|
precision = self.parse_number('0.0001') # temporary safe default, because no value provided from API
|
1826
1830
|
code = self.safe_currency_code(currencyName)
|
1827
1831
|
# check leveraged tokens(e.g. BTC3S, ETH5L)
|
@@ -1849,8 +1853,8 @@ class gate(Exchange, ImplicitAPI):
|
|
1849
1853
|
},
|
1850
1854
|
},
|
1851
1855
|
'active': not tradeDisabled,
|
1852
|
-
'deposit':
|
1853
|
-
'withdraw':
|
1856
|
+
'deposit': not depositDisabled,
|
1857
|
+
'withdraw': not withdrawDisabled,
|
1854
1858
|
'fee': None,
|
1855
1859
|
'precision': precision,
|
1856
1860
|
}
|
@@ -6366,7 +6370,7 @@ class gate(Exchange, ImplicitAPI):
|
|
6366
6370
|
queryString = self.urlencode(query)
|
6367
6371
|
# https://github.com/ccxt/ccxt/issues/25570
|
6368
6372
|
if queryString.find('currencies=') >= 0 and queryString.find('%2C') >= 0:
|
6369
|
-
queryString = queryString.replace('%
|
6373
|
+
queryString = queryString.replace('%2C', ',')
|
6370
6374
|
url += '?' + queryString
|
6371
6375
|
if method == 'PATCH':
|
6372
6376
|
body = self.json(query)
|
ccxt/async_support/hitbtc.py
CHANGED
@@ -44,7 +44,7 @@ class hitbtc(Exchange, ImplicitAPI):
|
|
44
44
|
'margin': True,
|
45
45
|
'swap': True,
|
46
46
|
'future': False,
|
47
|
-
'option':
|
47
|
+
'option': False,
|
48
48
|
'addMargin': True,
|
49
49
|
'cancelAllOrders': True,
|
50
50
|
'cancelOrder': True,
|
@@ -76,6 +76,7 @@ class hitbtc(Exchange, ImplicitAPI):
|
|
76
76
|
'fetchFundingRate': True,
|
77
77
|
'fetchFundingRateHistory': True,
|
78
78
|
'fetchFundingRates': True,
|
79
|
+
'fetchGreeks': False,
|
79
80
|
'fetchIndexOHLCV': True,
|
80
81
|
'fetchIsolatedBorrowRate': False,
|
81
82
|
'fetchIsolatedBorrowRates': False,
|
@@ -88,6 +89,7 @@ class hitbtc(Exchange, ImplicitAPI):
|
|
88
89
|
'fetchMarkets': True,
|
89
90
|
'fetchMarkOHLCV': True,
|
90
91
|
'fetchMyLiquidations': False,
|
92
|
+
'fetchMySettlementHistory': False,
|
91
93
|
'fetchMyTrades': True,
|
92
94
|
'fetchOHLCV': True,
|
93
95
|
'fetchOpenInterest': True,
|
@@ -95,6 +97,8 @@ class hitbtc(Exchange, ImplicitAPI):
|
|
95
97
|
'fetchOpenInterests': True,
|
96
98
|
'fetchOpenOrder': True,
|
97
99
|
'fetchOpenOrders': True,
|
100
|
+
'fetchOption': False,
|
101
|
+
'fetchOptionChain': False,
|
98
102
|
'fetchOrder': True,
|
99
103
|
'fetchOrderBook': True,
|
100
104
|
'fetchOrderBooks': True,
|
@@ -103,12 +107,14 @@ class hitbtc(Exchange, ImplicitAPI):
|
|
103
107
|
'fetchPosition': True,
|
104
108
|
'fetchPositions': True,
|
105
109
|
'fetchPremiumIndexOHLCV': True,
|
110
|
+
'fetchSettlementHistory': False,
|
106
111
|
'fetchTicker': True,
|
107
112
|
'fetchTickers': True,
|
108
113
|
'fetchTrades': True,
|
109
114
|
'fetchTradingFee': True,
|
110
115
|
'fetchTradingFees': True,
|
111
116
|
'fetchTransactions': 'emulated',
|
117
|
+
'fetchVolatilityHistory': False,
|
112
118
|
'fetchWithdrawals': True,
|
113
119
|
'reduceMargin': True,
|
114
120
|
'sandbox': True,
|
ccxt/async_support/okx.py
CHANGED
@@ -1294,6 +1294,7 @@ class okx(Exchange, ImplicitAPI):
|
|
1294
1294
|
},
|
1295
1295
|
'fetchOHLCV': {
|
1296
1296
|
'limit': 300,
|
1297
|
+
'historical': 100,
|
1297
1298
|
},
|
1298
1299
|
},
|
1299
1300
|
'spot': {
|
@@ -2385,6 +2386,8 @@ class okx(Exchange, ImplicitAPI):
|
|
2385
2386
|
timezone = self.safe_string(options, 'timezone', 'UTC')
|
2386
2387
|
if limit is None:
|
2387
2388
|
limit = 100 # default 100, max 100
|
2389
|
+
else:
|
2390
|
+
limit = min(limit, 300) # max 100
|
2388
2391
|
duration = self.parse_timeframe(timeframe)
|
2389
2392
|
bar = self.safe_string(self.timeframes, timeframe, timeframe)
|
2390
2393
|
if (timezone == 'UTC') and (duration >= 21600): # if utc and timeframe >= 6h
|
@@ -2402,6 +2405,7 @@ class okx(Exchange, ImplicitAPI):
|
|
2402
2405
|
historyBorder = now - ((1440 - 1) * durationInMilliseconds)
|
2403
2406
|
if since < historyBorder:
|
2404
2407
|
defaultType = 'HistoryCandles'
|
2408
|
+
limit = min(limit, 100) # max 100 for historical endpoint
|
2405
2409
|
startTime = max(since - 1, 0)
|
2406
2410
|
request['before'] = startTime
|
2407
2411
|
request['after'] = self.sum(since, durationInMilliseconds * limit)
|
ccxt/base/errors.py
CHANGED
@@ -1,9 +1,3 @@
|
|
1
|
-
# ----------------------------------------------------------------------------
|
2
|
-
|
3
|
-
# PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
|
4
|
-
# https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
5
|
-
# EDIT THE CORRESPONDENT .ts FILE INSTEAD
|
6
|
-
|
7
1
|
error_hierarchy = {
|
8
2
|
'BaseError': {
|
9
3
|
'ExchangeError': {
|
ccxt/base/exchange.py
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
# -----------------------------------------------------------------------------
|
6
6
|
|
7
|
-
__version__ = '4.4.
|
7
|
+
__version__ = '4.4.74'
|
8
8
|
|
9
9
|
# -----------------------------------------------------------------------------
|
10
10
|
|
@@ -6472,18 +6472,36 @@ class Exchange(object):
|
|
6472
6472
|
return result
|
6473
6473
|
|
6474
6474
|
def remove_repeated_elements_from_array(self, input, fallbackToTimestamp: bool = True):
|
6475
|
-
|
6475
|
+
uniqueDic = {}
|
6476
|
+
uniqueResult = []
|
6476
6477
|
for i in range(0, len(input)):
|
6477
6478
|
entry = input[i]
|
6478
6479
|
uniqValue = self.safe_string_n(entry, ['id', 'timestamp', 0]) if fallbackToTimestamp else self.safe_string(entry, 'id')
|
6479
|
-
if uniqValue is not None and not (uniqValue in
|
6480
|
-
|
6481
|
-
|
6482
|
-
valuesLength = len(
|
6480
|
+
if uniqValue is not None and not (uniqValue in uniqueDic):
|
6481
|
+
uniqueDic[uniqValue] = 1
|
6482
|
+
uniqueResult.append(entry)
|
6483
|
+
valuesLength = len(uniqueResult)
|
6483
6484
|
if valuesLength > 0:
|
6484
|
-
return
|
6485
|
+
return uniqueResult
|
6485
6486
|
return input
|
6486
6487
|
|
6488
|
+
def remove_repeated_trades_from_array(self, input):
|
6489
|
+
uniqueResult = {}
|
6490
|
+
for i in range(0, len(input)):
|
6491
|
+
entry = input[i]
|
6492
|
+
id = self.safe_string(entry, 'id')
|
6493
|
+
if id is None:
|
6494
|
+
price = self.safe_string(entry, 'price')
|
6495
|
+
amount = self.safe_string(entry, 'amount')
|
6496
|
+
timestamp = self.safe_string(entry, 'timestamp')
|
6497
|
+
side = self.safe_string(entry, 'side')
|
6498
|
+
# unique trade identifier
|
6499
|
+
id = 't_' + str(timestamp) + '_' + side + '_' + price + '_' + amount
|
6500
|
+
if id is not None and not (id in uniqueResult):
|
6501
|
+
uniqueResult[id] = entry
|
6502
|
+
values = list(uniqueResult.values())
|
6503
|
+
return values
|
6504
|
+
|
6487
6505
|
def handle_until_option(self, key: str, request, params, multiplier=1):
|
6488
6506
|
until = self.safe_integer_2(params, 'until', 'till')
|
6489
6507
|
if until is not None:
|
ccxt/bequant.py
CHANGED
ccxt/binanceusdm.py
CHANGED
@@ -36,7 +36,7 @@ class binanceusdm(binance, ImplicitAPI):
|
|
36
36
|
'fetchMarkets': ['linear'],
|
37
37
|
'defaultSubType': 'linear',
|
38
38
|
# https://www.binance.com/en/support/faq/360033162192
|
39
|
-
# tier amount, maintenance margin, initial margin
|
39
|
+
# tier amount, maintenance margin, initial margin,
|
40
40
|
'leverageBrackets': None,
|
41
41
|
'marginTypes': {},
|
42
42
|
'marginModes': {},
|
ccxt/bit2c.py
CHANGED
@@ -36,36 +36,61 @@ class bit2c(Exchange, ImplicitAPI):
|
|
36
36
|
'future': False,
|
37
37
|
'option': False,
|
38
38
|
'addMargin': False,
|
39
|
+
'borrowCrossMargin': False,
|
40
|
+
'borrowIsolatedMargin': False,
|
41
|
+
'borrowMargin': False,
|
39
42
|
'cancelAllOrders': False,
|
40
43
|
'cancelOrder': True,
|
41
44
|
'closeAllPositions': False,
|
42
45
|
'closePosition': False,
|
43
46
|
'createOrder': True,
|
47
|
+
'createOrderWithTakeProfitAndStopLoss': False,
|
48
|
+
'createOrderWithTakeProfitAndStopLossWs': False,
|
44
49
|
'createReduceOnlyOrder': False,
|
45
50
|
'fetchBalance': True,
|
51
|
+
'fetchBorrowInterest': False,
|
52
|
+
'fetchBorrowRate': False,
|
46
53
|
'fetchBorrowRateHistories': False,
|
47
54
|
'fetchBorrowRateHistory': False,
|
55
|
+
'fetchBorrowRates': False,
|
56
|
+
'fetchBorrowRatesPerSymbol': False,
|
48
57
|
'fetchCrossBorrowRate': False,
|
49
58
|
'fetchCrossBorrowRates': False,
|
50
59
|
'fetchDepositAddress': True,
|
51
60
|
'fetchDepositAddresses': False,
|
52
61
|
'fetchDepositAddressesByNetwork': False,
|
53
62
|
'fetchFundingHistory': False,
|
63
|
+
'fetchFundingInterval': False,
|
64
|
+
'fetchFundingIntervals': False,
|
54
65
|
'fetchFundingRate': False,
|
55
66
|
'fetchFundingRateHistory': False,
|
56
67
|
'fetchFundingRates': False,
|
68
|
+
'fetchGreeks': False,
|
57
69
|
'fetchIndexOHLCV': False,
|
58
70
|
'fetchIsolatedBorrowRate': False,
|
59
71
|
'fetchIsolatedBorrowRates': False,
|
72
|
+
'fetchIsolatedPositions': False,
|
60
73
|
'fetchLeverage': False,
|
74
|
+
'fetchLeverages': False,
|
61
75
|
'fetchLeverageTiers': False,
|
76
|
+
'fetchLiquidations': False,
|
77
|
+
'fetchLongShortRatio': False,
|
78
|
+
'fetchLongShortRatioHistory': False,
|
79
|
+
'fetchMarginAdjustmentHistory': False,
|
62
80
|
'fetchMarginMode': False,
|
81
|
+
'fetchMarginModes': False,
|
82
|
+
'fetchMarketLeverageTiers': False,
|
63
83
|
'fetchMarkOHLCV': False,
|
84
|
+
'fetchMarkPrices': False,
|
85
|
+
'fetchMyLiquidations': False,
|
86
|
+
'fetchMySettlementHistory': False,
|
64
87
|
'fetchMyTrades': True,
|
65
88
|
'fetchOpenInterest': False,
|
66
89
|
'fetchOpenInterestHistory': False,
|
67
90
|
'fetchOpenInterests': False,
|
68
91
|
'fetchOpenOrders': True,
|
92
|
+
'fetchOption': False,
|
93
|
+
'fetchOptionChain': False,
|
69
94
|
'fetchOrder': True,
|
70
95
|
'fetchOrderBook': True,
|
71
96
|
'fetchPosition': False,
|
@@ -84,6 +109,7 @@ class bit2c(Exchange, ImplicitAPI):
|
|
84
109
|
'fetchTransfer': False,
|
85
110
|
'fetchTransfers': False,
|
86
111
|
'fetchUnderlyingAssets': False,
|
112
|
+
'fetchVolatilityHistory': False,
|
87
113
|
'reduceMargin': False,
|
88
114
|
'repayCrossMargin': False,
|
89
115
|
'repayIsolatedMargin': False,
|
ccxt/bitbank.py
CHANGED
@@ -34,35 +34,62 @@ class bitbank(Exchange, ImplicitAPI):
|
|
34
34
|
'future': False,
|
35
35
|
'option': False,
|
36
36
|
'addMargin': False,
|
37
|
+
'borrowCrossMargin': False,
|
38
|
+
'borrowIsolatedMargin': False,
|
39
|
+
'borrowMargin': False,
|
37
40
|
'cancelAllOrders': False,
|
38
41
|
'cancelOrder': True,
|
39
42
|
'closeAllPositions': False,
|
40
43
|
'closePosition': False,
|
41
44
|
'createOrder': True,
|
45
|
+
'createOrderWithTakeProfitAndStopLoss': False,
|
46
|
+
'createOrderWithTakeProfitAndStopLossWs': False,
|
42
47
|
'createReduceOnlyOrder': False,
|
43
48
|
'fetchBalance': True,
|
49
|
+
'fetchBorrowInterest': False,
|
50
|
+
'fetchBorrowRate': False,
|
44
51
|
'fetchBorrowRateHistories': False,
|
45
52
|
'fetchBorrowRateHistory': False,
|
53
|
+
'fetchBorrowRates': False,
|
54
|
+
'fetchBorrowRatesPerSymbol': False,
|
46
55
|
'fetchCrossBorrowRate': False,
|
47
56
|
'fetchCrossBorrowRates': False,
|
48
57
|
'fetchDepositAddress': True,
|
49
58
|
'fetchDepositAddresses': False,
|
50
59
|
'fetchDepositAddressesByNetwork': False,
|
51
60
|
'fetchFundingHistory': False,
|
61
|
+
'fetchFundingInterval': False,
|
62
|
+
'fetchFundingIntervals': False,
|
52
63
|
'fetchFundingRate': False,
|
53
64
|
'fetchFundingRateHistory': False,
|
54
65
|
'fetchFundingRates': False,
|
66
|
+
'fetchGreeks': False,
|
55
67
|
'fetchIndexOHLCV': False,
|
56
68
|
'fetchIsolatedBorrowRate': False,
|
57
69
|
'fetchIsolatedBorrowRates': False,
|
70
|
+
'fetchIsolatedPositions': False,
|
58
71
|
'fetchLeverage': False,
|
72
|
+
'fetchLeverages': False,
|
59
73
|
'fetchLeverageTiers': False,
|
74
|
+
'fetchLiquidations': False,
|
75
|
+
'fetchLongShortRatio': False,
|
76
|
+
'fetchLongShortRatioHistory': False,
|
77
|
+
'fetchMarginAdjustmentHistory': False,
|
60
78
|
'fetchMarginMode': False,
|
79
|
+
'fetchMarginModes': False,
|
80
|
+
'fetchMarketLeverageTiers': False,
|
61
81
|
'fetchMarkOHLCV': False,
|
82
|
+
'fetchMarkPrices': False,
|
83
|
+
'fetchMyLiquidations': False,
|
84
|
+
'fetchMySettlementHistory': False,
|
62
85
|
'fetchMyTrades': True,
|
63
86
|
'fetchOHLCV': True,
|
87
|
+
'fetchOpenInterest': False,
|
64
88
|
'fetchOpenInterestHistory': False,
|
89
|
+
'fetchOpenInterests': False,
|
65
90
|
'fetchOpenOrders': True,
|
91
|
+
'fetchOption': False,
|
92
|
+
'fetchOptionChain': False,
|
66
93
|
'fetchOrder': True,
|
67
94
|
'fetchOrderBook': True,
|
68
95
|
'fetchPosition': False,
|
@@ -73,14 +100,19 @@ class bitbank(Exchange, ImplicitAPI):
|
|
73
100
|
'fetchPositionsHistory': False,
|
74
101
|
'fetchPositionsRisk': False,
|
75
102
|
'fetchPremiumIndexOHLCV': False,
|
103
|
+
'fetchSettlementHistory': False,
|
76
104
|
'fetchTicker': True,
|
77
105
|
'fetchTrades': True,
|
78
106
|
'fetchTradingFee': False,
|
79
107
|
'fetchTradingFees': True,
|
80
108
|
'fetchTransfer': False,
|
81
109
|
'fetchTransfers': False,
|
110
|
+
'fetchVolatilityHistory': False,
|
82
111
|
'reduceMargin': False,
|
112
|
+
'repayCrossMargin': False,
|
113
|
+
'repayIsolatedMargin': False,
|
83
114
|
'setLeverage': False,
|
115
|
+
'setMargin': False,
|
84
116
|
'setMarginMode': False,
|
85
117
|
'setPositionMode': False,
|
86
118
|
'transfer': False,
|
ccxt/bitbns.py
CHANGED
ccxt/bitflyer.py
CHANGED