ccxt 4.4.17__py2.py3-none-any.whl → 4.4.18__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 CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.4.17'
25
+ __version__ = '4.4.18'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.17'
7
+ __version__ = '4.4.18'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.4.17'
5
+ __version__ = '4.4.18'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -614,9 +614,10 @@ class bingx(Exchange, ImplicitAPI):
614
614
  'max': self.safe_number(rawNetwork, 'withdrawMax'),
615
615
  },
616
616
  }
617
+ fee = self.safe_number(rawNetwork, 'withdrawFee')
617
618
  if isDefault:
618
- fee = self.safe_number(rawNetwork, 'withdrawFee')
619
619
  defaultLimits = limits
620
+ precision = self.safe_number(rawNetwork, 'withdrawPrecision')
620
621
  networkActive = networkDepositEnabled or networkWithdrawEnabled
621
622
  networks[networkCode] = {
622
623
  'info': rawNetwork,
@@ -626,7 +627,7 @@ class bingx(Exchange, ImplicitAPI):
626
627
  'active': networkActive,
627
628
  'deposit': networkDepositEnabled,
628
629
  'withdraw': networkWithdrawEnabled,
629
- 'precision': None,
630
+ 'precision': precision,
630
631
  'limits': limits,
631
632
  }
632
633
  active = depositEnabled or withdrawEnabled
@@ -1287,7 +1287,7 @@ class bitmart(Exchange, ImplicitAPI):
1287
1287
  'close': last,
1288
1288
  'last': last,
1289
1289
  'previousClose': None,
1290
- 'change': change,
1290
+ 'change': None,
1291
1291
  'percentage': percentage,
1292
1292
  'average': average,
1293
1293
  'baseVolume': baseVolume,
@@ -124,6 +124,12 @@ class bitso(Exchange, ImplicitAPI):
124
124
  'TUSD': 0.01,
125
125
  },
126
126
  'defaultPrecision': 0.00000001,
127
+ 'networks': {
128
+ 'TRC20': 'trx',
129
+ 'ERC20': 'erc20',
130
+ 'BEP20': 'bsc',
131
+ 'BEP2': 'bep2',
132
+ },
127
133
  },
128
134
  'timeframes': {
129
135
  '1m': '60',
@@ -1548,18 +1554,6 @@ class bitso(Exchange, ImplicitAPI):
1548
1554
  first = self.safe_dict(payload, 0)
1549
1555
  return self.parse_transaction(first, currency)
1550
1556
 
1551
- def safe_network(self, networkId):
1552
- if networkId is None:
1553
- return None
1554
- networkId = networkId.upper()
1555
- networksById: dict = {
1556
- 'trx': 'TRC20',
1557
- 'erc20': 'ERC20',
1558
- 'bsc': 'BEP20',
1559
- 'bep2': 'BEP2',
1560
- }
1561
- return self.safe_string(networksById, networkId, networkId)
1562
-
1563
1557
  def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
1564
1558
  #
1565
1559
  # deposit
@@ -1606,12 +1600,14 @@ class bitso(Exchange, ImplicitAPI):
1606
1600
  networkId = self.safe_string_2(transaction, 'network', 'method')
1607
1601
  status = self.safe_string(transaction, 'status')
1608
1602
  withdrawId = self.safe_string(transaction, 'wid')
1603
+ networkCode = self.network_id_to_code(networkId)
1604
+ networkCodeUpper = networkCode.upper() if (networkCode is not None) else None
1609
1605
  return {
1610
1606
  'id': self.safe_string_2(transaction, 'wid', 'fid'),
1611
1607
  'txid': self.safe_string(details, 'tx_hash'),
1612
1608
  'timestamp': self.parse8601(datetime),
1613
1609
  'datetime': datetime,
1614
- 'network': self.safe_network(networkId),
1610
+ 'network': networkCodeUpper,
1615
1611
  'addressFrom': receivingAddress,
1616
1612
  'address': withdrawalAddress if (withdrawalAddress is not None) else receivingAddress,
1617
1613
  'addressTo': withdrawalAddress,
@@ -3491,32 +3491,61 @@ class gate(Exchange, ImplicitAPI):
3491
3491
 
3492
3492
  def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
3493
3493
  #
3494
- # deposits
3494
+ # fetchDeposits
3495
3495
  #
3496
- # {
3497
- # "id": "d33361395",
3498
- # "currency": "USDT_TRX",
3499
- # "address": "TErdnxenuLtXfnMafLbfappYdHtnXQ5U4z",
3500
- # "amount": "100",
3501
- # "txid": "ae9374de34e558562fe18cbb1bf9ab4d9eb8aa7669d65541c9fa2a532c1474a0",
3502
- # "timestamp": "1626345819",
3503
- # "status": "DONE",
3504
- # "memo": ""
3505
- # }
3496
+ # {
3497
+ # "id": "d33361395",
3498
+ # "currency": "USDT_TRX",
3499
+ # "address": "TErdnxenuLtXfnMafLbfappYdHtnXQ5U4z",
3500
+ # "amount": "100",
3501
+ # "txid": "ae9374de34e558562fe18cbb1bf9ab4d9eb8aa7669d65541c9fa2a532c1474a0",
3502
+ # "timestamp": "1626345819",
3503
+ # "status": "DONE",
3504
+ # "memo": ""
3505
+ # }
3506
3506
  #
3507
3507
  # withdraw
3508
3508
  #
3509
- # {
3510
- # "id": "w13389675",
3511
- # "currency": "USDT",
3512
- # "amount": "50",
3513
- # "address": "TUu2rLFrmzUodiWfYki7QCNtv1akL682p1",
3514
- # "memo": null
3515
- # }
3509
+ # {
3510
+ # "id":"w64413318",
3511
+ # "currency":"usdt",
3512
+ # "amount":"10150",
3513
+ # "address":"0x0ab891497116f7f5532a4c2f4f7b1784488628e1",
3514
+ # "memo":null,
3515
+ # "status":"REQUEST",
3516
+ # "chain":"eth",
3517
+ # "withdraw_order_id":"",
3518
+ # "fee_amount":"4.15000000"
3519
+ # }
3520
+ #
3521
+ # fetchWithdrawals
3522
+ #
3523
+ # {
3524
+ # "id": "210496",
3525
+ # "timestamp": "1542000000",
3526
+ # "withdraw_order_id": "order_123456",
3527
+ # "currency": "USDT",
3528
+ # "address": "1HkxtBAMrA3tP5ENnYY2CZortjZvFDH5Cs",
3529
+ # "txid": "128988928203223323290",
3530
+ # "block_number": "41575382",
3531
+ # "amount": "222.61",
3532
+ # "fee": "0.01",
3533
+ # "memo": "",
3534
+ # "status": "DONE",
3535
+ # "chain": "TRX"
3536
+ # }
3537
+ #
3538
+ # {
3539
+ # "id": "w13389675",
3540
+ # "currency": "USDT",
3541
+ # "amount": "50",
3542
+ # "address": "TUu2rLFrmzUodiWfYki7QCNtv1akL682p1",
3543
+ # "memo": null
3544
+ # }
3516
3545
  #
3517
3546
  # {
3518
3547
  # "currency":"usdt",
3519
- # "address":"0x01b0A9b7b4CdE774AF0f3E47CB4f1c2CCdBa0806",
3548
+ # "address":"0x01c0A9b7b4CdE774AF0f3E47CB4f1c2CCdBa0806",
3520
3549
  # "amount":"1880",
3521
3550
  # "chain":"eth"
3522
3551
  # }
@@ -3531,7 +3560,7 @@ class gate(Exchange, ImplicitAPI):
3531
3560
  amountString = Precise.string_abs(amountString)
3532
3561
  else:
3533
3562
  type = self.parse_transaction_type(id[0])
3534
- feeCostString = self.safe_string(transaction, 'fee')
3563
+ feeCostString = self.safe_string_2(transaction, 'fee', 'fee_amount')
3535
3564
  if type == 'withdrawal':
3536
3565
  amountString = Precise.string_sub(amountString, feeCostString)
3537
3566
  networkId = self.safe_string_upper(transaction, 'chain')
ccxt/async_support/htx.py CHANGED
@@ -5914,6 +5914,7 @@ class htx(Exchange, ImplicitAPI):
5914
5914
  async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
5915
5915
  """
5916
5916
  fetch all withdrawals made from an account
5917
+ :see: https://huobiapi.github.io/docs/spot/v1/en/#search-for-existed-withdraws-and-deposits
5917
5918
  :param str code: unified currency code
5918
5919
  :param int [since]: the earliest time in ms to fetch withdrawals for
5919
5920
  :param int [limit]: the maximum number of withdrawals structures to retrieve
@@ -6239,6 +6240,7 @@ class htx(Exchange, ImplicitAPI):
6239
6240
  async def fetch_isolated_borrow_rates(self, params={}) -> IsolatedBorrowRates:
6240
6241
  """
6241
6242
  fetch the borrow interest rates of all currencies
6243
+ :see: https://huobiapi.github.io/docs/spot/v1/en/#get-loan-interest-rate-and-quota-isolated
6242
6244
  :param dict [params]: extra parameters specific to the exchange API endpoint
6243
6245
  :returns dict: a list of `isolated borrow rate structures <https://docs.ccxt.com/#/?id=isolated-borrow-rate-structure>`
6244
6246
  """
@@ -6449,6 +6451,8 @@ class htx(Exchange, ImplicitAPI):
6449
6451
  async def fetch_funding_rate(self, symbol: str, params={}) -> FundingRate:
6450
6452
  """
6451
6453
  fetch the current funding rate
6454
+ :see: https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#query-funding-rate
6455
+ :see: https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-query-funding-rate
6452
6456
  :param str symbol: unified market symbol
6453
6457
  :param dict [params]: extra parameters specific to the exchange API endpoint
6454
6458
  :returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
@@ -6486,6 +6490,8 @@ class htx(Exchange, ImplicitAPI):
6486
6490
  async def fetch_funding_rates(self, symbols: Strings = None, params={}) -> FundingRates:
6487
6491
  """
6488
6492
  fetch the funding rate for multiple markets
6493
+ :see: https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-query-a-batch-of-funding-rate
6494
+ :see: https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#query-a-batch-of-funding-rate
6489
6495
  :param str[]|None symbols: list of unified market symbols
6490
6496
  :param dict [params]: extra parameters specific to the exchange API endpoint
6491
6497
  :returns dict[]: a list of `funding rate structures <https://docs.ccxt.com/#/?id=funding-rates-structure>`, indexed by market symbols
@@ -52,6 +52,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
52
52
  'createDepositAddress': True,
53
53
  'createOrder': True,
54
54
  'createOrders': True,
55
+ 'createOrderWithTakeProfitAndStopLoss': True,
55
56
  'createReduceOnlyOrder': True,
56
57
  'createStopLimitOrder': True,
57
58
  'createStopLossOrder': True,
@@ -255,6 +256,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
255
256
  '400100': BadRequest, # Parameter Error -- You tried to access the resource with invalid parameters
256
257
  '411100': AccountSuspended, # User is frozen -- Please contact us via support center
257
258
  '500000': ExchangeNotAvailable, # Internal Server Error -- We had a problem with our server. Try again later.
259
+ '300009': InvalidOrder, # {"msg":"No open positions to close.","code":"300009"}
258
260
  },
259
261
  'broad': {
260
262
  'Position does not exist': OrderNotFound, # {"code":"200000", "msg":"Position does not exist"}
@@ -1372,12 +1374,15 @@ class kucoinfutures(kucoin, ImplicitAPI):
1372
1374
  """
1373
1375
  Create an order on the exchange
1374
1376
  :see: https://docs.kucoin.com/futures/#place-an-order
1377
+ :see: https://www.kucoin.com/docs/rest/futures-trading/orders/place-take-profit-and-stop-loss-order#http-request
1375
1378
  :param str symbol: Unified CCXT market symbol
1376
1379
  :param str type: 'limit' or 'market'
1377
1380
  :param str side: 'buy' or 'sell'
1378
1381
  :param float amount: the amount of currency to trade
1379
1382
  :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1380
1383
  :param dict [params]: extra parameters specific to the exchange API endpoint
1384
+ :param dict [params.takeProfit]: *takeProfit object in params* containing the triggerPrice at which the attached take profit order will be triggered
1385
+ :param dict [params.stopLoss]: *stopLoss object in params* containing the triggerPrice at which the attached stop loss order will be triggered
1381
1386
  :param float [params.triggerPrice]: The price a trigger order is triggered at
1382
1387
  :param float [params.stopLossPrice]: price to trigger stop-loss orders
1383
1388
  :param float [params.takeProfitPrice]: price to trigger take-profit orders
@@ -1399,12 +1404,16 @@ class kucoinfutures(kucoin, ImplicitAPI):
1399
1404
  market = self.market(symbol)
1400
1405
  testOrder = self.safe_bool(params, 'test', False)
1401
1406
  params = self.omit(params, 'test')
1407
+ isTpAndSlOrder = (self.safe_value(params, 'stopLoss') is not None) or (self.safe_value(params, 'takeProfit') is not None)
1402
1408
  orderRequest = self.create_contract_order_request(symbol, type, side, amount, price, params)
1403
1409
  response = None
1404
1410
  if testOrder:
1405
1411
  response = await self.futuresPrivatePostOrdersTest(orderRequest)
1406
1412
  else:
1407
- response = await self.futuresPrivatePostOrders(orderRequest)
1413
+ if isTpAndSlOrder:
1414
+ response = await self.futuresPrivatePostStOrders(orderRequest)
1415
+ else:
1416
+ response = await self.futuresPrivatePostOrders(orderRequest)
1408
1417
  #
1409
1418
  # {
1410
1419
  # "code": "200000",
@@ -1479,6 +1488,9 @@ class kucoinfutures(kucoin, ImplicitAPI):
1479
1488
  'leverage': 1,
1480
1489
  }
1481
1490
  triggerPrice, stopLossPrice, takeProfitPrice = self.handle_trigger_prices(params)
1491
+ stopLoss = self.safe_dict(params, 'stopLoss')
1492
+ takeProfit = self.safe_dict(params, 'takeProfit')
1493
+ # isTpAndSl = stopLossPrice and takeProfitPrice
1482
1494
  triggerPriceTypes: dict = {
1483
1495
  'mark': 'MP',
1484
1496
  'last': 'TP',
@@ -1486,11 +1498,22 @@ class kucoinfutures(kucoin, ImplicitAPI):
1486
1498
  }
1487
1499
  triggerPriceType = self.safe_string(params, 'triggerPriceType', 'mark')
1488
1500
  triggerPriceTypeValue = self.safe_string(triggerPriceTypes, triggerPriceType, triggerPriceType)
1489
- params = self.omit(params, ['stopLossPrice', 'takeProfitPrice', 'triggerPrice', 'stopPrice'])
1501
+ params = self.omit(params, ['stopLossPrice', 'takeProfitPrice', 'triggerPrice', 'stopPrice', 'takeProfit', 'stopLoss'])
1490
1502
  if triggerPrice:
1491
1503
  request['stop'] = 'up' if (side == 'buy') else 'down'
1492
1504
  request['stopPrice'] = self.price_to_precision(symbol, triggerPrice)
1493
1505
  request['stopPriceType'] = triggerPriceTypeValue
1506
+ elif stopLoss is not None or takeProfit is not None:
1507
+ priceType = triggerPriceTypeValue
1508
+ if stopLoss is not None:
1509
+ slPrice = self.safe_string_2(stopLoss, 'triggerPrice', 'stopPrice')
1510
+ request['triggerStopDownPrice'] = self.price_to_precision(symbol, slPrice)
1511
+ priceType = self.safe_string(stopLoss, 'triggerPriceType', triggerPriceTypeValue)
1512
+ if takeProfit is not None:
1513
+ tpPrice = self.safe_string_2(takeProfit, 'triggerPrice', 'takeProfitPrice')
1514
+ request['triggerStopUpPrice'] = self.price_to_precision(symbol, tpPrice)
1515
+ priceType = self.safe_string(stopLoss, 'triggerPriceType', triggerPriceTypeValue)
1516
+ request['stopPriceType'] = priceType
1494
1517
  elif stopLossPrice or takeProfitPrice:
1495
1518
  if stopLossPrice:
1496
1519
  request['stop'] = 'up' if (side == 'buy') else 'down'
@@ -2163,8 +2163,10 @@ class mexc(Exchange, ImplicitAPI):
2163
2163
  order = self.parse_order(response, market)
2164
2164
  order['side'] = side
2165
2165
  order['type'] = type
2166
- order['price'] = price
2167
- order['amount'] = amount
2166
+ if self.safe_string(order, 'price') is None:
2167
+ order['price'] = price
2168
+ if self.safe_string(order, 'amount') is None:
2169
+ order['amount'] = amount
2168
2170
  return order
2169
2171
 
2170
2172
  async def create_swap_order(self, market, type, side, amount, price=None, marginMode=None, params={}):
ccxt/async_support/okx.py CHANGED
@@ -6828,6 +6828,7 @@ class okx(Exchange, ImplicitAPI):
6828
6828
  # "instType": "OPTION",
6829
6829
  # "oi": "300",
6830
6830
  # "oiCcy": "3",
6831
+ # "oiUsd": "3",
6831
6832
  # "ts": "1684551166251"
6832
6833
  # }
6833
6834
  #
@@ -6850,7 +6851,7 @@ class okx(Exchange, ImplicitAPI):
6850
6851
  else:
6851
6852
  baseVolume = self.safe_number(interest, 'oiCcy')
6852
6853
  openInterestAmount = self.safe_number(interest, 'oi')
6853
- openInterestValue = self.safe_number(interest, 'oiCcy')
6854
+ openInterestValue = self.safe_number(interest, 'oiUsd')
6854
6855
  return self.safe_open_interest({
6855
6856
  'symbol': self.safe_symbol(id),
6856
6857
  'baseVolume': baseVolume, # deprecated
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.17'
7
+ __version__ = '4.4.18'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
ccxt/bingx.py CHANGED
@@ -613,9 +613,10 @@ class bingx(Exchange, ImplicitAPI):
613
613
  'max': self.safe_number(rawNetwork, 'withdrawMax'),
614
614
  },
615
615
  }
616
+ fee = self.safe_number(rawNetwork, 'withdrawFee')
616
617
  if isDefault:
617
- fee = self.safe_number(rawNetwork, 'withdrawFee')
618
618
  defaultLimits = limits
619
+ precision = self.safe_number(rawNetwork, 'withdrawPrecision')
619
620
  networkActive = networkDepositEnabled or networkWithdrawEnabled
620
621
  networks[networkCode] = {
621
622
  'info': rawNetwork,
@@ -625,7 +626,7 @@ class bingx(Exchange, ImplicitAPI):
625
626
  'active': networkActive,
626
627
  'deposit': networkDepositEnabled,
627
628
  'withdraw': networkWithdrawEnabled,
628
- 'precision': None,
629
+ 'precision': precision,
629
630
  'limits': limits,
630
631
  }
631
632
  active = depositEnabled or withdrawEnabled
ccxt/bitmart.py CHANGED
@@ -1287,7 +1287,7 @@ class bitmart(Exchange, ImplicitAPI):
1287
1287
  'close': last,
1288
1288
  'last': last,
1289
1289
  'previousClose': None,
1290
- 'change': change,
1290
+ 'change': None,
1291
1291
  'percentage': percentage,
1292
1292
  'average': average,
1293
1293
  'baseVolume': baseVolume,
ccxt/bitso.py CHANGED
@@ -124,6 +124,12 @@ class bitso(Exchange, ImplicitAPI):
124
124
  'TUSD': 0.01,
125
125
  },
126
126
  'defaultPrecision': 0.00000001,
127
+ 'networks': {
128
+ 'TRC20': 'trx',
129
+ 'ERC20': 'erc20',
130
+ 'BEP20': 'bsc',
131
+ 'BEP2': 'bep2',
132
+ },
127
133
  },
128
134
  'timeframes': {
129
135
  '1m': '60',
@@ -1548,18 +1554,6 @@ class bitso(Exchange, ImplicitAPI):
1548
1554
  first = self.safe_dict(payload, 0)
1549
1555
  return self.parse_transaction(first, currency)
1550
1556
 
1551
- def safe_network(self, networkId):
1552
- if networkId is None:
1553
- return None
1554
- networkId = networkId.upper()
1555
- networksById: dict = {
1556
- 'trx': 'TRC20',
1557
- 'erc20': 'ERC20',
1558
- 'bsc': 'BEP20',
1559
- 'bep2': 'BEP2',
1560
- }
1561
- return self.safe_string(networksById, networkId, networkId)
1562
-
1563
1557
  def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
1564
1558
  #
1565
1559
  # deposit
@@ -1606,12 +1600,14 @@ class bitso(Exchange, ImplicitAPI):
1606
1600
  networkId = self.safe_string_2(transaction, 'network', 'method')
1607
1601
  status = self.safe_string(transaction, 'status')
1608
1602
  withdrawId = self.safe_string(transaction, 'wid')
1603
+ networkCode = self.network_id_to_code(networkId)
1604
+ networkCodeUpper = networkCode.upper() if (networkCode is not None) else None
1609
1605
  return {
1610
1606
  'id': self.safe_string_2(transaction, 'wid', 'fid'),
1611
1607
  'txid': self.safe_string(details, 'tx_hash'),
1612
1608
  'timestamp': self.parse8601(datetime),
1613
1609
  'datetime': datetime,
1614
- 'network': self.safe_network(networkId),
1610
+ 'network': networkCodeUpper,
1615
1611
  'addressFrom': receivingAddress,
1616
1612
  'address': withdrawalAddress if (withdrawalAddress is not None) else receivingAddress,
1617
1613
  'addressTo': withdrawalAddress,
ccxt/gate.py CHANGED
@@ -3490,32 +3490,61 @@ class gate(Exchange, ImplicitAPI):
3490
3490
 
3491
3491
  def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
3492
3492
  #
3493
- # deposits
3493
+ # fetchDeposits
3494
3494
  #
3495
- # {
3496
- # "id": "d33361395",
3497
- # "currency": "USDT_TRX",
3498
- # "address": "TErdnxenuLtXfnMafLbfappYdHtnXQ5U4z",
3499
- # "amount": "100",
3500
- # "txid": "ae9374de34e558562fe18cbb1bf9ab4d9eb8aa7669d65541c9fa2a532c1474a0",
3501
- # "timestamp": "1626345819",
3502
- # "status": "DONE",
3503
- # "memo": ""
3504
- # }
3495
+ # {
3496
+ # "id": "d33361395",
3497
+ # "currency": "USDT_TRX",
3498
+ # "address": "TErdnxenuLtXfnMafLbfappYdHtnXQ5U4z",
3499
+ # "amount": "100",
3500
+ # "txid": "ae9374de34e558562fe18cbb1bf9ab4d9eb8aa7669d65541c9fa2a532c1474a0",
3501
+ # "timestamp": "1626345819",
3502
+ # "status": "DONE",
3503
+ # "memo": ""
3504
+ # }
3505
3505
  #
3506
3506
  # withdraw
3507
3507
  #
3508
- # {
3509
- # "id": "w13389675",
3510
- # "currency": "USDT",
3511
- # "amount": "50",
3512
- # "address": "TUu2rLFrmzUodiWfYki7QCNtv1akL682p1",
3513
- # "memo": null
3514
- # }
3508
+ # {
3509
+ # "id":"w64413318",
3510
+ # "currency":"usdt",
3511
+ # "amount":"10150",
3512
+ # "address":"0x0ab891497116f7f5532a4c2f4f7b1784488628e1",
3513
+ # "memo":null,
3514
+ # "status":"REQUEST",
3515
+ # "chain":"eth",
3516
+ # "withdraw_order_id":"",
3517
+ # "fee_amount":"4.15000000"
3518
+ # }
3519
+ #
3520
+ # fetchWithdrawals
3521
+ #
3522
+ # {
3523
+ # "id": "210496",
3524
+ # "timestamp": "1542000000",
3525
+ # "withdraw_order_id": "order_123456",
3526
+ # "currency": "USDT",
3527
+ # "address": "1HkxtBAMrA3tP5ENnYY2CZortjZvFDH5Cs",
3528
+ # "txid": "128988928203223323290",
3529
+ # "block_number": "41575382",
3530
+ # "amount": "222.61",
3531
+ # "fee": "0.01",
3532
+ # "memo": "",
3533
+ # "status": "DONE",
3534
+ # "chain": "TRX"
3535
+ # }
3536
+ #
3537
+ # {
3538
+ # "id": "w13389675",
3539
+ # "currency": "USDT",
3540
+ # "amount": "50",
3541
+ # "address": "TUu2rLFrmzUodiWfYki7QCNtv1akL682p1",
3542
+ # "memo": null
3543
+ # }
3515
3544
  #
3516
3545
  # {
3517
3546
  # "currency":"usdt",
3518
- # "address":"0x01b0A9b7b4CdE774AF0f3E47CB4f1c2CCdBa0806",
3547
+ # "address":"0x01c0A9b7b4CdE774AF0f3E47CB4f1c2CCdBa0806",
3519
3548
  # "amount":"1880",
3520
3549
  # "chain":"eth"
3521
3550
  # }
@@ -3530,7 +3559,7 @@ class gate(Exchange, ImplicitAPI):
3530
3559
  amountString = Precise.string_abs(amountString)
3531
3560
  else:
3532
3561
  type = self.parse_transaction_type(id[0])
3533
- feeCostString = self.safe_string(transaction, 'fee')
3562
+ feeCostString = self.safe_string_2(transaction, 'fee', 'fee_amount')
3534
3563
  if type == 'withdrawal':
3535
3564
  amountString = Precise.string_sub(amountString, feeCostString)
3536
3565
  networkId = self.safe_string_upper(transaction, 'chain')
ccxt/htx.py CHANGED
@@ -5913,6 +5913,7 @@ class htx(Exchange, ImplicitAPI):
5913
5913
  def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
5914
5914
  """
5915
5915
  fetch all withdrawals made from an account
5916
+ :see: https://huobiapi.github.io/docs/spot/v1/en/#search-for-existed-withdraws-and-deposits
5916
5917
  :param str code: unified currency code
5917
5918
  :param int [since]: the earliest time in ms to fetch withdrawals for
5918
5919
  :param int [limit]: the maximum number of withdrawals structures to retrieve
@@ -6238,6 +6239,7 @@ class htx(Exchange, ImplicitAPI):
6238
6239
  def fetch_isolated_borrow_rates(self, params={}) -> IsolatedBorrowRates:
6239
6240
  """
6240
6241
  fetch the borrow interest rates of all currencies
6242
+ :see: https://huobiapi.github.io/docs/spot/v1/en/#get-loan-interest-rate-and-quota-isolated
6241
6243
  :param dict [params]: extra parameters specific to the exchange API endpoint
6242
6244
  :returns dict: a list of `isolated borrow rate structures <https://docs.ccxt.com/#/?id=isolated-borrow-rate-structure>`
6243
6245
  """
@@ -6448,6 +6450,8 @@ class htx(Exchange, ImplicitAPI):
6448
6450
  def fetch_funding_rate(self, symbol: str, params={}) -> FundingRate:
6449
6451
  """
6450
6452
  fetch the current funding rate
6453
+ :see: https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#query-funding-rate
6454
+ :see: https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-query-funding-rate
6451
6455
  :param str symbol: unified market symbol
6452
6456
  :param dict [params]: extra parameters specific to the exchange API endpoint
6453
6457
  :returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
@@ -6485,6 +6489,8 @@ class htx(Exchange, ImplicitAPI):
6485
6489
  def fetch_funding_rates(self, symbols: Strings = None, params={}) -> FundingRates:
6486
6490
  """
6487
6491
  fetch the funding rate for multiple markets
6492
+ :see: https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-query-a-batch-of-funding-rate
6493
+ :see: https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#query-a-batch-of-funding-rate
6488
6494
  :param str[]|None symbols: list of unified market symbols
6489
6495
  :param dict [params]: extra parameters specific to the exchange API endpoint
6490
6496
  :returns dict[]: a list of `funding rate structures <https://docs.ccxt.com/#/?id=funding-rates-structure>`, indexed by market symbols
ccxt/kucoinfutures.py CHANGED
@@ -52,6 +52,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
52
52
  'createDepositAddress': True,
53
53
  'createOrder': True,
54
54
  'createOrders': True,
55
+ 'createOrderWithTakeProfitAndStopLoss': True,
55
56
  'createReduceOnlyOrder': True,
56
57
  'createStopLimitOrder': True,
57
58
  'createStopLossOrder': True,
@@ -255,6 +256,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
255
256
  '400100': BadRequest, # Parameter Error -- You tried to access the resource with invalid parameters
256
257
  '411100': AccountSuspended, # User is frozen -- Please contact us via support center
257
258
  '500000': ExchangeNotAvailable, # Internal Server Error -- We had a problem with our server. Try again later.
259
+ '300009': InvalidOrder, # {"msg":"No open positions to close.","code":"300009"}
258
260
  },
259
261
  'broad': {
260
262
  'Position does not exist': OrderNotFound, # {"code":"200000", "msg":"Position does not exist"}
@@ -1372,12 +1374,15 @@ class kucoinfutures(kucoin, ImplicitAPI):
1372
1374
  """
1373
1375
  Create an order on the exchange
1374
1376
  :see: https://docs.kucoin.com/futures/#place-an-order
1377
+ :see: https://www.kucoin.com/docs/rest/futures-trading/orders/place-take-profit-and-stop-loss-order#http-request
1375
1378
  :param str symbol: Unified CCXT market symbol
1376
1379
  :param str type: 'limit' or 'market'
1377
1380
  :param str side: 'buy' or 'sell'
1378
1381
  :param float amount: the amount of currency to trade
1379
1382
  :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1380
1383
  :param dict [params]: extra parameters specific to the exchange API endpoint
1384
+ :param dict [params.takeProfit]: *takeProfit object in params* containing the triggerPrice at which the attached take profit order will be triggered
1385
+ :param dict [params.stopLoss]: *stopLoss object in params* containing the triggerPrice at which the attached stop loss order will be triggered
1381
1386
  :param float [params.triggerPrice]: The price a trigger order is triggered at
1382
1387
  :param float [params.stopLossPrice]: price to trigger stop-loss orders
1383
1388
  :param float [params.takeProfitPrice]: price to trigger take-profit orders
@@ -1399,12 +1404,16 @@ class kucoinfutures(kucoin, ImplicitAPI):
1399
1404
  market = self.market(symbol)
1400
1405
  testOrder = self.safe_bool(params, 'test', False)
1401
1406
  params = self.omit(params, 'test')
1407
+ isTpAndSlOrder = (self.safe_value(params, 'stopLoss') is not None) or (self.safe_value(params, 'takeProfit') is not None)
1402
1408
  orderRequest = self.create_contract_order_request(symbol, type, side, amount, price, params)
1403
1409
  response = None
1404
1410
  if testOrder:
1405
1411
  response = self.futuresPrivatePostOrdersTest(orderRequest)
1406
1412
  else:
1407
- response = self.futuresPrivatePostOrders(orderRequest)
1413
+ if isTpAndSlOrder:
1414
+ response = self.futuresPrivatePostStOrders(orderRequest)
1415
+ else:
1416
+ response = self.futuresPrivatePostOrders(orderRequest)
1408
1417
  #
1409
1418
  # {
1410
1419
  # "code": "200000",
@@ -1479,6 +1488,9 @@ class kucoinfutures(kucoin, ImplicitAPI):
1479
1488
  'leverage': 1,
1480
1489
  }
1481
1490
  triggerPrice, stopLossPrice, takeProfitPrice = self.handle_trigger_prices(params)
1491
+ stopLoss = self.safe_dict(params, 'stopLoss')
1492
+ takeProfit = self.safe_dict(params, 'takeProfit')
1493
+ # isTpAndSl = stopLossPrice and takeProfitPrice
1482
1494
  triggerPriceTypes: dict = {
1483
1495
  'mark': 'MP',
1484
1496
  'last': 'TP',
@@ -1486,11 +1498,22 @@ class kucoinfutures(kucoin, ImplicitAPI):
1486
1498
  }
1487
1499
  triggerPriceType = self.safe_string(params, 'triggerPriceType', 'mark')
1488
1500
  triggerPriceTypeValue = self.safe_string(triggerPriceTypes, triggerPriceType, triggerPriceType)
1489
- params = self.omit(params, ['stopLossPrice', 'takeProfitPrice', 'triggerPrice', 'stopPrice'])
1501
+ params = self.omit(params, ['stopLossPrice', 'takeProfitPrice', 'triggerPrice', 'stopPrice', 'takeProfit', 'stopLoss'])
1490
1502
  if triggerPrice:
1491
1503
  request['stop'] = 'up' if (side == 'buy') else 'down'
1492
1504
  request['stopPrice'] = self.price_to_precision(symbol, triggerPrice)
1493
1505
  request['stopPriceType'] = triggerPriceTypeValue
1506
+ elif stopLoss is not None or takeProfit is not None:
1507
+ priceType = triggerPriceTypeValue
1508
+ if stopLoss is not None:
1509
+ slPrice = self.safe_string_2(stopLoss, 'triggerPrice', 'stopPrice')
1510
+ request['triggerStopDownPrice'] = self.price_to_precision(symbol, slPrice)
1511
+ priceType = self.safe_string(stopLoss, 'triggerPriceType', triggerPriceTypeValue)
1512
+ if takeProfit is not None:
1513
+ tpPrice = self.safe_string_2(takeProfit, 'triggerPrice', 'takeProfitPrice')
1514
+ request['triggerStopUpPrice'] = self.price_to_precision(symbol, tpPrice)
1515
+ priceType = self.safe_string(stopLoss, 'triggerPriceType', triggerPriceTypeValue)
1516
+ request['stopPriceType'] = priceType
1494
1517
  elif stopLossPrice or takeProfitPrice:
1495
1518
  if stopLossPrice:
1496
1519
  request['stop'] = 'up' if (side == 'buy') else 'down'
ccxt/mexc.py CHANGED
@@ -2162,8 +2162,10 @@ class mexc(Exchange, ImplicitAPI):
2162
2162
  order = self.parse_order(response, market)
2163
2163
  order['side'] = side
2164
2164
  order['type'] = type
2165
- order['price'] = price
2166
- order['amount'] = amount
2165
+ if self.safe_string(order, 'price') is None:
2166
+ order['price'] = price
2167
+ if self.safe_string(order, 'amount') is None:
2168
+ order['amount'] = amount
2167
2169
  return order
2168
2170
 
2169
2171
  def create_swap_order(self, market, type, side, amount, price=None, marginMode=None, params={}):
ccxt/okx.py CHANGED
@@ -6827,6 +6827,7 @@ class okx(Exchange, ImplicitAPI):
6827
6827
  # "instType": "OPTION",
6828
6828
  # "oi": "300",
6829
6829
  # "oiCcy": "3",
6830
+ # "oiUsd": "3",
6830
6831
  # "ts": "1684551166251"
6831
6832
  # }
6832
6833
  #
@@ -6849,7 +6850,7 @@ class okx(Exchange, ImplicitAPI):
6849
6850
  else:
6850
6851
  baseVolume = self.safe_number(interest, 'oiCcy')
6851
6852
  openInterestAmount = self.safe_number(interest, 'oi')
6852
- openInterestValue = self.safe_number(interest, 'oiCcy')
6853
+ openInterestValue = self.safe_number(interest, 'oiUsd')
6853
6854
  return self.safe_open_interest({
6854
6855
  'symbol': self.safe_symbol(id),
6855
6856
  'baseVolume': baseVolume, # deprecated
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.17'
7
+ __version__ = '4.4.18'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/pro/bitget.py CHANGED
@@ -1079,7 +1079,7 @@ class bitget(ccxt.async_support.bitget):
1079
1079
  subType = None
1080
1080
  subType, params = self.handle_sub_type_and_params('watchOrders', market, params, 'linear')
1081
1081
  if (type == 'spot' or type == 'margin') and (symbol is None):
1082
- raise ArgumentsRequired(self.id + ' watchOrders requires a symbol argument for ' + type + ' markets.')
1082
+ marketId = 'default'
1083
1083
  if (productType is None) and (type != 'spot') and (symbol is None):
1084
1084
  messageHash = messageHash + ':' + subType
1085
1085
  elif productType == 'USDT-FUTURES':
@@ -1089,7 +1089,10 @@ class bitget(ccxt.async_support.bitget):
1089
1089
  elif productType == 'USDC-FUTURES':
1090
1090
  messageHash = messageHash + ':usdcfutures' # non unified channel
1091
1091
  instType = None
1092
- instType, params = self.get_inst_type(market, params)
1092
+ if market is None and type == 'spot':
1093
+ instType = 'SPOT'
1094
+ else:
1095
+ instType, params = self.get_inst_type(market, params)
1093
1096
  if type == 'spot':
1094
1097
  subscriptionHash = subscriptionHash + ':' + symbol
1095
1098
  if isTrigger:
@@ -1432,8 +1435,13 @@ class bitget(ccxt.async_support.bitget):
1432
1435
  market = self.market(symbol)
1433
1436
  symbol = market['symbol']
1434
1437
  messageHash = messageHash + ':' + symbol
1438
+ type = None
1439
+ type, params = self.handle_market_type_and_params('watchMyTrades', market, params)
1435
1440
  instType = None
1436
- instType, params = self.get_inst_type(market, params)
1441
+ if market is None and type == 'spot':
1442
+ instType = 'SPOT'
1443
+ else:
1444
+ instType, params = self.get_inst_type(market, params)
1437
1445
  subscriptionHash = 'fill:' + instType
1438
1446
  args: dict = {
1439
1447
  'instType': instType,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.4.17
3
+ Version: 4.4.18
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
@@ -271,13 +271,13 @@ console.log(version, Object.keys(exchanges));
271
271
 
272
272
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
273
273
 
274
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.17/dist/ccxt.browser.min.js
275
- * unpkg: https://unpkg.com/ccxt@4.4.17/dist/ccxt.browser.min.js
274
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.18/dist/ccxt.browser.min.js
275
+ * unpkg: https://unpkg.com/ccxt@4.4.18/dist/ccxt.browser.min.js
276
276
 
277
277
  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.
278
278
 
279
279
  ```HTML
280
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.17/dist/ccxt.browser.min.js"></script>
280
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.18/dist/ccxt.browser.min.js"></script>
281
281
  ```
282
282
 
283
283
  Creates a global `ccxt` object:
@@ -1,4 +1,4 @@
1
- ccxt/__init__.py,sha256=uv3YWaDd5C_hXF-Z1wqTwS73WYWb29AhRtk79NqtjMs,16486
1
+ ccxt/__init__.py,sha256=THfwR6NDwcGgdxz9vzmqx7Vy37R5UXGRP5Y3qwJpfDo,16486
2
2
  ccxt/ace.py,sha256=3KFlbRm6N9hXsKUsgZbQCFPZT5WGLm4HOjR19Q3uPts,42419
3
3
  ccxt/alpaca.py,sha256=nVQJ8vG4JrjEvMlu_nPoyR2lBq41j9Z2smPq95nDhng,47504
4
4
  ccxt/ascendex.py,sha256=aJ5_UysmRijYUvjenq5EDLldl2JUO6lXGofJ_NqPvJU,151676
@@ -8,7 +8,7 @@ ccxt/binance.py,sha256=E42-WB-h_tDxnrLO91lGmu1XSjXhEz6CJa7reSnwv3w,656225
8
8
  ccxt/binancecoinm.py,sha256=arFnEh8mErSyi23eVPWE4iwoT7PWQyxGGVJCKCy6UJY,1702
9
9
  ccxt/binanceus.py,sha256=HRsk0fIoi8AAFdzRCUMkkXUGLqBrf0guUOfUxupHFeY,9202
10
10
  ccxt/binanceusdm.py,sha256=bAPcJj5HLxoCdPolriM8sJpoTBwbV78vBTbKRmWhNP4,2632
11
- ccxt/bingx.py,sha256=BcBa8ifYpcvqQaibtPTQXwoWAtRxjxow1nRtuk4U2F0,251948
11
+ ccxt/bingx.py,sha256=tVF-rcE6N-hAqn9BvsA5rO6wPe9XjGnq8MOuMoIFtd8,252027
12
12
  ccxt/bit2c.py,sha256=Y_YHvg90Sq3CayQ2lr1_wLYwz4wGR7G3NJARiv_jX8M,37254
13
13
  ccxt/bitbank.py,sha256=npoyV3c8uJ36nKofSzpMri590Yj_DIH0FAZg8o2EW6Y,43709
14
14
  ccxt/bitbay.py,sha256=xAIjzGRDVGwoy-Gygd99H0YN4wiaz_0lR0Z14oxaaxc,478
@@ -19,12 +19,12 @@ ccxt/bitfinex2.py,sha256=9ad6ebvgThHIBhFmfp0MZIhyYkGBoIrudoLyyiz8cQ4,160817
19
19
  ccxt/bitflyer.py,sha256=nh1EDzO66S-Ps9xBy-U4CErt6Q06E77wbWF_aTRw6RI,41663
20
20
  ccxt/bitget.py,sha256=XRd-BZbOvu12RTQoYdE1dCqng8_lM5AkGH9fTWdAU-4,428677
21
21
  ccxt/bithumb.py,sha256=8oTnFWi8Ai9fnm5FPXvNmaUAVJEOqYi-18VC23cWmXY,47935
22
- ccxt/bitmart.py,sha256=TX2Z2WisUvo6te-dlwR067wRKbDO6FnGJiDuYxR1ksE,222099
22
+ ccxt/bitmart.py,sha256=8D8pFVsaEMJZ5PQuheTigQ_-BEfHyvieIxwlM9o1-Yw,222097
23
23
  ccxt/bitmex.py,sha256=w87ovaOQNJxtycsW4N7dpDzyh5AAPo5qnNS3TyBjppk,127407
24
24
  ccxt/bitopro.py,sha256=XV878befM45AOnlSRpMYTnaBol342JAYWbFshvJ9fvs,69358
25
25
  ccxt/bitpanda.py,sha256=aiwPkx9lKbVzt4ggoYdq_mIbMGtg5ZtGl2yRHO5xyz8,471
26
26
  ccxt/bitrue.py,sha256=NQS636RfId1YBEEK2ZaI4rcdbB7L0vSU9AAoOinIJUA,136386
27
- ccxt/bitso.py,sha256=oLutbN5CT6lV0HxJaF-ibItY-sE_-wIVIkkqrkZpmSA,71785
27
+ ccxt/bitso.py,sha256=QCYRoP9heyMzlV7qDDC_I2ipO86_ZNr7sg9259h2kpg,71756
28
28
  ccxt/bitstamp.py,sha256=W9stgPLf-N5utFoYWdaTzzqBPtzAZWN5u2nMwogzdRY,93437
29
29
  ccxt/bitteam.py,sha256=S5gDVlmAqoK_bOuCUmfyStFAApq2kDxQaUHHDf4byQM,102264
30
30
  ccxt/bitvavo.py,sha256=y7TzNtYqWl5Y-91Q_lazQiw4RoK5r9XbuHhF3RIh688,91855
@@ -56,14 +56,14 @@ ccxt/deribit.py,sha256=x1TVHGfPxm9jL1Woxb-sLWZ-UdeGMiuVy4bdQGNRBO8,161694
56
56
  ccxt/digifinex.py,sha256=HUxkYS2UbrAqiPuzPPMBMFLEahiIuiOElGDxRt4Gk7o,171005
57
57
  ccxt/exmo.py,sha256=uCv9bsFzelhAHi_tIQe75X30csJvYizuCK09vU3NC4g,114777
58
58
  ccxt/fmfwio.py,sha256=RbVLvzPwnqfDsE7Ea-N13ISCC82eJVPsXYjrleASmew,1236
59
- ccxt/gate.py,sha256=UnzN27zczxQT98O2U0TpAXOm_sWkB_bMRCPnVLN80tU,330492
59
+ ccxt/gate.py,sha256=AnKqnk4Ut7GNOJm-j7jvxNlE9_snkJXLoRusYa78JAI,331528
60
60
  ccxt/gateio.py,sha256=86AETJWODl_vA5VNeQRHZprmpNIY1HAxCddKZcnKSi8,445
61
61
  ccxt/gemini.py,sha256=cFAHx-qA26A9WMJ3i6f_uQH83Q4k6UDwS8zBQcLI5Fs,81056
62
62
  ccxt/hashkey.py,sha256=LMV9wPTn2_qT2om74OdF-IfHreaySxNHOilsNDrgB7Q,192148
63
63
  ccxt/hitbtc.py,sha256=K9K0bcRffitBmnRgKKwRR09WCFE6Yj58FbwrJW6LlKU,153613
64
64
  ccxt/hitbtc3.py,sha256=qRAr4Zvaju9IQWRZUohdoN7xRnzIMPq8AyYb3gPv-Is,455
65
65
  ccxt/hollaex.py,sha256=bGaqSEwR42i1etwXgSYbluStoyKcIbuj4Qx-YQkVUhM,76255
66
- ccxt/htx.py,sha256=F0NrqFVXPpRtoFlvXR8u5cxTYZ_ldlZQh8zGDbh8qlw,432573
66
+ ccxt/htx.py,sha256=a44Qg0Jf12QM9FRdpjM5zxB569l-CRsOzmhKvNzKEAE,433157
67
67
  ccxt/huobi.py,sha256=4vaG7IRN7fyjaJ_ac6S-njlHOfSEN5de7aq0noznxYw,438
68
68
  ccxt/huobijp.py,sha256=Kw1HQhoox1qp-bEiGpCcJSg1UAhPVLRRi-BRbQLMljI,89741
69
69
  ccxt/hyperliquid.py,sha256=OrUSVmr0fL0y4h8sSZGhNWS2kcPvmeCLs0yVxMt8WDo,123008
@@ -73,19 +73,19 @@ ccxt/indodax.py,sha256=QPH7sQzhqOFwq6g_xCAMcgnrpVVRl49zf_uolywxuX8,54798
73
73
  ccxt/kraken.py,sha256=qOJz1jNl7wKqvonYdPCqWIbj7uKfsPY1qSVXllc5w6Y,135904
74
74
  ccxt/krakenfutures.py,sha256=dbreVGrjMD7AY6xai0eazuvnUpTXTD7wLDVT9VDD5Qk,119839
75
75
  ccxt/kucoin.py,sha256=tdNUENPhjXh6xJm5ybDQhQTrCC0x6WDzrcFeGZiQFYU,231781
76
- ccxt/kucoinfutures.py,sha256=rpXIhIf1uAMKkyhY4_JzwQAv83n8EwTngY1LizWojaA,135136
76
+ ccxt/kucoinfutures.py,sha256=DDzCt5NCzYR7O8HbEZFr389-EOerZZkzhSnM1cLvJf0,136962
77
77
  ccxt/kuna.py,sha256=wL4QciCkKXgOSnmMP2mkSq9HlL7Gsz-c2s75rH5YZkA,96074
78
78
  ccxt/latoken.py,sha256=wBhaMcTEsB316nFCxm_WbLRZ_G2Q0Vi1FK-850Q07D0,79516
79
79
  ccxt/lbank.py,sha256=bBnT07L-6RHbmWwvyxZvbAfwP7lRKe6TSrDveyLZabA,116250
80
80
  ccxt/luno.py,sha256=P3cZ_CnVyjMjDFn5e7jaev-pqs_rgmWQTsiJThRtffE,46353
81
81
  ccxt/lykke.py,sha256=3la3ckeV8v_i7UdspYRJRwQ9ZzyHph88JK01kgXOeX8,51550
82
82
  ccxt/mercado.py,sha256=LWCh89IzXu-yhPGqhkdPW6wqOqfO8nmbSQhAyYiSH8U,35710
83
- ccxt/mexc.py,sha256=Kxowi1HvM9HUyukCa3xto2HI9mwdpEP0r0JgGFce66U,252873
83
+ ccxt/mexc.py,sha256=s2-BAPVCWeK61OoyBqIomCTOXzzmHKa29zLA_3bCR3w,252988
84
84
  ccxt/ndax.py,sha256=EHlxGEi6RKnz2IDLdEGj8V4yVt8exliTJiP46J40a_8,110430
85
85
  ccxt/novadax.py,sha256=_xFkuZ72vHhpJb1N9h_MQHRD05GDWlqUeLQQcOp43BM,64436
86
86
  ccxt/oceanex.py,sha256=NRL1VUBdpkAZj0qFov-HB_TEwmIX6lyz3RdCW53B66A,41178
87
87
  ccxt/okcoin.py,sha256=Dvn7kOe6pvFLqkq3zA7DTWPQB6HmzoNLZ5tAeZ8gWwA,151307
88
- ccxt/okx.py,sha256=qKpTtxqGxVtIGkKHzjceu1FZRdPTP4VBiHJtyh5A6rM,384437
88
+ ccxt/okx.py,sha256=VlbeY0W1PYhi9yxabPO29-aqcqm6p6CElR48OAtPv44,384469
89
89
  ccxt/onetrading.py,sha256=0yQ1MNVcTrHlWYVU_D3FmeHkK1FT35zFans6e9KeRxA,88480
90
90
  ccxt/oxfun.py,sha256=uFrS6oO6rvyXmocqPwAxVzczg0IG-BZeqRmNcNcTTig,124875
91
91
  ccxt/p2b.py,sha256=iPzHv663K8F1F0uTWEYpfQBcaqowY8MQ5tZt2ZNpoQE,54290
@@ -218,7 +218,7 @@ ccxt/abstract/xt.py,sha256=JkWvsic3L2O968BCr9H5Wd5NIbRE9aTT2A-9WbAtl0c,27146
218
218
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
219
219
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
220
220
  ccxt/abstract/zonda.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
221
- ccxt/async_support/__init__.py,sha256=CVF8rT4aKLXfiJUecRf1V28xpxzZQIq2k3aQ5uIsipM,16289
221
+ ccxt/async_support/__init__.py,sha256=u3yINwWv4i6MFkxdKAwBHN2UkshEQhJbaHEyTSIq55w,16289
222
222
  ccxt/async_support/ace.py,sha256=ucCkKaWRkILAIK9g4iEi1Q_-zmn0V89-rX8Al4WdK8s,42643
223
223
  ccxt/async_support/alpaca.py,sha256=HxonsP_MzbE7Z9r6hZ1rgmf_jPcP4H7H3z1YQgCv4qc,47716
224
224
  ccxt/async_support/ascendex.py,sha256=YcGVveIDir8A1rDak-DdS_qVO1yPwAUX9sRDwCVNX80,152489
@@ -228,7 +228,7 @@ ccxt/async_support/binance.py,sha256=tBCGXhs4h9fLdHD1lUZJrsOCDxmI0gAe89eoLrf_MbA
228
228
  ccxt/async_support/binancecoinm.py,sha256=yeE73xG5UXD_X3VPul6DMGnV_mgJfWYskpas1BUDdCU,1740
229
229
  ccxt/async_support/binanceus.py,sha256=ZkGgQGB0bWYZTz7PqBCgw22yyOZbvd7GuJAJzzgDTCA,9216
230
230
  ccxt/async_support/binanceusdm.py,sha256=8ugRkx7vyYmn67wdkEEf2f-DFMGAoC4t09usKlPVNyw,2670
231
- ccxt/async_support/bingx.py,sha256=8E-o-A9dPYiPNi0gSNlp5YLcDSgLS6JfdOrTFGDXX5U,253266
231
+ ccxt/async_support/bingx.py,sha256=10mn26VEuzB9EvPbb9i9dGbx5_3moC8lxprXeKi7q4Y,253345
232
232
  ccxt/async_support/bit2c.py,sha256=8gA0VW3_617LwqCNliJnhjpjtwXAGxv7FsEn9805XOc,37466
233
233
  ccxt/async_support/bitbank.py,sha256=DOBazUZetD7gxURy42C3m-T-YK-zvYIkcUjHqJggkGU,43969
234
234
  ccxt/async_support/bitbay.py,sha256=jcaEXi2IhYTva8ezO_SfJhwxEZk7HST4J3NaxD16BQA,492
@@ -239,12 +239,12 @@ ccxt/async_support/bitfinex2.py,sha256=QSp4PkXhNkTMHEILoQH8UipJ4EgPzNSHiDfI9y5QH
239
239
  ccxt/async_support/bitflyer.py,sha256=DTyHe4QBOED0xUEYoDfpGFL0sULp_3CxTXCWfDPbGbE,41971
240
240
  ccxt/async_support/bitget.py,sha256=OJWGHwSQ-c9KXT6Hylaq_T9XKVBo16AYdM6o4B0o9x8,430325
241
241
  ccxt/async_support/bithumb.py,sha256=Q0Cx_cRKZRfdpBAhQyINm63Qw3M6BRYQRiF0UqYzfis,48214
242
- ccxt/async_support/bitmart.py,sha256=r4xsESjPXqdEXeVWlw9eo-4WS2kEoB_naTCstiAXEQI,223091
242
+ ccxt/async_support/bitmart.py,sha256=WNfWDZvw8lgzC8WGvuR67-07uqtt_woyfVPeua3IhXQ,223089
243
243
  ccxt/async_support/bitmex.py,sha256=j9ohrBbNDcfR67QnPuuqrqz3pxEHpVtb0WhRKPPCYQ8,127985
244
244
  ccxt/async_support/bitopro.py,sha256=uWrH_HdRkf0UCs-N_JE1hCN6eWYWwXpc8VXMb0niM78,69762
245
245
  ccxt/async_support/bitpanda.py,sha256=2k3URBWrpnh2xHa7JiYenI7_4MW5UeOPGzetlmRkR4U,485
246
246
  ccxt/async_support/bitrue.py,sha256=owSEnJYp47wZRP8dj_lpR-r7aqyhy0nnNI9vzd79P64,137044
247
- ccxt/async_support/bitso.py,sha256=XSMfOYCTmjHT1WkocYQsfj2lHOix5D4jEJVB3ZBIFzM,72171
247
+ ccxt/async_support/bitso.py,sha256=tOH9mzu5fh-eI1D5p4hFRGXcKH2sHDNt1kdzcbFngKk,72142
248
248
  ccxt/async_support/bitstamp.py,sha256=zDgKXyHsLLPYg7SlKrpxs6BNjPgM5QtUo38Yuyp1txQ,93937
249
249
  ccxt/async_support/bitteam.py,sha256=vPMTVr0bDCd5okV_tFA9gVVW4a5NmsabvEplOm2-uOo,102596
250
250
  ccxt/async_support/bitvavo.py,sha256=lLv-0-cCdr-XfdDRHYIVzppUUeGEJMq0Q-Jz91NrvGQ,92289
@@ -276,14 +276,14 @@ ccxt/async_support/deribit.py,sha256=HEqDGpYgre-vZyb5wr1RzjiZ_ZSeY29geRMWSxga9dw
276
276
  ccxt/async_support/digifinex.py,sha256=RaYiL8nPU0HkyJ0XxkZBBTJ36JBGRmmjcFvHxlKN7ug,171987
277
277
  ccxt/async_support/exmo.py,sha256=HNrYN1fOnvhB26u-epXzK2xs3AqPUAgTmdRTtFu-dzw,115409
278
278
  ccxt/async_support/fmfwio.py,sha256=lzfSnPrB2ARcC3EIqAuBM4vyg6LJ6n8RE71Zvt3ez1s,1250
279
- ccxt/async_support/gate.py,sha256=TJPoNK-P5wZiKlInpPPIi92cEx7OvMtihgnL7IqIP6I,332235
279
+ ccxt/async_support/gate.py,sha256=UfaQfAZatglCxEiUUK3UPhua808I7fvAgTqj4kC8h8g,333271
280
280
  ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
281
281
  ccxt/async_support/gemini.py,sha256=gy0ALSeHrenXa2aJoAW1alVOgF6rUNxUoydX5Degikc,81580
282
282
  ccxt/async_support/hashkey.py,sha256=XaSBqm0eh3R_2HCbOCZWaLuqJwVg5DJbttvfFYJpNZA,192990
283
283
  ccxt/async_support/hitbtc.py,sha256=wWHmgPCEBLf0nj-unVu1LtkRPgZvjil22I4S79a-VA8,154659
284
284
  ccxt/async_support/hitbtc3.py,sha256=dmSYoD2o4av_zzbZI8HNIoj8BWxA7QozsVpy8JaOXzU,469
285
285
  ccxt/async_support/hollaex.py,sha256=k_KeUA5jEiyA7ypOAZsYL4RBonNG6dYxb50mpvWw_qQ,76689
286
- ccxt/async_support/htx.py,sha256=aZa9LTmbM14E29meESdv6TAS3W2afM416BaGkNV6_io,434965
286
+ ccxt/async_support/htx.py,sha256=302cQcXh04xpbmTL2Cvr3Mrd0F-Agzyv200O9nV4Rtw,435549
287
287
  ccxt/async_support/huobi.py,sha256=fup0j6wQ1khAtfbb1H4CSyJAOzhxuoHMmrM6sgTuhr8,452
288
288
  ccxt/async_support/huobijp.py,sha256=4Pj8qPn2xzzyvdsy08gnbiF-eSKXQNT0p6VIOVkpisM,90241
289
289
  ccxt/async_support/hyperliquid.py,sha256=WRSTtjvdVi68iZ67DcESlrfG8gGVwaGLK4MfZaPyYIo,123672
@@ -293,19 +293,19 @@ ccxt/async_support/indodax.py,sha256=_7AbcJJmBSPMQ1E-mqOoQJXTjIXldItRMDFCdwhvFuA
293
293
  ccxt/async_support/kraken.py,sha256=F1NRf8PFqrzM-XQzf81sjpAER8mz1aYIgP4M5kO_DfQ,136560
294
294
  ccxt/async_support/krakenfutures.py,sha256=Wcry7ar4Esbi_3Urp8LcnzPMsThN6KcdU6QN5YMxDCk,120327
295
295
  ccxt/async_support/kucoin.py,sha256=cE0IuoIdGeYcGBr19iRPHPy8dYJnJS-5cPvAENhBKX8,232960
296
- ccxt/async_support/kucoinfutures.py,sha256=pRdx9vnlvXH19SqYNpfQcUtZltduZEKNQxaSnY5054k,135894
296
+ ccxt/async_support/kucoinfutures.py,sha256=gV8D1Wqt8jUNEd7O1UWuAYeqj1W8EK0MEpX6uhJ5w-k,137726
297
297
  ccxt/async_support/kuna.py,sha256=_8S74LqI1c5zbCbaSfJgUsVyqus9gB2OV9s3UMXkzYQ,96490
298
298
  ccxt/async_support/latoken.py,sha256=9BUu8akWtbBtAzVr_c_cYLkiLQqcJdSdkJbHmuLee-Y,79992
299
299
  ccxt/async_support/lbank.py,sha256=xWUzIsFFAV_yd0Igo3CimSys6z-AoQH88oQ0zzBb1w0,116962
300
300
  ccxt/async_support/luno.py,sha256=WRQ5uH3Wr1HHZa9ZtcWCYdrmz-Y8proS5XOGZpBtiZo,46691
301
301
  ccxt/async_support/lykke.py,sha256=E5n93dUuUShGO8wXogPMQkotguYpJFWM12aT_lTwEoM,51864
302
302
  ccxt/async_support/mercado.py,sha256=mb7ULqvEr9PQ7jBOpQxiufgYzwTeAfr0G2NZmrUeUgs,35952
303
- ccxt/async_support/mexc.py,sha256=FcPqE7YNeZ9cIwZmsLuttwwnaCVVTbFbr19EEVEMAUg,254137
303
+ ccxt/async_support/mexc.py,sha256=BvSdcWMZwcyOT1iNMLg41ZHTO7ejxdlOw5E2mRSnngk,254252
304
304
  ccxt/async_support/ndax.py,sha256=V157f9E_-NzmEwRxCpxN9Th_9TIlU9EJOgRYxLfss9E,110954
305
305
  ccxt/async_support/novadax.py,sha256=YNKUM1CGFK7lpBwbxSSL1IAEJCRVsNxeITkwtw6VWCM,64804
306
306
  ccxt/async_support/oceanex.py,sha256=U9VJN3Sym8GEZUqkmIt8yDzVw9XRc-WtSj35R1Fdv_U,41516
307
307
  ccxt/async_support/okcoin.py,sha256=Vwbq1Sf1RiYHOehTkvIuet7vqskMyiFj4j-OTpjxRZg,151831
308
- ccxt/async_support/okx.py,sha256=qhvWDOm1vb6m8yscwAhqvDN8LJ4j4-wgasQK0lKovHE,386078
308
+ ccxt/async_support/okx.py,sha256=S930QDVp31bL36zFBUIae_zSsVpdAtvA3wfXMXN3R54,386110
309
309
  ccxt/async_support/onetrading.py,sha256=FNOJlpBOGHu51EKhdFJPxNNHWPTIw_OcVzBf83UlR-w,88932
310
310
  ccxt/async_support/oxfun.py,sha256=26g7I24m8le35qcEqFVZGfiEv3sP3pOIu53724Bz5k0,125419
311
311
  ccxt/async_support/p2b.py,sha256=VKUX8u7gtHkKDwBjAyskScm2FEs6xxDuKLXE-jSHXwY,54532
@@ -330,7 +330,7 @@ ccxt/async_support/yobit.py,sha256=YtkLczlb641VjUYTfEMfS-BPUTdXQTHAPkearuXkXDQ,5
330
330
  ccxt/async_support/zaif.py,sha256=-ZTr8M2JaIRCL90VrbCDXBMAsZwbiwsFChSQ2rWODuQ,29044
331
331
  ccxt/async_support/zonda.py,sha256=Z4gA6o0bF_4MarQ5KiR2Zwi2wpmOuZTHS1JChAtNWjo,83114
332
332
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
333
- ccxt/async_support/base/exchange.py,sha256=jKS-8YGNqKzbRDuD5wo8464UXLTUhPeTXUiaiI1_SIU,113443
333
+ ccxt/async_support/base/exchange.py,sha256=ukRA0XZr1vZzcCc5Ceif9QUbR6fU-utw7qJbS5Y3Myo,113443
334
334
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
335
335
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
336
336
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=5IEiT0elWI9a7Vr-KV0jgmlbpLJWBzIlrLaCkTKGaqY,5752
@@ -344,10 +344,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9produGjmB
344
344
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
345
345
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
346
346
  ccxt/base/errors.py,sha256=Pad-6ugvGUwhoYuKUliX-N7FTrcnKCQGFjsaq2tMn0I,4610
347
- ccxt/base/exchange.py,sha256=nnsBDSDEeOQZhpjtJogbkCWStKk57GDDatgIKe1BSm0,301504
347
+ ccxt/base/exchange.py,sha256=w4qXTWNocoLFmbyOWbAmP5f2iR33J-O_E6i8M__Zebo,301504
348
348
  ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
349
349
  ccxt/base/types.py,sha256=jxuyz7pMvNPfV_iOHhHdI_41AH0_ZTtmDn9BxaKw5Fk,9796
350
- ccxt/pro/__init__.py,sha256=y4HCofxJOMHyqIa39MKeGJ9GsyewWQXk1372pJk5yDo,7710
350
+ ccxt/pro/__init__.py,sha256=8Py7DJNZ_lqMH3O0BEX0lZ7jU3HMXIcglkWoB98ql_M,7710
351
351
  ccxt/pro/alpaca.py,sha256=xh1yg1Ok-Zh_Mfx-MBjNrfJDs6MUU0exFfEj3GuQPC4,27631
352
352
  ccxt/pro/ascendex.py,sha256=QueLgISoIxgGSOta2W7En4pwAsEXbTP5q5ef4UjpTQQ,37524
353
353
  ccxt/pro/bequant.py,sha256=33OEUWBi4D9-2w8CmkwN3aF1qS-AlLqX3pxrWwNbXPY,1552
@@ -359,7 +359,7 @@ ccxt/pro/bingx.py,sha256=Nj0sPJtM5hRmyI3Azo0E9bimvMYRaCkG1kiaVNjj1_8,60901
359
359
  ccxt/pro/bitcoincom.py,sha256=zAX6hiz4hS6Un8dSGp88rpnvItxQHfNmsfF0IZ2xIVA,1181
360
360
  ccxt/pro/bitfinex.py,sha256=pvwMA7w-Sv45XyRcEEIXXKXBl2kC8rvl8D1KXnoont4,25329
361
361
  ccxt/pro/bitfinex2.py,sha256=H2evIdXrXaHpmvlqoPCOqADYjiHqvZVLf9EnbYHBOj8,43106
362
- ccxt/pro/bitget.py,sha256=IcXYY1ZC_1AagkJY7FSEoCYkxQUZv1H6GaGFP3fetuM,87712
362
+ ccxt/pro/bitget.py,sha256=hjkmOakTISKB28lyZEsf4dwCRHB9l8Uq0_H9RLhE53c,87929
363
363
  ccxt/pro/bithumb.py,sha256=cAiRpOT1kxlpphu7xd6NYH43j7of_kXXy0M9YqXeat4,17411
364
364
  ccxt/pro/bitmart.py,sha256=yYi-9twsMTIlZU-UabQF91tuMCnYeEEVibHmy2l4lFw,65984
365
365
  ccxt/pro/bitmex.py,sha256=J9pn0llcUkAjAfuBbMFd7-VzfnVSx8woIMAkLK58qss,74569
@@ -650,8 +650,8 @@ ccxt/test/tests_async.py,sha256=IOkbqZXUViJ1KtDIlE63EZaU3z31_OR2iI6yL0azKL0,8500
650
650
  ccxt/test/tests_helpers.py,sha256=z5TiaK0WyUCmM_uGTFz7cgMNqNwG_SMI9qk7yec5ces,9693
651
651
  ccxt/test/tests_init.py,sha256=GodMIrJue4KBHHqD4vSPZxokPWpxbZIuEp19UdxlFAg,1166
652
652
  ccxt/test/tests_sync.py,sha256=c9hEBBjaLRJ-rqGiR-SpVUXcFJsvrZ7mxhLKb7TJWEc,84062
653
- ccxt-4.4.17.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
654
- ccxt-4.4.17.dist-info/METADATA,sha256=Tkq8FceEGI26fo00lFCMOOCZ5z4wxFZpDTz1ZQXpTkw,114487
655
- ccxt-4.4.17.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
656
- ccxt-4.4.17.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
657
- ccxt-4.4.17.dist-info/RECORD,,
653
+ ccxt-4.4.18.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
654
+ ccxt-4.4.18.dist-info/METADATA,sha256=NqPRzHKuXqRoIaLyB__Fg9seZ2KbRPANUVKm5HysILg,114487
655
+ ccxt-4.4.18.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
656
+ ccxt-4.4.18.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
657
+ ccxt-4.4.18.dist-info/RECORD,,
File without changes