ccxt 4.2.66__py2.py3-none-any.whl → 4.2.68__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 +7 -3
- ccxt/async_support/bitfinex2.py +3 -2
- ccxt/async_support/gate.py +2 -1
- ccxt/async_support/hyperliquid.py +4 -2
- ccxt/async_support/krakenfutures.py +124 -27
- ccxt/base/exchange.py +14 -4
- ccxt/bitfinex2.py +2 -1
- ccxt/gate.py +2 -1
- ccxt/hyperliquid.py +4 -2
- ccxt/krakenfutures.py +124 -27
- ccxt/pro/__init__.py +1 -1
- {ccxt-4.2.66.dist-info → ccxt-4.2.68.dist-info}/METADATA +4 -4
- {ccxt-4.2.66.dist-info → ccxt-4.2.68.dist-info}/RECORD +17 -17
- {ccxt-4.2.66.dist-info → ccxt-4.2.68.dist-info}/WHEEL +0 -0
- {ccxt-4.2.66.dist-info → ccxt-4.2.68.dist-info}/top_level.txt +0 -0
ccxt/__init__.py
CHANGED
ccxt/async_support/__init__.py
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# -----------------------------------------------------------------------------
|
4
4
|
|
5
|
-
__version__ = '4.2.
|
5
|
+
__version__ = '4.2.68'
|
6
6
|
|
7
7
|
# -----------------------------------------------------------------------------
|
8
8
|
|
@@ -1527,7 +1527,9 @@ class Exchange(BaseExchange):
|
|
1527
1527
|
response = await getattr(self, method)(symbol, None, maxEntriesPerRequest, params)
|
1528
1528
|
responseLength = len(response)
|
1529
1529
|
if self.verbose:
|
1530
|
-
backwardMessage = 'Dynamic pagination call ' + calls + ' method ' + method + ' response length ' + responseLength
|
1530
|
+
backwardMessage = 'Dynamic pagination call ' + self.number_to_string(calls) + ' method ' + method + ' response length ' + self.number_to_string(responseLength)
|
1531
|
+
if paginationTimestamp is not None:
|
1532
|
+
backwardMessage += ' timestamp ' + self.number_to_string(paginationTimestamp)
|
1531
1533
|
self.log(backwardMessage)
|
1532
1534
|
if responseLength == 0:
|
1533
1535
|
break
|
@@ -1542,7 +1544,9 @@ class Exchange(BaseExchange):
|
|
1542
1544
|
response = await getattr(self, method)(symbol, paginationTimestamp, maxEntriesPerRequest, params)
|
1543
1545
|
responseLength = len(response)
|
1544
1546
|
if self.verbose:
|
1545
|
-
forwardMessage = 'Dynamic pagination call ' + calls + ' method ' + method + ' response length ' + responseLength
|
1547
|
+
forwardMessage = 'Dynamic pagination call ' + self.number_to_string(calls) + ' method ' + method + ' response length ' + self.number_to_string(responseLength)
|
1548
|
+
if paginationTimestamp is not None:
|
1549
|
+
forwardMessage += ' timestamp ' + self.number_to_string(paginationTimestamp)
|
1546
1550
|
self.log(forwardMessage)
|
1547
1551
|
if responseLength == 0:
|
1548
1552
|
break
|
ccxt/async_support/bitfinex2.py
CHANGED
@@ -1347,9 +1347,10 @@ class bitfinex2(Exchange, ImplicitAPI):
|
|
1347
1347
|
'symbol': market['id'],
|
1348
1348
|
'timeframe': self.safe_string(self.timeframes, timeframe, timeframe),
|
1349
1349
|
'sort': 1,
|
1350
|
-
'start': since,
|
1351
1350
|
'limit': limit,
|
1352
1351
|
}
|
1352
|
+
if since is not None:
|
1353
|
+
request['start'] = since
|
1353
1354
|
request, params = self.handle_until_option('end', request, params)
|
1354
1355
|
response = await self.publicGetCandlesTradeTimeframeSymbolHist(self.extend(request, params))
|
1355
1356
|
#
|
@@ -2792,7 +2793,7 @@ class bitfinex2(Exchange, ImplicitAPI):
|
|
2792
2793
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2793
2794
|
:returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
|
2794
2795
|
"""
|
2795
|
-
return self.fetch_funding_rates([symbol], params)
|
2796
|
+
return await self.fetch_funding_rates([symbol], params)
|
2796
2797
|
|
2797
2798
|
async def fetch_funding_rates(self, symbols: Strings = None, params={}):
|
2798
2799
|
"""
|
ccxt/async_support/gate.py
CHANGED
@@ -2174,7 +2174,8 @@ class gate(Exchange, ImplicitAPI):
|
|
2174
2174
|
request, requestParams = self.prepare_request(market, type, query)
|
2175
2175
|
request['type'] = 'fund' # 'dnw' 'pnl' 'fee' 'refr' 'fund' 'point_dnw' 'point_fee' 'point_refr'
|
2176
2176
|
if since is not None:
|
2177
|
-
|
2177
|
+
# from should be integer
|
2178
|
+
request['from'] = self.parse_to_int(since / 1000)
|
2178
2179
|
if limit is not None:
|
2179
2180
|
request['limit'] = limit
|
2180
2181
|
response = None
|
@@ -849,13 +849,15 @@ class hyperliquid(Exchange, ImplicitAPI):
|
|
849
849
|
if clientOrderId is not None:
|
850
850
|
orderObj['c'] = clientOrderId
|
851
851
|
orderReq.append(orderObj)
|
852
|
+
vaultAddress = self.safe_string(params, 'vaultAddress')
|
852
853
|
orderAction = {
|
853
854
|
'type': 'order',
|
854
855
|
'orders': orderReq,
|
855
856
|
'grouping': 'na',
|
856
|
-
'brokerCode': 1,
|
857
|
+
# 'brokerCode': 1, # cant
|
857
858
|
}
|
858
|
-
vaultAddress
|
859
|
+
if vaultAddress is None:
|
860
|
+
orderAction['brokerCode'] = 1
|
859
861
|
signature = self.sign_l1_action(orderAction, nonce, vaultAddress)
|
860
862
|
request = {
|
861
863
|
'action': orderAction,
|
@@ -263,6 +263,9 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
263
263
|
},
|
264
264
|
},
|
265
265
|
},
|
266
|
+
'fetchTrades': {
|
267
|
+
'method': 'historyGetMarketSymbolExecutions', # historyGetMarketSymbolExecutions, publicGetHistory
|
268
|
+
},
|
266
269
|
},
|
267
270
|
'timeframes': {
|
268
271
|
'1m': '1m',
|
@@ -685,6 +688,7 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
685
688
|
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
686
689
|
"""
|
687
690
|
:see: https://docs.futures.kraken.com/#http-api-trading-v3-api-market-data-get-trade-history
|
691
|
+
:see: https://docs.futures.kraken.com/#http-api-history-market-history-get-public-execution-events
|
688
692
|
Fetch a history of filled trades that self account has made
|
689
693
|
:param str symbol: Unified CCXT market symbol
|
690
694
|
:param int [since]: Timestamp in ms of earliest trade. Not used by krakenfutures except in combination with params.until
|
@@ -692,6 +696,7 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
692
696
|
:param dict [params]: Exchange specific params
|
693
697
|
:param int [params.until]: Timestamp in ms of latest trade
|
694
698
|
:param boolean [params.paginate]: default False, when True will automatically paginate by calling self endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
699
|
+
:param str [params.method]: The method to use to fetch trades. Can be 'historyGetMarketSymbolExecutions' or 'publicGetHistory' default is 'historyGetMarketSymbolExecutions'
|
695
700
|
:returns: An array of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
696
701
|
"""
|
697
702
|
await self.load_markets()
|
@@ -703,34 +708,105 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
703
708
|
request = {
|
704
709
|
'symbol': market['id'],
|
705
710
|
}
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
711
|
+
method = None
|
712
|
+
method, params = self.handle_option_and_params(params, 'fetchTrades', 'method', 'historyGetMarketSymbolExecutions')
|
713
|
+
rawTrades = None
|
714
|
+
isFullHistoryEndpoint = (method == 'historyGetMarketSymbolExecutions')
|
715
|
+
if isFullHistoryEndpoint:
|
716
|
+
request, params = self.handle_until_option('before', request, params)
|
717
|
+
if since is not None:
|
718
|
+
request['since'] = since
|
719
|
+
request['sort'] = 'asc'
|
720
|
+
if limit is not None:
|
721
|
+
request['count'] = limit
|
722
|
+
response = await self.historyGetMarketSymbolExecutions(self.extend(request, params))
|
723
|
+
#
|
724
|
+
# {
|
725
|
+
# "elements": [
|
726
|
+
# {
|
727
|
+
# "uid": "a5105030-f054-44cc-98ab-30d5cae96bef",
|
728
|
+
# "timestamp": "1710150778607",
|
729
|
+
# "event": {
|
730
|
+
# "Execution": {
|
731
|
+
# "execution": {
|
732
|
+
# "uid": "2d485b71-cd28-4a1e-9364-371a127550d2",
|
733
|
+
# "makerOrder": {
|
734
|
+
# "uid": "0a25f66b-1109-49ec-93a3-d17bf9e9137e",
|
735
|
+
# "tradeable": "PF_XBTUSD",
|
736
|
+
# "direction": "Buy",
|
737
|
+
# "quantity": "0.26500",
|
738
|
+
# "timestamp": "1710150778570",
|
739
|
+
# "limitPrice": "71907",
|
740
|
+
# "orderType": "Post",
|
741
|
+
# "reduceOnly": False,
|
742
|
+
# "lastUpdateTimestamp": "1710150778570"
|
743
|
+
# },
|
744
|
+
# "takerOrder": {
|
745
|
+
# "uid": "04de3ee0-9125-4960-bf8f-f63b577b6790",
|
746
|
+
# "tradeable": "PF_XBTUSD",
|
747
|
+
# "direction": "Sell",
|
748
|
+
# "quantity": "0.0002",
|
749
|
+
# "timestamp": "1710150778607",
|
750
|
+
# "limitPrice": "71187.00",
|
751
|
+
# "orderType": "Market",
|
752
|
+
# "reduceOnly": False,
|
753
|
+
# "lastUpdateTimestamp": "1710150778607"
|
754
|
+
# },
|
755
|
+
# "timestamp": "1710150778607",
|
756
|
+
# "quantity": "0.0002",
|
757
|
+
# "price": "71907",
|
758
|
+
# "markPrice": "71903.32715463147",
|
759
|
+
# "limitFilled": False,
|
760
|
+
# "usdValue": "14.38"
|
761
|
+
# },
|
762
|
+
# "takerReducedQuantity": ""
|
763
|
+
# }
|
764
|
+
# }
|
765
|
+
# },
|
766
|
+
# ... followed by older items
|
767
|
+
# ],
|
768
|
+
# "len": "1000",
|
769
|
+
# "continuationToken": "QTexMDE0OTe33NTcyXy8xNDIzAjc1NjY5MwI="
|
770
|
+
# }
|
771
|
+
#
|
772
|
+
elements = self.safe_list(response, 'elements', [])
|
773
|
+
# we need to reverse the list to fix chronology
|
774
|
+
rawTrades = []
|
775
|
+
length = len(elements)
|
776
|
+
for i in range(0, length):
|
777
|
+
index = length - 1 - i
|
778
|
+
element = elements[index]
|
779
|
+
event = self.safe_dict(element, 'event', {})
|
780
|
+
executionContainer = self.safe_dict(event, 'Execution', {})
|
781
|
+
rawTrade = self.safe_dict(executionContainer, 'execution', {})
|
782
|
+
rawTrades.append(rawTrade)
|
783
|
+
else:
|
784
|
+
request, params = self.handle_until_option('lastTime', request, params)
|
785
|
+
response = await self.publicGetHistory(self.extend(request, params))
|
786
|
+
#
|
787
|
+
# {
|
788
|
+
# "result": "success",
|
789
|
+
# "history": [
|
790
|
+
# {
|
791
|
+
# "time": "2022-03-18T04:55:37.692Z",
|
792
|
+
# "trade_id": 100,
|
793
|
+
# "price": 0.7921,
|
794
|
+
# "size": 1068,
|
795
|
+
# "side": "sell",
|
796
|
+
# "type": "fill",
|
797
|
+
# "uid": "6c5da0b0-f1a8-483f-921f-466eb0388265"
|
798
|
+
# },
|
799
|
+
# ...
|
800
|
+
# ],
|
801
|
+
# "serverTime": "2022-03-18T06:39:18.056Z"
|
802
|
+
# }
|
803
|
+
#
|
804
|
+
rawTrades = self.safe_list(response, 'history', [])
|
805
|
+
return self.parse_trades(rawTrades, market, since, limit)
|
730
806
|
|
731
807
|
def parse_trade(self, trade, market: Market = None) -> Trade:
|
732
808
|
#
|
733
|
-
# fetchTrades(
|
809
|
+
# fetchTrades(recent trades)
|
734
810
|
#
|
735
811
|
# {
|
736
812
|
# "time": "2019-02-14T09:25:33.920Z",
|
@@ -738,10 +814,24 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
738
814
|
# "price": 3574,
|
739
815
|
# "size": 100,
|
740
816
|
# "side": "buy",
|
741
|
-
# "type": "fill"
|
817
|
+
# "type": "fill" # fill, liquidation, assignment, termination
|
742
818
|
# "uid": "11c3d82c-9e70-4fe9-8115-f643f1b162d4"
|
743
819
|
# }
|
744
820
|
#
|
821
|
+
# fetchTrades(executions history)
|
822
|
+
#
|
823
|
+
# {
|
824
|
+
# "timestamp": "1710152516830",
|
825
|
+
# "price": "71927.0",
|
826
|
+
# "quantity": "0.0695",
|
827
|
+
# "markPrice": "71936.38701675525",
|
828
|
+
# "limitFilled": True,
|
829
|
+
# "usdValue": "4998.93",
|
830
|
+
# "uid": "116ae634-253f-470b-bd20-fa9d429fb8b1",
|
831
|
+
# "makerOrder": {"uid": "17bfe4de-c01e-4938-926c-617d2a2d0597", "tradeable": "PF_XBTUSD", "direction": "Buy", "quantity": "0.0695", "timestamp": "1710152515836", "limitPrice": "71927.0", "orderType": "Post", "reduceOnly": False, "lastUpdateTimestamp": "1710152515836"},
|
832
|
+
# "takerOrder": {"uid": "d3e437b4-aa70-4108-b5cf-b1eecb9845b5", "tradeable": "PF_XBTUSD", "direction": "Sell", "quantity": "0.940100", "timestamp": "1710152516830", "limitPrice": "71915", "orderType": "IoC", "reduceOnly": False, "lastUpdateTimestamp": "1710152516830"}
|
833
|
+
# }
|
834
|
+
#
|
745
835
|
# fetchMyTrades(private)
|
746
836
|
#
|
747
837
|
# {
|
@@ -782,7 +872,7 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
782
872
|
#
|
783
873
|
timestamp = self.parse8601(self.safe_string_2(trade, 'time', 'fillTime'))
|
784
874
|
price = self.safe_string(trade, 'price')
|
785
|
-
amount = self.
|
875
|
+
amount = self.safe_string_n(trade, ['size', 'amount', 'quantity'], '0.0')
|
786
876
|
id = self.safe_string_2(trade, 'uid', 'fill_id')
|
787
877
|
if id is None:
|
788
878
|
id = self.safe_string(trade, 'executionId')
|
@@ -821,6 +911,13 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
821
911
|
takerOrMaker = 'taker'
|
822
912
|
elif fillType.find('maker') >= 0:
|
823
913
|
takerOrMaker = 'maker'
|
914
|
+
isHistoricalExecution = ('takerOrder' in trade)
|
915
|
+
if isHistoricalExecution:
|
916
|
+
timestamp = self.safe_integer(trade, 'timestamp')
|
917
|
+
taker = self.safe_dict(trade, 'takerOrder', {})
|
918
|
+
if taker is not None:
|
919
|
+
side = self.safe_string_lower(taker, 'direction')
|
920
|
+
takerOrMaker = 'taker'
|
824
921
|
return self.safe_trade({
|
825
922
|
'info': trade,
|
826
923
|
'id': id,
|
ccxt/base/exchange.py
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
# -----------------------------------------------------------------------------
|
6
6
|
|
7
|
-
__version__ = '4.2.
|
7
|
+
__version__ = '4.2.68'
|
8
8
|
|
9
9
|
# -----------------------------------------------------------------------------
|
10
10
|
|
@@ -3514,12 +3514,18 @@ class Exchange(object):
|
|
3514
3514
|
market = self.market(symbol)
|
3515
3515
|
return self.safe_string(market, 'symbol', symbol)
|
3516
3516
|
|
3517
|
-
def handle_param_string(self, params: object, paramName: str, defaultValue=None):
|
3517
|
+
def handle_param_string(self, params: object, paramName: str, defaultValue: Str = None):
|
3518
3518
|
value = self.safe_string(params, paramName, defaultValue)
|
3519
3519
|
if value is not None:
|
3520
3520
|
params = self.omit(params, paramName)
|
3521
3521
|
return [value, params]
|
3522
3522
|
|
3523
|
+
def handle_param_integer(self, params: object, paramName: str, defaultValue: Int = None):
|
3524
|
+
value = self.safe_integer(params, paramName, defaultValue)
|
3525
|
+
if value is not None:
|
3526
|
+
params = self.omit(params, paramName)
|
3527
|
+
return [value, params]
|
3528
|
+
|
3523
3529
|
def resolve_path(self, path, params):
|
3524
3530
|
return [
|
3525
3531
|
self.implode_params(path, params),
|
@@ -5060,7 +5066,9 @@ class Exchange(object):
|
|
5060
5066
|
response = getattr(self, method)(symbol, None, maxEntriesPerRequest, params)
|
5061
5067
|
responseLength = len(response)
|
5062
5068
|
if self.verbose:
|
5063
|
-
backwardMessage = 'Dynamic pagination call ' + calls + ' method ' + method + ' response length ' + responseLength
|
5069
|
+
backwardMessage = 'Dynamic pagination call ' + self.number_to_string(calls) + ' method ' + method + ' response length ' + self.number_to_string(responseLength)
|
5070
|
+
if paginationTimestamp is not None:
|
5071
|
+
backwardMessage += ' timestamp ' + self.number_to_string(paginationTimestamp)
|
5064
5072
|
self.log(backwardMessage)
|
5065
5073
|
if responseLength == 0:
|
5066
5074
|
break
|
@@ -5075,7 +5083,9 @@ class Exchange(object):
|
|
5075
5083
|
response = getattr(self, method)(symbol, paginationTimestamp, maxEntriesPerRequest, params)
|
5076
5084
|
responseLength = len(response)
|
5077
5085
|
if self.verbose:
|
5078
|
-
forwardMessage = 'Dynamic pagination call ' + calls + ' method ' + method + ' response length ' + responseLength
|
5086
|
+
forwardMessage = 'Dynamic pagination call ' + self.number_to_string(calls) + ' method ' + method + ' response length ' + self.number_to_string(responseLength)
|
5087
|
+
if paginationTimestamp is not None:
|
5088
|
+
forwardMessage += ' timestamp ' + self.number_to_string(paginationTimestamp)
|
5079
5089
|
self.log(forwardMessage)
|
5080
5090
|
if responseLength == 0:
|
5081
5091
|
break
|
ccxt/bitfinex2.py
CHANGED
@@ -1347,9 +1347,10 @@ class bitfinex2(Exchange, ImplicitAPI):
|
|
1347
1347
|
'symbol': market['id'],
|
1348
1348
|
'timeframe': self.safe_string(self.timeframes, timeframe, timeframe),
|
1349
1349
|
'sort': 1,
|
1350
|
-
'start': since,
|
1351
1350
|
'limit': limit,
|
1352
1351
|
}
|
1352
|
+
if since is not None:
|
1353
|
+
request['start'] = since
|
1353
1354
|
request, params = self.handle_until_option('end', request, params)
|
1354
1355
|
response = self.publicGetCandlesTradeTimeframeSymbolHist(self.extend(request, params))
|
1355
1356
|
#
|
ccxt/gate.py
CHANGED
@@ -2173,7 +2173,8 @@ class gate(Exchange, ImplicitAPI):
|
|
2173
2173
|
request, requestParams = self.prepare_request(market, type, query)
|
2174
2174
|
request['type'] = 'fund' # 'dnw' 'pnl' 'fee' 'refr' 'fund' 'point_dnw' 'point_fee' 'point_refr'
|
2175
2175
|
if since is not None:
|
2176
|
-
|
2176
|
+
# from should be integer
|
2177
|
+
request['from'] = self.parse_to_int(since / 1000)
|
2177
2178
|
if limit is not None:
|
2178
2179
|
request['limit'] = limit
|
2179
2180
|
response = None
|
ccxt/hyperliquid.py
CHANGED
@@ -849,13 +849,15 @@ class hyperliquid(Exchange, ImplicitAPI):
|
|
849
849
|
if clientOrderId is not None:
|
850
850
|
orderObj['c'] = clientOrderId
|
851
851
|
orderReq.append(orderObj)
|
852
|
+
vaultAddress = self.safe_string(params, 'vaultAddress')
|
852
853
|
orderAction = {
|
853
854
|
'type': 'order',
|
854
855
|
'orders': orderReq,
|
855
856
|
'grouping': 'na',
|
856
|
-
'brokerCode': 1,
|
857
|
+
# 'brokerCode': 1, # cant
|
857
858
|
}
|
858
|
-
vaultAddress
|
859
|
+
if vaultAddress is None:
|
860
|
+
orderAction['brokerCode'] = 1
|
859
861
|
signature = self.sign_l1_action(orderAction, nonce, vaultAddress)
|
860
862
|
request = {
|
861
863
|
'action': orderAction,
|
ccxt/krakenfutures.py
CHANGED
@@ -263,6 +263,9 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
263
263
|
},
|
264
264
|
},
|
265
265
|
},
|
266
|
+
'fetchTrades': {
|
267
|
+
'method': 'historyGetMarketSymbolExecutions', # historyGetMarketSymbolExecutions, publicGetHistory
|
268
|
+
},
|
266
269
|
},
|
267
270
|
'timeframes': {
|
268
271
|
'1m': '1m',
|
@@ -685,6 +688,7 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
685
688
|
def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
686
689
|
"""
|
687
690
|
:see: https://docs.futures.kraken.com/#http-api-trading-v3-api-market-data-get-trade-history
|
691
|
+
:see: https://docs.futures.kraken.com/#http-api-history-market-history-get-public-execution-events
|
688
692
|
Fetch a history of filled trades that self account has made
|
689
693
|
:param str symbol: Unified CCXT market symbol
|
690
694
|
:param int [since]: Timestamp in ms of earliest trade. Not used by krakenfutures except in combination with params.until
|
@@ -692,6 +696,7 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
692
696
|
:param dict [params]: Exchange specific params
|
693
697
|
:param int [params.until]: Timestamp in ms of latest trade
|
694
698
|
:param boolean [params.paginate]: default False, when True will automatically paginate by calling self endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
699
|
+
:param str [params.method]: The method to use to fetch trades. Can be 'historyGetMarketSymbolExecutions' or 'publicGetHistory' default is 'historyGetMarketSymbolExecutions'
|
695
700
|
:returns: An array of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
696
701
|
"""
|
697
702
|
self.load_markets()
|
@@ -703,34 +708,105 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
703
708
|
request = {
|
704
709
|
'symbol': market['id'],
|
705
710
|
}
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
711
|
+
method = None
|
712
|
+
method, params = self.handle_option_and_params(params, 'fetchTrades', 'method', 'historyGetMarketSymbolExecutions')
|
713
|
+
rawTrades = None
|
714
|
+
isFullHistoryEndpoint = (method == 'historyGetMarketSymbolExecutions')
|
715
|
+
if isFullHistoryEndpoint:
|
716
|
+
request, params = self.handle_until_option('before', request, params)
|
717
|
+
if since is not None:
|
718
|
+
request['since'] = since
|
719
|
+
request['sort'] = 'asc'
|
720
|
+
if limit is not None:
|
721
|
+
request['count'] = limit
|
722
|
+
response = self.historyGetMarketSymbolExecutions(self.extend(request, params))
|
723
|
+
#
|
724
|
+
# {
|
725
|
+
# "elements": [
|
726
|
+
# {
|
727
|
+
# "uid": "a5105030-f054-44cc-98ab-30d5cae96bef",
|
728
|
+
# "timestamp": "1710150778607",
|
729
|
+
# "event": {
|
730
|
+
# "Execution": {
|
731
|
+
# "execution": {
|
732
|
+
# "uid": "2d485b71-cd28-4a1e-9364-371a127550d2",
|
733
|
+
# "makerOrder": {
|
734
|
+
# "uid": "0a25f66b-1109-49ec-93a3-d17bf9e9137e",
|
735
|
+
# "tradeable": "PF_XBTUSD",
|
736
|
+
# "direction": "Buy",
|
737
|
+
# "quantity": "0.26500",
|
738
|
+
# "timestamp": "1710150778570",
|
739
|
+
# "limitPrice": "71907",
|
740
|
+
# "orderType": "Post",
|
741
|
+
# "reduceOnly": False,
|
742
|
+
# "lastUpdateTimestamp": "1710150778570"
|
743
|
+
# },
|
744
|
+
# "takerOrder": {
|
745
|
+
# "uid": "04de3ee0-9125-4960-bf8f-f63b577b6790",
|
746
|
+
# "tradeable": "PF_XBTUSD",
|
747
|
+
# "direction": "Sell",
|
748
|
+
# "quantity": "0.0002",
|
749
|
+
# "timestamp": "1710150778607",
|
750
|
+
# "limitPrice": "71187.00",
|
751
|
+
# "orderType": "Market",
|
752
|
+
# "reduceOnly": False,
|
753
|
+
# "lastUpdateTimestamp": "1710150778607"
|
754
|
+
# },
|
755
|
+
# "timestamp": "1710150778607",
|
756
|
+
# "quantity": "0.0002",
|
757
|
+
# "price": "71907",
|
758
|
+
# "markPrice": "71903.32715463147",
|
759
|
+
# "limitFilled": False,
|
760
|
+
# "usdValue": "14.38"
|
761
|
+
# },
|
762
|
+
# "takerReducedQuantity": ""
|
763
|
+
# }
|
764
|
+
# }
|
765
|
+
# },
|
766
|
+
# ... followed by older items
|
767
|
+
# ],
|
768
|
+
# "len": "1000",
|
769
|
+
# "continuationToken": "QTexMDE0OTe33NTcyXy8xNDIzAjc1NjY5MwI="
|
770
|
+
# }
|
771
|
+
#
|
772
|
+
elements = self.safe_list(response, 'elements', [])
|
773
|
+
# we need to reverse the list to fix chronology
|
774
|
+
rawTrades = []
|
775
|
+
length = len(elements)
|
776
|
+
for i in range(0, length):
|
777
|
+
index = length - 1 - i
|
778
|
+
element = elements[index]
|
779
|
+
event = self.safe_dict(element, 'event', {})
|
780
|
+
executionContainer = self.safe_dict(event, 'Execution', {})
|
781
|
+
rawTrade = self.safe_dict(executionContainer, 'execution', {})
|
782
|
+
rawTrades.append(rawTrade)
|
783
|
+
else:
|
784
|
+
request, params = self.handle_until_option('lastTime', request, params)
|
785
|
+
response = self.publicGetHistory(self.extend(request, params))
|
786
|
+
#
|
787
|
+
# {
|
788
|
+
# "result": "success",
|
789
|
+
# "history": [
|
790
|
+
# {
|
791
|
+
# "time": "2022-03-18T04:55:37.692Z",
|
792
|
+
# "trade_id": 100,
|
793
|
+
# "price": 0.7921,
|
794
|
+
# "size": 1068,
|
795
|
+
# "side": "sell",
|
796
|
+
# "type": "fill",
|
797
|
+
# "uid": "6c5da0b0-f1a8-483f-921f-466eb0388265"
|
798
|
+
# },
|
799
|
+
# ...
|
800
|
+
# ],
|
801
|
+
# "serverTime": "2022-03-18T06:39:18.056Z"
|
802
|
+
# }
|
803
|
+
#
|
804
|
+
rawTrades = self.safe_list(response, 'history', [])
|
805
|
+
return self.parse_trades(rawTrades, market, since, limit)
|
730
806
|
|
731
807
|
def parse_trade(self, trade, market: Market = None) -> Trade:
|
732
808
|
#
|
733
|
-
# fetchTrades(
|
809
|
+
# fetchTrades(recent trades)
|
734
810
|
#
|
735
811
|
# {
|
736
812
|
# "time": "2019-02-14T09:25:33.920Z",
|
@@ -738,10 +814,24 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
738
814
|
# "price": 3574,
|
739
815
|
# "size": 100,
|
740
816
|
# "side": "buy",
|
741
|
-
# "type": "fill"
|
817
|
+
# "type": "fill" # fill, liquidation, assignment, termination
|
742
818
|
# "uid": "11c3d82c-9e70-4fe9-8115-f643f1b162d4"
|
743
819
|
# }
|
744
820
|
#
|
821
|
+
# fetchTrades(executions history)
|
822
|
+
#
|
823
|
+
# {
|
824
|
+
# "timestamp": "1710152516830",
|
825
|
+
# "price": "71927.0",
|
826
|
+
# "quantity": "0.0695",
|
827
|
+
# "markPrice": "71936.38701675525",
|
828
|
+
# "limitFilled": True,
|
829
|
+
# "usdValue": "4998.93",
|
830
|
+
# "uid": "116ae634-253f-470b-bd20-fa9d429fb8b1",
|
831
|
+
# "makerOrder": {"uid": "17bfe4de-c01e-4938-926c-617d2a2d0597", "tradeable": "PF_XBTUSD", "direction": "Buy", "quantity": "0.0695", "timestamp": "1710152515836", "limitPrice": "71927.0", "orderType": "Post", "reduceOnly": False, "lastUpdateTimestamp": "1710152515836"},
|
832
|
+
# "takerOrder": {"uid": "d3e437b4-aa70-4108-b5cf-b1eecb9845b5", "tradeable": "PF_XBTUSD", "direction": "Sell", "quantity": "0.940100", "timestamp": "1710152516830", "limitPrice": "71915", "orderType": "IoC", "reduceOnly": False, "lastUpdateTimestamp": "1710152516830"}
|
833
|
+
# }
|
834
|
+
#
|
745
835
|
# fetchMyTrades(private)
|
746
836
|
#
|
747
837
|
# {
|
@@ -782,7 +872,7 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
782
872
|
#
|
783
873
|
timestamp = self.parse8601(self.safe_string_2(trade, 'time', 'fillTime'))
|
784
874
|
price = self.safe_string(trade, 'price')
|
785
|
-
amount = self.
|
875
|
+
amount = self.safe_string_n(trade, ['size', 'amount', 'quantity'], '0.0')
|
786
876
|
id = self.safe_string_2(trade, 'uid', 'fill_id')
|
787
877
|
if id is None:
|
788
878
|
id = self.safe_string(trade, 'executionId')
|
@@ -821,6 +911,13 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
821
911
|
takerOrMaker = 'taker'
|
822
912
|
elif fillType.find('maker') >= 0:
|
823
913
|
takerOrMaker = 'maker'
|
914
|
+
isHistoricalExecution = ('takerOrder' in trade)
|
915
|
+
if isHistoricalExecution:
|
916
|
+
timestamp = self.safe_integer(trade, 'timestamp')
|
917
|
+
taker = self.safe_dict(trade, 'takerOrder', {})
|
918
|
+
if taker is not None:
|
919
|
+
side = self.safe_string_lower(taker, 'direction')
|
920
|
+
takerOrMaker = 'taker'
|
824
921
|
return self.safe_trade({
|
825
922
|
'info': trade,
|
826
923
|
'id': id,
|
ccxt/pro/__init__.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 4.2.
|
3
|
+
Version: 4.2.68
|
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
|
@@ -259,13 +259,13 @@ console.log(version, Object.keys(exchanges));
|
|
259
259
|
|
260
260
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
261
261
|
|
262
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.
|
263
|
-
* unpkg: https://unpkg.com/ccxt@4.2.
|
262
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.68/dist/ccxt.browser.js
|
263
|
+
* unpkg: https://unpkg.com/ccxt@4.2.68/dist/ccxt.browser.js
|
264
264
|
|
265
265
|
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.
|
266
266
|
|
267
267
|
```HTML
|
268
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.
|
268
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.68/dist/ccxt.browser.js"></script>
|
269
269
|
```
|
270
270
|
|
271
271
|
Creates a global `ccxt` object:
|
@@ -1,4 +1,4 @@
|
|
1
|
-
ccxt/__init__.py,sha256=
|
1
|
+
ccxt/__init__.py,sha256=CawUjzL4-ousENhUpIvPjP5EGA2Cx_yAGVG2v4qqgGg,15444
|
2
2
|
ccxt/ace.py,sha256=pIA1Ipres_-IcaIF1hiSewvx3gLNH_19ZPykd4OO5zc,41406
|
3
3
|
ccxt/alpaca.py,sha256=EN4OdS7Z3hU5FUgrtd-PP3E1b3jplP-cGViamkAWUaM,46889
|
4
4
|
ccxt/ascendex.py,sha256=uJvx7lkPbZmHDOcFw11vKqKWUkn9pbRz2OkfpvUMHKs,144175
|
@@ -15,7 +15,7 @@ ccxt/bitbay.py,sha256=xAIjzGRDVGwoy-Gygd99H0YN4wiaz_0lR0Z14oxaaxc,478
|
|
15
15
|
ccxt/bitbns.py,sha256=tqJs4hyNpX3TOYVkpvu9xwL1xK_7SPbv7vVxFEUZlMI,48117
|
16
16
|
ccxt/bitcoincom.py,sha256=PyWIl4nC4jp5Uba2lI1At0N_hhNyWD0DoZC_MSyL_s4,502
|
17
17
|
ccxt/bitfinex.py,sha256=e4k5Flv2W4DFLa12jdcmJ0z9fIyaIqpDV72SYOf5OPc,71434
|
18
|
-
ccxt/bitfinex2.py,sha256=
|
18
|
+
ccxt/bitfinex2.py,sha256=nFloUvu64Uu5X2Fr9McSoJCe0rqjsr7ZAuCL8XzjMNs,157675
|
19
19
|
ccxt/bitflyer.py,sha256=4p6VZl4A6WzKMtOzyJDkEZceCAt0vfhtPoU0dZ_avHA,40255
|
20
20
|
ccxt/bitget.py,sha256=4DS44u4Tw8iqHo4e5ARJ9CSoDrg8GtofuFKmAjwuDC0,404705
|
21
21
|
ccxt/bithumb.py,sha256=48jV03pqYBmAQGjGX4wJDrwV5r35u3OZyS6wOtBqtSg,45228
|
@@ -55,7 +55,7 @@ ccxt/digifinex.py,sha256=V2nJqSNoiUsiNYRz9GLk8ItUJ2dAlD1WAF9Ei4Rzsls,169285
|
|
55
55
|
ccxt/exmo.py,sha256=luqEu6-URZ6ML7k8bv0Q9s3vuZZVBnn4xRHXkbq2od4,114223
|
56
56
|
ccxt/flowbtc.py,sha256=YPvm6tbsHJJUQBspFcHuVPQfVmiWzwnVvfzRqBdQX6U,1169
|
57
57
|
ccxt/fmfwio.py,sha256=RbVLvzPwnqfDsE7Ea-N13ISCC82eJVPsXYjrleASmew,1236
|
58
|
-
ccxt/gate.py,sha256=
|
58
|
+
ccxt/gate.py,sha256=GtFMw46wWYmPPri_txuFo3uhatihAFQr_DX51RgpdeA,298196
|
59
59
|
ccxt/gateio.py,sha256=86AETJWODl_vA5VNeQRHZprmpNIY1HAxCddKZcnKSi8,445
|
60
60
|
ccxt/gemini.py,sha256=U4ap6suVPmNq_-52HnlPCxs5X_Z-nkW2Wm-oA5po25A,75945
|
61
61
|
ccxt/hitbtc.py,sha256=8BXEFGy29swu_k8fJh4FXDd6qGwSa3oAeLFUBCdv324,150711
|
@@ -64,12 +64,12 @@ ccxt/hollaex.py,sha256=7QViVaPjHuxAVqUkwKPZHJDrMQFHNHILrU4CK_fy5KE,75827
|
|
64
64
|
ccxt/htx.py,sha256=rlayFd5u3yi7AWLPNomsTAfnfRn0nTupQhNJVWH3JCI,417465
|
65
65
|
ccxt/huobi.py,sha256=4vaG7IRN7fyjaJ_ac6S-njlHOfSEN5de7aq0noznxYw,438
|
66
66
|
ccxt/huobijp.py,sha256=siZ9iHjR-TNFLiiVqBGN2dZ3jQvAZzQPr48WbaqdqiM,87878
|
67
|
-
ccxt/hyperliquid.py,sha256=
|
67
|
+
ccxt/hyperliquid.py,sha256=GIBKEj8L2JftXCZbE44baztdT6lTXnZV7bgvZ-bULoo,80312
|
68
68
|
ccxt/idex.py,sha256=iLgcPQW4BZrun0ccINYSq6xUacsJ24Kt6sX9BiCkAZ4,72703
|
69
69
|
ccxt/independentreserve.py,sha256=awlESBQdUPDpgnKWpHAo2pxC-wcNiBLI8f3Wn9V7OdI,31979
|
70
70
|
ccxt/indodax.py,sha256=2X0AboPTwvdxFWT9BwhkY90K1U1aaPA8L6UiHnO-AIY,51762
|
71
71
|
ccxt/kraken.py,sha256=JSoRerunwUGX7wdr-mHQigNkxNlZK0au-brEb3NmX5c,121866
|
72
|
-
ccxt/krakenfutures.py,sha256=
|
72
|
+
ccxt/krakenfutures.py,sha256=QabY6HWZ6W7qXvS-o21h4vbvfu2q-32tOX3CB82e-rg,115791
|
73
73
|
ccxt/kucoin.py,sha256=_oUrmBWaRkqbSxz94lFlsEJD_CjXwNCLnfUBJajMYvM,200934
|
74
74
|
ccxt/kucoinfutures.py,sha256=zZGAb5fLZeBeOGGx5dDxGvXWROgV1P8JLZvqKdT7m48,110519
|
75
75
|
ccxt/kuna.py,sha256=VKSqCZfv4gtz2vBGI3hElarbzACaGwywkpwnOhA5jLI,95951
|
@@ -203,7 +203,7 @@ ccxt/abstract/woo.py,sha256=E-QXVJKVI4EOW72NX6wv99px9EyitWtd9KWvXUc9Tyo,10216
|
|
203
203
|
ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
|
204
204
|
ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
|
205
205
|
ccxt/abstract/zonda.py,sha256=aSfewvRojzmuymX6QbOnDR8v9VFqWTULMHX9Y7kKD1M,5820
|
206
|
-
ccxt/async_support/__init__.py,sha256=
|
206
|
+
ccxt/async_support/__init__.py,sha256=jATVXN85hoqBSdAZ7hzY_LerkMSnlpgPx006WUCOX78,15177
|
207
207
|
ccxt/async_support/ace.py,sha256=LjNrCLc5OA9CTZ-SCNkBBeSUa144U1ayh6lSw_6GVgI,41630
|
208
208
|
ccxt/async_support/alpaca.py,sha256=tGinjTamFx1lvVoHyB3crGlKF97gUPOtG9Dy8kPMqhQ,47101
|
209
209
|
ccxt/async_support/ascendex.py,sha256=KKPnXkJPf3fC8JvOEwtsW1On8jNHAJ59_n072dvxAO8,144915
|
@@ -220,7 +220,7 @@ ccxt/async_support/bitbay.py,sha256=jcaEXi2IhYTva8ezO_SfJhwxEZk7HST4J3NaxD16BQA,
|
|
220
220
|
ccxt/async_support/bitbns.py,sha256=bOIgrLFpDIn7l2QQy_FWh5q-Z7ydVjY2RlDBm0G9hDg,48371
|
221
221
|
ccxt/async_support/bitcoincom.py,sha256=RiqwhK3RfxQ_PXTa860fphDCvwA8dalL-_rXlK85-8A,516
|
222
222
|
ccxt/async_support/bitfinex.py,sha256=YoIJEYhhMnvf6nTsScz4DKLI0oi98xfWnwgY8V-G0dU,71874
|
223
|
-
ccxt/async_support/bitfinex2.py,sha256=
|
223
|
+
ccxt/async_support/bitfinex2.py,sha256=_eotTq3W3G-_crTKv0sLM9uvZWbgesoedi6RJiT5g0M,158409
|
224
224
|
ccxt/async_support/bitflyer.py,sha256=eiahvUWnJS85H2-T-QSrKL0tsbjwAcr6qBm42Ex9y30,40563
|
225
225
|
ccxt/async_support/bitget.py,sha256=VvPnOYxpB7lE0tK3-YxUdwGcjMsEcCT0oKdhBnoxmhU,406239
|
226
226
|
ccxt/async_support/bithumb.py,sha256=X8JSN39xl28CBgJYxWefJlXu2XZ3Lr-QXyh6Fxd-eb8,45458
|
@@ -260,7 +260,7 @@ ccxt/async_support/digifinex.py,sha256=UfloaYAZEZtD03f7ME35GfCD5P-DKFYtPJiwqW_53
|
|
260
260
|
ccxt/async_support/exmo.py,sha256=IEvbMNo9iFQnmaAD8w0xXBkXfK5jfKaVhoUUExsT-40,114855
|
261
261
|
ccxt/async_support/flowbtc.py,sha256=bCnvtcNnPxxaxqVjI1GGXKhIpz_1r4GIFWqqPokvCR0,1183
|
262
262
|
ccxt/async_support/fmfwio.py,sha256=lzfSnPrB2ARcC3EIqAuBM4vyg6LJ6n8RE71Zvt3ez1s,1250
|
263
|
-
ccxt/async_support/gate.py,sha256=
|
263
|
+
ccxt/async_support/gate.py,sha256=OUXPvc2xLkCbwDrwbdjuhRLY4pRMHvnT87ramo0OCWs,299760
|
264
264
|
ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
|
265
265
|
ccxt/async_support/gemini.py,sha256=iGbPCElTUa9IEiWYOQfwn3R8mhODeEbbSYsbH560NBs,76458
|
266
266
|
ccxt/async_support/hitbtc.py,sha256=pOUK_W78YHi-A8AGTRgantl4St3TwbZnEwhFT8OlyUI,151757
|
@@ -269,12 +269,12 @@ ccxt/async_support/hollaex.py,sha256=g4lC-7l8jfWfQmx6Z7POc7iewBSLCh_Atj5DW2pyAm0
|
|
269
269
|
ccxt/async_support/htx.py,sha256=vAQacwFaBJOms5PeImOq9O75_DdhyhFARCsC9YfPArI,419803
|
270
270
|
ccxt/async_support/huobi.py,sha256=fup0j6wQ1khAtfbb1H4CSyJAOzhxuoHMmrM6sgTuhr8,452
|
271
271
|
ccxt/async_support/huobijp.py,sha256=y7CVKCg3tr7Gw-6ubDz0-OJpm2EogjPWxbJ2ziV5QTk,88378
|
272
|
-
ccxt/async_support/hyperliquid.py,sha256=
|
272
|
+
ccxt/async_support/hyperliquid.py,sha256=kOBvb3aMWO0ccPqYPBjIGJgagGo6DxudhbejM10HVKg,80734
|
273
273
|
ccxt/async_support/idex.py,sha256=5QR6eiE5NiJNyBPxFL46OnoA4y15-bxHUYVMtPwOr5k,73179
|
274
274
|
ccxt/async_support/independentreserve.py,sha256=QPlcKtYXK9SBakjN1A3OHJRAUauijfUM9f535IP7bc4,32239
|
275
275
|
ccxt/async_support/indodax.py,sha256=CKPRtmG8p69Do6TdxWCpccUWIlTr_edUe2DKakVj2Hs,52070
|
276
276
|
ccxt/async_support/kraken.py,sha256=5tAmqHvfixjGKD7hLkVTCF-P4RWHK3lWa4g6zpsIPnY,122450
|
277
|
-
ccxt/async_support/krakenfutures.py,sha256=
|
277
|
+
ccxt/async_support/krakenfutures.py,sha256=TDKy2QyNUN64y8cblOPiC8ohLFAwKyohPvdt9trEHCA,116261
|
278
278
|
ccxt/async_support/kucoin.py,sha256=T-fG7EriBHqRHfmOoImPEA2TGAfRH_PyHXfNi871RzU,201952
|
279
279
|
ccxt/async_support/kucoinfutures.py,sha256=93boneXD3FcCsGZG_xpiefQrLiGoXOOc3i0ikjHnJyU,111079
|
280
280
|
ccxt/async_support/kuna.py,sha256=Mlwx_DBFlu7LWuy7m875052ih7z4loCgIZfK5k81hnQ,96367
|
@@ -307,7 +307,7 @@ ccxt/async_support/yobit.py,sha256=JKwcd4_sPc7sFWTI5eICzbHcVMOxUrghlFTPmfWYgUQ,5
|
|
307
307
|
ccxt/async_support/zaif.py,sha256=A4lhLoQNHt8EWeCH067sQrSiziNZ9nJU_-ZyVE59Xgo,28116
|
308
308
|
ccxt/async_support/zonda.py,sha256=GqTR3gmRA9dcC2dCpSUVK-k19b_DiNGpIRfmmvfchiM,80763
|
309
309
|
ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
|
310
|
-
ccxt/async_support/base/exchange.py,sha256=
|
310
|
+
ccxt/async_support/base/exchange.py,sha256=7ebrsRehEmBevgaD0skYyHjTQns2TEuEvzTTnKQ1G4o,90820
|
311
311
|
ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
|
312
312
|
ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
|
313
313
|
ccxt/async_support/base/ws/aiohttp_client.py,sha256=Ed1765emEde2Hj8Ys6f5EjS54ZI1wQ0qIhd04eB7yhU,5751
|
@@ -321,10 +321,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=Pxrq22nCODckJ6G1OXkYEmUunIu
|
|
321
321
|
ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
|
322
322
|
ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
|
323
323
|
ccxt/base/errors.py,sha256=JBn3zTrtru7tLgyEi6MzKAUwiZe0fltQLYoJcsdP-AA,4099
|
324
|
-
ccxt/base/exchange.py,sha256=
|
324
|
+
ccxt/base/exchange.py,sha256=QjsPXTLTLC42wWRAj6CwHw4ekQ8gkc7G5QzVUP5soH0,246873
|
325
325
|
ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
|
326
326
|
ccxt/base/types.py,sha256=Bc5lH1L29xvaQDl4uSx7_3w_gZTyhcUrBh-SSyKXzRI,6126
|
327
|
-
ccxt/pro/__init__.py,sha256=
|
327
|
+
ccxt/pro/__init__.py,sha256=lguDe-qhw2wcjN-g-URNYhlplGwyGcjzUx36-P00l-U,6675
|
328
328
|
ccxt/pro/alpaca.py,sha256=ABL5GvXMmcSC7LaYRtUqS3tgsLpCBf1IChgC5f2aA2E,27161
|
329
329
|
ccxt/pro/ascendex.py,sha256=Tjpk9KPF4YPKsdgq-Cabs3nx1Zkrnd7srdjqHYeghLs,35413
|
330
330
|
ccxt/pro/bequant.py,sha256=5zbsP8BHQTUZ8ZNL6uaACxDbUClgkOV4SYfXT_LfQVg,1351
|
@@ -520,7 +520,7 @@ ccxt/test/base/test_ticker.py,sha256=cmYHv5ZtbAq27y4LGDcGzaro-qkSNJWme5rLHOEdA4U
|
|
520
520
|
ccxt/test/base/test_trade.py,sha256=lhT9nxiSr0AEvKbdGXL9qJOkz1EiKEmA0TDfdCbubg8,2295
|
521
521
|
ccxt/test/base/test_trading_fee.py,sha256=2aDCNJtqBkTC_AieO0l1HYGq5hz5qkWlkWb9Nv_fcwk,1066
|
522
522
|
ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
|
523
|
-
ccxt-4.2.
|
524
|
-
ccxt-4.2.
|
525
|
-
ccxt-4.2.
|
526
|
-
ccxt-4.2.
|
523
|
+
ccxt-4.2.68.dist-info/METADATA,sha256=Fz6qDl2hcKi8rjvmG4I_rzWUF5PPKyKOQNz8U4KStLg,107754
|
524
|
+
ccxt-4.2.68.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
|
525
|
+
ccxt-4.2.68.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
|
526
|
+
ccxt-4.2.68.dist-info/RECORD,,
|
File without changes
|
File without changes
|