ccxt 4.1.89__py2.py3-none-any.whl → 4.1.90__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.

Potentially problematic release.


This version of ccxt might be problematic. Click here for more details.

Files changed (49) hide show
  1. ccxt/__init__.py +1 -1
  2. ccxt/async_support/__init__.py +1 -1
  3. ccxt/async_support/base/exchange.py +3 -3
  4. ccxt/async_support/binance.py +1 -1
  5. ccxt/async_support/bitforex.py +2 -0
  6. ccxt/async_support/bitget.py +9 -4
  7. ccxt/async_support/bitmex.py +2 -0
  8. ccxt/async_support/blockchaincom.py +0 -37
  9. ccxt/async_support/bybit.py +23 -14
  10. ccxt/async_support/coinlist.py +2 -0
  11. ccxt/async_support/coinsph.py +2 -0
  12. ccxt/async_support/cryptocom.py +2 -0
  13. ccxt/async_support/gate.py +258 -11
  14. ccxt/async_support/htx.py +223 -207
  15. ccxt/async_support/kuna.py +2 -0
  16. ccxt/async_support/mexc.py +2 -0
  17. ccxt/async_support/okcoin.py +3 -1
  18. ccxt/async_support/phemex.py +48 -1
  19. ccxt/async_support/poloniex.py +23 -2
  20. ccxt/async_support/tokocrypto.py +2 -0
  21. ccxt/async_support/wazirx.py +2 -0
  22. ccxt/async_support/whitebit.py +2 -0
  23. ccxt/base/exchange.py +3 -3
  24. ccxt/binance.py +1 -1
  25. ccxt/bitforex.py +2 -0
  26. ccxt/bitget.py +9 -4
  27. ccxt/bitmex.py +2 -0
  28. ccxt/blockchaincom.py +0 -37
  29. ccxt/bybit.py +23 -14
  30. ccxt/coinlist.py +2 -0
  31. ccxt/coinsph.py +2 -0
  32. ccxt/cryptocom.py +2 -0
  33. ccxt/gate.py +258 -11
  34. ccxt/htx.py +223 -207
  35. ccxt/kuna.py +2 -0
  36. ccxt/mexc.py +2 -0
  37. ccxt/okcoin.py +3 -1
  38. ccxt/phemex.py +48 -1
  39. ccxt/poloniex.py +23 -2
  40. ccxt/pro/__init__.py +1 -1
  41. ccxt/pro/binance.py +6 -6
  42. ccxt/pro/poloniex.py +15 -11
  43. ccxt/tokocrypto.py +2 -0
  44. ccxt/wazirx.py +2 -0
  45. ccxt/whitebit.py +2 -0
  46. {ccxt-4.1.89.dist-info → ccxt-4.1.90.dist-info}/METADATA +4 -4
  47. {ccxt-4.1.89.dist-info → ccxt-4.1.90.dist-info}/RECORD +49 -49
  48. {ccxt-4.1.89.dist-info → ccxt-4.1.90.dist-info}/WHEEL +0 -0
  49. {ccxt-4.1.89.dist-info → ccxt-4.1.90.dist-info}/top_level.txt +0 -0
@@ -101,6 +101,8 @@ class kuna(Exchange, ImplicitAPI):
101
101
  'fetchWithdrawal': True,
102
102
  'fetchWithdrawals': True,
103
103
  'reduceMargin': False,
104
+ 'repayCrossMargin': False,
105
+ 'repayIsolatedMargin': False,
104
106
  'setLeverage': False,
105
107
  'setMargin': False,
106
108
  'setMarginMode': False,
@@ -120,6 +120,8 @@ class mexc(Exchange, ImplicitAPI):
120
120
  'fetchWithdrawal': None,
121
121
  'fetchWithdrawals': True,
122
122
  'reduceMargin': True,
123
+ 'repayCrossMargin': False,
124
+ 'repayIsolatedMargin': False,
123
125
  'setLeverage': True,
124
126
  'setMarginMode': None,
125
127
  'setPositionMode': True,
@@ -1383,7 +1383,7 @@ class okcoin(Exchange, ImplicitAPI):
1383
1383
  request['tgtCcy'] = tgtCcy
1384
1384
  if isMarketOrder or marketIOC:
1385
1385
  request['ordType'] = 'market'
1386
- if (side == 'buy'):
1386
+ if side == 'buy':
1387
1387
  # spot market buy: "sz" can refer either to base currency units or to quote currency units
1388
1388
  # see documentation: https://www.okx.com/docs-v5/en/#rest-api-trade-place-order
1389
1389
  if tgtCcy == 'quote_ccy':
@@ -1408,6 +1408,8 @@ class okcoin(Exchange, ImplicitAPI):
1408
1408
  request['sz'] = quoteAmount
1409
1409
  else:
1410
1410
  request['sz'] = self.amount_to_precision(symbol, amount)
1411
+ else:
1412
+ request['sz'] = self.amount_to_precision(symbol, amount)
1411
1413
  else:
1412
1414
  request['sz'] = self.amount_to_precision(symbol, amount)
1413
1415
  if (not trigger) and (not conditional):
@@ -100,7 +100,7 @@ class phemex(Exchange, ImplicitAPI):
100
100
  'setMarginMode': True,
101
101
  'setPositionMode': True,
102
102
  'transfer': True,
103
- 'withdraw': None,
103
+ 'withdraw': True,
104
104
  },
105
105
  'urls': {
106
106
  'logo': 'https://user-images.githubusercontent.com/1294454/85225056-221eb600-b3d7-11ea-930d-564d2690e3f6.jpg',
@@ -239,6 +239,7 @@ class phemex(Exchange, ImplicitAPI):
239
239
  'assets/spots/sub-accounts/transfer': 5, # ?currency=<currency>&start=<start>&end=<end>&limit=<limit>&offset=<offset>
240
240
  'assets/futures/sub-accounts/transfer': 5, # ?currency=<currency>&start=<start>&end=<end>&limit=<limit>&offset=<offset>
241
241
  'assets/quote': 5, # ?fromCurrency=<currency>&toCurrency=<currency>&amountEv=<amount>
242
+ # deposit/withdraw
242
243
  },
243
244
  'post': {
244
245
  # spot
@@ -482,6 +483,16 @@ class phemex(Exchange, ImplicitAPI):
482
483
  'spot': 'spot',
483
484
  'swap': 'future',
484
485
  },
486
+ 'stableCoins': [
487
+ 'BUSD',
488
+ 'FEI',
489
+ 'TUSD',
490
+ 'USD',
491
+ 'USDC',
492
+ 'USDD',
493
+ 'USDP',
494
+ 'USDT',
495
+ ],
485
496
  'transfer': {
486
497
  'fillResponseFromRequest': True,
487
498
  },
@@ -4227,6 +4238,42 @@ class phemex(Exchange, ImplicitAPI):
4227
4238
  sorted = self.sort_by(result, 'timestamp')
4228
4239
  return self.filter_by_symbol_since_limit(sorted, symbol, since, limit)
4229
4240
 
4241
+ async def withdraw(self, code: str, amount, address, tag=None, params={}):
4242
+ """
4243
+ make a withdrawal
4244
+ :see: https://phemex-docs.github.io/#create-withdraw-request
4245
+ :param str code: unified currency code
4246
+ :param float amount: the amount to withdraw
4247
+ :param str address: the address to withdraw to
4248
+ :param str tag:
4249
+ :param dict [params]: extra parameters specific to the phemex api endpoint
4250
+ :param str [params.network]: unified network code
4251
+ :returns dict: a `transaction structure <https://github.com/ccxt/ccxt/wiki/Manual#transaction-structure>`
4252
+ """
4253
+ tag, params = self.handle_withdraw_tag_and_params(tag, params)
4254
+ await self.load_markets()
4255
+ self.check_address(address)
4256
+ currency = self.currency(code)
4257
+ networkCode = None
4258
+ networkCode, params = self.handle_network_code_and_params(params)
4259
+ networkId = self.network_code_to_id(networkCode)
4260
+ stableCoins = self.safe_value(self.options, 'stableCoins')
4261
+ if networkId is None:
4262
+ if not (self.in_array(code, stableCoins)):
4263
+ networkId = currency['id']
4264
+ else:
4265
+ raise ArgumentsRequired(self.id + ' withdraw() requires an extra argument params["network"]')
4266
+ request = {
4267
+ 'currency': currency['id'],
4268
+ 'address': address,
4269
+ 'amount': amount,
4270
+ 'chainName': networkId.upper(),
4271
+ }
4272
+ if tag is not None:
4273
+ request['tag'] = tag
4274
+ response = await self.privatePostPhemexWithdrawWalletsApiCreateWithdraw(self.extend(request, params))
4275
+ return self.parse_transaction(response, currency)
4276
+
4230
4277
  def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
4231
4278
  if response is None:
4232
4279
  return None # fallback to default error handler
@@ -47,6 +47,9 @@ class poloniex(Exchange, ImplicitAPI):
47
47
  'cancelAllOrders': True,
48
48
  'cancelOrder': True,
49
49
  'createDepositAddress': True,
50
+ 'createMarketBuyOrderWithCost': True,
51
+ 'createMarketOrderWithCost': False,
52
+ 'createMarketSellOrderWithCost': False,
50
53
  'createOrder': True,
51
54
  'editOrder': True,
52
55
  'fetchBalance': True,
@@ -240,6 +243,7 @@ class poloniex(Exchange, ImplicitAPI):
240
243
  'UST': 'USTC',
241
244
  },
242
245
  'options': {
246
+ 'createMarketBuyOrderRequiresPrice': True,
243
247
  'networks': {
244
248
  'BEP20': 'BSC',
245
249
  'ERC20': 'ETH',
@@ -1219,6 +1223,7 @@ class poloniex(Exchange, ImplicitAPI):
1219
1223
  :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1220
1224
  :param dict [params]: extra parameters specific to the exchange API endpoint
1221
1225
  :param float [params.triggerPrice]: *spot only* The price at which a trigger order is triggered at
1226
+ :param float [params.cost]: *spot market buy only* the quote quantity that can be used alternative for the amount
1222
1227
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1223
1228
  """
1224
1229
  await self.load_markets()
@@ -1251,7 +1256,6 @@ class poloniex(Exchange, ImplicitAPI):
1251
1256
  return self.parse_order(response, market)
1252
1257
 
1253
1258
  def order_request(self, symbol, type, side, amount, request, price=None, params={}):
1254
- market = self.market(symbol)
1255
1259
  upperCaseType = type.upper()
1256
1260
  isMarket = upperCaseType == 'MARKET'
1257
1261
  isPostOnly = self.is_post_only(isMarket, upperCaseType == 'LIMIT_MAKER', params)
@@ -1265,7 +1269,24 @@ class poloniex(Exchange, ImplicitAPI):
1265
1269
  request['type'] = upperCaseType
1266
1270
  if isMarket:
1267
1271
  if side == 'buy':
1268
- request['amount'] = self.currency_to_precision(market['quote'], amount)
1272
+ quoteAmount = None
1273
+ createMarketBuyOrderRequiresPrice = True
1274
+ createMarketBuyOrderRequiresPrice, params = self.handle_option_and_params(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', True)
1275
+ cost = self.safe_number(params, 'cost')
1276
+ params = self.omit(params, 'cost')
1277
+ if cost is not None:
1278
+ quoteAmount = self.cost_to_precision(symbol, cost)
1279
+ elif createMarketBuyOrderRequiresPrice:
1280
+ if price is None:
1281
+ raise InvalidOrder(self.id + ' createOrder() requires the price argument for market buy orders to calculate the total cost to spend(amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to False and pass the cost to spend(quote quantity) in the amount argument')
1282
+ else:
1283
+ amountString = self.number_to_string(amount)
1284
+ priceString = self.number_to_string(price)
1285
+ costRequest = Precise.string_mul(amountString, priceString)
1286
+ quoteAmount = self.cost_to_precision(symbol, costRequest)
1287
+ else:
1288
+ quoteAmount = self.cost_to_precision(symbol, amount)
1289
+ request['amount'] = quoteAmount
1269
1290
  else:
1270
1291
  request['quantity'] = self.amount_to_precision(symbol, amount)
1271
1292
  else:
@@ -129,6 +129,8 @@ class tokocrypto(Exchange, ImplicitAPI):
129
129
  'fetchWithdrawals': True,
130
130
  'fetchWithdrawalWhitelist': False,
131
131
  'reduceMargin': False,
132
+ 'repayCrossMargin': False,
133
+ 'repayIsolatedMargin': False,
132
134
  'setLeverage': False,
133
135
  'setMargin': False,
134
136
  'setMarginMode': False,
@@ -98,6 +98,8 @@ class wazirx(Exchange, ImplicitAPI):
98
98
  'fetchTransfers': False,
99
99
  'fetchWithdrawals': False,
100
100
  'reduceMargin': False,
101
+ 'repayCrossMargin': False,
102
+ 'repayIsolatedMargin': False,
101
103
  'setLeverage': False,
102
104
  'setMargin': False,
103
105
  'setMarginMode': False,
@@ -86,6 +86,8 @@ class whitebit(Exchange, ImplicitAPI):
86
86
  'fetchTradingFee': False,
87
87
  'fetchTradingFees': True,
88
88
  'fetchTransactionFees': True,
89
+ 'repayCrossMargin': False,
90
+ 'repayIsolatedMargin': False,
89
91
  'setLeverage': True,
90
92
  'transfer': True,
91
93
  'withdraw': True,
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.1.89'
7
+ __version__ = '4.1.90'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -3740,7 +3740,7 @@ class Exchange(object):
3740
3740
  :param dict [params]: extra parameters specific to the exchange API endpoint
3741
3741
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
3742
3742
  """
3743
- if self.options['createMarketOrderWithCost'] or (self.options['createMarketBuyOrderWithCost'] and self.options['createMarketSellOrderWithCost']):
3743
+ if self.has['createMarketOrderWithCost'] or (self.has['createMarketBuyOrderWithCost'] and self.has['createMarketSellOrderWithCost']):
3744
3744
  return self.create_order(symbol, 'market', side, cost, 1, params)
3745
3745
  raise NotSupported(self.id + ' createMarketOrderWithCost() is not supported yet')
3746
3746
 
@@ -3752,7 +3752,7 @@ class Exchange(object):
3752
3752
  :param dict [params]: extra parameters specific to the exchange API endpoint
3753
3753
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
3754
3754
  """
3755
- if self.options['createMarketBuyOrderRequiresPrice'] or self.options['createMarketBuyOrderWithCost']:
3755
+ if self.options['createMarketBuyOrderRequiresPrice'] or self.has['createMarketBuyOrderWithCost']:
3756
3756
  return self.create_order(symbol, 'market', 'buy', cost, 1, params)
3757
3757
  raise NotSupported(self.id + ' createMarketBuyOrderWithCost() is not supported yet')
3758
3758
 
ccxt/binance.py CHANGED
@@ -60,7 +60,7 @@ class binance(Exchange, ImplicitAPI):
60
60
  'cancelOrder': True,
61
61
  'cancelOrders': True, # contract only
62
62
  'closeAllPositions': False,
63
- 'closePosition': False,
63
+ 'closePosition': False, # exchange specific closePosition parameter for binance createOrder is not synonymous with how CCXT uses closePositions
64
64
  'createDepositAddress': False,
65
65
  'createOrder': True,
66
66
  'createOrders': True,
ccxt/bitforex.py CHANGED
@@ -84,6 +84,8 @@ class bitforex(Exchange, ImplicitAPI):
84
84
  'fetchWithdrawal': False,
85
85
  'fetchWithdrawals': False,
86
86
  'reduceMargin': False,
87
+ 'repayCrossMargin': False,
88
+ 'repayIsolatedMargin': False,
87
89
  'setLeverage': False,
88
90
  'setMargin': False,
89
91
  'setMarginMode': False,
ccxt/bitget.py CHANGED
@@ -3718,17 +3718,22 @@ class bitget(Exchange, ImplicitAPI):
3718
3718
  if feeCostString is not None:
3719
3719
  # swap
3720
3720
  fee = {
3721
- 'cost': feeCostString,
3721
+ 'cost': self.parse_number(Precise.string_abs(feeCostString)),
3722
3722
  'currency': market['settle'],
3723
3723
  }
3724
3724
  feeDetail = self.safe_value(order, 'feeDetail')
3725
3725
  if feeDetail is not None:
3726
3726
  parsedFeeDetail = json.loads(feeDetail)
3727
3727
  feeValues = list(parsedFeeDetail.values())
3728
- first = self.safe_value(feeValues, 0)
3728
+ feeObject = None
3729
+ for i in range(0, len(feeValues)):
3730
+ feeValue = feeValues[i]
3731
+ if self.safe_value(feeValue, 'feeCoinCode') is not None:
3732
+ feeObject = feeValue
3733
+ break
3729
3734
  fee = {
3730
- 'cost': self.safe_string(first, 'totalFee'),
3731
- 'currency': self.safe_currency_code(self.safe_string(first, 'feeCoinCode')),
3735
+ 'cost': self.parse_number(Precise.string_abs(self.safe_string(feeObject, 'totalFee'))),
3736
+ 'currency': self.safe_currency_code(self.safe_string(feeObject, 'feeCoinCode')),
3732
3737
  }
3733
3738
  postOnly = None
3734
3739
  timeInForce = self.safe_string_upper(order, 'force')
ccxt/bitmex.py CHANGED
@@ -50,6 +50,8 @@ class bitmex(Exchange, ImplicitAPI):
50
50
  'cancelAllOrders': True,
51
51
  'cancelOrder': True,
52
52
  'cancelOrders': True,
53
+ 'closeAllPositions': False,
54
+ 'closePosition': True,
53
55
  'createOrder': True,
54
56
  'createReduceOnlyOrder': True,
55
57
  'editOrder': True,
ccxt/blockchaincom.py CHANGED
@@ -857,43 +857,6 @@ class blockchaincom(Exchange, ImplicitAPI):
857
857
  'fee': fee,
858
858
  }
859
859
 
860
- def fetch_withdrawal_whitelist(self, params={}):
861
- """
862
- fetch the list of withdrawal addresses on the whitelist
863
- :param dict [params]: extra parameters specific to the exchange API endpoint
864
- :returns dict: dictionary with keys beneficiaryId, name, currency
865
- """
866
- self.load_markets()
867
- response = self.privateGetWhitelist()
868
- result = []
869
- for i in range(0, len(response)):
870
- entry = response[i]
871
- result.append({
872
- 'beneficiaryId': self.safe_string(entry, 'whitelistId'),
873
- 'name': self.safe_string(entry, 'name'),
874
- 'currency': self.safe_string(entry, 'currency'),
875
- 'info': entry,
876
- })
877
- return result
878
-
879
- def fetch_withdrawal_whitelist_by_currency(self, code: str, params={}):
880
- self.load_markets()
881
- currency = self.currency(code)
882
- request = {
883
- 'currency': currency['id'],
884
- }
885
- response = self.privateGetWhitelistCurrency(self.extend(request, params))
886
- result = []
887
- for i in range(0, len(response)):
888
- entry = response[i]
889
- result.append({
890
- 'beneficiaryId': self.safe_string(entry, 'whitelistId'),
891
- 'name': self.safe_string(entry, 'name'),
892
- 'currency': self.safe_string(entry, 'currency'),
893
- 'info': entry,
894
- })
895
- return result
896
-
897
860
  def withdraw(self, code: str, amount, address, tag=None, params={}):
898
861
  """
899
862
  make a withdrawal
ccxt/bybit.py CHANGED
@@ -959,6 +959,7 @@ class bybit(Exchange, ImplicitAPI):
959
959
  },
960
960
  'precisionMode': TICK_SIZE,
961
961
  'options': {
962
+ 'fetchMarkets': ['spot', 'linear', 'inverse', 'option'],
962
963
  'enableUnifiedMargin': None,
963
964
  'enableUnifiedAccount': None,
964
965
  'createMarketBuyOrderRequiresPrice': True,
@@ -1425,21 +1426,29 @@ class bybit(Exchange, ImplicitAPI):
1425
1426
  """
1426
1427
  if self.options['adjustForTimeDifference']:
1427
1428
  self.load_time_difference()
1428
- promisesUnresolved = [
1429
- self.fetch_spot_markets(params),
1430
- self.fetch_future_markets({'category': 'linear'}),
1431
- self.fetch_future_markets({'category': 'inverse'}),
1432
- self.fetch_option_markets({'baseCoin': 'BTC'}),
1433
- self.fetch_option_markets({'baseCoin': 'ETH'}),
1434
- self.fetch_option_markets({'baseCoin': 'SOL'}),
1435
- ]
1429
+ promisesUnresolved = []
1430
+ fetchMarkets = self.safe_value(self.options, 'fetchMarkets', ['spot', 'linear', 'inverse'])
1431
+ for i in range(0, len(fetchMarkets)):
1432
+ marketType = fetchMarkets[i]
1433
+ if marketType == 'spot':
1434
+ promisesUnresolved.append(self.fetch_spot_markets(params))
1435
+ elif marketType == 'linear':
1436
+ promisesUnresolved.append(self.fetch_future_markets({'category': 'linear'}))
1437
+ elif marketType == 'inverse':
1438
+ promisesUnresolved.append(self.fetch_future_markets({'category': 'inverse'}))
1439
+ elif marketType == 'option':
1440
+ promisesUnresolved.append(self.fetch_option_markets({'baseCoin': 'BTC'}))
1441
+ promisesUnresolved.append(self.fetch_option_markets({'baseCoin': 'ETH'}))
1442
+ promisesUnresolved.append(self.fetch_option_markets({'baseCoin': 'SOL'}))
1443
+ else:
1444
+ raise ExchangeError(self.id + ' fetchMarkets() self.options fetchMarkets "' + marketType + '" is not a supported market type')
1436
1445
  promises = promisesUnresolved
1437
- spotMarkets = promises[0]
1438
- linearMarkets = promises[1]
1439
- inverseMarkets = promises[2]
1440
- btcOptionMarkets = promises[3]
1441
- ethOptionMarkets = promises[4]
1442
- solOptionMarkets = promises[5]
1446
+ spotMarkets = self.safe_value(promises, 0, [])
1447
+ linearMarkets = self.safe_value(promises, 1, [])
1448
+ inverseMarkets = self.safe_value(promises, 2, [])
1449
+ btcOptionMarkets = self.safe_value(promises, 3, [])
1450
+ ethOptionMarkets = self.safe_value(promises, 4, [])
1451
+ solOptionMarkets = self.safe_value(promises, 5, [])
1443
1452
  futureMarkets = self.array_concat(linearMarkets, inverseMarkets)
1444
1453
  optionMarkets = self.array_concat(btcOptionMarkets, ethOptionMarkets)
1445
1454
  optionMarkets = self.array_concat(optionMarkets, solOptionMarkets)
ccxt/coinlist.py CHANGED
@@ -122,6 +122,8 @@ class coinlist(Exchange, ImplicitAPI):
122
122
  'fetchWithdrawals': False,
123
123
  'fetchWithdrawalWhitelist': False,
124
124
  'reduceMargin': False,
125
+ 'repayCrossMargin': False,
126
+ 'repayIsolatedMargin': False,
125
127
  'setLeverage': False,
126
128
  'setMargin': False,
127
129
  'setMarginMode': False,
ccxt/coinsph.py CHANGED
@@ -127,6 +127,8 @@ class coinsph(Exchange, ImplicitAPI):
127
127
  'fetchWithdrawals': True,
128
128
  'fetchWithdrawalWhitelist': False,
129
129
  'reduceMargin': False,
130
+ 'repayCrossMargin': False,
131
+ 'repayIsolatedMargin': False,
130
132
  'setLeverage': False,
131
133
  'setMargin': False,
132
134
  'setMarginMode': False,
ccxt/cryptocom.py CHANGED
@@ -111,6 +111,8 @@ class cryptocom(Exchange, ImplicitAPI):
111
111
  'fetchVolatilityHistory': False,
112
112
  'fetchWithdrawals': True,
113
113
  'reduceMargin': False,
114
+ 'repayCrossMargin': False,
115
+ 'repayIsolatedMargin': False,
114
116
  'setLeverage': False,
115
117
  'setMarginMode': False,
116
118
  'setPositionMode': False,