ccxt 4.4.43__py2.py3-none-any.whl → 4.4.45__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.
Files changed (91) hide show
  1. ccxt/__init__.py +1 -1
  2. ccxt/abstract/binance.py +1 -0
  3. ccxt/abstract/binancecoinm.py +1 -0
  4. ccxt/abstract/binanceus.py +1 -0
  5. ccxt/abstract/binanceusdm.py +1 -0
  6. ccxt/abstract/blofin.py +22 -0
  7. ccxt/async_support/__init__.py +1 -1
  8. ccxt/async_support/base/exchange.py +1 -1
  9. ccxt/async_support/binance.py +235 -107
  10. ccxt/async_support/bingx.py +20 -9
  11. ccxt/async_support/bitfinex.py +7 -3
  12. ccxt/async_support/bitget.py +6 -4
  13. ccxt/async_support/bitmart.py +7 -10
  14. ccxt/async_support/bitmex.py +4 -6
  15. ccxt/async_support/bitstamp.py +5 -0
  16. ccxt/async_support/blofin.py +22 -0
  17. ccxt/async_support/bybit.py +12 -27
  18. ccxt/async_support/coinbase.py +14 -10
  19. ccxt/async_support/coinbaseinternational.py +13 -9
  20. ccxt/async_support/coincatch.py +2 -2
  21. ccxt/async_support/coinex.py +6 -6
  22. ccxt/async_support/cryptocom.py +5 -3
  23. ccxt/async_support/defx.py +2 -2
  24. ccxt/async_support/delta.py +1 -1
  25. ccxt/async_support/exmo.py +16 -8
  26. ccxt/async_support/gate.py +10 -5
  27. ccxt/async_support/gemini.py +5 -0
  28. ccxt/async_support/hashkey.py +15 -10
  29. ccxt/async_support/htx.py +103 -5
  30. ccxt/async_support/hyperliquid.py +6 -1
  31. ccxt/async_support/kraken.py +10 -3
  32. ccxt/async_support/krakenfutures.py +6 -1
  33. ccxt/async_support/kucoin.py +10 -8
  34. ccxt/async_support/kucoinfutures.py +7 -8
  35. ccxt/async_support/lykke.py +1 -1
  36. ccxt/async_support/mexc.py +20 -14
  37. ccxt/async_support/myokx.py +8 -0
  38. ccxt/async_support/ndax.py +1 -1
  39. ccxt/async_support/oceanex.py +1 -1
  40. ccxt/async_support/okx.py +9 -10
  41. ccxt/async_support/onetrading.py +2 -1
  42. ccxt/async_support/whitebit.py +35 -10
  43. ccxt/async_support/woo.py +6 -4
  44. ccxt/async_support/woofipro.py +7 -4
  45. ccxt/base/exchange.py +1 -1
  46. ccxt/binance.py +235 -107
  47. ccxt/bingx.py +20 -9
  48. ccxt/bitfinex.py +7 -3
  49. ccxt/bitget.py +6 -4
  50. ccxt/bitmart.py +7 -10
  51. ccxt/bitmex.py +4 -6
  52. ccxt/bitstamp.py +5 -0
  53. ccxt/blofin.py +22 -0
  54. ccxt/bybit.py +12 -27
  55. ccxt/coinbase.py +14 -10
  56. ccxt/coinbaseinternational.py +13 -9
  57. ccxt/coincatch.py +2 -2
  58. ccxt/coinex.py +6 -6
  59. ccxt/cryptocom.py +5 -3
  60. ccxt/defx.py +2 -2
  61. ccxt/delta.py +1 -1
  62. ccxt/exmo.py +16 -8
  63. ccxt/gate.py +10 -5
  64. ccxt/gemini.py +5 -0
  65. ccxt/hashkey.py +15 -10
  66. ccxt/htx.py +103 -5
  67. ccxt/hyperliquid.py +6 -1
  68. ccxt/kraken.py +10 -3
  69. ccxt/krakenfutures.py +6 -1
  70. ccxt/kucoin.py +10 -8
  71. ccxt/kucoinfutures.py +7 -8
  72. ccxt/lykke.py +1 -1
  73. ccxt/mexc.py +20 -14
  74. ccxt/myokx.py +8 -0
  75. ccxt/ndax.py +1 -1
  76. ccxt/oceanex.py +1 -1
  77. ccxt/okx.py +9 -10
  78. ccxt/onetrading.py +2 -1
  79. ccxt/pro/__init__.py +1 -1
  80. ccxt/pro/binance.py +2 -1
  81. ccxt/pro/bitcoincom.py +4 -1
  82. ccxt/pro/bitopro.py +1 -1
  83. ccxt/pro/myokx.py +5 -0
  84. ccxt/whitebit.py +35 -10
  85. ccxt/woo.py +6 -4
  86. ccxt/woofipro.py +7 -4
  87. {ccxt-4.4.43.dist-info → ccxt-4.4.45.dist-info}/METADATA +4 -4
  88. {ccxt-4.4.43.dist-info → ccxt-4.4.45.dist-info}/RECORD +91 -91
  89. {ccxt-4.4.43.dist-info → ccxt-4.4.45.dist-info}/LICENSE.txt +0 -0
  90. {ccxt-4.4.43.dist-info → ccxt-4.4.45.dist-info}/WHEEL +0 -0
  91. {ccxt-4.4.43.dist-info → ccxt-4.4.45.dist-info}/top_level.txt +0 -0
@@ -330,6 +330,11 @@ class gemini(Exchange, ImplicitAPI):
330
330
  },
331
331
  'hedged': False,
332
332
  'trailing': False,
333
+ 'leverage': False,
334
+ 'marketBuyByCost': True,
335
+ 'marketBuyRequiresPrice': False,
336
+ 'selfTradePrevention': False,
337
+ 'iceberg': False,
333
338
  },
334
339
  'createOrders': None,
335
340
  'fetchMyTrades': {
@@ -380,13 +380,11 @@ class hashkey(Exchange, ImplicitAPI):
380
380
  },
381
381
  'hedged': False,
382
382
  'trailing': False,
383
- # exchange-supported features
384
- # 'marketBuyRequiresPrice': False,
385
- # 'marketBuyByCost': False,
386
- # 'selfTradePrevention': True,
387
- # 'twap': False,
388
- # 'iceberg': False,
389
- # 'oco': False,
383
+ 'leverage': False,
384
+ 'marketBuyByCost': True,
385
+ 'marketBuyRequiresPrice': True, # todo fix
386
+ 'selfTradePrevention': True, # todo implement
387
+ 'iceberg': False,
390
388
  },
391
389
  'createOrders': {
392
390
  'max': 20,
@@ -1456,9 +1454,14 @@ class hashkey(Exchange, ImplicitAPI):
1456
1454
  if isBuyer is not None:
1457
1455
  side = 'buy' if isBuyer else 'sell'
1458
1456
  takerOrMaker = None
1459
- isMaker = self.safe_bool_n(trade, ['isMaker', 'isMarker', 'ibm'])
1457
+ isMaker = self.safe_bool_n(trade, ['isMaker', 'isMarker'])
1460
1458
  if isMaker is not None:
1461
1459
  takerOrMaker = 'maker' if isMaker else 'taker'
1460
+ isBuyerMaker = self.safe_bool(trade, 'ibm')
1461
+ # if public trade
1462
+ if isBuyerMaker is not None:
1463
+ takerOrMaker = 'taker'
1464
+ side = 'sell' if isBuyerMaker else 'buy'
1462
1465
  feeCost = self.safe_string(trade, 'commission')
1463
1466
  feeCurrncyId = self.safe_string(trade, 'commissionAsset')
1464
1467
  feeInfo = self.safe_dict(trade, 'fee')
@@ -2393,8 +2396,10 @@ class hashkey(Exchange, ImplicitAPI):
2393
2396
  market = self.market(symbol)
2394
2397
  if not market['spot']:
2395
2398
  raise NotSupported(self.id + ' createMarketBuyOrderWithCost() is supported for spot markets only')
2396
- params['cost'] = cost
2397
- return await self.create_order(symbol, 'market', 'buy', cost, None, params)
2399
+ req = {
2400
+ 'cost': cost,
2401
+ }
2402
+ return await self.create_order(symbol, 'market', 'buy', cost, None, self.extend(req, params))
2398
2403
 
2399
2404
  async def create_spot_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}) -> Order:
2400
2405
  """
ccxt/async_support/htx.py CHANGED
@@ -115,6 +115,7 @@ class htx(Exchange, ImplicitAPI):
115
115
  'fetchOHLCV': True,
116
116
  'fetchOpenInterest': True,
117
117
  'fetchOpenInterestHistory': True,
118
+ 'fetchOpenInterests': True,
118
119
  'fetchOpenOrder': None,
119
120
  'fetchOpenOrders': True,
120
121
  'fetchOrder': True,
@@ -1270,9 +1271,11 @@ class htx(Exchange, ImplicitAPI):
1270
1271
  },
1271
1272
  'hedged': False,
1272
1273
  'trailing': False,
1273
- # exchange-specific features
1274
1274
  'iceberg': False,
1275
- 'selfTradePrevention': True,
1275
+ 'selfTradePrevention': True, # todo implement
1276
+ 'leverage': True, # todo implement
1277
+ 'marketBuyByCost': True,
1278
+ 'marketBuyRequiresPrice': True,
1276
1279
  },
1277
1280
  'createOrders': {
1278
1281
  'max': 10,
@@ -1308,7 +1311,7 @@ class htx(Exchange, ImplicitAPI):
1308
1311
  'trailing': False,
1309
1312
  'untilDays': 2,
1310
1313
  'limit': 500,
1311
- 'daysBackClosed': 180,
1314
+ 'daysBack': 180,
1312
1315
  'daysBackCanceled': 1 / 12,
1313
1316
  },
1314
1317
  'fetchOHLCV': {
@@ -1349,7 +1352,7 @@ class htx(Exchange, ImplicitAPI):
1349
1352
  'trailing': False,
1350
1353
  'untilDays': 2,
1351
1354
  'limit': 50,
1352
- 'daysBackClosed': 90,
1355
+ 'daysBack': 90,
1353
1356
  'daysBackCanceled': 1 / 12,
1354
1357
  },
1355
1358
  'fetchOHLCV': {
@@ -8004,6 +8007,100 @@ class htx(Exchange, ImplicitAPI):
8004
8007
  tick = self.safe_list(data, 'tick')
8005
8008
  return self.parse_open_interests_history(tick, market, since, limit)
8006
8009
 
8010
+ async def fetch_open_interests(self, symbols: Strings = None, params={}):
8011
+ """
8012
+ Retrieves the open interest for a list of symbols
8013
+
8014
+ https://huobiapi.github.io/docs/dm/v1/en/#get-contract-open-interest-information
8015
+ https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#get-swap-open-interest-information
8016
+ https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-get-swap-open-interest-information
8017
+
8018
+ :param str[] [symbols]: a list of unified CCXT market symbols
8019
+ :param dict [params]: exchange specific parameters
8020
+ :returns dict[]: a list of `open interest structures <https://docs.ccxt.com/#/?id=open-interest-structure>`
8021
+ """
8022
+ await self.load_markets()
8023
+ symbols = self.market_symbols(symbols)
8024
+ market = None
8025
+ if symbols is not None:
8026
+ symbolsLength = len(symbols)
8027
+ if symbolsLength > 0:
8028
+ first = self.safe_string(symbols, 0)
8029
+ market = self.market(first)
8030
+ request: dict = {}
8031
+ subType = None
8032
+ subType, params = self.handle_sub_type_and_params('fetchPositions', market, params, 'linear')
8033
+ marketType = None
8034
+ marketType, params = self.handle_market_type_and_params('fetchPositions', market, params)
8035
+ response = None
8036
+ if marketType == 'future':
8037
+ response = await self.contractPublicGetApiV1ContractOpenInterest(self.extend(request, params))
8038
+ #
8039
+ # {
8040
+ # "status": "ok",
8041
+ # "data": [
8042
+ # {
8043
+ # "volume": 118850.000000000000000000,
8044
+ # "amount": 635.502025211544374189,
8045
+ # "symbol": "BTC",
8046
+ # "contract_type": "self_week",
8047
+ # "contract_code": "BTC220930",
8048
+ # "trade_amount": 1470.9400749347598691119206024033947897351,
8049
+ # "trade_volume": 286286,
8050
+ # "trade_turnover": 28628600.000000000000000000
8051
+ # }
8052
+ # ],
8053
+ # "ts": 1664337928805
8054
+ # }
8055
+ #
8056
+ elif subType == 'inverse':
8057
+ response = await self.contractPublicGetSwapApiV1SwapOpenInterest(self.extend(request, params))
8058
+ #
8059
+ # {
8060
+ # "status": "ok",
8061
+ # "data": [
8062
+ # {
8063
+ # "volume": 518018.000000000000000000,
8064
+ # "amount": 2769.675777407074725180,
8065
+ # "symbol": "BTC",
8066
+ # "contract_code": "BTC-USD",
8067
+ # "trade_amount": 9544.4032080046491323463688602729806842458,
8068
+ # "trade_volume": 1848448,
8069
+ # "trade_turnover": 184844800.000000000000000000
8070
+ # }
8071
+ # ],
8072
+ # "ts": 1664337226028
8073
+ # }
8074
+ #
8075
+ else:
8076
+ request['contract_type'] = 'swap'
8077
+ response = await self.contractPublicGetLinearSwapApiV1SwapOpenInterest(self.extend(request, params))
8078
+ #
8079
+ # {
8080
+ # "status": "ok",
8081
+ # "data": [
8082
+ # {
8083
+ # "volume": 7192610.000000000000000000,
8084
+ # "amount": 7192.610000000000000000,
8085
+ # "symbol": "BTC",
8086
+ # "value": 134654290.332000000000000000,
8087
+ # "contract_code": "BTC-USDT",
8088
+ # "trade_amount": 70692.804,
8089
+ # "trade_volume": 70692804,
8090
+ # "trade_turnover": 1379302592.9518,
8091
+ # "business_type": "swap",
8092
+ # "pair": "BTC-USDT",
8093
+ # "contract_type": "swap",
8094
+ # "trade_partition": "USDT"
8095
+ # }
8096
+ # ],
8097
+ # "ts": 1664336503144
8098
+ # }
8099
+ #
8100
+ data = self.safe_list(response, 'data', [])
8101
+ result = self.parse_open_interests(data)
8102
+ return self.filter_by_array(result, 'symbol', symbols)
8103
+
8007
8104
  async def fetch_open_interest(self, symbol: str, params={}):
8008
8105
  """
8009
8106
  Retrieves the open interest of a currency
@@ -8162,8 +8259,9 @@ class htx(Exchange, ImplicitAPI):
8162
8259
  timestamp = self.safe_integer(interest, 'ts')
8163
8260
  amount = self.safe_number(interest, 'volume')
8164
8261
  value = self.safe_number(interest, 'value')
8262
+ marketId = self.safe_string(interest, 'contract_code')
8165
8263
  return self.safe_open_interest({
8166
- 'symbol': self.safe_string(market, 'symbol'),
8264
+ 'symbol': self.safe_symbol(marketId, market),
8167
8265
  'baseVolume': amount, # deprecated
8168
8266
  'quoteVolume': value, # deprecated
8169
8267
  'openInterestAmount': amount,
@@ -247,6 +247,11 @@ class hyperliquid(Exchange, ImplicitAPI):
247
247
  },
248
248
  'hedged': False,
249
249
  'trailing': False,
250
+ 'leverage': False,
251
+ 'marketBuyByCost': False,
252
+ 'marketBuyRequiresPrice': False,
253
+ 'selfTradePrevention': False,
254
+ 'iceberg': False,
250
255
  },
251
256
  'createOrders': {
252
257
  'max': 1000,
@@ -279,7 +284,7 @@ class hyperliquid(Exchange, ImplicitAPI):
279
284
  'fetchClosedOrders': {
280
285
  'marginMode': False,
281
286
  'limit': 2000,
282
- 'daysBackClosed': None,
287
+ 'daysBack': None,
283
288
  'daysBackCanceled': None,
284
289
  'untilDays': None,
285
290
  'trigger': False,
@@ -464,6 +464,11 @@ class kraken(Exchange, ImplicitAPI):
464
464
  },
465
465
  'hedged': False,
466
466
  'trailing': True,
467
+ 'leverage': False,
468
+ 'marketBuyByCost': True,
469
+ 'marketBuyRequiresPrice': False,
470
+ 'selfTradePrevention': True, # todo implement
471
+ 'iceberg': True, # todo implement
467
472
  },
468
473
  'createOrders': None,
469
474
  'fetchMyTrades': {
@@ -487,7 +492,7 @@ class kraken(Exchange, ImplicitAPI):
487
492
  'fetchClosedOrders': {
488
493
  'marginMode': False,
489
494
  'limit': None,
490
- 'daysBackClosed': None,
495
+ 'daysBack': None,
491
496
  'daysBackCanceled': None,
492
497
  'untilDays': 100000,
493
498
  'trigger': False,
@@ -1483,8 +1488,10 @@ class kraken(Exchange, ImplicitAPI):
1483
1488
  """
1484
1489
  await self.load_markets()
1485
1490
  # only buy orders are supported by the endpoint
1486
- params['cost'] = cost
1487
- return await self.create_order(symbol, 'market', side, cost, None, params)
1491
+ req = {
1492
+ 'cost': cost,
1493
+ }
1494
+ return await self.create_order(symbol, 'market', side, 1, None, self.extend(req, params))
1488
1495
 
1489
1496
  async def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
1490
1497
  """
@@ -299,6 +299,11 @@ class krakenfutures(Exchange, ImplicitAPI):
299
299
  },
300
300
  'hedged': False,
301
301
  'trailing': False,
302
+ 'leverage': False,
303
+ 'marketBuyByCost': False,
304
+ 'marketBuyRequiresPrice': False,
305
+ 'selfTradePrevention': False,
306
+ 'iceberg': False,
302
307
  },
303
308
  'createOrders': {
304
309
  'max': 100,
@@ -320,7 +325,7 @@ class krakenfutures(Exchange, ImplicitAPI):
320
325
  'fetchClosedOrders': {
321
326
  'marginMode': False,
322
327
  'limit': None,
323
- 'daysBackClosed': None,
328
+ 'daysBack': None,
324
329
  'daysBackCanceled': None,
325
330
  'untilDays': None,
326
331
  'trigger': False,
@@ -1026,11 +1026,11 @@ class kucoin(Exchange, ImplicitAPI):
1026
1026
  },
1027
1027
  'hedged': False,
1028
1028
  'trailing': False,
1029
- # exchange-supported features
1030
- # 'iceberg': True,
1031
- # 'selfTradePrevention': True,
1032
- # 'twap': False,
1033
- # 'oco': False,
1029
+ 'leverage': False,
1030
+ 'marketBuyByCost': True,
1031
+ 'marketBuyRequiresPrice': False,
1032
+ 'selfTradePrevention': True, # todo implement
1033
+ 'iceberg': True, # todo implement
1034
1034
  },
1035
1035
  'createOrders': {
1036
1036
  'max': 5,
@@ -1056,7 +1056,7 @@ class kucoin(Exchange, ImplicitAPI):
1056
1056
  'fetchClosedOrders': {
1057
1057
  'marginMode': True,
1058
1058
  'limit': 500,
1059
- 'daysBackClosed': None,
1059
+ 'daysBack': None,
1060
1060
  'daysBackCanceled': None,
1061
1061
  'untilDays': 7,
1062
1062
  'trigger': True,
@@ -2286,8 +2286,10 @@ class kucoin(Exchange, ImplicitAPI):
2286
2286
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
2287
2287
  """
2288
2288
  await self.load_markets()
2289
- params['cost'] = cost
2290
- return await self.create_order(symbol, 'market', side, cost, None, params)
2289
+ req = {
2290
+ 'cost': cost,
2291
+ }
2292
+ return await self.create_order(symbol, 'market', side, 0, None, self.extend(req, params))
2291
2293
 
2292
2294
  async def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
2293
2295
  """
@@ -386,9 +386,8 @@ class kucoinfutures(kucoin, ImplicitAPI):
386
386
  'stopLossPrice': True,
387
387
  'takeProfitPrice': True,
388
388
  'attachedStopLossTakeProfit': {
389
- 'triggerPrice': None,
390
389
  'triggerPriceType': None,
391
- 'limitPrice': True,
390
+ 'price': True,
392
391
  },
393
392
  'timeInForce': {
394
393
  'IOC': True,
@@ -398,11 +397,11 @@ class kucoinfutures(kucoin, ImplicitAPI):
398
397
  },
399
398
  'hedged': False,
400
399
  'trailing': False,
401
- # exchange-supported features
402
- # 'iceberg': True,
403
- # 'selfTradePrevention': True,
404
- # 'twap': False,
405
- # 'oco': False,
400
+ 'leverage': True, # todo implement
401
+ 'marketBuyByCost': True,
402
+ 'marketBuyRequiresPrice': False,
403
+ 'selfTradePrevention': True, # todo implement
404
+ 'iceberg': True,
406
405
  },
407
406
  'createOrders': {
408
407
  'max': 20,
@@ -428,7 +427,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
428
427
  'fetchClosedOrders': {
429
428
  'marginMode': False,
430
429
  'limit': 1000,
431
- 'daysBackClosed': None,
430
+ 'daysBack': None,
432
431
  'daysBackCanceled': None,
433
432
  'untilDays': None,
434
433
  'trigger': True,
@@ -209,7 +209,7 @@ class lykke(Exchange, ImplicitAPI):
209
209
  # {
210
210
  # "payload":[
211
211
  # {
212
- # "assetId":"115a60c2-0da1-40f9-a7f2-41da723b9074",
212
+ # "assetId":"115a60c2-0da1-40f9-a7f2-41da723b9075",
213
213
  # "name":"Monaco Token",
214
214
  # "symbol":"MCO",
215
215
  # "accuracy":6,
@@ -710,10 +710,12 @@ class mexc(Exchange, ImplicitAPI):
710
710
  'PO': True,
711
711
  'GTD': False,
712
712
  },
713
- 'hedged': False,
714
- # exchange-supported features
715
- 'selfTradePrevention': False,
713
+ 'hedged': True, # todo implement
716
714
  'trailing': False,
715
+ 'leverage': True, # todo implement
716
+ 'marketBuyByCost': True,
717
+ 'marketBuyRequiresPrice': False,
718
+ 'selfTradePrevention': False,
717
719
  'iceberg': False,
718
720
  },
719
721
  'createOrders': {
@@ -747,7 +749,7 @@ class mexc(Exchange, ImplicitAPI):
747
749
  'fetchClosedOrders': {
748
750
  'marginMode': True,
749
751
  'limit': 1000,
750
- 'daysBackClosed': 7,
752
+ 'daysBack': 7,
751
753
  'daysBackCanceled': 7,
752
754
  'untilDays': 7,
753
755
  'trigger': False,
@@ -769,14 +771,14 @@ class mexc(Exchange, ImplicitAPI):
769
771
  'mark': True,
770
772
  'index': True,
771
773
  },
772
- 'triggerDirection': True,
774
+ 'triggerDirection': True, # todo
773
775
  'stopLossPrice': False, # todo
774
- 'takeProfitPrice': False,
776
+ 'takeProfitPrice': False, # todo
775
777
  'hedged': True,
778
+ 'leverage': True, # todo
779
+ 'marketBuyByCost': False,
776
780
  },
777
- 'createOrders': {
778
- 'max': 50,
779
- },
781
+ 'createOrders': None, # todo: needs implementation https://mexcdevelop.github.io/apidocs/contract_v1_en/#order-under-maintenance:~:text=Order%20the%20contract%20in%20batch
780
782
  'fetchMyTrades': {
781
783
  'marginMode': False,
782
784
  'limit': 100,
@@ -803,7 +805,7 @@ class mexc(Exchange, ImplicitAPI):
803
805
  'fetchClosedOrders': {
804
806
  'marginMode': False,
805
807
  'limit': 100,
806
- 'daysBackClosed': 90,
808
+ 'daysBack': 90,
807
809
  'daysBackCanceled': None,
808
810
  'untilDays': 90,
809
811
  'trigger': True,
@@ -2187,8 +2189,10 @@ class mexc(Exchange, ImplicitAPI):
2187
2189
  market = self.market(symbol)
2188
2190
  if not market['spot']:
2189
2191
  raise NotSupported(self.id + ' createMarketBuyOrderWithCost() supports spot orders only')
2190
- params['cost'] = cost
2191
- return await self.create_order(symbol, 'market', 'buy', 0, None, params)
2192
+ req = {
2193
+ 'cost': cost,
2194
+ }
2195
+ return await self.create_order(symbol, 'market', 'buy', 0, None, self.extend(req, params))
2192
2196
 
2193
2197
  async def create_market_sell_order_with_cost(self, symbol: str, cost: float, params={}):
2194
2198
  """
@@ -2205,8 +2209,10 @@ class mexc(Exchange, ImplicitAPI):
2205
2209
  market = self.market(symbol)
2206
2210
  if not market['spot']:
2207
2211
  raise NotSupported(self.id + ' createMarketBuyOrderWithCost() supports spot orders only')
2208
- params['cost'] = cost
2209
- return await self.create_order(symbol, 'market', 'sell', 0, None, params)
2212
+ req = {
2213
+ 'cost': cost,
2214
+ }
2215
+ return await self.create_order(symbol, 'market', 'sell', 0, None, self.extend(req, params))
2210
2216
 
2211
2217
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
2212
2218
  """
@@ -32,4 +32,12 @@ class myokx(okx, ImplicitAPI):
32
32
  'rest': 'https://{hostname}',
33
33
  },
34
34
  },
35
+ 'has': {
36
+ 'CORS': None,
37
+ 'spot': True,
38
+ 'margin': None,
39
+ 'swap': False,
40
+ 'future': False,
41
+ 'option': False,
42
+ },
35
43
  })
@@ -355,7 +355,7 @@ class ndax(Exchange, ImplicitAPI):
355
355
  #
356
356
  # {
357
357
  # "Authenticated": True,
358
- # "UserId":57765,
358
+ # "UserId":57764,
359
359
  # "SessionToken":"4a2a5857-c4e5-4fac-b09e-2c4c30b591a0"
360
360
  # }
361
361
  #
@@ -497,7 +497,7 @@ class oceanex(Exchange, ImplicitAPI):
497
497
  # "funds":"6.0732952",
498
498
  # "market":"ethusdt",
499
499
  # "created_at":"2022-04-19T19:03:15Z",
500
- # "created_on":1650394995,
500
+ # "created_on":1650394994,
501
501
  # "side":"bid"
502
502
  # },
503
503
  # ]
ccxt/async_support/okx.py CHANGED
@@ -1207,7 +1207,6 @@ class okx(Exchange, ImplicitAPI):
1207
1207
  'brokerId': 'e847386590ce4dBC',
1208
1208
  },
1209
1209
  'features': {
1210
- # https://www.okx.com/docs-v5/en/#order-book-trading-trade-post-place-order
1211
1210
  'default': {
1212
1211
  'sandbox': True,
1213
1212
  'createOrder': {
@@ -1227,7 +1226,7 @@ class okx(Exchange, ImplicitAPI):
1227
1226
  'mark': True,
1228
1227
  'index': True,
1229
1228
  },
1230
- 'limitPrice': True,
1229
+ 'price': True,
1231
1230
  },
1232
1231
  'timeInForce': {
1233
1232
  'IOC': True,
@@ -1236,12 +1235,12 @@ class okx(Exchange, ImplicitAPI):
1236
1235
  'GTD': False,
1237
1236
  },
1238
1237
  'hedged': True,
1239
- # even though the below params not unified yet, it's useful metadata for users to know that exchange supports them
1240
- 'selfTradePrevention': True,
1241
1238
  'trailing': True,
1242
- 'twap': True,
1243
- 'iceberg': True,
1244
- 'oco': True,
1239
+ 'iceberg': True, # todo implement
1240
+ 'leverage': False,
1241
+ 'selfTradePrevention': True, # todo implement
1242
+ 'marketBuyByCost': True,
1243
+ 'marketBuyRequiresPrice': False,
1245
1244
  },
1246
1245
  'createOrders': {
1247
1246
  'max': 20,
@@ -1267,7 +1266,7 @@ class okx(Exchange, ImplicitAPI):
1267
1266
  'fetchClosedOrders': {
1268
1267
  'marginMode': False,
1269
1268
  'limit': 100,
1270
- 'daysBackClosed': 90, # 3 months
1269
+ 'daysBack': 90, # 3 months
1271
1270
  'daysBackCanceled': 1 / 12, # 2 hour
1272
1271
  'untilDays': None,
1273
1272
  'trigger': True,
@@ -1637,7 +1636,7 @@ class okx(Exchange, ImplicitAPI):
1637
1636
  'contractSize': self.safe_number(market, 'ctVal') if contract else None,
1638
1637
  'expiry': expiry,
1639
1638
  'expiryDatetime': self.iso8601(expiry),
1640
- 'strike': strikePrice,
1639
+ 'strike': self.parse_number(strikePrice),
1641
1640
  'optionType': optionType,
1642
1641
  'created': self.safe_integer(market, 'listTime'),
1643
1642
  'precision': {
@@ -1836,7 +1835,7 @@ class okx(Exchange, ImplicitAPI):
1836
1835
  }
1837
1836
  firstChain = self.safe_dict(chains, 0, {})
1838
1837
  result[code] = {
1839
- 'info': None,
1838
+ 'info': chains,
1840
1839
  'code': code,
1841
1840
  'id': currencyId,
1842
1841
  'name': self.safe_string(firstChain, 'name'),
@@ -865,7 +865,8 @@ class onetrading(Exchange, ImplicitAPI):
865
865
  # {"instrument_code":"BTC_EUR","granularity":{"unit":"HOURS","period":1},"high":"9135.7","low":"9002.59","open":"9055.45","close":"9133.98","total_amount":"26.21919","volume":"238278.8724959","time":"2020-05-09T00:59:59.999Z","last_sequence":461521},
866
866
  # ]
867
867
  #
868
- return self.parse_ohlcvs(response, market, timeframe, since, limit)
868
+ ohlcv = self.safe_list(response, 'candlesticks')
869
+ return self.parse_ohlcvs(ohlcv, market, timeframe, since, limit)
869
870
 
870
871
  def parse_trade(self, trade: dict, market: Market = None) -> Trade:
871
872
  #