ccxt 4.4.44__py2.py3-none-any.whl → 4.4.45__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ccxt/__init__.py +1 -1
- ccxt/abstract/blofin.py +22 -0
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/binance.py +178 -62
- ccxt/async_support/bingx.py +15 -9
- ccxt/async_support/bitfinex.py +1 -1
- ccxt/async_support/bitget.py +3 -3
- ccxt/async_support/bitmart.py +3 -3
- ccxt/async_support/bitmex.py +1 -1
- ccxt/async_support/blofin.py +22 -0
- ccxt/async_support/bybit.py +4 -4
- ccxt/async_support/coinbase.py +1 -1
- ccxt/async_support/coinex.py +1 -1
- ccxt/async_support/cryptocom.py +1 -1
- ccxt/async_support/exmo.py +16 -8
- ccxt/async_support/gate.py +1 -1
- ccxt/async_support/hashkey.py +6 -1
- ccxt/async_support/htx.py +2 -2
- ccxt/async_support/hyperliquid.py +1 -1
- ccxt/async_support/kraken.py +1 -1
- ccxt/async_support/krakenfutures.py +1 -1
- ccxt/async_support/kucoin.py +1 -1
- ccxt/async_support/kucoinfutures.py +2 -3
- ccxt/async_support/lykke.py +1 -1
- ccxt/async_support/mexc.py +2 -2
- ccxt/async_support/myokx.py +8 -0
- ccxt/async_support/okx.py +4 -4
- ccxt/async_support/onetrading.py +2 -1
- ccxt/async_support/whitebit.py +31 -8
- ccxt/async_support/woo.py +1 -1
- ccxt/async_support/woofipro.py +2 -2
- ccxt/base/exchange.py +1 -1
- ccxt/binance.py +178 -62
- ccxt/bingx.py +15 -9
- ccxt/bitfinex.py +1 -1
- ccxt/bitget.py +3 -3
- ccxt/bitmart.py +3 -3
- ccxt/bitmex.py +1 -1
- ccxt/blofin.py +22 -0
- ccxt/bybit.py +4 -4
- ccxt/coinbase.py +1 -1
- ccxt/coinex.py +1 -1
- ccxt/cryptocom.py +1 -1
- ccxt/exmo.py +16 -8
- ccxt/gate.py +1 -1
- ccxt/hashkey.py +6 -1
- ccxt/htx.py +2 -2
- ccxt/hyperliquid.py +1 -1
- ccxt/kraken.py +1 -1
- ccxt/krakenfutures.py +1 -1
- ccxt/kucoin.py +1 -1
- ccxt/kucoinfutures.py +2 -3
- ccxt/lykke.py +1 -1
- ccxt/mexc.py +2 -2
- ccxt/myokx.py +8 -0
- ccxt/okx.py +4 -4
- ccxt/onetrading.py +2 -1
- ccxt/pro/__init__.py +1 -1
- ccxt/pro/binance.py +2 -1
- ccxt/pro/myokx.py +5 -0
- ccxt/whitebit.py +31 -8
- ccxt/woo.py +1 -1
- ccxt/woofipro.py +2 -2
- {ccxt-4.4.44.dist-info → ccxt-4.4.45.dist-info}/METADATA +4 -4
- {ccxt-4.4.44.dist-info → ccxt-4.4.45.dist-info}/RECORD +69 -69
- {ccxt-4.4.44.dist-info → ccxt-4.4.45.dist-info}/LICENSE.txt +0 -0
- {ccxt-4.4.44.dist-info → ccxt-4.4.45.dist-info}/WHEEL +0 -0
- {ccxt-4.4.44.dist-info → ccxt-4.4.45.dist-info}/top_level.txt +0 -0
ccxt/exmo.py
CHANGED
@@ -846,32 +846,40 @@ class exmo(Exchange, ImplicitAPI):
|
|
846
846
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
847
847
|
:param int [limit]: the maximum amount of candles to fetch
|
848
848
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
849
|
+
:param int [params.until]: timestamp in ms of the latest candle to fetch
|
849
850
|
:returns int[][]: A list of candles ordered, open, high, low, close, volume
|
850
851
|
"""
|
851
852
|
self.load_markets()
|
852
853
|
market = self.market(symbol)
|
854
|
+
until = self.safe_integer_product(params, 'until', 0.001)
|
855
|
+
untilIsDefined = (until is not None)
|
853
856
|
request: dict = {
|
854
857
|
'symbol': market['id'],
|
855
858
|
'resolution': self.safe_string(self.timeframes, timeframe, timeframe),
|
856
859
|
}
|
857
860
|
maxLimit = 3000
|
858
861
|
duration = self.parse_timeframe(timeframe)
|
859
|
-
now = self.milliseconds()
|
862
|
+
now = self.parse_to_int(self.milliseconds() / 1000)
|
860
863
|
if since is None:
|
864
|
+
to = min(until, now) if untilIsDefined else now
|
861
865
|
if limit is None:
|
862
866
|
limit = 1000 # cap default at generous amount
|
863
867
|
else:
|
864
868
|
limit = min(limit, maxLimit)
|
865
|
-
request['from'] =
|
866
|
-
request['to'] =
|
869
|
+
request['from'] = to - (limit * duration) - 1
|
870
|
+
request['to'] = to
|
867
871
|
else:
|
868
872
|
request['from'] = self.parse_to_int(since / 1000) - 1
|
869
|
-
if
|
870
|
-
|
873
|
+
if untilIsDefined:
|
874
|
+
request['to'] = min(until, now)
|
871
875
|
else:
|
872
|
-
limit
|
873
|
-
|
874
|
-
|
876
|
+
if limit is None:
|
877
|
+
limit = maxLimit
|
878
|
+
else:
|
879
|
+
limit = min(limit, maxLimit)
|
880
|
+
to = self.sum(since, limit * duration)
|
881
|
+
request['to'] = min(to, now)
|
882
|
+
params = self.omit(params, 'until')
|
875
883
|
response = self.publicGetCandlesHistory(self.extend(request, params))
|
876
884
|
#
|
877
885
|
# {
|
ccxt/gate.py
CHANGED
ccxt/hashkey.py
CHANGED
@@ -1454,9 +1454,14 @@ class hashkey(Exchange, ImplicitAPI):
|
|
1454
1454
|
if isBuyer is not None:
|
1455
1455
|
side = 'buy' if isBuyer else 'sell'
|
1456
1456
|
takerOrMaker = None
|
1457
|
-
isMaker = self.safe_bool_n(trade, ['isMaker', 'isMarker'
|
1457
|
+
isMaker = self.safe_bool_n(trade, ['isMaker', 'isMarker'])
|
1458
1458
|
if isMaker is not None:
|
1459
1459
|
takerOrMaker = 'maker' if isMaker else 'taker'
|
1460
|
+
isBuyerMaker = self.safe_bool(trade, 'ibm')
|
1461
|
+
# if public trade
|
1462
|
+
if isBuyerMaker is not None:
|
1463
|
+
takerOrMaker = 'taker'
|
1464
|
+
side = 'sell' if isBuyerMaker else 'buy'
|
1460
1465
|
feeCost = self.safe_string(trade, 'commission')
|
1461
1466
|
feeCurrncyId = self.safe_string(trade, 'commissionAsset')
|
1462
1467
|
feeInfo = self.safe_dict(trade, 'fee')
|
ccxt/htx.py
CHANGED
@@ -1310,7 +1310,7 @@ class htx(Exchange, ImplicitAPI):
|
|
1310
1310
|
'trailing': False,
|
1311
1311
|
'untilDays': 2,
|
1312
1312
|
'limit': 500,
|
1313
|
-
'
|
1313
|
+
'daysBack': 180,
|
1314
1314
|
'daysBackCanceled': 1 / 12,
|
1315
1315
|
},
|
1316
1316
|
'fetchOHLCV': {
|
@@ -1351,7 +1351,7 @@ class htx(Exchange, ImplicitAPI):
|
|
1351
1351
|
'trailing': False,
|
1352
1352
|
'untilDays': 2,
|
1353
1353
|
'limit': 50,
|
1354
|
-
'
|
1354
|
+
'daysBack': 90,
|
1355
1355
|
'daysBackCanceled': 1 / 12,
|
1356
1356
|
},
|
1357
1357
|
'fetchOHLCV': {
|
ccxt/hyperliquid.py
CHANGED
ccxt/kraken.py
CHANGED
ccxt/krakenfutures.py
CHANGED
ccxt/kucoin.py
CHANGED
ccxt/kucoinfutures.py
CHANGED
@@ -386,9 +386,8 @@ class kucoinfutures(kucoin, ImplicitAPI):
|
|
386
386
|
'stopLossPrice': True,
|
387
387
|
'takeProfitPrice': True,
|
388
388
|
'attachedStopLossTakeProfit': {
|
389
|
-
'triggerPrice': None,
|
390
389
|
'triggerPriceType': None,
|
391
|
-
'
|
390
|
+
'price': True,
|
392
391
|
},
|
393
392
|
'timeInForce': {
|
394
393
|
'IOC': True,
|
@@ -428,7 +427,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
|
|
428
427
|
'fetchClosedOrders': {
|
429
428
|
'marginMode': False,
|
430
429
|
'limit': 1000,
|
431
|
-
'
|
430
|
+
'daysBack': None,
|
432
431
|
'daysBackCanceled': None,
|
433
432
|
'untilDays': None,
|
434
433
|
'trigger': True,
|
ccxt/lykke.py
CHANGED
@@ -209,7 +209,7 @@ class lykke(Exchange, ImplicitAPI):
|
|
209
209
|
# {
|
210
210
|
# "payload":[
|
211
211
|
# {
|
212
|
-
# "assetId":"115a60c2-0da1-40f9-a7f2-
|
212
|
+
# "assetId":"115a60c2-0da1-40f9-a7f2-41da723b9075",
|
213
213
|
# "name":"Monaco Token",
|
214
214
|
# "symbol":"MCO",
|
215
215
|
# "accuracy":6,
|
ccxt/mexc.py
CHANGED
@@ -748,7 +748,7 @@ class mexc(Exchange, ImplicitAPI):
|
|
748
748
|
'fetchClosedOrders': {
|
749
749
|
'marginMode': True,
|
750
750
|
'limit': 1000,
|
751
|
-
'
|
751
|
+
'daysBack': 7,
|
752
752
|
'daysBackCanceled': 7,
|
753
753
|
'untilDays': 7,
|
754
754
|
'trigger': False,
|
@@ -804,7 +804,7 @@ class mexc(Exchange, ImplicitAPI):
|
|
804
804
|
'fetchClosedOrders': {
|
805
805
|
'marginMode': False,
|
806
806
|
'limit': 100,
|
807
|
-
'
|
807
|
+
'daysBack': 90,
|
808
808
|
'daysBackCanceled': None,
|
809
809
|
'untilDays': 90,
|
810
810
|
'trigger': True,
|
ccxt/myokx.py
CHANGED
ccxt/okx.py
CHANGED
@@ -1225,7 +1225,7 @@ class okx(Exchange, ImplicitAPI):
|
|
1225
1225
|
'mark': True,
|
1226
1226
|
'index': True,
|
1227
1227
|
},
|
1228
|
-
'
|
1228
|
+
'price': True,
|
1229
1229
|
},
|
1230
1230
|
'timeInForce': {
|
1231
1231
|
'IOC': True,
|
@@ -1265,7 +1265,7 @@ class okx(Exchange, ImplicitAPI):
|
|
1265
1265
|
'fetchClosedOrders': {
|
1266
1266
|
'marginMode': False,
|
1267
1267
|
'limit': 100,
|
1268
|
-
'
|
1268
|
+
'daysBack': 90, # 3 months
|
1269
1269
|
'daysBackCanceled': 1 / 12, # 2 hour
|
1270
1270
|
'untilDays': None,
|
1271
1271
|
'trigger': True,
|
@@ -1635,7 +1635,7 @@ class okx(Exchange, ImplicitAPI):
|
|
1635
1635
|
'contractSize': self.safe_number(market, 'ctVal') if contract else None,
|
1636
1636
|
'expiry': expiry,
|
1637
1637
|
'expiryDatetime': self.iso8601(expiry),
|
1638
|
-
'strike': strikePrice,
|
1638
|
+
'strike': self.parse_number(strikePrice),
|
1639
1639
|
'optionType': optionType,
|
1640
1640
|
'created': self.safe_integer(market, 'listTime'),
|
1641
1641
|
'precision': {
|
@@ -1834,7 +1834,7 @@ class okx(Exchange, ImplicitAPI):
|
|
1834
1834
|
}
|
1835
1835
|
firstChain = self.safe_dict(chains, 0, {})
|
1836
1836
|
result[code] = {
|
1837
|
-
'info':
|
1837
|
+
'info': chains,
|
1838
1838
|
'code': code,
|
1839
1839
|
'id': currencyId,
|
1840
1840
|
'name': self.safe_string(firstChain, 'name'),
|
ccxt/onetrading.py
CHANGED
@@ -865,7 +865,8 @@ class onetrading(Exchange, ImplicitAPI):
|
|
865
865
|
# {"instrument_code":"BTC_EUR","granularity":{"unit":"HOURS","period":1},"high":"9135.7","low":"9002.59","open":"9055.45","close":"9133.98","total_amount":"26.21919","volume":"238278.8724959","time":"2020-05-09T00:59:59.999Z","last_sequence":461521},
|
866
866
|
# ]
|
867
867
|
#
|
868
|
-
|
868
|
+
ohlcv = self.safe_list(response, 'candlesticks')
|
869
|
+
return self.parse_ohlcvs(ohlcv, market, timeframe, since, limit)
|
869
870
|
|
870
871
|
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
871
872
|
#
|
ccxt/pro/__init__.py
CHANGED
ccxt/pro/binance.py
CHANGED
@@ -3975,7 +3975,8 @@ class binance(ccxt.async_support.binance):
|
|
3975
3975
|
if not rejected:
|
3976
3976
|
client.reject(message, id)
|
3977
3977
|
# reset connection if 5xx error
|
3978
|
-
|
3978
|
+
codeString = self.safe_string(error, 'code')
|
3979
|
+
if (codeString is not None) and (codeString[0] == '5'):
|
3979
3980
|
client.reset(message)
|
3980
3981
|
|
3981
3982
|
def handle_message(self, client: Client, message):
|
ccxt/pro/myokx.py
CHANGED
ccxt/whitebit.py
CHANGED
@@ -820,9 +820,22 @@ class whitebit(Exchange, ImplicitAPI):
|
|
820
820
|
# "last": "55913.88",
|
821
821
|
# "period": 86400
|
822
822
|
# }
|
823
|
-
|
823
|
+
# v2
|
824
|
+
# {
|
825
|
+
# lastUpdateTimestamp: '2025-01-02T09:16:36.000Z',
|
826
|
+
# tradingPairs: 'ARB_USDC',
|
827
|
+
# lastPrice: '0.7727',
|
828
|
+
# lowestAsk: '0.7735',
|
829
|
+
# highestBid: '0.7732',
|
830
|
+
# baseVolume24h: '1555793.74',
|
831
|
+
# quoteVolume24h: '1157602.622406',
|
832
|
+
# tradesEnabled: True
|
833
|
+
# }
|
834
|
+
#
|
835
|
+
marketId = self.safe_string(ticker, 'tradingPairs')
|
836
|
+
market = self.safe_market(marketId, market)
|
824
837
|
# last price is provided as "last" or "last_price"
|
825
|
-
last = self.
|
838
|
+
last = self.safe_string_n(ticker, ['last', 'last_price', 'lastPrice'])
|
826
839
|
# if "close" is provided, use it, otherwise use <last>
|
827
840
|
close = self.safe_string(ticker, 'close', last)
|
828
841
|
return self.safe_ticker({
|
@@ -831,9 +844,9 @@ class whitebit(Exchange, ImplicitAPI):
|
|
831
844
|
'datetime': None,
|
832
845
|
'high': self.safe_string(ticker, 'high'),
|
833
846
|
'low': self.safe_string(ticker, 'low'),
|
834
|
-
'bid': self.
|
847
|
+
'bid': self.safe_string_2(ticker, 'bid', 'highestBid'),
|
835
848
|
'bidVolume': None,
|
836
|
-
'ask': self.
|
849
|
+
'ask': self.safe_string_2(ticker, 'ask', 'lowestAsk'),
|
837
850
|
'askVolume': None,
|
838
851
|
'vwap': None,
|
839
852
|
'open': self.safe_string(ticker, 'open'),
|
@@ -843,8 +856,8 @@ class whitebit(Exchange, ImplicitAPI):
|
|
843
856
|
'change': None,
|
844
857
|
'percentage': self.safe_string(ticker, 'change'),
|
845
858
|
'average': None,
|
846
|
-
'baseVolume': self.
|
847
|
-
'quoteVolume': self.
|
859
|
+
'baseVolume': self.safe_string_n(ticker, ['base_volume', 'volume', 'baseVolume24h']),
|
860
|
+
'quoteVolume': self.safe_string_n(ticker, ['quote_volume', 'deal', 'quoteVolume24h']),
|
848
861
|
'info': ticker,
|
849
862
|
}, market)
|
850
863
|
|
@@ -854,13 +867,20 @@ class whitebit(Exchange, ImplicitAPI):
|
|
854
867
|
|
855
868
|
https://docs.whitebit.com/public/http-v4/#market-activity
|
856
869
|
|
857
|
-
:param str[]
|
870
|
+
:param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
858
871
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
872
|
+
:param str [params.method]: either v2PublicGetTicker or v4PublicGetTicker default is v4PublicGetTicker
|
859
873
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
860
874
|
"""
|
861
875
|
self.load_markets()
|
862
876
|
symbols = self.market_symbols(symbols)
|
863
|
-
|
877
|
+
method = 'v4PublicGetTicker'
|
878
|
+
method, params = self.handle_option_and_params(params, 'fetchTickers', 'method', method)
|
879
|
+
response = None
|
880
|
+
if method == 'v4PublicGetTicker':
|
881
|
+
response = self.v4PublicGetTicker(params)
|
882
|
+
else:
|
883
|
+
response = self.v2PublicGetTicker(params)
|
864
884
|
#
|
865
885
|
# "BCH_RUB": {
|
866
886
|
# "base_id":1831,
|
@@ -872,6 +892,9 @@ class whitebit(Exchange, ImplicitAPI):
|
|
872
892
|
# "change":"2.12"
|
873
893
|
# },
|
874
894
|
#
|
895
|
+
resultList = self.safe_list(response, 'result')
|
896
|
+
if resultList is not None:
|
897
|
+
return self.parse_tickers(resultList, symbols)
|
875
898
|
marketIds = list(response.keys())
|
876
899
|
result: dict = {}
|
877
900
|
for i in range(0, len(marketIds)):
|
ccxt/woo.py
CHANGED
ccxt/woofipro.py
CHANGED
@@ -357,7 +357,7 @@ class woofipro(Exchange, ImplicitAPI):
|
|
357
357
|
'fetchClosedOrders': {
|
358
358
|
'marginMode': False,
|
359
359
|
'limit': 500,
|
360
|
-
'
|
360
|
+
'daysBack': None,
|
361
361
|
'daysBackCanceled': None,
|
362
362
|
'untilDays': 100000,
|
363
363
|
'trigger': True,
|
@@ -378,7 +378,7 @@ class woofipro(Exchange, ImplicitAPI):
|
|
378
378
|
'attachedStopLossTakeProfit': {
|
379
379
|
# todo: implementation needs unification
|
380
380
|
'triggerPriceType': None,
|
381
|
-
'
|
381
|
+
'price': False,
|
382
382
|
},
|
383
383
|
},
|
384
384
|
},
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 4.4.
|
3
|
+
Version: 4.4.45
|
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
|
@@ -277,13 +277,13 @@ console.log(version, Object.keys(exchanges));
|
|
277
277
|
|
278
278
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
279
279
|
|
280
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.
|
281
|
-
* unpkg: https://unpkg.com/ccxt@4.4.
|
280
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.45/dist/ccxt.browser.min.js
|
281
|
+
* unpkg: https://unpkg.com/ccxt@4.4.45/dist/ccxt.browser.min.js
|
282
282
|
|
283
283
|
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.
|
284
284
|
|
285
285
|
```HTML
|
286
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.
|
286
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.45/dist/ccxt.browser.min.js"></script>
|
287
287
|
```
|
288
288
|
|
289
289
|
Creates a global `ccxt` object:
|