ccxt 3.1.23__py2.py3-none-any.whl → 3.1.24__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/bybit.py +1 -0
- ccxt/abstract/currencycom.py +1 -0
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/base/exchange.py +5 -23
- ccxt/async_support/bitget.py +36 -14
- ccxt/async_support/bybit.py +1 -0
- ccxt/async_support/currencycom.py +83 -44
- ccxt/async_support/poloniex.py +77 -16
- ccxt/async_support/xt.py +5 -1
- ccxt/base/exchange.py +5 -23
- ccxt/bitget.py +36 -14
- ccxt/bybit.py +1 -0
- ccxt/currencycom.py +83 -44
- ccxt/poloniex.py +77 -16
- ccxt/pro/__init__.py +1 -1
- ccxt/xt.py +5 -1
- {ccxt-3.1.23.dist-info → ccxt-3.1.24.dist-info}/METADATA +4 -4
- {ccxt-3.1.23.dist-info → ccxt-3.1.24.dist-info}/RECORD +21 -21
- {ccxt-3.1.23.dist-info → ccxt-3.1.24.dist-info}/WHEEL +0 -0
- {ccxt-3.1.23.dist-info → ccxt-3.1.24.dist-info}/top_level.txt +0 -0
ccxt/__init__.py
CHANGED
ccxt/abstract/bybit.py
CHANGED
@@ -244,6 +244,7 @@ class ImplicitAPI:
|
|
244
244
|
private_get_v5_asset_transfer_query_account_coins_balance = privateGetV5AssetTransferQueryAccountCoinsBalance = Entry('v5/asset/transfer/query-account-coins-balance', 'private', 'GET', {'cost': 2.5})
|
245
245
|
private_get_v5_user_query_sub_members = privateGetV5UserQuerySubMembers = Entry('v5/user/query-sub-members', 'private', 'GET', {'cost': 10})
|
246
246
|
private_get_v5_user_query_api = privateGetV5UserQueryApi = Entry('v5/user/query-api', 'private', 'GET', {'cost': 10})
|
247
|
+
private_get_v5_customer_info = privateGetV5CustomerInfo = Entry('v5/customer/info', 'private', 'GET', {'cost': 10})
|
247
248
|
private_get_v5_spot_cross_margin_trade_loan_info = privateGetV5SpotCrossMarginTradeLoanInfo = Entry('v5/spot-cross-margin-trade/loan-info', 'private', 'GET', {'cost': 1})
|
248
249
|
private_get_v5_spot_cross_margin_trade_account = privateGetV5SpotCrossMarginTradeAccount = Entry('v5/spot-cross-margin-trade/account', 'private', 'GET', {'cost': 1})
|
249
250
|
private_get_v5_spot_cross_margin_trade_orders = privateGetV5SpotCrossMarginTradeOrders = Entry('v5/spot-cross-margin-trade/orders', 'private', 'GET', {'cost': 1})
|
ccxt/abstract/currencycom.py
CHANGED
@@ -55,6 +55,7 @@ class ImplicitAPI:
|
|
55
55
|
private_get_v2_tradingpositionshistory = privateGetV2TradingPositionsHistory = Entry('v2/tradingPositionsHistory', 'private', 'GET', {'cost': 1})
|
56
56
|
private_get_v2_transactions = privateGetV2Transactions = Entry('v2/transactions', 'private', 'GET', {'cost': 1})
|
57
57
|
private_get_v2_withdrawals = privateGetV2Withdrawals = Entry('v2/withdrawals', 'private', 'GET', {'cost': 1})
|
58
|
+
private_get_v2_fetchorder = privateGetV2FetchOrder = Entry('v2/fetchOrder', 'private', 'GET', {'cost': 1})
|
58
59
|
private_post_v1_order = privatePostV1Order = Entry('v1/order', 'private', 'POST', {'cost': 1})
|
59
60
|
private_post_v1_updatetradingposition = privatePostV1UpdateTradingPosition = Entry('v1/updateTradingPosition', 'private', 'POST', {'cost': 1})
|
60
61
|
private_post_v1_updatetradingorder = privatePostV1UpdateTradingOrder = Entry('v1/updateTradingOrder', 'private', 'POST', {'cost': 1})
|
ccxt/async_support/__init__.py
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# -----------------------------------------------------------------------------
|
4
4
|
|
5
|
-
__version__ = '3.1.
|
5
|
+
__version__ = '3.1.24'
|
6
6
|
|
7
7
|
# -----------------------------------------------------------------------------
|
8
8
|
|
@@ -1250,21 +1250,10 @@ class Exchange(BaseExchange):
|
|
1250
1250
|
})
|
1251
1251
|
|
1252
1252
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Optional[int] = None, limit: Optional[int] = None, params={}):
|
1253
|
-
|
1254
|
-
|
1255
|
-
|
1256
|
-
|
1257
|
-
result = []
|
1258
|
-
for i in range(0, len(ohlcvc)):
|
1259
|
-
result.append([
|
1260
|
-
self.safe_integer(ohlcvc[i], 0),
|
1261
|
-
self.safe_number(ohlcvc[i], 1),
|
1262
|
-
self.safe_number(ohlcvc[i], 2),
|
1263
|
-
self.safe_number(ohlcvc[i], 3),
|
1264
|
-
self.safe_number(ohlcvc[i], 4),
|
1265
|
-
self.safe_number(ohlcvc[i], 5),
|
1266
|
-
])
|
1267
|
-
return result
|
1253
|
+
message = ''
|
1254
|
+
if self.has['fetchTrades']:
|
1255
|
+
message = '. If you want to build OHLCV candles from trade executions data, visit https://github.com/ccxt/ccxt/tree/master/examples/ and see "build-ohlcv-bars" file'
|
1256
|
+
raise NotSupported(self.id + ' fetchOHLCV() is not supported yet' + message)
|
1268
1257
|
|
1269
1258
|
async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Optional[int] = None, limit: Optional[int] = None, params={}):
|
1270
1259
|
raise NotSupported(self.id + ' watchOHLCV() is not supported yet')
|
@@ -1731,13 +1720,6 @@ class Exchange(BaseExchange):
|
|
1731
1720
|
ohlcvs[candle][i_count] = self.sum(ohlcvs[candle][i_count], 1)
|
1732
1721
|
return ohlcvs
|
1733
1722
|
|
1734
|
-
async def fetch_ohlcvc(self, symbol, timeframe='1m', since: Optional[Any] = None, limit: Optional[int] = None, params={}):
|
1735
|
-
if not self.has['fetchTrades']:
|
1736
|
-
raise NotSupported(self.id + ' fetchOHLCV() is not supported yet')
|
1737
|
-
await self.load_markets()
|
1738
|
-
trades = await self.fetchTrades(symbol, since, limit, params)
|
1739
|
-
return self.build_ohlcvc(trades, timeframe, since, limit)
|
1740
|
-
|
1741
1723
|
def parse_trading_view_ohlcv(self, ohlcvs, market=None, timeframe='1m', since: Optional[int] = None, limit: Optional[int] = None):
|
1742
1724
|
result = self.convert_trading_view_to_ohlcv(ohlcvs)
|
1743
1725
|
return self.parse_ohlcvs(result, market, timeframe, since, limit)
|
ccxt/async_support/bitget.py
CHANGED
@@ -2361,19 +2361,22 @@ class bitget(Exchange, ImplicitAPI):
|
|
2361
2361
|
#
|
2362
2362
|
# spot
|
2363
2363
|
# {
|
2364
|
-
#
|
2365
|
-
#
|
2366
|
-
#
|
2367
|
-
#
|
2368
|
-
#
|
2369
|
-
#
|
2370
|
-
#
|
2371
|
-
#
|
2372
|
-
#
|
2373
|
-
#
|
2374
|
-
#
|
2375
|
-
#
|
2376
|
-
#
|
2364
|
+
# "accountId": "222222222",
|
2365
|
+
# "symbol": "TRXUSDT_SPBL",
|
2366
|
+
# "orderId": "1041901704004947968",
|
2367
|
+
# "clientOrderId": "c5e8a5e1-a07f-4202-8061-b88bd598b264",
|
2368
|
+
# "price": "0",
|
2369
|
+
# "quantity": "10.0000000000000000",
|
2370
|
+
# "orderType": "market",
|
2371
|
+
# "side": "buy",
|
2372
|
+
# "status": "full_fill",
|
2373
|
+
# "fillPrice": "0.0699782527055350",
|
2374
|
+
# "fillQuantity": "142.9015000000000000",
|
2375
|
+
# "fillTotalAmount": "9.9999972790000000",
|
2376
|
+
# "enterPointSource": "API",
|
2377
|
+
# "feeDetail": "{\"BGB\":{\"deduction\":true,\"feeCoinCode\":\"BGB\",\"totalDeductionFee\":-0.017118519726,\"totalFee\":-0.017118519726}}",
|
2378
|
+
# "orderSource": "market",
|
2379
|
+
# "cTime": "1684134644509"
|
2377
2380
|
# }
|
2378
2381
|
#
|
2379
2382
|
# swap
|
@@ -2435,6 +2438,22 @@ class bitget(Exchange, ImplicitAPI):
|
|
2435
2438
|
side = 'sell'
|
2436
2439
|
clientOrderId = self.safe_string_2(order, 'clientOrderId', 'clientOid')
|
2437
2440
|
fee = None
|
2441
|
+
feeCostString = self.safe_string(order, 'fee')
|
2442
|
+
if feeCostString is not None:
|
2443
|
+
# swap
|
2444
|
+
fee = {
|
2445
|
+
'cost': feeCostString,
|
2446
|
+
'currency': market['settle'],
|
2447
|
+
}
|
2448
|
+
feeDetail = self.safe_value(order, 'feeDetail')
|
2449
|
+
if feeDetail is not None:
|
2450
|
+
parsedFeeDetail = json.loads(feeDetail)
|
2451
|
+
feeValues = list(parsedFeeDetail.values())
|
2452
|
+
first = self.safe_value(feeValues, 0)
|
2453
|
+
fee = {
|
2454
|
+
'cost': self.safe_string(first, 'totalFee'),
|
2455
|
+
'currency': self.safe_currency_code(self.safe_string(first, 'feeCoinCode')),
|
2456
|
+
}
|
2438
2457
|
rawStatus = self.safe_string_2(order, 'status', 'state')
|
2439
2458
|
status = self.parse_order_status(rawStatus)
|
2440
2459
|
lastTradeTimestamp = self.safe_integer(order, 'uTime')
|
@@ -3308,7 +3327,10 @@ class bitget(Exchange, ImplicitAPI):
|
|
3308
3327
|
# }
|
3309
3328
|
#
|
3310
3329
|
data = self.safe_value(response, 'data')
|
3311
|
-
|
3330
|
+
if data is not None:
|
3331
|
+
return self.safe_value_2(data, 'orderList', 'data', [])
|
3332
|
+
parsedData = json.loads(response)
|
3333
|
+
return self.safe_value(parsedData, 'data', [])
|
3312
3334
|
|
3313
3335
|
async def fetch_ledger(self, code: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None, params={}):
|
3314
3336
|
"""
|
ccxt/async_support/bybit.py
CHANGED
@@ -411,6 +411,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
411
411
|
# user
|
412
412
|
'v5/user/query-sub-members': 10,
|
413
413
|
'v5/user/query-api': 10,
|
414
|
+
'v5/customer/info': 10,
|
414
415
|
'v5/spot-cross-margin-trade/loan-info': 1, # 50/s => cost = 50 / 50 = 1
|
415
416
|
'v5/spot-cross-margin-trade/account': 1, # 50/s => cost = 50 / 50 = 1
|
416
417
|
'v5/spot-cross-margin-trade/orders': 1, # 50/s => cost = 50 / 50 = 1
|
@@ -88,7 +88,7 @@ class currencycom(Exchange, ImplicitAPI):
|
|
88
88
|
'fetchOHLCV': True,
|
89
89
|
'fetchOpenOrder': None,
|
90
90
|
'fetchOpenOrders': True,
|
91
|
-
'fetchOrder':
|
91
|
+
'fetchOrder': True,
|
92
92
|
'fetchOrderBook': True,
|
93
93
|
'fetchOrderBooks': None,
|
94
94
|
'fetchOrders': None,
|
@@ -214,6 +214,7 @@ class currencycom(Exchange, ImplicitAPI):
|
|
214
214
|
'v2/tradingPositionsHistory': 1,
|
215
215
|
'v2/transactions': 1,
|
216
216
|
'v2/withdrawals': 1,
|
217
|
+
'v2/fetchOrder': 1,
|
217
218
|
},
|
218
219
|
'post': {
|
219
220
|
'v1/order': 1,
|
@@ -269,6 +270,8 @@ class currencycom(Exchange, ImplicitAPI):
|
|
269
270
|
'Only leverage symbol allowed here:': BadSymbol, # when you fetchLeverage for non-leverage symbols, like 'BTC/USDT' instead of 'BTC/USDT_LEVERAGE': {"code":"-1128","msg":"Only leverage symbol allowed here: BTC/USDT"}
|
270
271
|
'market data service is not available': ExchangeNotAvailable, # {"code":"-1021","msg":"market data service is not available"}
|
271
272
|
'your time is ahead of server': InvalidNonce, # {"code":"-1021","msg":"your time is ahead of server"}
|
273
|
+
'Can not find account': BadRequest, # -1128
|
274
|
+
'You mentioned an invalid value for the price parameter': BadRequest, # -1030
|
272
275
|
},
|
273
276
|
'exact': {
|
274
277
|
'-1000': ExchangeNotAvailable, # {"code":-1000,"msg":"An unknown error occured while processing the request."}
|
@@ -279,7 +282,7 @@ class currencycom(Exchange, ImplicitAPI):
|
|
279
282
|
'-1100': InvalidOrder, # createOrder(symbol, 1, asdf) -> 'Illegal characters found in parameter 'price'
|
280
283
|
'-1104': ExchangeError, # Not all sent parameters were read, read 8 parameters but was sent 9
|
281
284
|
'-1025': AuthenticationError, # {"code":-1025,"msg":"Invalid API-key, IP, or permissions for action"}
|
282
|
-
'-1128': BadRequest, # {"code":-1128,"msg":"Combination of optional parameters invalid."} | {"code":"-1128","msg":"Combination of parameters invalid"} | {"code":"-1128","msg":"Invalid limit price"}
|
285
|
+
'-1128': BadRequest, # {"code":-1128,"msg":"Combination of optional parameters invalid."} | {"code":"-1128","msg":"Combination of parameters invalid"} | {"code":"-1128","msg":"Invalid limit price"} | {"code":"-1128","msg":"Can not find account: null"}
|
283
286
|
'-2010': ExchangeError, # generic error code for createOrder -> 'Account has insufficient balance for requested action.', {"code":-2010,"msg":"Rest API trading is not enabled."}, etc...
|
284
287
|
'-2011': OrderNotFound, # cancelOrder(1, 'BTC/USDT') -> 'UNKNOWN_ORDER'
|
285
288
|
'-2013': OrderNotFound, # fetchOrder(1, 'BTC/USDT') -> 'Order does not exist'
|
@@ -607,7 +610,7 @@ class currencycom(Exchange, ImplicitAPI):
|
|
607
610
|
result = []
|
608
611
|
for i in range(0, len(accounts)):
|
609
612
|
account = accounts[i]
|
610
|
-
accountId = self.
|
613
|
+
accountId = self.safe_string(account, 'accountId') # must be string, because the numeric value is far too big for integer, and causes bugs
|
611
614
|
currencyId = self.safe_string(account, 'asset')
|
612
615
|
currencyCode = self.safe_currency_code(currencyId)
|
613
616
|
result.append({
|
@@ -1077,28 +1080,14 @@ class currencycom(Exchange, ImplicitAPI):
|
|
1077
1080
|
# "orderId": "00000000-0000-0000-0000-000006eacaa0",
|
1078
1081
|
# "transactTime": "1645281669295",
|
1079
1082
|
# "price": "30000.00000000",
|
1080
|
-
# "origQty": "0.0002",
|
1081
|
-
# "executedQty": "0.0",
|
1082
|
-
# "
|
1083
|
+
# "origQty": "0.0002", # might not be present for "market" order
|
1084
|
+
# "executedQty": "0.0", # positive for BUY, negative for SELL. This property might not be present in Leverage markets
|
1085
|
+
# "margin": 0.1, # present in leverage markets
|
1086
|
+
# "status": "NEW", # NEW, FILLED, ...
|
1083
1087
|
# "timeInForce": "GTC",
|
1084
|
-
# "type": "LIMIT",
|
1088
|
+
# "type": "LIMIT", # LIMIT, MARKET
|
1085
1089
|
# "side": "BUY",
|
1086
|
-
#
|
1087
|
-
#
|
1088
|
-
# market
|
1089
|
-
#
|
1090
|
-
# {
|
1091
|
-
# "symbol": "DOGE/USD",
|
1092
|
-
# "orderId": "00000000-0000-0000-0000-000006eab2ad",
|
1093
|
-
# "transactTime": "1645283022252",
|
1094
|
-
# "price": "0.14066000",
|
1095
|
-
# "origQty": "40",
|
1096
|
-
# "executedQty": "40.0", # positive for BUY, negative for SELL
|
1097
|
-
# "status": "FILLED",
|
1098
|
-
# "timeInForce": "FOK",
|
1099
|
-
# "type": "MARKET",
|
1100
|
-
# "side": "SELL",
|
1101
|
-
# "fills": [
|
1090
|
+
# "fills": [ # self field might not be present if there were no fills
|
1102
1091
|
# {
|
1103
1092
|
# "price": "0.14094",
|
1104
1093
|
# "qty": "40.0",
|
@@ -1108,6 +1097,32 @@ class currencycom(Exchange, ImplicitAPI):
|
|
1108
1097
|
# ],
|
1109
1098
|
# }
|
1110
1099
|
#
|
1100
|
+
# fetchOrder(fetchOpenOrders is an array same structure, with some extra fields)
|
1101
|
+
#
|
1102
|
+
# {
|
1103
|
+
# "symbol": "BTC/USD_LEVERAGE",
|
1104
|
+
# "accountId": "123456789012345678",
|
1105
|
+
# "orderId": "00a01234-0123-54c4-0000-123451234567",
|
1106
|
+
# "price": "25779.35",
|
1107
|
+
# "status": "MODIFIED",
|
1108
|
+
# "type": "LIMIT",
|
1109
|
+
# "timeInForceType": "GTC",
|
1110
|
+
# "side": "BUY",
|
1111
|
+
# "guaranteedStopLoss": False,
|
1112
|
+
# "trailingStopLoss": False,
|
1113
|
+
# "margin": "0.05",
|
1114
|
+
# "takeProfit": "27020.00",
|
1115
|
+
# "stopLoss": "24500.35",
|
1116
|
+
# "fills": [], # might not be present
|
1117
|
+
# "timestamp": "1685958369623", # "time" in "fetchOpenOrders"
|
1118
|
+
# "expireTime": "1686167960000", # "expireTimestamp" in "fetchOpenOrders"
|
1119
|
+
# "quantity": "0.00040", # "origQty" in "fetchOpenOrders"
|
1120
|
+
# "executedQty": "0.0", # present in "fetchOpenOrders"
|
1121
|
+
# "updateTime": "1685958369542", # present in "fetchOpenOrders"
|
1122
|
+
# "leverage": True, # present in "fetchOpenOrders"
|
1123
|
+
# "working": True # present in "fetchOpenOrders"
|
1124
|
+
# }
|
1125
|
+
#
|
1111
1126
|
# cancelOrder
|
1112
1127
|
#
|
1113
1128
|
# {
|
@@ -1122,36 +1137,18 @@ class currencycom(Exchange, ImplicitAPI):
|
|
1122
1137
|
# "side": "BUY",
|
1123
1138
|
# }
|
1124
1139
|
#
|
1125
|
-
# fetchOpenOrders
|
1126
|
-
#
|
1127
|
-
# {
|
1128
|
-
# "symbol": "DOGE/USD",
|
1129
|
-
# "orderId": "00000000-0000-0003-0000-000004bcc27a",
|
1130
|
-
# "price": "0.13",
|
1131
|
-
# "origQty": "39.0",
|
1132
|
-
# "executedQty": "0.0",
|
1133
|
-
# "status": "NEW",
|
1134
|
-
# "timeInForce": "GTC",
|
1135
|
-
# "type": "LIMIT",
|
1136
|
-
# "side": "BUY",
|
1137
|
-
# "time": "1645284216240",
|
1138
|
-
# "updateTime": "1645284216240",
|
1139
|
-
# "leverage": False, # whether it's swap or not
|
1140
|
-
# "working": True,
|
1141
|
-
# }
|
1142
|
-
#
|
1143
1140
|
marketId = self.safe_string(order, 'symbol')
|
1144
1141
|
symbol = self.safe_symbol(marketId, market, '/')
|
1145
1142
|
id = self.safe_string(order, 'orderId')
|
1146
1143
|
price = self.safe_string(order, 'price')
|
1147
|
-
amount = self.
|
1144
|
+
amount = self.safe_string_2(order, 'origQty', 'quantity')
|
1148
1145
|
filledRaw = self.safe_string(order, 'executedQty')
|
1149
1146
|
filled = Precise.string_abs(filledRaw)
|
1150
1147
|
status = self.parse_order_status(self.safe_string(order, 'status'))
|
1151
|
-
timeInForce = self.parse_order_time_in_force(self.
|
1148
|
+
timeInForce = self.parse_order_time_in_force(self.safe_string_2(order, 'timeInForce', 'timeInForceType'))
|
1152
1149
|
type = self.parse_order_type(self.safe_string(order, 'type'))
|
1153
1150
|
side = self.parse_order_side(self.safe_string(order, 'side'))
|
1154
|
-
timestamp = self.
|
1151
|
+
timestamp = self.safe_integer_n(order, ['time', 'transactTime', 'timestamp'])
|
1155
1152
|
fills = self.safe_value(order, 'fills')
|
1156
1153
|
return self.safe_order({
|
1157
1154
|
'info': order,
|
@@ -1179,6 +1176,8 @@ class currencycom(Exchange, ImplicitAPI):
|
|
1179
1176
|
def parse_order_status(self, status):
|
1180
1177
|
statuses = {
|
1181
1178
|
'NEW': 'open',
|
1179
|
+
'CREATED': 'open',
|
1180
|
+
'MODIFIED': 'open',
|
1182
1181
|
'PARTIALLY_FILLED': 'open',
|
1183
1182
|
'FILLED': 'closed',
|
1184
1183
|
'CANCELED': 'canceled',
|
@@ -1304,6 +1303,46 @@ class currencycom(Exchange, ImplicitAPI):
|
|
1304
1303
|
#
|
1305
1304
|
return self.parse_order(response, market)
|
1306
1305
|
|
1306
|
+
async def fetch_order(self, id: str, symbol: Optional[str] = None, params={}):
|
1307
|
+
"""
|
1308
|
+
fetches information on an order made by the user
|
1309
|
+
see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getOrderUsingGET
|
1310
|
+
:param str symbol: unified symbol of the market the order was made in
|
1311
|
+
:param dict params: extra parameters specific to the currencycom api endpoint
|
1312
|
+
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1313
|
+
"""
|
1314
|
+
self.check_required_symbol('fetchOrder', symbol)
|
1315
|
+
await self.load_markets()
|
1316
|
+
market = self.market(symbol)
|
1317
|
+
request = {
|
1318
|
+
'orderId': id,
|
1319
|
+
'symbol': market['id'],
|
1320
|
+
}
|
1321
|
+
response = await self.privateGetV2FetchOrder(self.extend(request, params))
|
1322
|
+
#
|
1323
|
+
# {
|
1324
|
+
# "accountId": "109698017413125316",
|
1325
|
+
# "orderId": "2810f1c5-0079-54c4-0000-000080421601",
|
1326
|
+
# "quantity": "20.0",
|
1327
|
+
# "price": "0.06",
|
1328
|
+
# "timestamp": "1661157503788",
|
1329
|
+
# "status": "CREATED",
|
1330
|
+
# "type": "LIMIT",
|
1331
|
+
# "timeInForceType": "GTC",
|
1332
|
+
# "side": "BUY",
|
1333
|
+
# "margin": "0.1",
|
1334
|
+
# "fills": [ # might not be present
|
1335
|
+
# {
|
1336
|
+
# "price": "0.14094",
|
1337
|
+
# "qty": "40.0",
|
1338
|
+
# "commission": "0",
|
1339
|
+
# "commissionAsset": "dUSD"
|
1340
|
+
# }
|
1341
|
+
# ]
|
1342
|
+
# }
|
1343
|
+
#
|
1344
|
+
return self.parse_order(response)
|
1345
|
+
|
1307
1346
|
async def fetch_open_orders(self, symbol: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None, params={}):
|
1308
1347
|
"""
|
1309
1348
|
fetch all unfilled currently open orders
|
ccxt/async_support/poloniex.py
CHANGED
@@ -198,6 +198,7 @@ class poloniex(Exchange, ImplicitAPI):
|
|
198
198
|
'BDG': 'Badgercoin',
|
199
199
|
'BTM': 'Bitmark',
|
200
200
|
'CON': 'Coino',
|
201
|
+
'ETHTRON': 'ETH',
|
201
202
|
'GOLD': 'GoldEagles',
|
202
203
|
'GPUC': 'GPU',
|
203
204
|
'HOT': 'Hotcoin',
|
@@ -210,6 +211,7 @@ class poloniex(Exchange, ImplicitAPI):
|
|
210
211
|
'STR': 'XLM',
|
211
212
|
'SOC': 'SOCC',
|
212
213
|
'TRADE': 'Unitrade',
|
214
|
+
'TRXETH': 'TRX',
|
213
215
|
'XAP': 'API Coin',
|
214
216
|
# self is not documented in the API docs for Poloniex
|
215
217
|
# https://github.com/ccxt/ccxt/issues/7084
|
@@ -220,6 +222,7 @@ class poloniex(Exchange, ImplicitAPI):
|
|
220
222
|
# with a USDTTRON or a USDTETH currency id, respectfully
|
221
223
|
# therefore we have map them back to the original code USDT
|
222
224
|
# otherwise the returned withdrawals are filtered out
|
225
|
+
'USDTBSC': 'USDT',
|
223
226
|
'USDTTRON': 'USDT',
|
224
227
|
'USDTETH': 'USDT',
|
225
228
|
'UST': 'USTC',
|
@@ -234,6 +237,7 @@ class poloniex(Exchange, ImplicitAPI):
|
|
234
237
|
'BSC': 'BEP20',
|
235
238
|
'ETH': 'ERC20',
|
236
239
|
'TRON': 'TRC20',
|
240
|
+
'TRX': 'TRC20',
|
237
241
|
},
|
238
242
|
'limits': {
|
239
243
|
'cost': {
|
@@ -643,7 +647,7 @@ class poloniex(Exchange, ImplicitAPI):
|
|
643
647
|
:param dict params: extra parameters specific to the poloniex api endpoint
|
644
648
|
:returns dict: an associative dictionary of currencies
|
645
649
|
"""
|
646
|
-
response = await self.publicGetCurrencies(params)
|
650
|
+
response = await self.publicGetCurrencies(self.extend(params, {'includeMultiChainCurrencies': True}))
|
647
651
|
#
|
648
652
|
# [
|
649
653
|
# {
|
@@ -659,6 +663,8 @@ class poloniex(Exchange, ImplicitAPI):
|
|
659
663
|
# "delisted": False,
|
660
664
|
# "tradingState": "NORMAL",
|
661
665
|
# "walletState": "DISABLED",
|
666
|
+
# "walletDepositState": 'DISABLED',
|
667
|
+
# "walletWithdrawalState": 'DISABLED',
|
662
668
|
# "parentChain": null,
|
663
669
|
# "isMultiChain": False,
|
664
670
|
# "isChildChain": False,
|
@@ -674,36 +680,91 @@ class poloniex(Exchange, ImplicitAPI):
|
|
674
680
|
id = self.safe_value(ids, 0)
|
675
681
|
currency = self.safe_value(item, id)
|
676
682
|
code = self.safe_currency_code(id)
|
683
|
+
name = self.safe_string(currency, 'name')
|
684
|
+
networkId = self.safe_string(currency, 'blockchain')
|
685
|
+
networkCode = self.network_id_to_code(networkId, code)
|
677
686
|
delisted = self.safe_value(currency, 'delisted')
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
active =
|
687
|
+
walletEnabled = self.safe_string(currency, 'walletState') == 'ENABLED'
|
688
|
+
depositEnabled = self.safe_string(currency, 'walletDepositState') == 'ENABLED'
|
689
|
+
withdrawEnabled = self.safe_string(currency, 'walletWithdrawalState') == 'ENABLED'
|
690
|
+
active = not delisted and walletEnabled and depositEnabled and withdrawEnabled
|
682
691
|
numericId = self.safe_integer(currency, 'id')
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
692
|
+
feeString = self.safe_string(currency, 'withdrawalFee')
|
693
|
+
parentChain = self.safe_value(currency, 'parentChain')
|
694
|
+
noParentChain = parentChain is None
|
695
|
+
if self.safe_value(result, code) is None:
|
696
|
+
result[code] = {
|
697
|
+
'id': id,
|
698
|
+
'code': code,
|
699
|
+
'info': None,
|
700
|
+
'name': name,
|
701
|
+
'active': active,
|
702
|
+
'deposit': depositEnabled,
|
703
|
+
'withdraw': withdrawEnabled,
|
704
|
+
'fee': self.parse_number(feeString),
|
705
|
+
'precision': None,
|
706
|
+
'limits': {
|
707
|
+
'amount': {
|
708
|
+
'min': None,
|
709
|
+
'max': None,
|
710
|
+
},
|
711
|
+
'deposit': {
|
712
|
+
'min': None,
|
713
|
+
'max': None,
|
714
|
+
},
|
715
|
+
'withdraw': {
|
716
|
+
'min': None,
|
717
|
+
'max': None,
|
718
|
+
},
|
719
|
+
},
|
720
|
+
}
|
721
|
+
minFeeString = self.safe_string(result[code], 'fee')
|
722
|
+
if feeString is not None:
|
723
|
+
minFeeString = feeString if (minFeeString is None) else Precise.string_min(feeString, minFeeString)
|
724
|
+
depositAvailable = self.safe_value(result[code], 'deposit')
|
725
|
+
depositAvailable = depositEnabled if (depositEnabled) else depositAvailable
|
726
|
+
withdrawAvailable = self.safe_value(result[code], 'withdraw')
|
727
|
+
withdrawAvailable = withdrawEnabled if (withdrawEnabled) else withdrawAvailable
|
728
|
+
networks = self.safe_value(result[code], 'networks', {})
|
729
|
+
networks[networkCode] = {
|
688
730
|
'info': currency,
|
689
|
-
'
|
731
|
+
'id': networkId,
|
732
|
+
'network': networkCode,
|
733
|
+
'currencyId': id,
|
734
|
+
'numericId': numericId,
|
735
|
+
'deposit': depositEnabled,
|
736
|
+
'withdraw': withdrawEnabled,
|
690
737
|
'active': active,
|
691
|
-
'
|
692
|
-
'withdraw': None,
|
693
|
-
'fee': fee,
|
738
|
+
'fee': self.parse_number(feeString),
|
694
739
|
'precision': None,
|
695
|
-
'networks': {},
|
696
740
|
'limits': {
|
697
741
|
'amount': {
|
698
742
|
'min': None,
|
699
743
|
'max': None,
|
700
744
|
},
|
701
745
|
'withdraw': {
|
702
|
-
'min':
|
746
|
+
'min': None,
|
747
|
+
'max': None,
|
748
|
+
},
|
749
|
+
'deposit': {
|
750
|
+
'min': None,
|
703
751
|
'max': None,
|
704
752
|
},
|
705
753
|
},
|
706
754
|
}
|
755
|
+
result[code]['networks'] = networks
|
756
|
+
info = self.safe_value(result[code], 'info', [])
|
757
|
+
rawInfo = {}
|
758
|
+
rawInfo[id] = currency
|
759
|
+
info.append(rawInfo)
|
760
|
+
result[code]['info'] = info
|
761
|
+
if noParentChain:
|
762
|
+
result[code]['id'] = id
|
763
|
+
result[code]['name'] = name
|
764
|
+
result[code]['active'] = depositAvailable and withdrawAvailable
|
765
|
+
result[code]['deposit'] = depositAvailable
|
766
|
+
result[code]['withdraw'] = withdrawAvailable
|
767
|
+
result[code]['fee'] = self.parse_number(minFeeString)
|
707
768
|
return result
|
708
769
|
|
709
770
|
async def fetch_ticker(self, symbol: str, params={}):
|
ccxt/async_support/xt.py
CHANGED
@@ -4342,7 +4342,11 @@ class xt(Exchange, ImplicitAPI):
|
|
4342
4342
|
timestamp = self.number_to_string(self.nonce())
|
4343
4343
|
body = query
|
4344
4344
|
if (payload == '/v4/order') or (payload == '/future/trade/v1/order/create') or (payload == '/future/trade/v1/entrust/create-plan') or (payload == '/future/trade/v1/entrust/create-profit') or (payload == '/future/trade/v1/order/create-batch'):
|
4345
|
-
|
4345
|
+
id = 'CCXT'
|
4346
|
+
if payload.find('future') > -1:
|
4347
|
+
body['clientMedia'] = id
|
4348
|
+
else:
|
4349
|
+
body['media'] = id
|
4346
4350
|
isUndefinedBody = ((method == 'GET') or (path == 'order/{orderId}'))
|
4347
4351
|
body = None if isUndefinedBody else self.json(body)
|
4348
4352
|
payloadString = None
|
ccxt/base/exchange.py
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
# -----------------------------------------------------------------------------
|
6
6
|
|
7
|
-
__version__ = '3.1.
|
7
|
+
__version__ = '3.1.24'
|
8
8
|
|
9
9
|
# -----------------------------------------------------------------------------
|
10
10
|
|
@@ -2406,21 +2406,10 @@ class Exchange(object):
|
|
2406
2406
|
})
|
2407
2407
|
|
2408
2408
|
def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Optional[int] = None, limit: Optional[int] = None, params={}):
|
2409
|
-
|
2410
|
-
|
2411
|
-
|
2412
|
-
|
2413
|
-
result = []
|
2414
|
-
for i in range(0, len(ohlcvc)):
|
2415
|
-
result.append([
|
2416
|
-
self.safe_integer(ohlcvc[i], 0),
|
2417
|
-
self.safe_number(ohlcvc[i], 1),
|
2418
|
-
self.safe_number(ohlcvc[i], 2),
|
2419
|
-
self.safe_number(ohlcvc[i], 3),
|
2420
|
-
self.safe_number(ohlcvc[i], 4),
|
2421
|
-
self.safe_number(ohlcvc[i], 5),
|
2422
|
-
])
|
2423
|
-
return result
|
2409
|
+
message = ''
|
2410
|
+
if self.has['fetchTrades']:
|
2411
|
+
message = '. If you want to build OHLCV candles from trade executions data, visit https://github.com/ccxt/ccxt/tree/master/examples/ and see "build-ohlcv-bars" file'
|
2412
|
+
raise NotSupported(self.id + ' fetchOHLCV() is not supported yet' + message)
|
2424
2413
|
|
2425
2414
|
def watch_ohlcv(self, symbol: str, timeframe='1m', since: Optional[int] = None, limit: Optional[int] = None, params={}):
|
2426
2415
|
raise NotSupported(self.id + ' watchOHLCV() is not supported yet')
|
@@ -2887,13 +2876,6 @@ class Exchange(object):
|
|
2887
2876
|
ohlcvs[candle][i_count] = self.sum(ohlcvs[candle][i_count], 1)
|
2888
2877
|
return ohlcvs
|
2889
2878
|
|
2890
|
-
def fetch_ohlcvc(self, symbol, timeframe='1m', since: Optional[Any] = None, limit: Optional[int] = None, params={}):
|
2891
|
-
if not self.has['fetchTrades']:
|
2892
|
-
raise NotSupported(self.id + ' fetchOHLCV() is not supported yet')
|
2893
|
-
self.load_markets()
|
2894
|
-
trades = self.fetchTrades(symbol, since, limit, params)
|
2895
|
-
return self.build_ohlcvc(trades, timeframe, since, limit)
|
2896
|
-
|
2897
2879
|
def parse_trading_view_ohlcv(self, ohlcvs, market=None, timeframe='1m', since: Optional[int] = None, limit: Optional[int] = None):
|
2898
2880
|
result = self.convert_trading_view_to_ohlcv(ohlcvs)
|
2899
2881
|
return self.parse_ohlcvs(result, market, timeframe, since, limit)
|
ccxt/bitget.py
CHANGED
@@ -2360,19 +2360,22 @@ class bitget(Exchange, ImplicitAPI):
|
|
2360
2360
|
#
|
2361
2361
|
# spot
|
2362
2362
|
# {
|
2363
|
-
#
|
2364
|
-
#
|
2365
|
-
#
|
2366
|
-
#
|
2367
|
-
#
|
2368
|
-
#
|
2369
|
-
#
|
2370
|
-
#
|
2371
|
-
#
|
2372
|
-
#
|
2373
|
-
#
|
2374
|
-
#
|
2375
|
-
#
|
2363
|
+
# "accountId": "222222222",
|
2364
|
+
# "symbol": "TRXUSDT_SPBL",
|
2365
|
+
# "orderId": "1041901704004947968",
|
2366
|
+
# "clientOrderId": "c5e8a5e1-a07f-4202-8061-b88bd598b264",
|
2367
|
+
# "price": "0",
|
2368
|
+
# "quantity": "10.0000000000000000",
|
2369
|
+
# "orderType": "market",
|
2370
|
+
# "side": "buy",
|
2371
|
+
# "status": "full_fill",
|
2372
|
+
# "fillPrice": "0.0699782527055350",
|
2373
|
+
# "fillQuantity": "142.9015000000000000",
|
2374
|
+
# "fillTotalAmount": "9.9999972790000000",
|
2375
|
+
# "enterPointSource": "API",
|
2376
|
+
# "feeDetail": "{\"BGB\":{\"deduction\":true,\"feeCoinCode\":\"BGB\",\"totalDeductionFee\":-0.017118519726,\"totalFee\":-0.017118519726}}",
|
2377
|
+
# "orderSource": "market",
|
2378
|
+
# "cTime": "1684134644509"
|
2376
2379
|
# }
|
2377
2380
|
#
|
2378
2381
|
# swap
|
@@ -2434,6 +2437,22 @@ class bitget(Exchange, ImplicitAPI):
|
|
2434
2437
|
side = 'sell'
|
2435
2438
|
clientOrderId = self.safe_string_2(order, 'clientOrderId', 'clientOid')
|
2436
2439
|
fee = None
|
2440
|
+
feeCostString = self.safe_string(order, 'fee')
|
2441
|
+
if feeCostString is not None:
|
2442
|
+
# swap
|
2443
|
+
fee = {
|
2444
|
+
'cost': feeCostString,
|
2445
|
+
'currency': market['settle'],
|
2446
|
+
}
|
2447
|
+
feeDetail = self.safe_value(order, 'feeDetail')
|
2448
|
+
if feeDetail is not None:
|
2449
|
+
parsedFeeDetail = json.loads(feeDetail)
|
2450
|
+
feeValues = list(parsedFeeDetail.values())
|
2451
|
+
first = self.safe_value(feeValues, 0)
|
2452
|
+
fee = {
|
2453
|
+
'cost': self.safe_string(first, 'totalFee'),
|
2454
|
+
'currency': self.safe_currency_code(self.safe_string(first, 'feeCoinCode')),
|
2455
|
+
}
|
2437
2456
|
rawStatus = self.safe_string_2(order, 'status', 'state')
|
2438
2457
|
status = self.parse_order_status(rawStatus)
|
2439
2458
|
lastTradeTimestamp = self.safe_integer(order, 'uTime')
|
@@ -3307,7 +3326,10 @@ class bitget(Exchange, ImplicitAPI):
|
|
3307
3326
|
# }
|
3308
3327
|
#
|
3309
3328
|
data = self.safe_value(response, 'data')
|
3310
|
-
|
3329
|
+
if data is not None:
|
3330
|
+
return self.safe_value_2(data, 'orderList', 'data', [])
|
3331
|
+
parsedData = json.loads(response)
|
3332
|
+
return self.safe_value(parsedData, 'data', [])
|
3311
3333
|
|
3312
3334
|
def fetch_ledger(self, code: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None, params={}):
|
3313
3335
|
"""
|
ccxt/bybit.py
CHANGED
@@ -410,6 +410,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
410
410
|
# user
|
411
411
|
'v5/user/query-sub-members': 10,
|
412
412
|
'v5/user/query-api': 10,
|
413
|
+
'v5/customer/info': 10,
|
413
414
|
'v5/spot-cross-margin-trade/loan-info': 1, # 50/s => cost = 50 / 50 = 1
|
414
415
|
'v5/spot-cross-margin-trade/account': 1, # 50/s => cost = 50 / 50 = 1
|
415
416
|
'v5/spot-cross-margin-trade/orders': 1, # 50/s => cost = 50 / 50 = 1
|
ccxt/currencycom.py
CHANGED
@@ -88,7 +88,7 @@ class currencycom(Exchange, ImplicitAPI):
|
|
88
88
|
'fetchOHLCV': True,
|
89
89
|
'fetchOpenOrder': None,
|
90
90
|
'fetchOpenOrders': True,
|
91
|
-
'fetchOrder':
|
91
|
+
'fetchOrder': True,
|
92
92
|
'fetchOrderBook': True,
|
93
93
|
'fetchOrderBooks': None,
|
94
94
|
'fetchOrders': None,
|
@@ -214,6 +214,7 @@ class currencycom(Exchange, ImplicitAPI):
|
|
214
214
|
'v2/tradingPositionsHistory': 1,
|
215
215
|
'v2/transactions': 1,
|
216
216
|
'v2/withdrawals': 1,
|
217
|
+
'v2/fetchOrder': 1,
|
217
218
|
},
|
218
219
|
'post': {
|
219
220
|
'v1/order': 1,
|
@@ -269,6 +270,8 @@ class currencycom(Exchange, ImplicitAPI):
|
|
269
270
|
'Only leverage symbol allowed here:': BadSymbol, # when you fetchLeverage for non-leverage symbols, like 'BTC/USDT' instead of 'BTC/USDT_LEVERAGE': {"code":"-1128","msg":"Only leverage symbol allowed here: BTC/USDT"}
|
270
271
|
'market data service is not available': ExchangeNotAvailable, # {"code":"-1021","msg":"market data service is not available"}
|
271
272
|
'your time is ahead of server': InvalidNonce, # {"code":"-1021","msg":"your time is ahead of server"}
|
273
|
+
'Can not find account': BadRequest, # -1128
|
274
|
+
'You mentioned an invalid value for the price parameter': BadRequest, # -1030
|
272
275
|
},
|
273
276
|
'exact': {
|
274
277
|
'-1000': ExchangeNotAvailable, # {"code":-1000,"msg":"An unknown error occured while processing the request."}
|
@@ -279,7 +282,7 @@ class currencycom(Exchange, ImplicitAPI):
|
|
279
282
|
'-1100': InvalidOrder, # createOrder(symbol, 1, asdf) -> 'Illegal characters found in parameter 'price'
|
280
283
|
'-1104': ExchangeError, # Not all sent parameters were read, read 8 parameters but was sent 9
|
281
284
|
'-1025': AuthenticationError, # {"code":-1025,"msg":"Invalid API-key, IP, or permissions for action"}
|
282
|
-
'-1128': BadRequest, # {"code":-1128,"msg":"Combination of optional parameters invalid."} | {"code":"-1128","msg":"Combination of parameters invalid"} | {"code":"-1128","msg":"Invalid limit price"}
|
285
|
+
'-1128': BadRequest, # {"code":-1128,"msg":"Combination of optional parameters invalid."} | {"code":"-1128","msg":"Combination of parameters invalid"} | {"code":"-1128","msg":"Invalid limit price"} | {"code":"-1128","msg":"Can not find account: null"}
|
283
286
|
'-2010': ExchangeError, # generic error code for createOrder -> 'Account has insufficient balance for requested action.', {"code":-2010,"msg":"Rest API trading is not enabled."}, etc...
|
284
287
|
'-2011': OrderNotFound, # cancelOrder(1, 'BTC/USDT') -> 'UNKNOWN_ORDER'
|
285
288
|
'-2013': OrderNotFound, # fetchOrder(1, 'BTC/USDT') -> 'Order does not exist'
|
@@ -607,7 +610,7 @@ class currencycom(Exchange, ImplicitAPI):
|
|
607
610
|
result = []
|
608
611
|
for i in range(0, len(accounts)):
|
609
612
|
account = accounts[i]
|
610
|
-
accountId = self.
|
613
|
+
accountId = self.safe_string(account, 'accountId') # must be string, because the numeric value is far too big for integer, and causes bugs
|
611
614
|
currencyId = self.safe_string(account, 'asset')
|
612
615
|
currencyCode = self.safe_currency_code(currencyId)
|
613
616
|
result.append({
|
@@ -1077,28 +1080,14 @@ class currencycom(Exchange, ImplicitAPI):
|
|
1077
1080
|
# "orderId": "00000000-0000-0000-0000-000006eacaa0",
|
1078
1081
|
# "transactTime": "1645281669295",
|
1079
1082
|
# "price": "30000.00000000",
|
1080
|
-
# "origQty": "0.0002",
|
1081
|
-
# "executedQty": "0.0",
|
1082
|
-
# "
|
1083
|
+
# "origQty": "0.0002", # might not be present for "market" order
|
1084
|
+
# "executedQty": "0.0", # positive for BUY, negative for SELL. This property might not be present in Leverage markets
|
1085
|
+
# "margin": 0.1, # present in leverage markets
|
1086
|
+
# "status": "NEW", # NEW, FILLED, ...
|
1083
1087
|
# "timeInForce": "GTC",
|
1084
|
-
# "type": "LIMIT",
|
1088
|
+
# "type": "LIMIT", # LIMIT, MARKET
|
1085
1089
|
# "side": "BUY",
|
1086
|
-
#
|
1087
|
-
#
|
1088
|
-
# market
|
1089
|
-
#
|
1090
|
-
# {
|
1091
|
-
# "symbol": "DOGE/USD",
|
1092
|
-
# "orderId": "00000000-0000-0000-0000-000006eab2ad",
|
1093
|
-
# "transactTime": "1645283022252",
|
1094
|
-
# "price": "0.14066000",
|
1095
|
-
# "origQty": "40",
|
1096
|
-
# "executedQty": "40.0", # positive for BUY, negative for SELL
|
1097
|
-
# "status": "FILLED",
|
1098
|
-
# "timeInForce": "FOK",
|
1099
|
-
# "type": "MARKET",
|
1100
|
-
# "side": "SELL",
|
1101
|
-
# "fills": [
|
1090
|
+
# "fills": [ # self field might not be present if there were no fills
|
1102
1091
|
# {
|
1103
1092
|
# "price": "0.14094",
|
1104
1093
|
# "qty": "40.0",
|
@@ -1108,6 +1097,32 @@ class currencycom(Exchange, ImplicitAPI):
|
|
1108
1097
|
# ],
|
1109
1098
|
# }
|
1110
1099
|
#
|
1100
|
+
# fetchOrder(fetchOpenOrders is an array same structure, with some extra fields)
|
1101
|
+
#
|
1102
|
+
# {
|
1103
|
+
# "symbol": "BTC/USD_LEVERAGE",
|
1104
|
+
# "accountId": "123456789012345678",
|
1105
|
+
# "orderId": "00a01234-0123-54c4-0000-123451234567",
|
1106
|
+
# "price": "25779.35",
|
1107
|
+
# "status": "MODIFIED",
|
1108
|
+
# "type": "LIMIT",
|
1109
|
+
# "timeInForceType": "GTC",
|
1110
|
+
# "side": "BUY",
|
1111
|
+
# "guaranteedStopLoss": False,
|
1112
|
+
# "trailingStopLoss": False,
|
1113
|
+
# "margin": "0.05",
|
1114
|
+
# "takeProfit": "27020.00",
|
1115
|
+
# "stopLoss": "24500.35",
|
1116
|
+
# "fills": [], # might not be present
|
1117
|
+
# "timestamp": "1685958369623", # "time" in "fetchOpenOrders"
|
1118
|
+
# "expireTime": "1686167960000", # "expireTimestamp" in "fetchOpenOrders"
|
1119
|
+
# "quantity": "0.00040", # "origQty" in "fetchOpenOrders"
|
1120
|
+
# "executedQty": "0.0", # present in "fetchOpenOrders"
|
1121
|
+
# "updateTime": "1685958369542", # present in "fetchOpenOrders"
|
1122
|
+
# "leverage": True, # present in "fetchOpenOrders"
|
1123
|
+
# "working": True # present in "fetchOpenOrders"
|
1124
|
+
# }
|
1125
|
+
#
|
1111
1126
|
# cancelOrder
|
1112
1127
|
#
|
1113
1128
|
# {
|
@@ -1122,36 +1137,18 @@ class currencycom(Exchange, ImplicitAPI):
|
|
1122
1137
|
# "side": "BUY",
|
1123
1138
|
# }
|
1124
1139
|
#
|
1125
|
-
# fetchOpenOrders
|
1126
|
-
#
|
1127
|
-
# {
|
1128
|
-
# "symbol": "DOGE/USD",
|
1129
|
-
# "orderId": "00000000-0000-0003-0000-000004bcc27a",
|
1130
|
-
# "price": "0.13",
|
1131
|
-
# "origQty": "39.0",
|
1132
|
-
# "executedQty": "0.0",
|
1133
|
-
# "status": "NEW",
|
1134
|
-
# "timeInForce": "GTC",
|
1135
|
-
# "type": "LIMIT",
|
1136
|
-
# "side": "BUY",
|
1137
|
-
# "time": "1645284216240",
|
1138
|
-
# "updateTime": "1645284216240",
|
1139
|
-
# "leverage": False, # whether it's swap or not
|
1140
|
-
# "working": True,
|
1141
|
-
# }
|
1142
|
-
#
|
1143
1140
|
marketId = self.safe_string(order, 'symbol')
|
1144
1141
|
symbol = self.safe_symbol(marketId, market, '/')
|
1145
1142
|
id = self.safe_string(order, 'orderId')
|
1146
1143
|
price = self.safe_string(order, 'price')
|
1147
|
-
amount = self.
|
1144
|
+
amount = self.safe_string_2(order, 'origQty', 'quantity')
|
1148
1145
|
filledRaw = self.safe_string(order, 'executedQty')
|
1149
1146
|
filled = Precise.string_abs(filledRaw)
|
1150
1147
|
status = self.parse_order_status(self.safe_string(order, 'status'))
|
1151
|
-
timeInForce = self.parse_order_time_in_force(self.
|
1148
|
+
timeInForce = self.parse_order_time_in_force(self.safe_string_2(order, 'timeInForce', 'timeInForceType'))
|
1152
1149
|
type = self.parse_order_type(self.safe_string(order, 'type'))
|
1153
1150
|
side = self.parse_order_side(self.safe_string(order, 'side'))
|
1154
|
-
timestamp = self.
|
1151
|
+
timestamp = self.safe_integer_n(order, ['time', 'transactTime', 'timestamp'])
|
1155
1152
|
fills = self.safe_value(order, 'fills')
|
1156
1153
|
return self.safe_order({
|
1157
1154
|
'info': order,
|
@@ -1179,6 +1176,8 @@ class currencycom(Exchange, ImplicitAPI):
|
|
1179
1176
|
def parse_order_status(self, status):
|
1180
1177
|
statuses = {
|
1181
1178
|
'NEW': 'open',
|
1179
|
+
'CREATED': 'open',
|
1180
|
+
'MODIFIED': 'open',
|
1182
1181
|
'PARTIALLY_FILLED': 'open',
|
1183
1182
|
'FILLED': 'closed',
|
1184
1183
|
'CANCELED': 'canceled',
|
@@ -1304,6 +1303,46 @@ class currencycom(Exchange, ImplicitAPI):
|
|
1304
1303
|
#
|
1305
1304
|
return self.parse_order(response, market)
|
1306
1305
|
|
1306
|
+
def fetch_order(self, id: str, symbol: Optional[str] = None, params={}):
|
1307
|
+
"""
|
1308
|
+
fetches information on an order made by the user
|
1309
|
+
see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getOrderUsingGET
|
1310
|
+
:param str symbol: unified symbol of the market the order was made in
|
1311
|
+
:param dict params: extra parameters specific to the currencycom api endpoint
|
1312
|
+
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1313
|
+
"""
|
1314
|
+
self.check_required_symbol('fetchOrder', symbol)
|
1315
|
+
self.load_markets()
|
1316
|
+
market = self.market(symbol)
|
1317
|
+
request = {
|
1318
|
+
'orderId': id,
|
1319
|
+
'symbol': market['id'],
|
1320
|
+
}
|
1321
|
+
response = self.privateGetV2FetchOrder(self.extend(request, params))
|
1322
|
+
#
|
1323
|
+
# {
|
1324
|
+
# "accountId": "109698017413125316",
|
1325
|
+
# "orderId": "2810f1c5-0079-54c4-0000-000080421601",
|
1326
|
+
# "quantity": "20.0",
|
1327
|
+
# "price": "0.06",
|
1328
|
+
# "timestamp": "1661157503788",
|
1329
|
+
# "status": "CREATED",
|
1330
|
+
# "type": "LIMIT",
|
1331
|
+
# "timeInForceType": "GTC",
|
1332
|
+
# "side": "BUY",
|
1333
|
+
# "margin": "0.1",
|
1334
|
+
# "fills": [ # might not be present
|
1335
|
+
# {
|
1336
|
+
# "price": "0.14094",
|
1337
|
+
# "qty": "40.0",
|
1338
|
+
# "commission": "0",
|
1339
|
+
# "commissionAsset": "dUSD"
|
1340
|
+
# }
|
1341
|
+
# ]
|
1342
|
+
# }
|
1343
|
+
#
|
1344
|
+
return self.parse_order(response)
|
1345
|
+
|
1307
1346
|
def fetch_open_orders(self, symbol: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None, params={}):
|
1308
1347
|
"""
|
1309
1348
|
fetch all unfilled currently open orders
|
ccxt/poloniex.py
CHANGED
@@ -198,6 +198,7 @@ class poloniex(Exchange, ImplicitAPI):
|
|
198
198
|
'BDG': 'Badgercoin',
|
199
199
|
'BTM': 'Bitmark',
|
200
200
|
'CON': 'Coino',
|
201
|
+
'ETHTRON': 'ETH',
|
201
202
|
'GOLD': 'GoldEagles',
|
202
203
|
'GPUC': 'GPU',
|
203
204
|
'HOT': 'Hotcoin',
|
@@ -210,6 +211,7 @@ class poloniex(Exchange, ImplicitAPI):
|
|
210
211
|
'STR': 'XLM',
|
211
212
|
'SOC': 'SOCC',
|
212
213
|
'TRADE': 'Unitrade',
|
214
|
+
'TRXETH': 'TRX',
|
213
215
|
'XAP': 'API Coin',
|
214
216
|
# self is not documented in the API docs for Poloniex
|
215
217
|
# https://github.com/ccxt/ccxt/issues/7084
|
@@ -220,6 +222,7 @@ class poloniex(Exchange, ImplicitAPI):
|
|
220
222
|
# with a USDTTRON or a USDTETH currency id, respectfully
|
221
223
|
# therefore we have map them back to the original code USDT
|
222
224
|
# otherwise the returned withdrawals are filtered out
|
225
|
+
'USDTBSC': 'USDT',
|
223
226
|
'USDTTRON': 'USDT',
|
224
227
|
'USDTETH': 'USDT',
|
225
228
|
'UST': 'USTC',
|
@@ -234,6 +237,7 @@ class poloniex(Exchange, ImplicitAPI):
|
|
234
237
|
'BSC': 'BEP20',
|
235
238
|
'ETH': 'ERC20',
|
236
239
|
'TRON': 'TRC20',
|
240
|
+
'TRX': 'TRC20',
|
237
241
|
},
|
238
242
|
'limits': {
|
239
243
|
'cost': {
|
@@ -643,7 +647,7 @@ class poloniex(Exchange, ImplicitAPI):
|
|
643
647
|
:param dict params: extra parameters specific to the poloniex api endpoint
|
644
648
|
:returns dict: an associative dictionary of currencies
|
645
649
|
"""
|
646
|
-
response = self.publicGetCurrencies(params)
|
650
|
+
response = self.publicGetCurrencies(self.extend(params, {'includeMultiChainCurrencies': True}))
|
647
651
|
#
|
648
652
|
# [
|
649
653
|
# {
|
@@ -659,6 +663,8 @@ class poloniex(Exchange, ImplicitAPI):
|
|
659
663
|
# "delisted": False,
|
660
664
|
# "tradingState": "NORMAL",
|
661
665
|
# "walletState": "DISABLED",
|
666
|
+
# "walletDepositState": 'DISABLED',
|
667
|
+
# "walletWithdrawalState": 'DISABLED',
|
662
668
|
# "parentChain": null,
|
663
669
|
# "isMultiChain": False,
|
664
670
|
# "isChildChain": False,
|
@@ -674,36 +680,91 @@ class poloniex(Exchange, ImplicitAPI):
|
|
674
680
|
id = self.safe_value(ids, 0)
|
675
681
|
currency = self.safe_value(item, id)
|
676
682
|
code = self.safe_currency_code(id)
|
683
|
+
name = self.safe_string(currency, 'name')
|
684
|
+
networkId = self.safe_string(currency, 'blockchain')
|
685
|
+
networkCode = self.network_id_to_code(networkId, code)
|
677
686
|
delisted = self.safe_value(currency, 'delisted')
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
active =
|
687
|
+
walletEnabled = self.safe_string(currency, 'walletState') == 'ENABLED'
|
688
|
+
depositEnabled = self.safe_string(currency, 'walletDepositState') == 'ENABLED'
|
689
|
+
withdrawEnabled = self.safe_string(currency, 'walletWithdrawalState') == 'ENABLED'
|
690
|
+
active = not delisted and walletEnabled and depositEnabled and withdrawEnabled
|
682
691
|
numericId = self.safe_integer(currency, 'id')
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
692
|
+
feeString = self.safe_string(currency, 'withdrawalFee')
|
693
|
+
parentChain = self.safe_value(currency, 'parentChain')
|
694
|
+
noParentChain = parentChain is None
|
695
|
+
if self.safe_value(result, code) is None:
|
696
|
+
result[code] = {
|
697
|
+
'id': id,
|
698
|
+
'code': code,
|
699
|
+
'info': None,
|
700
|
+
'name': name,
|
701
|
+
'active': active,
|
702
|
+
'deposit': depositEnabled,
|
703
|
+
'withdraw': withdrawEnabled,
|
704
|
+
'fee': self.parse_number(feeString),
|
705
|
+
'precision': None,
|
706
|
+
'limits': {
|
707
|
+
'amount': {
|
708
|
+
'min': None,
|
709
|
+
'max': None,
|
710
|
+
},
|
711
|
+
'deposit': {
|
712
|
+
'min': None,
|
713
|
+
'max': None,
|
714
|
+
},
|
715
|
+
'withdraw': {
|
716
|
+
'min': None,
|
717
|
+
'max': None,
|
718
|
+
},
|
719
|
+
},
|
720
|
+
}
|
721
|
+
minFeeString = self.safe_string(result[code], 'fee')
|
722
|
+
if feeString is not None:
|
723
|
+
minFeeString = feeString if (minFeeString is None) else Precise.string_min(feeString, minFeeString)
|
724
|
+
depositAvailable = self.safe_value(result[code], 'deposit')
|
725
|
+
depositAvailable = depositEnabled if (depositEnabled) else depositAvailable
|
726
|
+
withdrawAvailable = self.safe_value(result[code], 'withdraw')
|
727
|
+
withdrawAvailable = withdrawEnabled if (withdrawEnabled) else withdrawAvailable
|
728
|
+
networks = self.safe_value(result[code], 'networks', {})
|
729
|
+
networks[networkCode] = {
|
688
730
|
'info': currency,
|
689
|
-
'
|
731
|
+
'id': networkId,
|
732
|
+
'network': networkCode,
|
733
|
+
'currencyId': id,
|
734
|
+
'numericId': numericId,
|
735
|
+
'deposit': depositEnabled,
|
736
|
+
'withdraw': withdrawEnabled,
|
690
737
|
'active': active,
|
691
|
-
'
|
692
|
-
'withdraw': None,
|
693
|
-
'fee': fee,
|
738
|
+
'fee': self.parse_number(feeString),
|
694
739
|
'precision': None,
|
695
|
-
'networks': {},
|
696
740
|
'limits': {
|
697
741
|
'amount': {
|
698
742
|
'min': None,
|
699
743
|
'max': None,
|
700
744
|
},
|
701
745
|
'withdraw': {
|
702
|
-
'min':
|
746
|
+
'min': None,
|
747
|
+
'max': None,
|
748
|
+
},
|
749
|
+
'deposit': {
|
750
|
+
'min': None,
|
703
751
|
'max': None,
|
704
752
|
},
|
705
753
|
},
|
706
754
|
}
|
755
|
+
result[code]['networks'] = networks
|
756
|
+
info = self.safe_value(result[code], 'info', [])
|
757
|
+
rawInfo = {}
|
758
|
+
rawInfo[id] = currency
|
759
|
+
info.append(rawInfo)
|
760
|
+
result[code]['info'] = info
|
761
|
+
if noParentChain:
|
762
|
+
result[code]['id'] = id
|
763
|
+
result[code]['name'] = name
|
764
|
+
result[code]['active'] = depositAvailable and withdrawAvailable
|
765
|
+
result[code]['deposit'] = depositAvailable
|
766
|
+
result[code]['withdraw'] = withdrawAvailable
|
767
|
+
result[code]['fee'] = self.parse_number(minFeeString)
|
707
768
|
return result
|
708
769
|
|
709
770
|
def fetch_ticker(self, symbol: str, params={}):
|
ccxt/pro/__init__.py
CHANGED
ccxt/xt.py
CHANGED
@@ -4341,7 +4341,11 @@ class xt(Exchange, ImplicitAPI):
|
|
4341
4341
|
timestamp = self.number_to_string(self.nonce())
|
4342
4342
|
body = query
|
4343
4343
|
if (payload == '/v4/order') or (payload == '/future/trade/v1/order/create') or (payload == '/future/trade/v1/entrust/create-plan') or (payload == '/future/trade/v1/entrust/create-profit') or (payload == '/future/trade/v1/order/create-batch'):
|
4344
|
-
|
4344
|
+
id = 'CCXT'
|
4345
|
+
if payload.find('future') > -1:
|
4346
|
+
body['clientMedia'] = id
|
4347
|
+
else:
|
4348
|
+
body['media'] = id
|
4345
4349
|
isUndefinedBody = ((method == 'GET') or (path == 'order/{orderId}'))
|
4346
4350
|
body = None if isUndefinedBody else self.json(body)
|
4347
4351
|
payloadString = None
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 3.1.
|
3
|
+
Version: 3.1.24
|
4
4
|
Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 130+ exchanges
|
5
5
|
Home-page: https://ccxt.com
|
6
6
|
Author: Igor Kroitor
|
@@ -264,13 +264,13 @@ console.log(version, Object.keys(exchanges));
|
|
264
264
|
|
265
265
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
266
266
|
|
267
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@3.1.
|
268
|
-
* unpkg: https://unpkg.com/ccxt@3.1.
|
267
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@3.1.24/dist/ccxt.browser.js
|
268
|
+
* unpkg: https://unpkg.com/ccxt@3.1.24/dist/ccxt.browser.js
|
269
269
|
|
270
270
|
CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
|
271
271
|
|
272
272
|
```HTML
|
273
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@3.1.
|
273
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@3.1.24/dist/ccxt.browser.js"></script>
|
274
274
|
```
|
275
275
|
|
276
276
|
Creates a global `ccxt` object:
|
@@ -1,4 +1,4 @@
|
|
1
|
-
ccxt/__init__.py,sha256=
|
1
|
+
ccxt/__init__.py,sha256=4umWpOziooqPyqK_yH16s56svTFX5AYnsuq0F292G0Y,15531
|
2
2
|
ccxt/ace.py,sha256=EF63BJQ3hYZO9atvTrzpLrBeA80bH5mdfdzhBUSSULE,41329
|
3
3
|
ccxt/alpaca.py,sha256=cn5ABCJszrfE2qWMCDIW_1F-dGHtBbG-7zeo8tpNaeE,33161
|
4
4
|
ccxt/ascendex.py,sha256=NVSEWJYQAj-5W3Zu8WE6nGO0qWUpbVWauXXyaNj0JM8,129270
|
@@ -17,7 +17,7 @@ ccxt/bitfinex.py,sha256=p4utzPqvd3aMDzfAuiuY8Ui4Eu66fOuiwjDPFAA2Lio,69312
|
|
17
17
|
ccxt/bitfinex2.py,sha256=uDHBHSgacp2V48PAX6AwiO9J1JtSeBqYGBV0nyGruXU,111509
|
18
18
|
ccxt/bitflyer.py,sha256=uCr57Qn3l5EMzM1KSTsDjihxSUkSygxKYyZg_S2TEKQ,37741
|
19
19
|
ccxt/bitforex.py,sha256=-d7g8taNUI01JsxGs2MtoY5GUITLF8B__6J63j0XoYk,28316
|
20
|
-
ccxt/bitget.py,sha256=
|
20
|
+
ccxt/bitget.py,sha256=SLS_VmntPvE2SosD6IZpEiSNp9u5vOikrnzy0gFh7a0,219439
|
21
21
|
ccxt/bithumb.py,sha256=Lh5AswfAiOCi9kknUrusqDFtkkMCmh9XtRNMJSDYCno,42572
|
22
22
|
ccxt/bitmart.py,sha256=lwziKtfmKuJu4a8fgZTjpMJ60F3TPH6dZ4hLM9SGm24,131482
|
23
23
|
ccxt/bitmex.py,sha256=P-ZAWtim5FfYnj-9DImsuODrH-T796zC5dLHjMS-M4o,111059
|
@@ -39,7 +39,7 @@ ccxt/btcmarkets.py,sha256=f2xQs_QaB8lbnzxih-NWeJQZdV5FgyIHVtZ9myAJ1FY,48547
|
|
39
39
|
ccxt/btctradeua.py,sha256=E5MqeOmjMP7Bu3dK53Nx78P8nAVCqjk8CVeKE0B2fQY,22177
|
40
40
|
ccxt/btcturk.py,sha256=eswXO6eUpjc27vetGEaYepXeSWuLNHkWmnBSCzo4p5M,35384
|
41
41
|
ccxt/buda.py,sha256=HdPsfWEZcr-l4c4Y0Gq1atqEi7BO_dbDgJmjxop_S2I,45591
|
42
|
-
ccxt/bybit.py,sha256=
|
42
|
+
ccxt/bybit.py,sha256=O2UNk4GjIDhJq1bgQP_turlc-_rad2mwrWxWfDndrfU,398332
|
43
43
|
ccxt/cex.py,sha256=JAxB-WpXoLfOBJ5K9_BIZH7zsKhDL72fa58mbWpkdCU,64922
|
44
44
|
ccxt/coinbase.py,sha256=DuVwcb8OpxG1g-hrr3OfobnKSTodQhAXqlgxbYhvaHo,124582
|
45
45
|
ccxt/coinbaseprime.py,sha256=Ygvljulxb2uKdei5yimCj1LMjLlUJNvP-G7ns1HpUFk,1219
|
@@ -52,7 +52,7 @@ ccxt/coinone.py,sha256=EzKvQavWepcMY2JN0PFyIXSp2l4JI3gXv5pC9jDfxJ4,35211
|
|
52
52
|
ccxt/coinsph.py,sha256=pPWHBLBVVEem_Noeef9wGwFzLWxJuKkjKc35knhl3m4,81092
|
53
53
|
ccxt/coinspot.py,sha256=668j3GUhdojJ6lAs07L_5OgarktfBxabnUFV23hyUBo,18778
|
54
54
|
ccxt/cryptocom.py,sha256=cGxx4OsheInA536JVjYSx4wrkxGVb-R99igCM-2c_YY,108391
|
55
|
-
ccxt/currencycom.py,sha256=
|
55
|
+
ccxt/currencycom.py,sha256=gaUHxyEOt1s--Iaiok0-uPvEaBBWmevyPn94TQaj0ik,82121
|
56
56
|
ccxt/delta.py,sha256=TqlsYRUe4C3qTnkJ0TO5KydLuorNcGfjUs9YwHrmvwI,84060
|
57
57
|
ccxt/deribit.py,sha256=bDKo6ed1rZPw_qK4dU1mQ5kL9rbhYNATC5ew1J9wvHQ,119018
|
58
58
|
ccxt/digifinex.py,sha256=bRTuFwxbXBEUa2xYdXkeqP4Yo2f72732uDwLxQVa2b0,152160
|
@@ -94,7 +94,7 @@ ccxt/okex5.py,sha256=LKTogVF1svNkqW_-Cx0AuAopu6esgFf7ucbv7CaodUg,441
|
|
94
94
|
ccxt/okx.py,sha256=F-VDDcCU4UNGQKoAOaliVYTRhKdSJnUMMNAhazRtsqs,275356
|
95
95
|
ccxt/paymium.py,sha256=fUXMr3WvkKWS30XvVeGqqr4dLxsWsXhoE3G68SR76X0,23887
|
96
96
|
ccxt/phemex.py,sha256=aZXknEY1tRKDfby1M4sJXw3tAJdnZ2DE_EByXSMHDIg,192823
|
97
|
-
ccxt/poloniex.py,sha256=
|
97
|
+
ccxt/poloniex.py,sha256=ckqTa_XqdE6s2eJKypt0U2XzeIV14DqIn1hvt6XCQ0M,93433
|
98
98
|
ccxt/poloniexfutures.py,sha256=Ke821VIhCjDuNW3I5yZ3xqoj0y99bNI7glk5vX3XTWk,76598
|
99
99
|
ccxt/probit.py,sha256=YQJ8dZTKHXKR6BPrOT6juMi-3GdLq9ZT3J4yHks3w2I,69774
|
100
100
|
ccxt/ripio.py,sha256=B9wGD-eDe2fAmHlw-kCYOOqFqP0PHkaR1kt0EA_po3g,47325
|
@@ -107,7 +107,7 @@ ccxt/wavesexchange.py,sha256=dwM6jhubrIJ-fZ-9gPSZing28cdycU7V9HcqtyJncXA,103453
|
|
107
107
|
ccxt/wazirx.py,sha256=1mn0HiR6H6vvMfChXc694uzgiapwCe7VdUd1XMJjaTw,35544
|
108
108
|
ccxt/whitebit.py,sha256=Sdkp_ca2AI617PWZGIgoL8XIinqVjMtKRzrAdJB6Hdw,92221
|
109
109
|
ccxt/woo.py,sha256=eZ7qi3ICLkh9Z3Bgng2otOgu2aozRNNFXXXyQyr_RKk,94738
|
110
|
-
ccxt/xt.py,sha256=
|
110
|
+
ccxt/xt.py,sha256=CVAGMxZ9jEnq57FWO0xjb2rEroTAf12muT1V_m2m1z0,196863
|
111
111
|
ccxt/yobit.py,sha256=1b1Byz3OgIAGqxksulhbvJzbPVjvS_6Ut2vol7lYgFA,51572
|
112
112
|
ccxt/zaif.py,sha256=3yB3ZYm73JWk9oVv5xg-RsqmuYsvie738QGD3hioEII,28777
|
113
113
|
ccxt/zb.py,sha256=8fNNN13jKixNRGQWr9KFZbOvAVU7E__XIM92urdyA08,183857
|
@@ -152,7 +152,7 @@ ccxt/abstract/btcex.py,sha256=QsxRv_h-pGyIr9Vu1odeFqbIyj59MgOgNGc54f9BDr4,5594
|
|
152
152
|
ccxt/abstract/btcmarkets.py,sha256=dQ2yTZ_8T2TEeAYIuKE0ATImbOLDLGSK7HbbBd8XVJQ,3690
|
153
153
|
ccxt/abstract/btctradeua.py,sha256=n2EQMOpdzLNNZrnwZWnpMvnazzoY1vzmdUcLVE7fRho,1407
|
154
154
|
ccxt/abstract/btcturk.py,sha256=081t4ZptWBV-W13Y449RbIC_7w-Y1Q7Ozyu9DWCMr0w,1403
|
155
|
-
ccxt/abstract/bybit.py,sha256=
|
155
|
+
ccxt/abstract/bybit.py,sha256=698pLZ7FbXjWCxyCNxbKkzzcNAUVWVhkM4xtotqiBNg,72713
|
156
156
|
ccxt/abstract/cex.py,sha256=Q0NJeDuJ4Kn_mtokYqBenhXWvLIiMSVTqbgbfcLGgv4,3311
|
157
157
|
ccxt/abstract/coinbase.py,sha256=fWcoQs-uOWpvKCjiTjyI_AqdWYYX24M7xlV6q7PM6Ko,9017
|
158
158
|
ccxt/abstract/coinbaseprime.py,sha256=lLp2coY-wJx7MT34jLsIOOSocQxLCi9uyvQ5xplylhw,6952
|
@@ -165,7 +165,7 @@ ccxt/abstract/coinone.py,sha256=fqsnaWgGzYXo-K1K3MJB4TNrfJzc6HB5VjV2h9CdJA8,2507
|
|
165
165
|
ccxt/abstract/coinsph.py,sha256=Xa1JQch0WZ9r06s29ixk5L6H-KUOEy6j-A-28bkGNn8,3736
|
166
166
|
ccxt/abstract/coinspot.py,sha256=DVsqMQGmEZYESzYvaGBmctP3W229yF1__Y5KzGiI5RA,2707
|
167
167
|
ccxt/abstract/cryptocom.py,sha256=lQIIkhGRtS2mKvwJx74NrWzqcxifLpjtEEODILXZIM8,21126
|
168
|
-
ccxt/abstract/currencycom.py,sha256=
|
168
|
+
ccxt/abstract/currencycom.py,sha256=8T6Wn2n5KXpFv-nev5P314dMfndVemm7tBtI7qwFtqc,7563
|
169
169
|
ccxt/abstract/delta.py,sha256=ZqdNynDelhjCCryRxWweTjRsv5iGwEksLzTSlvcHdrY,3128
|
170
170
|
ccxt/abstract/deribit.py,sha256=rS_982u8dOVsh2vGSB5TO7K8Tye0Alq-Rg9fYZwz8hg,15499
|
171
171
|
ccxt/abstract/digifinex.py,sha256=2tlP2G6Niu6TSbNUcgxvXdHfln6VhAZliXV7upFwpas,9386
|
@@ -220,7 +220,7 @@ ccxt/abstract/xt.py,sha256=xHHv2viFGK0_iPZ4gu6Wb0aOrpcKhr9zoY-BIPWh5bs,27028
|
|
220
220
|
ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
|
221
221
|
ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
|
222
222
|
ccxt/abstract/zonda.py,sha256=VoxuPkSq8vAvKnDvOqnByhwsIf09m7yIrs8HejFrDk4,5482
|
223
|
-
ccxt/async_support/__init__.py,sha256=
|
223
|
+
ccxt/async_support/__init__.py,sha256=HNe_p8KfQxE7HfkSAVLePKMxQMDNFvMPB02uINqweS8,15324
|
224
224
|
ccxt/async_support/ace.py,sha256=4RAmTYdlzO2yA9jnTopavGHBWZ9jDC7ceXMXxgiCrHY,41553
|
225
225
|
ccxt/async_support/alpaca.py,sha256=0WxBRJDp4Rem6VKCzoVPZsgrPNFr4g5Iv7_P0RFxMkE,33307
|
226
226
|
ccxt/async_support/ascendex.py,sha256=RptK6xnD1YOnQBkmn8uz07oWM4JGYpf7jwOeNR_Td8Y,129884
|
@@ -239,7 +239,7 @@ ccxt/async_support/bitfinex.py,sha256=IIxp_4AMC1XVRYzyT4eQnu5sJUofWbYRRK9rKVG_RF
|
|
239
239
|
ccxt/async_support/bitfinex2.py,sha256=1_We9jzxhzBFqgmgQMZH8S7bkS6jRGmVInot0J-9bPA,111979
|
240
240
|
ccxt/async_support/bitflyer.py,sha256=IECIxIf_MAgwmBW_Rp5FBfR-0VNoUQ3qoMraesz0D10,38049
|
241
241
|
ccxt/async_support/bitforex.py,sha256=_ieZdAzDacQdiU6LhgcRnoUCWM4mgkn72d8OzdFwOq8,28522
|
242
|
-
ccxt/async_support/bitget.py,sha256=
|
242
|
+
ccxt/async_support/bitget.py,sha256=ZPzy7b2-CcEJXQjD5Kk3xFZCjNJktt9Ul7VTLcfp6ss,220313
|
243
243
|
ccxt/async_support/bithumb.py,sha256=inJAIQM-k9IXnQr-F7Bv8CZpDmjd0maCen5KCaYUhP8,42790
|
244
244
|
ccxt/async_support/bitmart.py,sha256=vI5_sbzqOJUiuiQvNm0e5Y-wQeAwtdzwImbHoTfHL1Q,132120
|
245
245
|
ccxt/async_support/bitmex.py,sha256=G_U8U75wUuqSgQkI-op71zDp3p_P5XAoGV5jR_4Ehnk,111523
|
@@ -261,7 +261,7 @@ ccxt/async_support/btcmarkets.py,sha256=1gXbe_7wlN1KrXoBn-gNhxI7zU0bjjUoil9S2pUL
|
|
261
261
|
ccxt/async_support/btctradeua.py,sha256=eow6iFtrYpOcmZnfcJofXunr_j6pw2_2sA6EYLP8Z6E,22323
|
262
262
|
ccxt/async_support/btcturk.py,sha256=DRjq5bcvySq31PXl6qvcaZh45Mdh6pC2P_xBDv4JDjI,35602
|
263
263
|
ccxt/async_support/buda.py,sha256=52OEMVpDkitF15CWUh0CG5uM-sE30f8G9xAkOhrcqtU,45959
|
264
|
-
ccxt/async_support/bybit.py,sha256=
|
264
|
+
ccxt/async_support/bybit.py,sha256=Bt8WwxwQkptQ7sNTWmamf-AR5GtIkg5MRBCyrWT6-3Q,400220
|
265
265
|
ccxt/async_support/cex.py,sha256=3uqC1Y5VDaeoHzrV3E5hqN4EYkgoUAM-7gB07EPqRh4,65248
|
266
266
|
ccxt/async_support/coinbase.py,sha256=F0PRBSRRlHWI_b7LFyeHj-d4PjqBiEHDsAHhpSSWELI,125226
|
267
267
|
ccxt/async_support/coinbaseprime.py,sha256=M5Ez1DsFcW3-vJ-4QoZzwYBAKjAAtJnJpkfnV4sWAIc,1233
|
@@ -274,7 +274,7 @@ ccxt/async_support/coinone.py,sha256=tLccRfLYCVH-5JPQuLrybGpo3y8VZwUd3p1DIYleTGM
|
|
274
274
|
ccxt/async_support/coinsph.py,sha256=PmgKdeINKbx4wZX6Jds0ytpzFR6f21Dyt_wn2L1rWwU,81496
|
275
275
|
ccxt/async_support/coinspot.py,sha256=uRLvUXCE3T-f95Yq5TDym5dsNffoYwUgvpkpxjNvZuY,18912
|
276
276
|
ccxt/async_support/cryptocom.py,sha256=1pN4CffmkxR5c_R3kr62OMi6n8O2sf8FUzRzyUjC1ig,108923
|
277
|
-
ccxt/async_support/currencycom.py,sha256=
|
277
|
+
ccxt/async_support/currencycom.py,sha256=8sQXiOBFFlfgSClvMgOSVqqY4fz02pEOPBJNbw3Uu5g,82531
|
278
278
|
ccxt/async_support/delta.py,sha256=bKS5bHU7O_KjVBb95wT0IrjJVmcCLSgTBaqXSYwHUsI,84440
|
279
279
|
ccxt/async_support/deribit.py,sha256=-dfdPCsHDaqRlwpRwlTJCBXDLCi_x2VwhoaeNuhUvwU,119560
|
280
280
|
ccxt/async_support/digifinex.py,sha256=0vFc7Mciel7ArhLPuUUKXmYNKpQC9tvNo3zfLP6kUGI,152866
|
@@ -316,7 +316,7 @@ ccxt/async_support/okex5.py,sha256=tq41tKx06j3DDO9pu9iKInpjayVprbobVNTK8qb7hoM,4
|
|
316
316
|
ccxt/async_support/okx.py,sha256=bFmhZv3WJj1TTS1_fFrtXVUvlbBVZ3KilUjjCfcpBY8,276404
|
317
317
|
ccxt/async_support/paymium.py,sha256=5SeLSMGgLVWu3TDEbxrc2VT2tAdXfIm90EuZ3Rtsn_Q,24075
|
318
318
|
ccxt/async_support/phemex.py,sha256=eMnk8yVrCG2A1ENmPJn5El-sLggZ_ojwPtvODCOhMbA,193419
|
319
|
-
ccxt/async_support/poloniex.py,sha256=
|
319
|
+
ccxt/async_support/poloniex.py,sha256=nIJq6V5lUTnX7J68c3RCZnQLQwJsiHMs4hcirqJFQ_U,93933
|
320
320
|
ccxt/async_support/poloniexfutures.py,sha256=f_bS3FlG4J3E4xWAih4PmnR3NkA2EwZUtAZ6emVQhcE,76966
|
321
321
|
ccxt/async_support/probit.py,sha256=kwcV6dWPUXtOOQpMbtwYbIRKw8lTgOnG5zCqQRV-1Rg,70124
|
322
322
|
ccxt/async_support/ripio.py,sha256=ZXAx-Uj7_Nx0e9V_zSoPpoYSbBh2PHmbI5T2eS3Ao8s,47585
|
@@ -329,13 +329,13 @@ ccxt/async_support/wavesexchange.py,sha256=nBOvf9kQrhFicrTUFvxd9sKXrDCXw8TpcN2sp
|
|
329
329
|
ccxt/async_support/wazirx.py,sha256=HptI1mDn_frZHOnYTA2gHR0XUGoQvds7GesB0gHMmNc,35792
|
330
330
|
ccxt/async_support/whitebit.py,sha256=9iRwYMhVanLtXOv7InS_ldF5wGGmgV_XU3u72-i1ovI,92673
|
331
331
|
ccxt/async_support/woo.py,sha256=3yuwzH5ZD6kx9OB4MSp-gikqqGi3-hjnCEyLCGHUPzc,95322
|
332
|
-
ccxt/async_support/xt.py,sha256=
|
332
|
+
ccxt/async_support/xt.py,sha256=MsCwFZAcw82HCDMxKJatXZQqusvPmzMvxfaPT4P2vbY,197982
|
333
333
|
ccxt/async_support/yobit.py,sha256=Eejlh__5PsoOhxhqazA_KQpIHTCiLusSeftWB82eQHk,51856
|
334
334
|
ccxt/async_support/zaif.py,sha256=Tye_zrffs7Ua22_o7fp68C3Ti1qdJ3H26dbz6j1bVRc,28959
|
335
335
|
ccxt/async_support/zb.py,sha256=W8HHyssjCLTugSRs80TnAwGJl85vp7nyNPOn9RLpXFk,184533
|
336
336
|
ccxt/async_support/zonda.py,sha256=0ABz8ApeophACxwTL4hxonco2Yc6uTF5torKmDLQSN0,74326
|
337
337
|
ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
|
338
|
-
ccxt/async_support/base/exchange.py,sha256=
|
338
|
+
ccxt/async_support/base/exchange.py,sha256=aLm2xP7iLWkAVDT8EIM7bgMW6D76ciaeajqHcTDNuas,130943
|
339
339
|
ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
|
340
340
|
ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
|
341
341
|
ccxt/async_support/base/ws/aiohttp_client.py,sha256=xmlZV30Vb9Kq7JCm3D5FuEmuj1zp5H4F4hrz8-Y-Ir4,4999
|
@@ -349,10 +349,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GH-475Ni0mLOx7mUDnz4jjzaGkh
|
|
349
349
|
ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
|
350
350
|
ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
|
351
351
|
ccxt/base/errors.py,sha256=-LVeTNyXvu3QEgb-p-KzMpcBgzHlvFTwDzmZK7Gfc14,3401
|
352
|
-
ccxt/base/exchange.py,sha256
|
352
|
+
ccxt/base/exchange.py,sha256=W-pQNQ1Hi9jSUnqoRoXFeeapNd6QSjLiFMeN8t8qGsU,170445
|
353
353
|
ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
|
354
354
|
ccxt/base/types.py,sha256=8FseQkf_LL-nXdb5LyT6RpDaU8pr3HAI9Jb9Wj_oDN0,1366
|
355
|
-
ccxt/pro/__init__.py,sha256=
|
355
|
+
ccxt/pro/__init__.py,sha256=gDxp-KHoBj3EmZITMMI3XXP3JpXqAQYf0WU0ir7we44,6463
|
356
356
|
ccxt/pro/alpaca.py,sha256=CmaU0MJq0HiNaYvBHeDJfTa-letDiEQonRON7Q_3W_k,26686
|
357
357
|
ccxt/pro/ascendex.py,sha256=k6rpuiPhj3ipeWRG5vwR22SS4iAzQPe1q1WxJaaucLk,34565
|
358
358
|
ccxt/pro/bequant.py,sha256=qz8JjnpkAQY_CFiFSKGqrjjgZ2167_TBKjSJOb9NeDw,1081
|
@@ -462,7 +462,7 @@ ccxt/test/base/test_ticker.py,sha256=h9AV_O6s-Ax3vB3sFoN0Mz22rMOi65i9BDv0SNejH98
|
|
462
462
|
ccxt/test/base/test_trade.py,sha256=bL9o3S_TGW8Nnlxu-BYkRG8NyRzKAWrU66uO5jJCM3A,2259
|
463
463
|
ccxt/test/base/test_trading_fee.py,sha256=yRCpLHLg_ca9JQXdZB3_pIMHgHLGEfeQF95E6d1e2Bc,1125
|
464
464
|
ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
|
465
|
-
ccxt-3.1.
|
466
|
-
ccxt-3.1.
|
467
|
-
ccxt-3.1.
|
468
|
-
ccxt-3.1.
|
465
|
+
ccxt-3.1.24.dist-info/METADATA,sha256=VAOHHLVsEL1dghJ2ugcvUGFtew8sa66sDawznIsYoWA,110521
|
466
|
+
ccxt-3.1.24.dist-info/WHEEL,sha256=a-zpFRIJzOq5QfuhBzbhiA1eHTzNCJn8OdRvhdNX0Rk,110
|
467
|
+
ccxt-3.1.24.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
|
468
|
+
ccxt-3.1.24.dist-info/RECORD,,
|
File without changes
|
File without changes
|