ccxt 4.2.78__py2.py3-none-any.whl → 4.2.79__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/bingx.py +1 -0
- ccxt/abstract/gate.py +1 -0
- ccxt/abstract/gateio.py +1 -0
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/base/ws/functions.py +1 -1
- ccxt/async_support/bingx.py +37 -5
- ccxt/async_support/bitstamp.py +20 -26
- ccxt/async_support/bybit.py +92 -0
- ccxt/async_support/coinbaseinternational.py +2 -2
- ccxt/async_support/gate.py +3 -1
- ccxt/base/exchange.py +5 -5
- ccxt/bingx.py +37 -5
- ccxt/bitstamp.py +20 -26
- ccxt/bybit.py +92 -0
- ccxt/coinbaseinternational.py +2 -2
- ccxt/gate.py +3 -1
- ccxt/pro/__init__.py +1 -1
- ccxt/pro/alpaca.py +1 -1
- ccxt/pro/bitfinex2.py +1 -1
- ccxt/pro/bitget.py +1 -1
- ccxt/pro/bitmart.py +1 -1
- ccxt/pro/bitmex.py +1 -1
- ccxt/pro/blockchaincom.py +1 -1
- ccxt/pro/bybit.py +14 -1
- ccxt/pro/cex.py +9 -5
- ccxt/pro/cryptocom.py +1 -1
- ccxt/pro/hitbtc.py +1 -1
- ccxt/pro/htx.py +1 -1
- ccxt/pro/okcoin.py +1 -1
- ccxt/pro/onetrading.py +1 -1
- ccxt/pro/woo.py +30 -0
- {ccxt-4.2.78.dist-info → ccxt-4.2.79.dist-info}/METADATA +6 -6
- {ccxt-4.2.78.dist-info → ccxt-4.2.79.dist-info}/RECORD +37 -37
- {ccxt-4.2.78.dist-info → ccxt-4.2.79.dist-info}/WHEEL +0 -0
- {ccxt-4.2.78.dist-info → ccxt-4.2.79.dist-info}/top_level.txt +0 -0
ccxt/__init__.py
CHANGED
ccxt/abstract/bingx.py
CHANGED
@@ -32,6 +32,7 @@ class ImplicitAPI:
|
|
32
32
|
swap_v1_private_get_trade_batchcancelreplace = swapV1PrivateGetTradeBatchCancelReplace = Entry('trade/batchCancelReplace', ['swap', 'v1', 'private'], 'GET', {'cost': 1})
|
33
33
|
swap_v1_private_post_trade_cancelreplace = swapV1PrivatePostTradeCancelReplace = Entry('trade/cancelReplace', ['swap', 'v1', 'private'], 'POST', {'cost': 1})
|
34
34
|
swap_v1_private_post_positionside_dual = swapV1PrivatePostPositionSideDual = Entry('positionSide/dual', ['swap', 'v1', 'private'], 'POST', {'cost': 1})
|
35
|
+
swap_v1_private_post_trade_closeposition = swapV1PrivatePostTradeClosePosition = Entry('trade/closePosition', ['swap', 'v1', 'private'], 'POST', {'cost': 1})
|
35
36
|
swap_v2_public_get_server_time = swapV2PublicGetServerTime = Entry('server/time', ['swap', 'v2', 'public'], 'GET', {'cost': 3})
|
36
37
|
swap_v2_public_get_quote_contracts = swapV2PublicGetQuoteContracts = Entry('quote/contracts', ['swap', 'v2', 'public'], 'GET', {'cost': 1})
|
37
38
|
swap_v2_public_get_quote_price = swapV2PublicGetQuotePrice = Entry('quote/price', ['swap', 'v2', 'public'], 'GET', {'cost': 1})
|
ccxt/abstract/gate.py
CHANGED
@@ -91,6 +91,7 @@ class ImplicitAPI:
|
|
91
91
|
private_unified_get_loan_records = privateUnifiedGetLoanRecords = Entry('loan_records', ['private', 'unified'], 'GET', {'cost': 1.3333333333333333})
|
92
92
|
private_unified_get_interest_records = privateUnifiedGetInterestRecords = Entry('interest_records', ['private', 'unified'], 'GET', {'cost': 1.3333333333333333})
|
93
93
|
private_unified_get_estimate_rate = privateUnifiedGetEstimateRate = Entry('estimate_rate', ['private', 'unified'], 'GET', {'cost': 1.3333333333333333})
|
94
|
+
private_unified_get_currency_discount_tiers = privateUnifiedGetCurrencyDiscountTiers = Entry('currency_discount_tiers', ['private', 'unified'], 'GET', {'cost': 1.3333333333333333})
|
94
95
|
private_unified_post_account_mode = privateUnifiedPostAccountMode = Entry('account_mode', ['private', 'unified'], 'POST', {'cost': 1.3333333333333333})
|
95
96
|
private_unified_post_loans = privateUnifiedPostLoans = Entry('loans', ['private', 'unified'], 'POST', {'cost': 13.333333333333334})
|
96
97
|
private_spot_get_fee = privateSpotGetFee = Entry('fee', ['private', 'spot'], 'GET', {'cost': 1})
|
ccxt/abstract/gateio.py
CHANGED
@@ -91,6 +91,7 @@ class ImplicitAPI:
|
|
91
91
|
private_unified_get_loan_records = privateUnifiedGetLoanRecords = Entry('loan_records', ['private', 'unified'], 'GET', {'cost': 1.3333333333333333})
|
92
92
|
private_unified_get_interest_records = privateUnifiedGetInterestRecords = Entry('interest_records', ['private', 'unified'], 'GET', {'cost': 1.3333333333333333})
|
93
93
|
private_unified_get_estimate_rate = privateUnifiedGetEstimateRate = Entry('estimate_rate', ['private', 'unified'], 'GET', {'cost': 1.3333333333333333})
|
94
|
+
private_unified_get_currency_discount_tiers = privateUnifiedGetCurrencyDiscountTiers = Entry('currency_discount_tiers', ['private', 'unified'], 'GET', {'cost': 1.3333333333333333})
|
94
95
|
private_unified_post_account_mode = privateUnifiedPostAccountMode = Entry('account_mode', ['private', 'unified'], 'POST', {'cost': 1.3333333333333333})
|
95
96
|
private_unified_post_loans = privateUnifiedPostLoans = Entry('loans', ['private', 'unified'], 'POST', {'cost': 13.333333333333334})
|
96
97
|
private_spot_get_fee = privateSpotGetFee = Entry('fee', ['private', 'spot'], 'GET', {'cost': 1})
|
ccxt/async_support/__init__.py
CHANGED
@@ -34,7 +34,7 @@ def iso8601(timestamp=None):
|
|
34
34
|
if int(timestamp) < 0:
|
35
35
|
return None
|
36
36
|
try:
|
37
|
-
utc = datetime.datetime.
|
37
|
+
utc = datetime.datetime.fromtimestamp(timestamp // 1000, datetime.timezone.utc)
|
38
38
|
return utc.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-6] + "{:03d}".format(int(timestamp) % 1000) + 'Z'
|
39
39
|
except (TypeError, OverflowError, OSError):
|
40
40
|
return None
|
ccxt/async_support/bingx.py
CHANGED
@@ -196,6 +196,7 @@ class bingx(Exchange, ImplicitAPI):
|
|
196
196
|
'post': {
|
197
197
|
'trade/cancelReplace': 1,
|
198
198
|
'positionSide/dual': 1,
|
199
|
+
'trade/closePosition': 1,
|
199
200
|
},
|
200
201
|
},
|
201
202
|
},
|
@@ -2032,6 +2033,8 @@ class bingx(Exchange, ImplicitAPI):
|
|
2032
2033
|
'SELL': 'sell',
|
2033
2034
|
'SHORT': 'sell',
|
2034
2035
|
'LONG': 'buy',
|
2036
|
+
'ask': 'sell',
|
2037
|
+
'bid': 'buy',
|
2035
2038
|
}
|
2036
2039
|
return self.safe_string(sides, side, side)
|
2037
2040
|
|
@@ -3656,14 +3659,43 @@ class bingx(Exchange, ImplicitAPI):
|
|
3656
3659
|
:param str symbol: Unified CCXT market symbol
|
3657
3660
|
:param str [side]: not used by bingx
|
3658
3661
|
:param dict [params]: extra parameters specific to the bingx api endpoint
|
3662
|
+
:param str|None [params.positionId]: it is recommended to hasattr(self, fill) parameter when closing a position
|
3659
3663
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
3660
3664
|
"""
|
3661
3665
|
await self.load_markets()
|
3662
|
-
|
3663
|
-
|
3664
|
-
|
3665
|
-
|
3666
|
-
|
3666
|
+
positionId = self.safe_string(params, 'positionId')
|
3667
|
+
params = self.omit(params, 'positionId')
|
3668
|
+
response = None
|
3669
|
+
if positionId is not None:
|
3670
|
+
request: dict = {
|
3671
|
+
'positionId': positionId,
|
3672
|
+
}
|
3673
|
+
response = await self.swapV1PrivatePostTradeClosePosition(self.extend(request, params))
|
3674
|
+
else:
|
3675
|
+
market = self.market(symbol)
|
3676
|
+
request: dict = {
|
3677
|
+
'symbol': market['id'],
|
3678
|
+
}
|
3679
|
+
response = await self.swapV2PrivatePostTradeCloseAllPositions(self.extend(request, params))
|
3680
|
+
#
|
3681
|
+
# swapV1PrivatePostTradeClosePosition
|
3682
|
+
#
|
3683
|
+
# {
|
3684
|
+
# "code": 0,
|
3685
|
+
# "msg": "",
|
3686
|
+
# "timestamp": 1710992264190,
|
3687
|
+
# "data": {
|
3688
|
+
# "orderId": 1770656007907930112,
|
3689
|
+
# "positionId": "1751667128353910784",
|
3690
|
+
# "symbol": "LTC-USDT",
|
3691
|
+
# "side": "Ask",
|
3692
|
+
# "type": "MARKET",
|
3693
|
+
# "positionSide": "Long",
|
3694
|
+
# "origQty": "0.2"
|
3695
|
+
# }
|
3696
|
+
# }
|
3697
|
+
#
|
3698
|
+
# swapV2PrivatePostTradeCloseAllPositions
|
3667
3699
|
#
|
3668
3700
|
# {
|
3669
3701
|
# "code": 0,
|
ccxt/async_support/bitstamp.py
CHANGED
@@ -1082,16 +1082,17 @@ class bitstamp(Exchange, ImplicitAPI):
|
|
1082
1082
|
'timestamp': None,
|
1083
1083
|
'datetime': None,
|
1084
1084
|
}
|
1085
|
-
|
1086
|
-
|
1087
|
-
|
1088
|
-
|
1089
|
-
currencyId = currency
|
1085
|
+
if response is None:
|
1086
|
+
response = []
|
1087
|
+
for i in range(0, len(response)):
|
1088
|
+
currencyBalance = response[i]
|
1089
|
+
currencyId = self.safe_string(currencyBalance, 'currency')
|
1090
|
+
currencyCode = self.safe_currency_code(currencyId)
|
1090
1091
|
account = self.account()
|
1091
|
-
account['free'] = self.safe_string(
|
1092
|
-
account['used'] = self.safe_string(
|
1093
|
-
account['total'] = self.safe_string(
|
1094
|
-
result[
|
1092
|
+
account['free'] = self.safe_string(currencyBalance, 'available')
|
1093
|
+
account['used'] = self.safe_string(currencyBalance, 'reserved')
|
1094
|
+
account['total'] = self.safe_string(currencyBalance, 'total')
|
1095
|
+
result[currencyCode] = account
|
1095
1096
|
return self.safe_balance(result)
|
1096
1097
|
|
1097
1098
|
async def fetch_balance(self, params={}) -> Balances:
|
@@ -1102,24 +1103,17 @@ class bitstamp(Exchange, ImplicitAPI):
|
|
1102
1103
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
1103
1104
|
"""
|
1104
1105
|
await self.load_markets()
|
1105
|
-
response = await self.
|
1106
|
+
response = await self.privatePostAccountBalances(params)
|
1106
1107
|
#
|
1107
|
-
#
|
1108
|
-
#
|
1109
|
-
#
|
1110
|
-
#
|
1111
|
-
#
|
1112
|
-
#
|
1113
|
-
#
|
1114
|
-
#
|
1115
|
-
#
|
1116
|
-
# "bat_balance": "0.00000000",
|
1117
|
-
# "bat_reserved": "0.00000000",
|
1118
|
-
# "bat_withdrawal_fee": "5.00000000",
|
1119
|
-
# "batbtc_fee": "0.000",
|
1120
|
-
# "bateur_fee": "0.000",
|
1121
|
-
# "batusd_fee": "0.000",
|
1122
|
-
# }
|
1108
|
+
# [
|
1109
|
+
# {
|
1110
|
+
# "currency": "usdt",
|
1111
|
+
# "total": "7.00000",
|
1112
|
+
# "available": "7.00000",
|
1113
|
+
# "reserved": "0.00000"
|
1114
|
+
# },
|
1115
|
+
# ...
|
1116
|
+
# ]
|
1123
1117
|
#
|
1124
1118
|
return self.parse_balance(response)
|
1125
1119
|
|
ccxt/async_support/bybit.py
CHANGED
@@ -85,6 +85,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
85
85
|
'fetchDeposits': True,
|
86
86
|
'fetchDepositWithdrawFee': 'emulated',
|
87
87
|
'fetchDepositWithdrawFees': True,
|
88
|
+
'fetchFundingHistory': True,
|
88
89
|
'fetchFundingRate': True, # emulated in exchange
|
89
90
|
'fetchFundingRateHistory': True,
|
90
91
|
'fetchFundingRates': True,
|
@@ -7540,6 +7541,97 @@ class bybit(Exchange, ImplicitAPI):
|
|
7540
7541
|
})
|
7541
7542
|
return tiers
|
7542
7543
|
|
7544
|
+
async def fetch_funding_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
7545
|
+
"""
|
7546
|
+
fetch the history of funding payments paid and received on self account
|
7547
|
+
:see: https://bybit-exchange.github.io/docs/api-explorer/v5/position/execution
|
7548
|
+
:param str [symbol]: unified market symbol
|
7549
|
+
:param int [since]: the earliest time in ms to fetch funding history for
|
7550
|
+
:param int [limit]: the maximum number of funding history structures to retrieve
|
7551
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
7552
|
+
:param boolean [params.paginate]: default False, when True will automatically paginate by calling self endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
7553
|
+
:returns dict: a `funding history structure <https://docs.ccxt.com/#/?id=funding-history-structure>`
|
7554
|
+
"""
|
7555
|
+
await self.load_markets()
|
7556
|
+
paginate = False
|
7557
|
+
paginate, params = self.handle_option_and_params(params, 'fetchFundingHistory', 'paginate')
|
7558
|
+
if paginate:
|
7559
|
+
return await self.fetch_paginated_call_cursor('fetchFundingHistory', symbol, since, limit, params, 'nextPageCursor', 'cursor', None, 100)
|
7560
|
+
request = {
|
7561
|
+
'execType': 'Funding',
|
7562
|
+
}
|
7563
|
+
market: Market = None
|
7564
|
+
if symbol is not None:
|
7565
|
+
market = self.market(symbol)
|
7566
|
+
request['symbol'] = market['id']
|
7567
|
+
type = None
|
7568
|
+
type, params = self.get_bybit_type('fetchFundingHistory', market, params)
|
7569
|
+
request['category'] = type
|
7570
|
+
if symbol is not None:
|
7571
|
+
request['symbol'] = market['id']
|
7572
|
+
if since is not None:
|
7573
|
+
request['startTime'] = since
|
7574
|
+
if limit is not None:
|
7575
|
+
request['size'] = limit
|
7576
|
+
else:
|
7577
|
+
request['size'] = 100
|
7578
|
+
request, params = self.handle_until_option('endTime', request, params)
|
7579
|
+
response = await self.privateGetV5ExecutionList(self.extend(request, params))
|
7580
|
+
fundings = self.add_pagination_cursor_to_result(response)
|
7581
|
+
return self.parse_incomes(fundings, market, since, limit)
|
7582
|
+
|
7583
|
+
def parse_income(self, income, market: Market = None):
|
7584
|
+
#
|
7585
|
+
# {
|
7586
|
+
# "symbol": "XMRUSDT",
|
7587
|
+
# "orderType": "UNKNOWN",
|
7588
|
+
# "underlyingPrice": "",
|
7589
|
+
# "orderLinkId": "",
|
7590
|
+
# "orderId": "a11e5fe2-1dbf-4bab-a9b2-af80a14efc5d",
|
7591
|
+
# "stopOrderType": "UNKNOWN",
|
7592
|
+
# "execTime": "1710950400000",
|
7593
|
+
# "feeCurrency": "",
|
7594
|
+
# "createType": "",
|
7595
|
+
# "feeRate": "-0.000761",
|
7596
|
+
# "tradeIv": "",
|
7597
|
+
# "blockTradeId": "",
|
7598
|
+
# "markPrice": "136.79",
|
7599
|
+
# "execPrice": "137.11",
|
7600
|
+
# "markIv": "",
|
7601
|
+
# "orderQty": "0",
|
7602
|
+
# "orderPrice": "0",
|
7603
|
+
# "execValue": "134.3678",
|
7604
|
+
# "closedSize": "0",
|
7605
|
+
# "execType": "Funding",
|
7606
|
+
# "seq": "28097658790",
|
7607
|
+
# "side": "Sell",
|
7608
|
+
# "indexPrice": "",
|
7609
|
+
# "leavesQty": "0",
|
7610
|
+
# "isMaker": False,
|
7611
|
+
# "execFee": "-0.10232512",
|
7612
|
+
# "execId": "8d1ef156-4ec6-4445-9a6c-1c0c24dbd046",
|
7613
|
+
# "marketUnit": "",
|
7614
|
+
# "execQty": "0.98",
|
7615
|
+
# "nextPageCursor": "5774437%3A0%2C5771289%3A0"
|
7616
|
+
# }
|
7617
|
+
#
|
7618
|
+
marketId = self.safe_string(income, 'symbol')
|
7619
|
+
market = self.safe_market(marketId, market, None, 'contract')
|
7620
|
+
code = 'USDT'
|
7621
|
+
if market['inverse']:
|
7622
|
+
code = market['quote']
|
7623
|
+
timestamp = self.safe_integer(income, 'execTime')
|
7624
|
+
return {
|
7625
|
+
'info': income,
|
7626
|
+
'symbol': self.safe_symbol(marketId, market, '-', 'swap'),
|
7627
|
+
'code': code,
|
7628
|
+
'timestamp': timestamp,
|
7629
|
+
'datetime': self.iso8601(timestamp),
|
7630
|
+
'id': self.safe_string(income, 'execId'),
|
7631
|
+
'amount': self.safe_number(income, 'execQty'),
|
7632
|
+
'rate': self.safe_number(income, 'feeRate'),
|
7633
|
+
}
|
7634
|
+
|
7543
7635
|
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
7544
7636
|
url = self.implode_hostname(self.urls['api'][api]) + '/' + path
|
7545
7637
|
if api == 'public':
|
@@ -126,10 +126,10 @@ class coinbaseinternational(Exchange, ImplicitAPI):
|
|
126
126
|
},
|
127
127
|
'www': 'https://international.coinbase.com',
|
128
128
|
'doc': [
|
129
|
-
'https://docs.cloud.
|
129
|
+
'https://docs.cloud.coinbase.com/intx/docs',
|
130
130
|
],
|
131
131
|
'fees': [
|
132
|
-
'https://help.
|
132
|
+
'https://help.coinbase.com/en/international-exchange/trading-deposits-withdrawals/international-exchange-fees',
|
133
133
|
],
|
134
134
|
'referral': '',
|
135
135
|
},
|
ccxt/async_support/gate.py
CHANGED
@@ -329,6 +329,7 @@ class gate(Exchange, ImplicitAPI):
|
|
329
329
|
'loan_records': 20 / 15,
|
330
330
|
'interest_records': 20 / 15,
|
331
331
|
'estimate_rate': 20 / 15,
|
332
|
+
'currency_discount_tiers': 20 / 15,
|
332
333
|
},
|
333
334
|
'post': {
|
334
335
|
'account_mode': 20 / 15,
|
@@ -3959,7 +3960,8 @@ class gate(Exchange, ImplicitAPI):
|
|
3959
3960
|
'account': account,
|
3960
3961
|
}
|
3961
3962
|
if amount is not None:
|
3962
|
-
|
3963
|
+
amountKey = 'amount' if (market['spot']) else 'size'
|
3964
|
+
request[amountKey] = self.amount_to_precision(symbol, amount)
|
3963
3965
|
if price is not None:
|
3964
3966
|
request['price'] = self.price_to_precision(symbol, price)
|
3965
3967
|
response = None
|
ccxt/base/exchange.py
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
# -----------------------------------------------------------------------------
|
6
6
|
|
7
|
-
__version__ = '4.2.
|
7
|
+
__version__ = '4.2.79'
|
8
8
|
|
9
9
|
# -----------------------------------------------------------------------------
|
10
10
|
|
@@ -1171,7 +1171,7 @@ class Exchange(object):
|
|
1171
1171
|
return None
|
1172
1172
|
|
1173
1173
|
try:
|
1174
|
-
utc = datetime.datetime.
|
1174
|
+
utc = datetime.datetime.fromtimestamp(timestamp // 1000, datetime.timezone.utc)
|
1175
1175
|
return utc.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-6] + "{:03d}".format(int(timestamp) % 1000) + 'Z'
|
1176
1176
|
except (TypeError, OverflowError, OSError):
|
1177
1177
|
return None
|
@@ -1187,13 +1187,13 @@ class Exchange(object):
|
|
1187
1187
|
|
1188
1188
|
@staticmethod
|
1189
1189
|
def dmy(timestamp, infix='-'):
|
1190
|
-
utc_datetime = datetime.datetime.
|
1190
|
+
utc_datetime = datetime.datetime.fromtimestamp(int(round(timestamp / 1000)), datetime.timezone.utc)
|
1191
1191
|
return utc_datetime.strftime('%m' + infix + '%d' + infix + '%Y')
|
1192
1192
|
|
1193
1193
|
@staticmethod
|
1194
1194
|
def ymd(timestamp, infix='-', fullYear=True):
|
1195
1195
|
year_format = '%Y' if fullYear else '%y'
|
1196
|
-
utc_datetime = datetime.datetime.
|
1196
|
+
utc_datetime = datetime.datetime.fromtimestamp(int(round(timestamp / 1000)), datetime.timezone.utc)
|
1197
1197
|
return utc_datetime.strftime(year_format + infix + '%m' + infix + '%d')
|
1198
1198
|
|
1199
1199
|
@staticmethod
|
@@ -1206,7 +1206,7 @@ class Exchange(object):
|
|
1206
1206
|
|
1207
1207
|
@staticmethod
|
1208
1208
|
def ymdhms(timestamp, infix=' '):
|
1209
|
-
utc_datetime = datetime.datetime.
|
1209
|
+
utc_datetime = datetime.datetime.fromtimestamp(int(round(timestamp / 1000)), datetime.timezone.utc)
|
1210
1210
|
return utc_datetime.strftime('%Y-%m-%d' + infix + '%H:%M:%S')
|
1211
1211
|
|
1212
1212
|
@staticmethod
|
ccxt/bingx.py
CHANGED
@@ -195,6 +195,7 @@ class bingx(Exchange, ImplicitAPI):
|
|
195
195
|
'post': {
|
196
196
|
'trade/cancelReplace': 1,
|
197
197
|
'positionSide/dual': 1,
|
198
|
+
'trade/closePosition': 1,
|
198
199
|
},
|
199
200
|
},
|
200
201
|
},
|
@@ -2031,6 +2032,8 @@ class bingx(Exchange, ImplicitAPI):
|
|
2031
2032
|
'SELL': 'sell',
|
2032
2033
|
'SHORT': 'sell',
|
2033
2034
|
'LONG': 'buy',
|
2035
|
+
'ask': 'sell',
|
2036
|
+
'bid': 'buy',
|
2034
2037
|
}
|
2035
2038
|
return self.safe_string(sides, side, side)
|
2036
2039
|
|
@@ -3655,14 +3658,43 @@ class bingx(Exchange, ImplicitAPI):
|
|
3655
3658
|
:param str symbol: Unified CCXT market symbol
|
3656
3659
|
:param str [side]: not used by bingx
|
3657
3660
|
:param dict [params]: extra parameters specific to the bingx api endpoint
|
3661
|
+
:param str|None [params.positionId]: it is recommended to hasattr(self, fill) parameter when closing a position
|
3658
3662
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
3659
3663
|
"""
|
3660
3664
|
self.load_markets()
|
3661
|
-
|
3662
|
-
|
3663
|
-
|
3664
|
-
|
3665
|
-
|
3665
|
+
positionId = self.safe_string(params, 'positionId')
|
3666
|
+
params = self.omit(params, 'positionId')
|
3667
|
+
response = None
|
3668
|
+
if positionId is not None:
|
3669
|
+
request: dict = {
|
3670
|
+
'positionId': positionId,
|
3671
|
+
}
|
3672
|
+
response = self.swapV1PrivatePostTradeClosePosition(self.extend(request, params))
|
3673
|
+
else:
|
3674
|
+
market = self.market(symbol)
|
3675
|
+
request: dict = {
|
3676
|
+
'symbol': market['id'],
|
3677
|
+
}
|
3678
|
+
response = self.swapV2PrivatePostTradeCloseAllPositions(self.extend(request, params))
|
3679
|
+
#
|
3680
|
+
# swapV1PrivatePostTradeClosePosition
|
3681
|
+
#
|
3682
|
+
# {
|
3683
|
+
# "code": 0,
|
3684
|
+
# "msg": "",
|
3685
|
+
# "timestamp": 1710992264190,
|
3686
|
+
# "data": {
|
3687
|
+
# "orderId": 1770656007907930112,
|
3688
|
+
# "positionId": "1751667128353910784",
|
3689
|
+
# "symbol": "LTC-USDT",
|
3690
|
+
# "side": "Ask",
|
3691
|
+
# "type": "MARKET",
|
3692
|
+
# "positionSide": "Long",
|
3693
|
+
# "origQty": "0.2"
|
3694
|
+
# }
|
3695
|
+
# }
|
3696
|
+
#
|
3697
|
+
# swapV2PrivatePostTradeCloseAllPositions
|
3666
3698
|
#
|
3667
3699
|
# {
|
3668
3700
|
# "code": 0,
|
ccxt/bitstamp.py
CHANGED
@@ -1082,16 +1082,17 @@ class bitstamp(Exchange, ImplicitAPI):
|
|
1082
1082
|
'timestamp': None,
|
1083
1083
|
'datetime': None,
|
1084
1084
|
}
|
1085
|
-
|
1086
|
-
|
1087
|
-
|
1088
|
-
|
1089
|
-
currencyId = currency
|
1085
|
+
if response is None:
|
1086
|
+
response = []
|
1087
|
+
for i in range(0, len(response)):
|
1088
|
+
currencyBalance = response[i]
|
1089
|
+
currencyId = self.safe_string(currencyBalance, 'currency')
|
1090
|
+
currencyCode = self.safe_currency_code(currencyId)
|
1090
1091
|
account = self.account()
|
1091
|
-
account['free'] = self.safe_string(
|
1092
|
-
account['used'] = self.safe_string(
|
1093
|
-
account['total'] = self.safe_string(
|
1094
|
-
result[
|
1092
|
+
account['free'] = self.safe_string(currencyBalance, 'available')
|
1093
|
+
account['used'] = self.safe_string(currencyBalance, 'reserved')
|
1094
|
+
account['total'] = self.safe_string(currencyBalance, 'total')
|
1095
|
+
result[currencyCode] = account
|
1095
1096
|
return self.safe_balance(result)
|
1096
1097
|
|
1097
1098
|
def fetch_balance(self, params={}) -> Balances:
|
@@ -1102,24 +1103,17 @@ class bitstamp(Exchange, ImplicitAPI):
|
|
1102
1103
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
1103
1104
|
"""
|
1104
1105
|
self.load_markets()
|
1105
|
-
response = self.
|
1106
|
+
response = self.privatePostAccountBalances(params)
|
1106
1107
|
#
|
1107
|
-
#
|
1108
|
-
#
|
1109
|
-
#
|
1110
|
-
#
|
1111
|
-
#
|
1112
|
-
#
|
1113
|
-
#
|
1114
|
-
#
|
1115
|
-
#
|
1116
|
-
# "bat_balance": "0.00000000",
|
1117
|
-
# "bat_reserved": "0.00000000",
|
1118
|
-
# "bat_withdrawal_fee": "5.00000000",
|
1119
|
-
# "batbtc_fee": "0.000",
|
1120
|
-
# "bateur_fee": "0.000",
|
1121
|
-
# "batusd_fee": "0.000",
|
1122
|
-
# }
|
1108
|
+
# [
|
1109
|
+
# {
|
1110
|
+
# "currency": "usdt",
|
1111
|
+
# "total": "7.00000",
|
1112
|
+
# "available": "7.00000",
|
1113
|
+
# "reserved": "0.00000"
|
1114
|
+
# },
|
1115
|
+
# ...
|
1116
|
+
# ]
|
1123
1117
|
#
|
1124
1118
|
return self.parse_balance(response)
|
1125
1119
|
|
ccxt/bybit.py
CHANGED
@@ -84,6 +84,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
84
84
|
'fetchDeposits': True,
|
85
85
|
'fetchDepositWithdrawFee': 'emulated',
|
86
86
|
'fetchDepositWithdrawFees': True,
|
87
|
+
'fetchFundingHistory': True,
|
87
88
|
'fetchFundingRate': True, # emulated in exchange
|
88
89
|
'fetchFundingRateHistory': True,
|
89
90
|
'fetchFundingRates': True,
|
@@ -7539,6 +7540,97 @@ class bybit(Exchange, ImplicitAPI):
|
|
7539
7540
|
})
|
7540
7541
|
return tiers
|
7541
7542
|
|
7543
|
+
def fetch_funding_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
7544
|
+
"""
|
7545
|
+
fetch the history of funding payments paid and received on self account
|
7546
|
+
:see: https://bybit-exchange.github.io/docs/api-explorer/v5/position/execution
|
7547
|
+
:param str [symbol]: unified market symbol
|
7548
|
+
:param int [since]: the earliest time in ms to fetch funding history for
|
7549
|
+
:param int [limit]: the maximum number of funding history structures to retrieve
|
7550
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
7551
|
+
:param boolean [params.paginate]: default False, when True will automatically paginate by calling self endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
7552
|
+
:returns dict: a `funding history structure <https://docs.ccxt.com/#/?id=funding-history-structure>`
|
7553
|
+
"""
|
7554
|
+
self.load_markets()
|
7555
|
+
paginate = False
|
7556
|
+
paginate, params = self.handle_option_and_params(params, 'fetchFundingHistory', 'paginate')
|
7557
|
+
if paginate:
|
7558
|
+
return self.fetch_paginated_call_cursor('fetchFundingHistory', symbol, since, limit, params, 'nextPageCursor', 'cursor', None, 100)
|
7559
|
+
request = {
|
7560
|
+
'execType': 'Funding',
|
7561
|
+
}
|
7562
|
+
market: Market = None
|
7563
|
+
if symbol is not None:
|
7564
|
+
market = self.market(symbol)
|
7565
|
+
request['symbol'] = market['id']
|
7566
|
+
type = None
|
7567
|
+
type, params = self.get_bybit_type('fetchFundingHistory', market, params)
|
7568
|
+
request['category'] = type
|
7569
|
+
if symbol is not None:
|
7570
|
+
request['symbol'] = market['id']
|
7571
|
+
if since is not None:
|
7572
|
+
request['startTime'] = since
|
7573
|
+
if limit is not None:
|
7574
|
+
request['size'] = limit
|
7575
|
+
else:
|
7576
|
+
request['size'] = 100
|
7577
|
+
request, params = self.handle_until_option('endTime', request, params)
|
7578
|
+
response = self.privateGetV5ExecutionList(self.extend(request, params))
|
7579
|
+
fundings = self.add_pagination_cursor_to_result(response)
|
7580
|
+
return self.parse_incomes(fundings, market, since, limit)
|
7581
|
+
|
7582
|
+
def parse_income(self, income, market: Market = None):
|
7583
|
+
#
|
7584
|
+
# {
|
7585
|
+
# "symbol": "XMRUSDT",
|
7586
|
+
# "orderType": "UNKNOWN",
|
7587
|
+
# "underlyingPrice": "",
|
7588
|
+
# "orderLinkId": "",
|
7589
|
+
# "orderId": "a11e5fe2-1dbf-4bab-a9b2-af80a14efc5d",
|
7590
|
+
# "stopOrderType": "UNKNOWN",
|
7591
|
+
# "execTime": "1710950400000",
|
7592
|
+
# "feeCurrency": "",
|
7593
|
+
# "createType": "",
|
7594
|
+
# "feeRate": "-0.000761",
|
7595
|
+
# "tradeIv": "",
|
7596
|
+
# "blockTradeId": "",
|
7597
|
+
# "markPrice": "136.79",
|
7598
|
+
# "execPrice": "137.11",
|
7599
|
+
# "markIv": "",
|
7600
|
+
# "orderQty": "0",
|
7601
|
+
# "orderPrice": "0",
|
7602
|
+
# "execValue": "134.3678",
|
7603
|
+
# "closedSize": "0",
|
7604
|
+
# "execType": "Funding",
|
7605
|
+
# "seq": "28097658790",
|
7606
|
+
# "side": "Sell",
|
7607
|
+
# "indexPrice": "",
|
7608
|
+
# "leavesQty": "0",
|
7609
|
+
# "isMaker": False,
|
7610
|
+
# "execFee": "-0.10232512",
|
7611
|
+
# "execId": "8d1ef156-4ec6-4445-9a6c-1c0c24dbd046",
|
7612
|
+
# "marketUnit": "",
|
7613
|
+
# "execQty": "0.98",
|
7614
|
+
# "nextPageCursor": "5774437%3A0%2C5771289%3A0"
|
7615
|
+
# }
|
7616
|
+
#
|
7617
|
+
marketId = self.safe_string(income, 'symbol')
|
7618
|
+
market = self.safe_market(marketId, market, None, 'contract')
|
7619
|
+
code = 'USDT'
|
7620
|
+
if market['inverse']:
|
7621
|
+
code = market['quote']
|
7622
|
+
timestamp = self.safe_integer(income, 'execTime')
|
7623
|
+
return {
|
7624
|
+
'info': income,
|
7625
|
+
'symbol': self.safe_symbol(marketId, market, '-', 'swap'),
|
7626
|
+
'code': code,
|
7627
|
+
'timestamp': timestamp,
|
7628
|
+
'datetime': self.iso8601(timestamp),
|
7629
|
+
'id': self.safe_string(income, 'execId'),
|
7630
|
+
'amount': self.safe_number(income, 'execQty'),
|
7631
|
+
'rate': self.safe_number(income, 'feeRate'),
|
7632
|
+
}
|
7633
|
+
|
7542
7634
|
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
7543
7635
|
url = self.implode_hostname(self.urls['api'][api]) + '/' + path
|
7544
7636
|
if api == 'public':
|
ccxt/coinbaseinternational.py
CHANGED
@@ -126,10 +126,10 @@ class coinbaseinternational(Exchange, ImplicitAPI):
|
|
126
126
|
},
|
127
127
|
'www': 'https://international.coinbase.com',
|
128
128
|
'doc': [
|
129
|
-
'https://docs.cloud.
|
129
|
+
'https://docs.cloud.coinbase.com/intx/docs',
|
130
130
|
],
|
131
131
|
'fees': [
|
132
|
-
'https://help.
|
132
|
+
'https://help.coinbase.com/en/international-exchange/trading-deposits-withdrawals/international-exchange-fees',
|
133
133
|
],
|
134
134
|
'referral': '',
|
135
135
|
},
|
ccxt/gate.py
CHANGED
@@ -328,6 +328,7 @@ class gate(Exchange, ImplicitAPI):
|
|
328
328
|
'loan_records': 20 / 15,
|
329
329
|
'interest_records': 20 / 15,
|
330
330
|
'estimate_rate': 20 / 15,
|
331
|
+
'currency_discount_tiers': 20 / 15,
|
331
332
|
},
|
332
333
|
'post': {
|
333
334
|
'account_mode': 20 / 15,
|
@@ -3958,7 +3959,8 @@ class gate(Exchange, ImplicitAPI):
|
|
3958
3959
|
'account': account,
|
3959
3960
|
}
|
3960
3961
|
if amount is not None:
|
3961
|
-
|
3962
|
+
amountKey = 'amount' if (market['spot']) else 'size'
|
3963
|
+
request[amountKey] = self.amount_to_precision(symbol, amount)
|
3962
3964
|
if price is not None:
|
3963
3965
|
request['price'] = self.price_to_precision(symbol, price)
|
3964
3966
|
response = None
|
ccxt/pro/__init__.py
CHANGED
ccxt/pro/alpaca.py
CHANGED
ccxt/pro/bitfinex2.py
CHANGED
@@ -812,7 +812,7 @@ class bitfinex2(ccxt.async_support.bitfinex2):
|
|
812
812
|
}
|
813
813
|
message = self.extend(request, params)
|
814
814
|
self.watch(url, messageHash, message, messageHash)
|
815
|
-
return future
|
815
|
+
return await future
|
816
816
|
|
817
817
|
def handle_authentication_message(self, client: Client, message):
|
818
818
|
messageHash = 'authenticated'
|
ccxt/pro/bitget.py
CHANGED
@@ -1523,7 +1523,7 @@ class bitget(ccxt.async_support.bitget):
|
|
1523
1523
|
}
|
1524
1524
|
message = self.extend(request, params)
|
1525
1525
|
self.watch(url, messageHash, message, messageHash)
|
1526
|
-
return future
|
1526
|
+
return await future
|
1527
1527
|
|
1528
1528
|
async def watch_private(self, messageHash, subscriptionHash, args, params={}):
|
1529
1529
|
await self.authenticate()
|
ccxt/pro/bitmart.py
CHANGED
@@ -1312,7 +1312,7 @@ class bitmart(ccxt.async_support.bitmart):
|
|
1312
1312
|
}
|
1313
1313
|
message = self.extend(request, params)
|
1314
1314
|
self.watch(url, messageHash, message, messageHash)
|
1315
|
-
return future
|
1315
|
+
return await future
|
1316
1316
|
|
1317
1317
|
def handle_subscription_status(self, client: Client, message):
|
1318
1318
|
#
|
ccxt/pro/bitmex.py
CHANGED
@@ -599,7 +599,7 @@ class bitmex(ccxt.async_support.bitmex):
|
|
599
599
|
}
|
600
600
|
message = self.extend(request, params)
|
601
601
|
self.watch(url, messageHash, message, messageHash)
|
602
|
-
return future
|
602
|
+
return await future
|
603
603
|
|
604
604
|
def handle_authentication_message(self, client: Client, message):
|
605
605
|
authenticated = self.safe_bool(message, 'success', False)
|
ccxt/pro/blockchaincom.py
CHANGED
ccxt/pro/bybit.py
CHANGED
@@ -974,8 +974,21 @@ class bybit(ccxt.async_support.bybit):
|
|
974
974
|
for i in range(0, len(rawPositions)):
|
975
975
|
rawPosition = rawPositions[i]
|
976
976
|
position = self.parse_position(rawPosition)
|
977
|
+
side = self.safe_string(position, 'side')
|
978
|
+
# hacky solution to handle closing positions
|
979
|
+
# without crashing, we should handle self properly later
|
977
980
|
newPositions.append(position)
|
978
|
-
|
981
|
+
if side is None or side == '':
|
982
|
+
# closing update, adding both sides to "reset" both sides
|
983
|
+
# since we don't know which side is being closed
|
984
|
+
position['side'] = 'long'
|
985
|
+
cache.append(position)
|
986
|
+
position['side'] = 'short'
|
987
|
+
cache.append(position)
|
988
|
+
position['side'] = None
|
989
|
+
else:
|
990
|
+
# regular update
|
991
|
+
cache.append(position)
|
979
992
|
messageHashes = self.find_message_hashes(client, 'positions::')
|
980
993
|
for i in range(0, len(messageHashes)):
|
981
994
|
messageHash = messageHashes[i]
|
ccxt/pro/cex.py
CHANGED
@@ -157,16 +157,20 @@ class cex(ccxt.async_support.cex):
|
|
157
157
|
# {
|
158
158
|
# "e": "history",
|
159
159
|
# "data": [
|
160
|
-
#
|
161
|
-
#
|
160
|
+
# 'buy:1710255706095:444444:71222.2:14892622'
|
161
|
+
# 'sell:1710255658251:42530:71300:14892621'
|
162
|
+
# 'buy:1710252424241:87913:72800:14892620'
|
163
|
+
# ... timestamp descending
|
162
164
|
# ]
|
163
165
|
# }
|
164
166
|
#
|
165
|
-
data = self.
|
167
|
+
data = self.safe_list(message, 'data', [])
|
166
168
|
limit = self.safe_integer(self.options, 'tradesLimit', 1000)
|
167
169
|
stored = ArrayCache(limit)
|
168
|
-
|
169
|
-
|
170
|
+
dataLength = len(data)
|
171
|
+
for i in range(0, dataLength):
|
172
|
+
index = dataLength - 1 - i
|
173
|
+
rawTrade = data[index]
|
170
174
|
parsed = self.parse_ws_old_trade(rawTrade)
|
171
175
|
stored.append(parsed)
|
172
176
|
messageHash = 'trades'
|
ccxt/pro/cryptocom.py
CHANGED
@@ -931,7 +931,7 @@ class cryptocom(ccxt.async_support.cryptocom):
|
|
931
931
|
}
|
932
932
|
message = self.extend(request, params)
|
933
933
|
self.watch(url, messageHash, message, messageHash)
|
934
|
-
return future
|
934
|
+
return await future
|
935
935
|
|
936
936
|
def handle_ping(self, client: Client, message):
|
937
937
|
self.spawn(self.pong, client, message)
|
ccxt/pro/hitbtc.py
CHANGED
ccxt/pro/htx.py
CHANGED
ccxt/pro/okcoin.py
CHANGED
ccxt/pro/onetrading.py
CHANGED
ccxt/pro/woo.py
CHANGED
@@ -89,6 +89,13 @@ class woo(ccxt.async_support.woo):
|
|
89
89
|
return await self.watch(url, messageHash, request, messageHash, subscribe)
|
90
90
|
|
91
91
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
92
|
+
"""
|
93
|
+
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
94
|
+
:param str symbol: unified symbol of the market to fetch the order book for
|
95
|
+
:param int [limit]: the maximum amount of order book entries to return.
|
96
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
97
|
+
:returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
|
98
|
+
"""
|
92
99
|
await self.load_markets()
|
93
100
|
name = 'orderbook'
|
94
101
|
market = self.market(symbol)
|
@@ -137,9 +144,16 @@ class woo(ccxt.async_support.woo):
|
|
137
144
|
client.resolve(orderbook, topic)
|
138
145
|
|
139
146
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
147
|
+
"""
|
148
|
+
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
149
|
+
:param str symbol: unified symbol of the market to fetch the ticker for
|
150
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
151
|
+
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
152
|
+
"""
|
140
153
|
await self.load_markets()
|
141
154
|
name = 'ticker'
|
142
155
|
market = self.market(symbol)
|
156
|
+
symbol = market['symbol']
|
143
157
|
topic = market['id'] + '@' + name
|
144
158
|
request = {
|
145
159
|
'event': 'subscribe',
|
@@ -214,7 +228,14 @@ class woo(ccxt.async_support.woo):
|
|
214
228
|
return message
|
215
229
|
|
216
230
|
async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
231
|
+
"""
|
232
|
+
n watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
|
233
|
+
:param str[] symbols: unified symbol of the market to fetch the ticker for
|
234
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
235
|
+
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
236
|
+
"""
|
217
237
|
await self.load_markets()
|
238
|
+
symbols = self.market_symbols(symbols)
|
218
239
|
name = 'tickers'
|
219
240
|
topic = name
|
220
241
|
request = {
|
@@ -329,8 +350,17 @@ class woo(ccxt.async_support.woo):
|
|
329
350
|
client.resolve(stored, topic)
|
330
351
|
|
331
352
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
353
|
+
"""
|
354
|
+
watches information on multiple trades made in a market
|
355
|
+
:param str symbol: unified market symbol of the market trades were made in
|
356
|
+
:param int [since]: the earliest time in ms to fetch trades for
|
357
|
+
:param int [limit]: the maximum number of trade structures to retrieve
|
358
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
359
|
+
:returns dict[]: a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure
|
360
|
+
"""
|
332
361
|
await self.load_markets()
|
333
362
|
market = self.market(symbol)
|
363
|
+
symbol = market['symbol']
|
334
364
|
topic = market['id'] + '@trade'
|
335
365
|
request = {
|
336
366
|
'event': 'subscribe',
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 4.2.
|
3
|
+
Version: 4.2.79
|
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
|
@@ -91,7 +91,7 @@ Current feature list:
|
|
91
91
|
| [](http://www.bitmart.com/?r=rQCFLh) | bitmart | [BitMart](http://www.bitmart.com/?r=rQCFLh) | [](https://developer-pro.bitmart.com/) | [](https://github.com/ccxt/ccxt/wiki/Certification) | [](https://ccxt.pro) | [](http://www.bitmart.com/?r=rQCFLh) |
|
92
92
|
| [](https://www.bitmex.com/app/register/NZTR1q) | bitmex | [BitMEX](https://www.bitmex.com/app/register/NZTR1q) | [](https://www.bitmex.com/app/apiOverview) | [](https://github.com/ccxt/ccxt/wiki/Certification) | [](https://ccxt.pro) | [](https://www.bitmex.com/app/register/NZTR1q) |
|
93
93
|
| [](https://www.bybit.com/register?affiliate_id=35953) | bybit | [Bybit](https://www.bybit.com/register?affiliate_id=35953) | [](https://bybit-exchange.github.io/docs/inverse/) | [](https://github.com/ccxt/ccxt/wiki/Certification) | [](https://ccxt.pro) | |
|
94
|
-
| [](https://international.coinbase.com) | coinbaseinternational | [Coinbase International](https://international.coinbase.com) | [](https://docs.cloud.
|
94
|
+
| [](https://international.coinbase.com) | coinbaseinternational | [Coinbase International](https://international.coinbase.com) | [](https://docs.cloud.coinbase.com/intx/docs) | [](https://github.com/ccxt/ccxt/wiki/Certification) | [](https://ccxt.pro) | |
|
95
95
|
| [](https://www.coinex.com/register?refer_code=yw5fz) | coinex | [CoinEx](https://www.coinex.com/register?refer_code=yw5fz) | [](https://viabtc.github.io/coinex_api_en_doc) | [](https://github.com/ccxt/ccxt/wiki/Certification) | [](https://ccxt.pro) | |
|
96
96
|
| [](https://crypto.com/exch/kdacthrnxt) | cryptocom | [Crypto.com](https://crypto.com/exch/kdacthrnxt) | [](https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html) | [](https://github.com/ccxt/ccxt/wiki/Certification) | [](https://ccxt.pro) | [](https://crypto.com/exch/kdacthrnxt) |
|
97
97
|
| [](https://www.gate.io/signup/2436035) | gate | [Gate.io](https://www.gate.io/signup/2436035) | [](https://www.gate.io/docs/developers/apiv4/en/) | [](https://github.com/ccxt/ccxt/wiki/Certification) | [](https://ccxt.pro) | [](https://www.gate.io/signup/2436035) |
|
@@ -144,7 +144,7 @@ The CCXT library currently supports the following 97 cryptocurrency exchange mar
|
|
144
144
|
| [](https://www.bybit.com/register?affiliate_id=35953) | bybit | [Bybit](https://www.bybit.com/register?affiliate_id=35953) | [](https://bybit-exchange.github.io/docs/inverse/) | [](https://github.com/ccxt/ccxt/wiki/Certification) | [](https://ccxt.pro) |
|
145
145
|
| [](https://cex.io/r/0/up105393824/0/) | cex | [CEX.IO](https://cex.io/r/0/up105393824/0/) | [](https://cex.io/cex-api) | | [](https://ccxt.pro) |
|
146
146
|
| [](https://www.coinbase.com/join/58cbe25a355148797479dbd2) | coinbase | [Coinbase](https://www.coinbase.com/join/58cbe25a355148797479dbd2) | [](https://developers.coinbase.com/api/v2) | | [](https://ccxt.pro) |
|
147
|
-
| [](https://international.coinbase.com) | coinbaseinternational | [Coinbase International](https://international.coinbase.com) | [](https://docs.cloud.
|
147
|
+
| [](https://international.coinbase.com) | coinbaseinternational | [Coinbase International](https://international.coinbase.com) | [](https://docs.cloud.coinbase.com/intx/docs) | [](https://github.com/ccxt/ccxt/wiki/Certification) | [](https://ccxt.pro) |
|
148
148
|
| [](https://pro.coinbase.com/) | coinbasepro | [Coinbase Pro](https://pro.coinbase.com/) | [](https://docs.pro.coinbase.com) | | [](https://ccxt.pro) |
|
149
149
|
| [](https://coincheck.com) | coincheck | [coincheck](https://coincheck.com) | [](https://coincheck.com/documents/exchange/api) | | |
|
150
150
|
| [](https://www.coinex.com/register?refer_code=yw5fz) | coinex | [CoinEx](https://www.coinex.com/register?refer_code=yw5fz) | [](https://viabtc.github.io/coinex_api_en_doc) | [](https://github.com/ccxt/ccxt/wiki/Certification) | [](https://ccxt.pro) |
|
@@ -262,13 +262,13 @@ console.log(version, Object.keys(exchanges));
|
|
262
262
|
|
263
263
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
264
264
|
|
265
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.
|
266
|
-
* unpkg: https://unpkg.com/ccxt@4.2.
|
265
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.79/dist/ccxt.browser.js
|
266
|
+
* unpkg: https://unpkg.com/ccxt@4.2.79/dist/ccxt.browser.js
|
267
267
|
|
268
268
|
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.
|
269
269
|
|
270
270
|
```HTML
|
271
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.
|
271
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.79/dist/ccxt.browser.js"></script>
|
272
272
|
```
|
273
273
|
|
274
274
|
Creates a global `ccxt` object:
|
@@ -1,4 +1,4 @@
|
|
1
|
-
ccxt/__init__.py,sha256=
|
1
|
+
ccxt/__init__.py,sha256=m9zKT0fml9swQHeS76Mh5TPpHEnOQjqfl9AFo7K82bo,15656
|
2
2
|
ccxt/ace.py,sha256=nK9SbduDWoKzecwoSK9VYwReNMscvJ_JWo5IZvFbcQo,41409
|
3
3
|
ccxt/alpaca.py,sha256=dCp9cDDKAqaaOroIPfv3sMBsMcUM7TsSKNSYZ3LLTQg,46892
|
4
4
|
ccxt/ascendex.py,sha256=Ma2iM3L3kyXf6d_iqushKWfN1BtunXcrDe-_BENaw5U,150809
|
@@ -8,7 +8,7 @@ ccxt/binance.py,sha256=m-vmsN22thfQBn-bEXQ3r7c7EY3Ij1X8dVk3ohTHzh4,587268
|
|
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=fVlEny_Gcz9sVSKT-GJ3FH6Rzq6BajveZ31t9s223oI,175539
|
12
12
|
ccxt/bit2c.py,sha256=epVo367uZJvnnsnMageM0LqQ8IJPAvoSk2Reiv5ZZMw,36874
|
13
13
|
ccxt/bitbank.py,sha256=1fi-afyTp4eDIlXBObwUBe2VJC_0o7f-WWVEimCpwIA,41672
|
14
14
|
ccxt/bitbay.py,sha256=xAIjzGRDVGwoy-Gygd99H0YN4wiaz_0lR0Z14oxaaxc,478
|
@@ -25,7 +25,7 @@ ccxt/bitopro.py,sha256=HOLhSS50ITBr0UIWeON3KCt6i2QZ0M-zDhNj8B7MMHU,68081
|
|
25
25
|
ccxt/bitpanda.py,sha256=aiwPkx9lKbVzt4ggoYdq_mIbMGtg5ZtGl2yRHO5xyz8,471
|
26
26
|
ccxt/bitrue.py,sha256=F9PUD-Bp1HD_VG2BCX0tRp96lNch3hg3Gy8iuUmU3eU,135824
|
27
27
|
ccxt/bitso.py,sha256=J_pd9byYxQAAKEpFVQYFbswMUeWKvvfj-7Y6UjOZk_0,70690
|
28
|
-
ccxt/bitstamp.py,sha256=
|
28
|
+
ccxt/bitstamp.py,sha256=69oVQdm3vR9KjJAcxntQ24u4HFrWIHphEjOWLovJmdQ,91526
|
29
29
|
ccxt/bitteam.py,sha256=7p-66IqLY-SVNAD_SWVx2DKfQrqsusB-mcumpT2qK0c,101797
|
30
30
|
ccxt/bitvavo.py,sha256=KLmOFy83UYriNSlL3sH3rDJJ-jBA-kJOSyQByfLa0l8,91292
|
31
31
|
ccxt/bl3p.py,sha256=54SIWGTawER1HUnAA4eqT9YKGvU-eh1x9uOlhGcV9kM,20305
|
@@ -35,10 +35,10 @@ ccxt/btcalpha.py,sha256=W8vwhmpLK72hiMJtEfpxHeNeWF6pX9Dvod3lhNvdNps,36534
|
|
35
35
|
ccxt/btcbox.py,sha256=XBgl9nPQUr0eL_El9-K4AuFODEXbesU6F0euVbvUs04,23341
|
36
36
|
ccxt/btcmarkets.py,sha256=YEmwNq-K-YAgLqNKagyQYKKqIJzpSCKzxXyUxDKSx8I,51302
|
37
37
|
ccxt/btcturk.py,sha256=9ogBoc1AHHvl0sosm-q0rdHvOmE9zFNCdSTcSHl7VSI,36417
|
38
|
-
ccxt/bybit.py,sha256=
|
38
|
+
ccxt/bybit.py,sha256=rDKzRdrZ1pi3QOYOncY2C64gvpLCXNRaLbZo1Rb9DM8,392371
|
39
39
|
ccxt/cex.py,sha256=1lEHtvkhsokdUwcMsA9K1tOJtzdnjf5ovYOmWQGL8-8,69583
|
40
40
|
ccxt/coinbase.py,sha256=oze3sKjBPuVqv2I1pbmGkPbiI9en-Uc2qqV1IuAYtf8,177031
|
41
|
-
ccxt/coinbaseinternational.py,sha256=
|
41
|
+
ccxt/coinbaseinternational.py,sha256=8Ejile-YQdH8YQvz48p_93A3NXZw_bI7-DhHV-Aqkag,87033
|
42
42
|
ccxt/coinbasepro.py,sha256=mRQ712rI3afRWhf3q4-yKne6-6rKOp_y8Lh88xxFCfA,78307
|
43
43
|
ccxt/coincheck.py,sha256=BU--zJ5KWZarI0gbaEsM3Rf9FHU10TK0Sk_bNUHRy14,35489
|
44
44
|
ccxt/coinex.py,sha256=e3HyM4NnJuHwYW0o9lHbcFPcujNxsxLhYkFdDMJuZzE,229834
|
@@ -56,7 +56,7 @@ ccxt/digifinex.py,sha256=v5Kk702BABJj-ilooFZBSWYPW_IYLXnF1dy-ODzbQGs,169358
|
|
56
56
|
ccxt/exmo.py,sha256=ln3Sd9brSMAIxtAqMOyD-Rq5h4TPeYAMAlNpXTAijvE,114222
|
57
57
|
ccxt/flowbtc.py,sha256=YPvm6tbsHJJUQBspFcHuVPQfVmiWzwnVvfzRqBdQX6U,1169
|
58
58
|
ccxt/fmfwio.py,sha256=RbVLvzPwnqfDsE7Ea-N13ISCC82eJVPsXYjrleASmew,1236
|
59
|
-
ccxt/gate.py,sha256=
|
59
|
+
ccxt/gate.py,sha256=Ht6-lWEvR8qictfi8fK188rU1dLrX1qA3X_W2pVQS_4,306286
|
60
60
|
ccxt/gateio.py,sha256=86AETJWODl_vA5VNeQRHZprmpNIY1HAxCddKZcnKSi8,445
|
61
61
|
ccxt/gemini.py,sha256=SWw8Rm19sB48DoQbrSnK6gLQDLS4ZD2gviR60kpuA8k,79373
|
62
62
|
ccxt/hitbtc.py,sha256=sjDwsBjyuVRp-0bbPgdhQWmMX3p1-BIH22Rh7rrqWmE,151471
|
@@ -113,7 +113,7 @@ ccxt/abstract/binance.py,sha256=xcOsgFyL1HxiB6oz1OQkRfVR-laN9QCHcczDVQkFgE4,9175
|
|
113
113
|
ccxt/abstract/binancecoinm.py,sha256=xcOsgFyL1HxiB6oz1OQkRfVR-laN9QCHcczDVQkFgE4,91751
|
114
114
|
ccxt/abstract/binanceus.py,sha256=UShVJ4bg3pEa1ixv6274b0ccTR6Ez354BPXNN--a7ks,98471
|
115
115
|
ccxt/abstract/binanceusdm.py,sha256=xcOsgFyL1HxiB6oz1OQkRfVR-laN9QCHcczDVQkFgE4,91751
|
116
|
-
ccxt/abstract/bingx.py,sha256=
|
116
|
+
ccxt/abstract/bingx.py,sha256=lUPvY2d0DKPkDRndqjG4LhZzf99s1px-ZhVB-yToQG0,15541
|
117
117
|
ccxt/abstract/bit2c.py,sha256=np6i756kSB5dO3Nj6POLKxkWkpYcsGg-4LS8BwPrizI,2830
|
118
118
|
ccxt/abstract/bitbank.py,sha256=hrHsD7Uvtyy2o2lzCHau3-eNq16pnZ3-YDQ6Tq_sxYU,2735
|
119
119
|
ccxt/abstract/bitbay.py,sha256=aSfewvRojzmuymX6QbOnDR8v9VFqWTULMHX9Y7kKD1M,5820
|
@@ -160,8 +160,8 @@ ccxt/abstract/deribit.py,sha256=rS_982u8dOVsh2vGSB5TO7K8Tye0Alq-Rg9fYZwz8hg,1549
|
|
160
160
|
ccxt/abstract/digifinex.py,sha256=1JzOaqvLTgBuooJSVJ70riBgODfzZwxHwTmYHe_AnqU,11452
|
161
161
|
ccxt/abstract/exmo.py,sha256=yq9zis5G9Qjsecs-YSHAghDjad6y52jFteWSBJZFg8o,6177
|
162
162
|
ccxt/abstract/fmfwio.py,sha256=OTBtNu3DQeAqAC_Lbi0NePUs-ZQQllcLrVDI2G04nwQ,15601
|
163
|
-
ccxt/abstract/gate.py,sha256=
|
164
|
-
ccxt/abstract/gateio.py,sha256=
|
163
|
+
ccxt/abstract/gate.py,sha256=IbxOrYOb0dwsh4itELNcJXaF0jrwyPRcC3VX-BYmMjA,41994
|
164
|
+
ccxt/abstract/gateio.py,sha256=IbxOrYOb0dwsh4itELNcJXaF0jrwyPRcC3VX-BYmMjA,41994
|
165
165
|
ccxt/abstract/gemini.py,sha256=6TyBUDw-e4b02J5ToCX0eaXQfF0Knvkf7ToLcseqcIY,6915
|
166
166
|
ccxt/abstract/hitbtc.py,sha256=OTBtNu3DQeAqAC_Lbi0NePUs-ZQQllcLrVDI2G04nwQ,15601
|
167
167
|
ccxt/abstract/hitbtc3.py,sha256=OTBtNu3DQeAqAC_Lbi0NePUs-ZQQllcLrVDI2G04nwQ,15601
|
@@ -207,7 +207,7 @@ ccxt/abstract/woo.py,sha256=E-QXVJKVI4EOW72NX6wv99px9EyitWtd9KWvXUc9Tyo,10216
|
|
207
207
|
ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
|
208
208
|
ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
|
209
209
|
ccxt/abstract/zonda.py,sha256=aSfewvRojzmuymX6QbOnDR8v9VFqWTULMHX9Y7kKD1M,5820
|
210
|
-
ccxt/async_support/__init__.py,sha256=
|
210
|
+
ccxt/async_support/__init__.py,sha256=CXNvWSJP1d-HcBYQb2oHfe30wbp3hAMhPlMMFJgUfvc,15409
|
211
211
|
ccxt/async_support/ace.py,sha256=MGP2VoA2plRgcW8ZBBXAAUg0NSOXlWtwbzYr00DFMaI,41633
|
212
212
|
ccxt/async_support/alpaca.py,sha256=-vgtpCEqQWs-k7tA0PObflNKa7pM1HqQYYOMnCS9r24,47104
|
213
213
|
ccxt/async_support/ascendex.py,sha256=K_mqPMdT9Q1oS8CRtoVYjlN4rbp86glU4sPQGFi4W6U,151597
|
@@ -217,7 +217,7 @@ ccxt/async_support/binance.py,sha256=WoxKOisddS6RxtlxQ8pHAblfysnBDJfzohZ9XW4s9Ws
|
|
217
217
|
ccxt/async_support/binancecoinm.py,sha256=IY3RLZptQA2nmZaUYRGfTa5ZY4VMWBpFYfwHc8zTHw0,1683
|
218
218
|
ccxt/async_support/binanceus.py,sha256=c-K3Tk7LaRJjmYdCx8vBOqsx01uXrtvt0PC2ekBiD0g,9177
|
219
219
|
ccxt/async_support/binanceusdm.py,sha256=-1r4A4tmV2pCiLGO80hzq7MIIj4MTzOD7buZGv6JauA,2518
|
220
|
-
ccxt/async_support/bingx.py,sha256=
|
220
|
+
ccxt/async_support/bingx.py,sha256=3O4_0PMcVJ5rbgKvXwfEJNttaqz7mjcZBp4XcbtFFtU,176509
|
221
221
|
ccxt/async_support/bit2c.py,sha256=TkS8TCf3VsHox-FpsmUDr6wxkh9F5gajxc3LZhR_N3U,37086
|
222
222
|
ccxt/async_support/bitbank.py,sha256=nB2UHbbMaCye74PJq3SmXHePz2roDmJ-c0mf8eHMw3o,41932
|
223
223
|
ccxt/async_support/bitbay.py,sha256=jcaEXi2IhYTva8ezO_SfJhwxEZk7HST4J3NaxD16BQA,492
|
@@ -234,7 +234,7 @@ ccxt/async_support/bitopro.py,sha256=rITEIfcRAsTq7myJ7Nm-4hY26q6dyvtHXP56cZ2MD7M
|
|
234
234
|
ccxt/async_support/bitpanda.py,sha256=2k3URBWrpnh2xHa7JiYenI7_4MW5UeOPGzetlmRkR4U,485
|
235
235
|
ccxt/async_support/bitrue.py,sha256=WZFRGIhf-Bmm0uteDDw-G9LJr6sUVbAIr-_vAvPnuOg,136482
|
236
236
|
ccxt/async_support/bitso.py,sha256=MdGEPa3N4Wuqx1_BZm9MWjyRi4CzDSGyoW41h1fLDqs,71076
|
237
|
-
ccxt/async_support/bitstamp.py,sha256=
|
237
|
+
ccxt/async_support/bitstamp.py,sha256=IDGAsbqo9CTL-hw9W5aBU91njk9F3XuJ5RpRCckLGC0,92026
|
238
238
|
ccxt/async_support/bitteam.py,sha256=Qiwoy3vH_ijxyGB5r4ssicm-nwzg3Yzbh_lgwIKeRSI,102129
|
239
239
|
ccxt/async_support/bitvavo.py,sha256=yacwZgudfO-g07hbxTyUF-NXlNxXGS_EB7-84LvAFXI,91726
|
240
240
|
ccxt/async_support/bl3p.py,sha256=tpxwMyk-FRdrGZew4TG7_kn57E0bb8YgnsyYPEPFSBI,20433
|
@@ -244,10 +244,10 @@ ccxt/async_support/btcalpha.py,sha256=HWMJJ7XvZJKE_2-c0ReQQlKO2piZWDpu1q3QukvmLu
|
|
244
244
|
ccxt/async_support/btcbox.py,sha256=pT_fg3eVRk4Qi2ymTyxozHBz4FZs0KcCrU3fmZ2L_r4,23535
|
245
245
|
ccxt/async_support/btcmarkets.py,sha256=fo-pKVLZLrtviYJCNDBCqYkK-1V5_1zqZtMMJuYIrEY,51652
|
246
246
|
ccxt/async_support/btcturk.py,sha256=srhsQoz0K0R0lCM6eNiP6tyMBrOxNlBxnhcr1B2sHpY,36635
|
247
|
-
ccxt/async_support/bybit.py,sha256=
|
247
|
+
ccxt/async_support/bybit.py,sha256=7uP43b3jlVWn1fWqZDl3j_AW_jmKiv-tCn9ojP2ayok,394079
|
248
248
|
ccxt/async_support/cex.py,sha256=CaauzTM2uCeOKKiR1XkkrIOsEzRiDuEw0dsPJAjzmVc,69933
|
249
249
|
ccxt/async_support/coinbase.py,sha256=1LCO0zixD5EbQh3qTUEXlvyzr3VwwJ8Ax9Mw-qA64EU,177988
|
250
|
-
ccxt/async_support/coinbaseinternational.py,sha256=
|
250
|
+
ccxt/async_support/coinbaseinternational.py,sha256=lfkw-ZPfs66UbIyDOtUIOli1K2tvCc30WccO74JBgW4,87587
|
251
251
|
ccxt/async_support/coinbasepro.py,sha256=cashnVjK9ZFpBZaVXCxZQwoewldftfNZe2-A9eTy-34,78813
|
252
252
|
ccxt/async_support/coincheck.py,sha256=dg-gpeqKM_pvwsLwBPkzDtgCx5CLKPo5ld83DHRTMJ0,35695
|
253
253
|
ccxt/async_support/coinex.py,sha256=Lf-ngYFRrBaZdfJE1kXaYrJf6O9V7BPNZUQuBS-62yg,231074
|
@@ -265,7 +265,7 @@ ccxt/async_support/digifinex.py,sha256=1NWewU2Uzm3ILr2kSlPvpfo0xIcQYE-sOx7YTlqhx
|
|
265
265
|
ccxt/async_support/exmo.py,sha256=fOIqQBiFW6U9hoct1K-vTZZ2vVi37SPcQ3Z5_WJxk6Q,114854
|
266
266
|
ccxt/async_support/flowbtc.py,sha256=bCnvtcNnPxxaxqVjI1GGXKhIpz_1r4GIFWqqPokvCR0,1183
|
267
267
|
ccxt/async_support/fmfwio.py,sha256=lzfSnPrB2ARcC3EIqAuBM4vyg6LJ6n8RE71Zvt3ez1s,1250
|
268
|
-
ccxt/async_support/gate.py,sha256=
|
268
|
+
ccxt/async_support/gate.py,sha256=IS4FmY04n1pUNPWNB5jfJts8xMBXh-kYuYWOT-UJN4I,307904
|
269
269
|
ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
|
270
270
|
ccxt/async_support/gemini.py,sha256=PPnLwDTyKdQS7LborOZlVymqPNzYqKnj9yC988zDqxU,79886
|
271
271
|
ccxt/async_support/hitbtc.py,sha256=W5zLBFQlglCZVrQ0WBbbATD12aOODoowxcT2hMa2k1o,152517
|
@@ -313,25 +313,25 @@ ccxt/async_support/yobit.py,sha256=ZyQx9X9CE7cn5d3XB0sdieQyrgNLlFDe6LoVP8ckmzg,5
|
|
313
313
|
ccxt/async_support/zaif.py,sha256=bbY7Sjnc8LsOcqwhipxx2AVOWBz-N7jjiftmksTOtTM,28119
|
314
314
|
ccxt/async_support/zonda.py,sha256=5msJR5KAMz4MiUBJ_4QvQ8uRQWAYj5uf9AdsDyyRgtE,80766
|
315
315
|
ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
|
316
|
-
ccxt/async_support/base/exchange.py,sha256=
|
316
|
+
ccxt/async_support/base/exchange.py,sha256=Zp7joIotvxYLKh1anZ9vC5pHPrPJADwE_DU280ElOtM,91281
|
317
317
|
ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
|
318
318
|
ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
|
319
319
|
ccxt/async_support/base/ws/aiohttp_client.py,sha256=Ed1765emEde2Hj8Ys6f5EjS54ZI1wQ0qIhd04eB7yhU,5751
|
320
320
|
ccxt/async_support/base/ws/cache.py,sha256=yObqIOHFEXfmxO1NeA6gf0Sb7zfEDVWBeB501FInuxY,8100
|
321
321
|
ccxt/async_support/base/ws/client.py,sha256=jTFg8KHw9_2vD9kJp1Pykw2KGXisFgGnRFir0V7bp_g,7289
|
322
322
|
ccxt/async_support/base/ws/fast_client.py,sha256=r5Ej3hjCY5k-e4D2gXbo5TE2EXCItVg8fJ8i3O3djsQ,3864
|
323
|
-
ccxt/async_support/base/ws/functions.py,sha256=
|
323
|
+
ccxt/async_support/base/ws/functions.py,sha256=qwvEnjtINWL5ZU-dbbeIunjyBxzFqbGWHfVhxqAcKug,1499
|
324
324
|
ccxt/async_support/base/ws/future.py,sha256=Ls4nOPAFpVs-3avD202xKKLNUpGc7VDtAzM7kx1xNaE,2067
|
325
325
|
ccxt/async_support/base/ws/order_book.py,sha256=uBUaIHhzMRykpmo4BCsdJ-t_HozS6VxhEs8x-Kbj-NI,2894
|
326
326
|
ccxt/async_support/base/ws/order_book_side.py,sha256=Pxrq22nCODckJ6G1OXkYEmUunIuybSz6sh9MsDB1WMY,6478
|
327
327
|
ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
|
328
328
|
ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
|
329
329
|
ccxt/base/errors.py,sha256=JBn3zTrtru7tLgyEi6MzKAUwiZe0fltQLYoJcsdP-AA,4099
|
330
|
-
ccxt/base/exchange.py,sha256=
|
330
|
+
ccxt/base/exchange.py,sha256=YCrSSN0PI8YcsMtlkFQab6oPyApdUzmYJnvD67fqldg,248352
|
331
331
|
ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
|
332
332
|
ccxt/base/types.py,sha256=Pd0jZXOo29pfZ4VK4E5rfsUf1JPf336OGXLPlf6Qe_w,6404
|
333
|
-
ccxt/pro/__init__.py,sha256=
|
334
|
-
ccxt/pro/alpaca.py,sha256=
|
333
|
+
ccxt/pro/__init__.py,sha256=Kj0yTWpcUqlVI1ZqsoM1xJurX0vr23PiNhaCqDthoWo,6897
|
334
|
+
ccxt/pro/alpaca.py,sha256=7ePyWli0949ti5UheIn553xmnFpedrNc2W5CKauSZio,27167
|
335
335
|
ccxt/pro/ascendex.py,sha256=0RlrxSqh4-lW99T-Y8AxrU612Cpy03u2loVMeRUPXlg,35432
|
336
336
|
ccxt/pro/bequant.py,sha256=5zbsP8BHQTUZ8ZNL6uaACxDbUClgkOV4SYfXT_LfQVg,1351
|
337
337
|
ccxt/pro/binance.py,sha256=E-MOsVPrMElgYy909I5vukpjrBikQ_jlaH59QxdVRPo,134029
|
@@ -341,34 +341,34 @@ ccxt/pro/binanceusdm.py,sha256=S0eT662O2ReplsihWk42nhJWqw1XsODpeDQa9eFVVt8,1357
|
|
341
341
|
ccxt/pro/bingx.py,sha256=DX-_TEWhTSi__zP865UUM0DqnEO9VO6KHysLiVr2JpE,42110
|
342
342
|
ccxt/pro/bitcoincom.py,sha256=zAX6hiz4hS6Un8dSGp88rpnvItxQHfNmsfF0IZ2xIVA,1181
|
343
343
|
ccxt/pro/bitfinex.py,sha256=VdvMikgWO7htYSAEKmGkDBYISWCJon1bnkv3JkV4nv0,24826
|
344
|
-
ccxt/pro/bitfinex2.py,sha256=
|
345
|
-
ccxt/pro/bitget.py,sha256=
|
346
|
-
ccxt/pro/bitmart.py,sha256=
|
347
|
-
ccxt/pro/bitmex.py,sha256=
|
344
|
+
ccxt/pro/bitfinex2.py,sha256=zIFXJNjzHSUxbKm8DUAstcoDTg9IZ3LoF5uJYL0H7lg,42744
|
345
|
+
ccxt/pro/bitget.py,sha256=LMWTlRkNiwFxyT3f05ikaX3oSvR5JOJSAveETtZntko,71724
|
346
|
+
ccxt/pro/bitmart.py,sha256=KF45-NuljFoQKbDRYfWDQEZ9FTkfahVxOQKbuCSvhfw,62382
|
347
|
+
ccxt/pro/bitmex.py,sha256=DAk_cbsDGWw8aTijphqtyqXNVNXRVpXCoyb_1zZPk-8,67893
|
348
348
|
ccxt/pro/bitopro.py,sha256=QtM5bK7IY8Lh-p5Y8AJPPNF7YcKstzgegA_JgbZe-kc,18669
|
349
349
|
ccxt/pro/bitpanda.py,sha256=ELrhfFKN9YJJdmm9wBf-vpk6WsXGWGf-SyJdqm-E_Lg,415
|
350
350
|
ccxt/pro/bitrue.py,sha256=gPN1lVaDZ4IBYGhaS-1WCkcNQ5__RMbtn2dC2sKZUI4,16448
|
351
351
|
ccxt/pro/bitstamp.py,sha256=LLxCbMr3VIpqqH5iHvJHPuLdWB3RwAkO6khgsE608Sk,20886
|
352
352
|
ccxt/pro/bitvavo.py,sha256=Rwai6JYdGMUZ0KWtU11E_yIg8DfIq8tTXNjBZp6CPCU,56115
|
353
|
-
ccxt/pro/blockchaincom.py,sha256=
|
354
|
-
ccxt/pro/bybit.py,sha256=
|
355
|
-
ccxt/pro/cex.py,sha256=
|
353
|
+
ccxt/pro/blockchaincom.py,sha256=VnhlyghlkfO0CUTXUwRP5Y26oWr2WIPgTIgR9lecmf0,29560
|
354
|
+
ccxt/pro/bybit.py,sha256=YXy2FhUjDwJGSti_V5Gu4Kr0-Yd5sc0vmP1YtUNuZAc,75024
|
355
|
+
ccxt/pro/cex.py,sha256=JoPNhEQkJwdFT3v9G6EQUsRXLhyhg9pGhbi-01hwtAM,57892
|
356
356
|
ccxt/pro/coinbase.py,sha256=BJ9VHYqiZqhgRqY23r6gW5TXoGiKrdC1b-IWaNEeDtQ,22578
|
357
357
|
ccxt/pro/coinbaseinternational.py,sha256=5okDkILOBOIbLZfk7tMeQpFaOZXdYRewIiK5y66EmU0,25428
|
358
358
|
ccxt/pro/coinbasepro.py,sha256=GTrYwUuwhOFJ4cMLFEHUVqNPpaJgzZewLfpQND6A7ks,38945
|
359
359
|
ccxt/pro/coincheck.py,sha256=MKAPHJeVifQaCKPla-7RY86TIWyDGe4nvjRhNmi617w,7789
|
360
360
|
ccxt/pro/coinex.py,sha256=7-G98GDtB83npQu0uYDQ7x49uIh9luTf4_EpHrwuyMU,45042
|
361
361
|
ccxt/pro/coinone.py,sha256=d0s11hTNFVFZiBD3jWWu6iRseyVsHR6dO-njqqZ2WyU,15652
|
362
|
-
ccxt/pro/cryptocom.py,sha256=
|
362
|
+
ccxt/pro/cryptocom.py,sha256=MridvQCEbhqxeQC-5D5nkYi5IsrttZiCVLoZKKdV3vs,42643
|
363
363
|
ccxt/pro/currencycom.py,sha256=U3H_inb0V39LYRwlKdVXTeA_akiG1437jZZ-dsejX0k,22355
|
364
364
|
ccxt/pro/deribit.py,sha256=IutkVY1AzcTszpbbhNV1dLF3DUr3zGXxyHhWQVJ96m0,41035
|
365
365
|
ccxt/pro/exmo.py,sha256=gLCAObkmAyL_4BTRnftfDTejsW3-isi18ppKIipidyo,24527
|
366
366
|
ccxt/pro/gate.py,sha256=ZxG65LlbK4zk9PO6g_Tt1lZ1KN_gEmL0K8wOLU5M7wU,52489
|
367
367
|
ccxt/pro/gateio.py,sha256=_uBWXYQbmsHRivKnZOJDmxJ9tWLO_0HAxmOjAEUy9nE,391
|
368
368
|
ccxt/pro/gemini.py,sha256=VZERPN0NgdkmnDavU-9J-bp06peQVrTjelkljADMlVo,36591
|
369
|
-
ccxt/pro/hitbtc.py,sha256=
|
369
|
+
ccxt/pro/hitbtc.py,sha256=ASHxLlG2qSdRJP0ilP3YfQ4Axh6xzglnuQc01sF_tss,56285
|
370
370
|
ccxt/pro/hollaex.py,sha256=xkvPQ2h6t-Jvt1WsQC_ahKAaA6wYMvx03fnc0zqqOIg,21957
|
371
|
-
ccxt/pro/htx.py,sha256=
|
371
|
+
ccxt/pro/htx.py,sha256=_nIGpiNlgFXnzo2v4pnuLVI4_gZON41eeB1W0p3d_OY,95779
|
372
372
|
ccxt/pro/huobi.py,sha256=rKZVgYqEr-MmZzTqAk4FoJt8qWFjCi_FY0ci_mWZrL0,385
|
373
373
|
ccxt/pro/huobijp.py,sha256=fcC66ECLwrR9LN_AYZZltoE_w9EltT5DcXimPOHKJk0,23174
|
374
374
|
ccxt/pro/hyperliquid.py,sha256=vDNXMOFdFFy0vCAhkgeItdeNMcPz3hC6UH3TGKbSvbs,20613
|
@@ -382,9 +382,9 @@ ccxt/pro/lbank.py,sha256=KBeJf2fucVkXZ6wKhfkBLw3RJewrxrj7cPa8XPxxV7U,35100
|
|
382
382
|
ccxt/pro/luno.py,sha256=2Y-8IQrrmwX8Y1lLWVDtrFjZD3t3qtMZJQ_JjNwj65s,12348
|
383
383
|
ccxt/pro/mexc.py,sha256=Sgvl5dhKz8LxcQkdnbIWwiKI3zmjZu2o8ZG2fO6Gr2U,42551
|
384
384
|
ccxt/pro/ndax.py,sha256=Yrdy4UxjrDwO7gNMmSy09Wj6kHnRx1n0DTWmfirMEj8,22643
|
385
|
-
ccxt/pro/okcoin.py,sha256=
|
385
|
+
ccxt/pro/okcoin.py,sha256=Mb8Zq47uO7pmXxv51swuGogo-D503GI_caRxQQt0R0I,30385
|
386
386
|
ccxt/pro/okx.py,sha256=g56ZFnH8ApuL1Kgh427G_3kqhwD4SthWmkrhqMIe7ZA,68286
|
387
|
-
ccxt/pro/onetrading.py,sha256=
|
387
|
+
ccxt/pro/onetrading.py,sha256=9-WTi6ZNjsG7TJ6CA6pGpnm_6Jg2gg21ny4GZypjr6s,54634
|
388
388
|
ccxt/pro/p2b.py,sha256=afEcnqnXmAbKJGPlHHqDSw6Lpu13ON1FG7E1SSnfvRA,17320
|
389
389
|
ccxt/pro/phemex.py,sha256=RpHaVQ2qnrtMO41I_-AwOW3qTkPqKB6sFL70nH01gnc,60674
|
390
390
|
ccxt/pro/poloniex.py,sha256=5-v7AgCp7sVlpkbGhG_Dfo5uWPrCti7jzCtdRwZTGVk,51236
|
@@ -393,7 +393,7 @@ ccxt/pro/probit.py,sha256=RLTnROQUmX31XQ3ymIZkiDkop3eiSVK70Yw81yDcde4,22822
|
|
393
393
|
ccxt/pro/upbit.py,sha256=CSqwaNCxECo9FI7aq_7ege0c8IjWEmsoPZL06Kw9KDo,9654
|
394
394
|
ccxt/pro/wazirx.py,sha256=UVZa0W3hMBwRAaDw5zboSa0wGzp-jS66xIp9fhmIYk4,30004
|
395
395
|
ccxt/pro/whitebit.py,sha256=MFRca7ONUUsfgNI-45DwngRc6TxCM4Fqe5DBi-COBjg,35021
|
396
|
-
ccxt/pro/woo.py,sha256=
|
396
|
+
ccxt/pro/woo.py,sha256=lUgPQXNY74k8U9qbNniaKULVLlBEs-DFEAJq5k9z10I,37024
|
397
397
|
ccxt/static_dependencies/__init__.py,sha256=GpOAh5lJ5Kyk1K1lWf9DzDZeZ-prHXXK38dVpW5GPfc,84
|
398
398
|
ccxt/static_dependencies/ecdsa/__init__.py,sha256=Xaj0G79BLtBt2YZcOOMV8qOlQZ7fIJznNiHhiEEZfQA,594
|
399
399
|
ccxt/static_dependencies/ecdsa/_version.py,sha256=eMIr0XQiX8_th_x4iAd0JFcYKLowY9dYz33-vKVFIPI,18461
|
@@ -528,7 +528,7 @@ ccxt/test/base/test_ticker.py,sha256=cmYHv5ZtbAq27y4LGDcGzaro-qkSNJWme5rLHOEdA4U
|
|
528
528
|
ccxt/test/base/test_trade.py,sha256=PMtmB8V38dpaP-eb8h488xYMlR6D69yCOhsA1RuWrUA,2336
|
529
529
|
ccxt/test/base/test_trading_fee.py,sha256=2aDCNJtqBkTC_AieO0l1HYGq5hz5qkWlkWb9Nv_fcwk,1066
|
530
530
|
ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
|
531
|
-
ccxt-4.2.
|
532
|
-
ccxt-4.2.
|
533
|
-
ccxt-4.2.
|
534
|
-
ccxt-4.2.
|
531
|
+
ccxt-4.2.79.dist-info/METADATA,sha256=PxRMFicWTVd0lv-5SYR39H6POR3mTpeVWPzT-7PAjw4,110489
|
532
|
+
ccxt-4.2.79.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
|
533
|
+
ccxt-4.2.79.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
|
534
|
+
ccxt-4.2.79.dist-info/RECORD,,
|
File without changes
|
File without changes
|