ccxt 4.2.100 → 4.3.1

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 (315) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/ccxt.js +1 -1
  3. package/dist/cjs/src/binance.js +56 -0
  4. package/dist/cjs/src/bingx.js +2 -2
  5. package/dist/cjs/src/bitget.js +64 -2
  6. package/dist/cjs/src/bybit.js +1 -1
  7. package/dist/cjs/src/coinex.js +55 -60
  8. package/dist/cjs/src/kraken.js +8 -3
  9. package/dist/cjs/src/kucoin.js +13 -11
  10. package/dist/cjs/src/okx.js +76 -5
  11. package/dist/cjs/src/pro/kraken.js +2 -2
  12. package/dist/cjs/src/woo.js +40 -0
  13. package/js/ccxt.d.ts +1 -1
  14. package/js/ccxt.js +1 -1
  15. package/js/src/binance.d.ts +3 -1
  16. package/js/src/binance.js +56 -0
  17. package/js/src/bingx.js +3 -3
  18. package/js/src/bitget.d.ts +1 -0
  19. package/js/src/bitget.js +64 -2
  20. package/js/src/bybit.js +1 -1
  21. package/js/src/coinex.js +55 -60
  22. package/js/src/kraken.js +8 -3
  23. package/js/src/kucoin.js +13 -11
  24. package/js/src/okx.d.ts +1 -0
  25. package/js/src/okx.js +76 -5
  26. package/js/src/pro/kraken.js +2 -2
  27. package/js/src/woo.d.ts +1 -0
  28. package/js/src/woo.js +40 -0
  29. package/package.json +2 -1
  30. package/.dockerignore +0 -6
  31. package/.eslintignore +0 -1
  32. package/.git-templates/hooks/pre-push +0 -55
  33. package/.gitattributes +0 -7
  34. package/CHANGELOG.md +0 -6003
  35. package/CODEOWNERS +0 -1
  36. package/CONTRIBUTING.md +0 -1099
  37. package/build.sh +0 -217
  38. package/change.sh +0 -18
  39. package/cleanup.sh +0 -18
  40. package/composer-install.sh +0 -20
  41. package/dist/ccxt.browser.js +0 -327256
  42. package/dist/ccxt.browser.min.js +0 -30
  43. package/dist/ccxt.browser.min.js.LICENSE.txt +0 -12
  44. package/doc/FAQ.rst +0 -1
  45. package/doc/Makefile +0 -20
  46. package/doc/_static/css/dark.css +0 -101
  47. package/doc/_static/css/index.css +0 -128
  48. package/doc/_static/favicon.ico +0 -0
  49. package/doc/_static/javascript/binance-portal.min.js +0 -2369
  50. package/doc/_static/javascript/index.js +0 -195
  51. package/doc/_static/javascript/jquery-ui.min.js +0 -6
  52. package/doc/ccxt.pro.install.rst +0 -1
  53. package/doc/ccxt.pro.manual.rst +0 -1665
  54. package/doc/exchange-markets-by-country.rst +0 -1423
  55. package/doc/exchange-markets.rst +0 -1441
  56. package/doc/index.rst +0 -35
  57. package/doc/install.rst +0 -1
  58. package/doc/make.bat +0 -36
  59. package/doc/manual.rst +0 -7471
  60. package/doc/readme.rst +0 -2191
  61. package/doc/requirements.txt +0 -6
  62. package/examples/ccxt.pro/html/watchTicker.html +0 -51
  63. package/examples/ccxt.pro/js/binance-fetch-balance-snapshot-watch-balance-updates.js +0 -55
  64. package/examples/ccxt.pro/js/binance-https-proxy.js +0 -48
  65. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols-continuously.js +0 -38
  66. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols.js +0 -64
  67. package/examples/ccxt.pro/js/binance-watch-ticker-many-symbols.js +0 -62
  68. package/examples/ccxt.pro/js/build-ohlcv-many-symbols.js +0 -68
  69. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades-warmup.js +0 -82
  70. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades.js +0 -59
  71. package/examples/ccxt.pro/js/exchange-capabitities.js +0 -72
  72. package/examples/ccxt.pro/js/exchange-close.js +0 -46
  73. package/examples/ccxt.pro/js/gateio-swap-watch-many-orderbooks.js +0 -30
  74. package/examples/ccxt.pro/js/gateio-watch-balance.js +0 -23
  75. package/examples/ccxt.pro/js/gateio-watch-order-book.js +0 -71
  76. package/examples/ccxt.pro/js/graceful-shutdown.js +0 -43
  77. package/examples/ccxt.pro/js/many-exchanges-many-streams.js +0 -37
  78. package/examples/ccxt.pro/js/okex-create-futures-order.js +0 -48
  79. package/examples/ccxt.pro/js/okex-watch-balance-and-create-order.js +0 -54
  80. package/examples/ccxt.pro/js/okx-watch-tickers.js +0 -31
  81. package/examples/ccxt.pro/js/one-exchange-many-different-streams.js +0 -46
  82. package/examples/ccxt.pro/js/one-exchange-many-streams-2.js +0 -26
  83. package/examples/ccxt.pro/js/one-exchange-many-streams.js +0 -28
  84. package/examples/ccxt.pro/js/socks-binance-watch-orderbook.js +0 -30
  85. package/examples/ccxt.pro/js/watch-fetch-many-exchanges-many-ordersbooks.js +0 -40
  86. package/examples/ccxt.pro/js/watch-many-exchanges-many-ordersbooks.js +0 -38
  87. package/examples/ccxt.pro/js/watch-many-exchanges-many-symbols.js +0 -40
  88. package/examples/ccxt.pro/js/watch-many-orderbooks.js +0 -27
  89. package/examples/ccxt.pro/js/watch-new-trades-only.js +0 -43
  90. package/examples/ccxt.pro/js/watch-new-trades.js +0 -42
  91. package/examples/ccxt.pro/js/watch-trades-many-symbols.js +0 -29
  92. package/examples/ccxt.pro/js/watch-vs-fetch.js +0 -29
  93. package/examples/cs/Examples.sln +0 -22
  94. package/examples/cs/c#.csproj +0 -19
  95. package/examples/html/basic-cors-proxy.html +0 -46
  96. package/examples/html/basic-inheritance.html +0 -47
  97. package/examples/html/basic-poller.html +0 -52
  98. package/examples/html/basic-rate-limiting.html +0 -49
  99. package/examples/html/basic.html +0 -43
  100. package/examples/html/binance-cors-proxy.html +0 -28
  101. package/examples/html/bitmex-browser-cors-proxy.js +0 -7
  102. package/examples/html/bitmex-cors.html +0 -46
  103. package/examples/html/tradingview-charts.html +0 -61
  104. package/examples/html/webworker/index.html +0 -97
  105. package/examples/html/webworker/worker.js +0 -43
  106. package/examples/js/advanced-error-handling.js +0 -39
  107. package/examples/js/aggregate-orderbook.js +0 -54
  108. package/examples/js/arbitrage-pairs.js +0 -130
  109. package/examples/js/basic-chart.js +0 -29
  110. package/examples/js/basic-orderbook-polling.js +0 -13
  111. package/examples/js/bcc-vs-bch.js +0 -115
  112. package/examples/js/benchmark.js +0 -104
  113. package/examples/js/binance-fetch-all-deposits.js +0 -45
  114. package/examples/js/binance-fetch-ohlcv-many-symbols-async-await.js +0 -34
  115. package/examples/js/binance-fetch-ohlcv-many-symbols-promise-then-callbacks.js +0 -33
  116. package/examples/js/binance-fetchTicker-delivery-vs-future.js +0 -31
  117. package/examples/js/binance-futures-transfer-from-sub-account-to-master.js +0 -41
  118. package/examples/js/binance-margin-stop-order.js +0 -39
  119. package/examples/js/binance-server-time.js +0 -34
  120. package/examples/js/binance-universal-transfer.js +0 -16
  121. package/examples/js/bitfinex-fetch-trades.js +0 -35
  122. package/examples/js/bitfinex2-fetch-trades.js +0 -35
  123. package/examples/js/bitmex-browser-cors-proxy.js +0 -7
  124. package/examples/js/bitpanda-fetchMyTrades-reduce.js +0 -36
  125. package/examples/js/bitrue-fetch-balance.js +0 -28
  126. package/examples/js/bitstamp-private-api.js +0 -115
  127. package/examples/js/bitstamp-public-api.js +0 -39
  128. package/examples/js/bittrex-balance.js +0 -50
  129. package/examples/js/bittrex-fetch-closed-orders-history.js +0 -69
  130. package/examples/js/blockchaincom-withdrawal.js +0 -59
  131. package/examples/js/build-ohlcv-bars.js +0 -48
  132. package/examples/js/builtin-rate-limiting-rest-poller.js +0 -25
  133. package/examples/js/bybit-trailing.js +0 -62
  134. package/examples/js/bybit-updated.cjs +0 -154
  135. package/examples/js/coinbase-fetch-all-balances.js +0 -36
  136. package/examples/js/coinex-fetch-all-deposit-addresses-using-fetchDepositAddress.js +0 -47
  137. package/examples/js/coinex-futures.js +0 -75
  138. package/examples/js/coinone-fetch-tickers.js +0 -54
  139. package/examples/js/coinone-markets.js +0 -16
  140. package/examples/js/compare-two-exchanges-capabilities.js +0 -36
  141. package/examples/js/cors-proxy.js +0 -5
  142. package/examples/js/create-order-handle-errors.js +0 -55
  143. package/examples/js/create-order-position-with-takeprofit-stoploss.js +0 -71
  144. package/examples/js/create-order-with-retry.js +0 -65
  145. package/examples/js/create-order-ws-example.js +0 -25
  146. package/examples/js/create-orders-example.js +0 -17
  147. package/examples/js/create-trailing-amount-order.js +0 -36
  148. package/examples/js/create-trailing-percent-order.js +0 -36
  149. package/examples/js/credentials.json +0 -5
  150. package/examples/js/custom-proxy-agent-for-js.js +0 -10
  151. package/examples/js/custom-proxy-url.js +0 -23
  152. package/examples/js/delta-maintenance-margin-rate-max-leverage.js +0 -60
  153. package/examples/js/env-variables.js +0 -26
  154. package/examples/js/error-handling.js +0 -89
  155. package/examples/js/exchange-capabilities.js +0 -135
  156. package/examples/js/exchanges-by-volume.js +0 -60
  157. package/examples/js/exchanges.js +0 -40
  158. package/examples/js/fetch-all-balances.js +0 -219
  159. package/examples/js/fetch-all-tickers-to-files-2.js +0 -53
  160. package/examples/js/fetch-all-tickers-to-files.js +0 -77
  161. package/examples/js/fetch-balance.js +0 -28
  162. package/examples/js/fetch-create-deposit-address.js +0 -101
  163. package/examples/js/fetch-from-many-exchanges-simultaneously.js +0 -21
  164. package/examples/js/fetch-funding-rate-history.js +0 -25
  165. package/examples/js/fetch-futures/prettier.config.js +0 -5
  166. package/examples/js/fetch-futures/src/index.js +0 -25
  167. package/examples/js/fetch-ohlcv-from-to-mark-index-premium.js +0 -72
  168. package/examples/js/fetch-ohlcv-many-exchanges-continuosly.js +0 -39
  169. package/examples/js/fetch-ohlcv.js +0 -16
  170. package/examples/js/fetch-okex-futures.js +0 -22
  171. package/examples/js/fetch-orders.js +0 -27
  172. package/examples/js/fetch-ticker-from-multiple-exchanges.js +0 -35
  173. package/examples/js/fetch-ticker-where-available.js +0 -75
  174. package/examples/js/fetch-tickers/build/index.js +0 -19
  175. package/examples/js/fetch-tickers/prettier.config.js +0 -5
  176. package/examples/js/fetch-tickers/src/index.js +0 -17
  177. package/examples/js/gateio-create-batch-order.js +0 -43
  178. package/examples/js/gateio-futures.js +0 -49
  179. package/examples/js/gateio-open-close-contract.js +0 -49
  180. package/examples/js/gateio-swaps.js +0 -74
  181. package/examples/js/gdax-fetch-trades-pagination.js +0 -29
  182. package/examples/js/hitbtc2-withdraw.js +0 -61
  183. package/examples/js/how-to-import-one-exchange-esm.js +0 -10
  184. package/examples/js/huobi-futures.js +0 -71
  185. package/examples/js/huobi-open-close-contract.js +0 -63
  186. package/examples/js/huobi-swaps.js +0 -70
  187. package/examples/js/huobipro-market-buy-sell-fetch-trading-limits.js +0 -98
  188. package/examples/js/hybridCJSExample.cjs +0 -19
  189. package/examples/js/hybridESMExample.js +0 -19
  190. package/examples/js/idex-fetch-balance.js +0 -13
  191. package/examples/js/instantiate-all-at-once.js +0 -46
  192. package/examples/js/instantiate-all-from-json.js +0 -31
  193. package/examples/js/kraken-create-and-close-position.js +0 -54
  194. package/examples/js/kraken-fetch-order-trades.js +0 -33
  195. package/examples/js/kraken-margin-trading.js +0 -89
  196. package/examples/js/kucoin-rate-limit.js +0 -38
  197. package/examples/js/latoken-example.js +0 -108
  198. package/examples/js/live-orderbook.js +0 -106
  199. package/examples/js/live-ticker.js +0 -80
  200. package/examples/js/live-tickers.js +0 -74
  201. package/examples/js/load-all-contracts.js +0 -41
  202. package/examples/js/load-all-symbols-at-once.js +0 -69
  203. package/examples/js/load-all-tickers-at-once.js +0 -91
  204. package/examples/js/load-markets-to-files.js +0 -57
  205. package/examples/js/looping-over-all-symbols-of-specific-exchanges.js +0 -61
  206. package/examples/js/looping-over-specific-symbols-of-all-exchanges.js +0 -91
  207. package/examples/js/margin-loan-borrow-buy-sell-repay.js +0 -70
  208. package/examples/js/market-status-and-currency-status.js +0 -29
  209. package/examples/js/ohlcv-console-chart.js +0 -29
  210. package/examples/js/okex-fetch-closed-orders-archive.js +0 -31
  211. package/examples/js/okex-transfer.js +0 -51
  212. package/examples/js/okx-poll-fetch-my-trades.js +0 -37
  213. package/examples/js/okx-poll-rate-limit.js +0 -48
  214. package/examples/js/order-book-extra-level-depth-param.js +0 -20
  215. package/examples/js/phemex-create-order-position-with-takeprofit-stoploss.js +0 -49
  216. package/examples/js/poll-ohlcv.js +0 -43
  217. package/examples/js/poloniex-fetch-order-books.js +0 -35
  218. package/examples/js/poloniex-limits-amount-min.js +0 -62
  219. package/examples/js/proxy-round-robin.js +0 -98
  220. package/examples/js/proxy-usage.js +0 -32
  221. package/examples/js/sample-local-proxy-server-with-cors.js +0 -12
  222. package/examples/js/search-all-exchanges.js +0 -159
  223. package/examples/js/shared-load-markets.js +0 -80
  224. package/examples/js/sort-swap-markets-by-hourly-price-change.js +0 -55
  225. package/examples/js/symbols.js +0 -110
  226. package/examples/js/theocean.js +0 -41
  227. package/examples/js/tickers.js +0 -106
  228. package/examples/js/validate-paginated-data.js +0 -61
  229. package/examples/js/watch-OHLCV-For-Symbols.js +0 -15
  230. package/examples/js/watch-OHLCV.js +0 -12
  231. package/examples/js/watch-OrderBook-For-Symbols.js +0 -11
  232. package/examples/js/watch-Trades-For-Symbols.js +0 -11
  233. package/examples/js/watch-tickers.js +0 -11
  234. package/examples/js/watchOHLCVForSymbols.js +0 -15
  235. package/examples/js/watchOrderBookForSymbols.js +0 -11
  236. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts +0 -2
  237. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts.map +0 -1
  238. package/examples/js/watchPositions-many-exchanges-continuosly.js +0 -49
  239. package/examples/js/watchPositions.d.ts +0 -2
  240. package/examples/js/watchPositions.d.ts.map +0 -1
  241. package/examples/js/watchPositions.js +0 -13
  242. package/examples/js/watchPositionsForSymbols.d.ts +0 -2
  243. package/examples/js/watchPositionsForSymbols.d.ts.map +0 -1
  244. package/examples/js/watchPositionsForSymbols.js +0 -14
  245. package/examples/js/watchTradesForSymbols.js +0 -11
  246. package/examples/js/withdraw-from-one-exchange-to-another.js +0 -50
  247. package/examples/php/README.md +0 -7
  248. package/examples/py/README.md +0 -15
  249. package/examples/py/playing_with_ccxt_example.ipynb +0 -222
  250. package/examples/ts/.eslintrc +0 -111
  251. package/examples/ts/benchmark.ts +0 -134
  252. package/examples/ts/build-ohlcv-bars.ts +0 -53
  253. package/examples/ts/cli.ts +0 -397
  254. package/examples/ts/compare-two-exchanges-capabilities.ts +0 -36
  255. package/examples/ts/create-order-position-with-takeprofit-stoploss.ts +0 -89
  256. package/examples/ts/create-order-ws-example.ts +0 -33
  257. package/examples/ts/create-orders-example.ts +0 -21
  258. package/examples/ts/create-trailing-amount-order.ts +0 -37
  259. package/examples/ts/create-trailing-percent-order.ts +0 -37
  260. package/examples/ts/custom-proxy-agent-for-js.ts +0 -14
  261. package/examples/ts/fetch-futures/package-lock.json +0 -116
  262. package/examples/ts/fetch-futures/package.json +0 -34
  263. package/examples/ts/fetch-futures/prettier.config.js +0 -4
  264. package/examples/ts/fetch-futures/src/index.ts +0 -28
  265. package/examples/ts/fetch-futures/tsconfig.json +0 -28
  266. package/examples/ts/fetch-ohlcv-many-exchanges-continuosly.ts +0 -44
  267. package/examples/ts/fetch-ohlcv.ts +0 -17
  268. package/examples/ts/fetch-tickers/package-lock.json +0 -116
  269. package/examples/ts/fetch-tickers/package.json +0 -34
  270. package/examples/ts/fetch-tickers/prettier.config.js +0 -4
  271. package/examples/ts/fetch-tickers/src/index.ts +0 -21
  272. package/examples/ts/fetch-tickers/tsconfig.json +0 -28
  273. package/examples/ts/how-to-import-one-exchange-esm.ts +0 -11
  274. package/examples/ts/kraken-create-and-close-position.ts +0 -69
  275. package/examples/ts/margin-loan-borrow-buy-sell-repay.ts +0 -72
  276. package/examples/ts/nextjs-page-router/.eslintrc.json +0 -3
  277. package/examples/ts/nextjs-page-router/README.md +0 -43
  278. package/examples/ts/nextjs-page-router/next.config.js +0 -6
  279. package/examples/ts/nextjs-page-router/package-lock.json +0 -7425
  280. package/examples/ts/nextjs-page-router/package.json +0 -28
  281. package/examples/ts/nextjs-page-router/postcss.config.js +0 -6
  282. package/examples/ts/nextjs-page-router/public/favicon.ico +0 -0
  283. package/examples/ts/nextjs-page-router/src/pages/_app.tsx +0 -6
  284. package/examples/ts/nextjs-page-router/src/pages/_document.tsx +0 -13
  285. package/examples/ts/nextjs-page-router/src/pages/balance.tsx +0 -46
  286. package/examples/ts/nextjs-page-router/src/pages/index.tsx +0 -8
  287. package/examples/ts/nextjs-page-router/src/pages/tickers.tsx +0 -61
  288. package/examples/ts/nextjs-page-router/src/styles/globals.css +0 -27
  289. package/examples/ts/nextjs-page-router/tailwind.config.ts +0 -20
  290. package/examples/ts/nextjs-page-router/tsconfig.json +0 -22
  291. package/examples/ts/phemex-create-order-position-with-takeprofit-stoploss.ts +0 -62
  292. package/examples/ts/proxy-usage.ts +0 -41
  293. package/examples/ts/sample-local-proxy-server-with-cors.ts +0 -15
  294. package/examples/ts/watch-OHLCV-For-Symbols.ts +0 -17
  295. package/examples/ts/watch-OHLCV.ts +0 -14
  296. package/examples/ts/watch-OrderBook-For-Symbols.ts +0 -13
  297. package/examples/ts/watch-Trades-For-Symbols.ts +0 -13
  298. package/examples/ts/watch-tickers.ts +0 -13
  299. package/examples/ts/watchPositions-many-exchanges-continuosly.ts +0 -53
  300. package/examples/ts/watchPositions.ts +0 -15
  301. package/examples/ts/watchPositionsForSymbols.ts +0 -16
  302. package/examples/tsconfig.json +0 -27
  303. package/examples2md.js +0 -79
  304. package/gource.sh +0 -3
  305. package/index.html +0 -7
  306. package/jsdoc2md.js +0 -122
  307. package/multilang.sh +0 -164
  308. package/pro-tests.json +0 -57
  309. package/pyproject.toml +0 -8
  310. package/rollup.config.js +0 -60
  311. package/skip-tests.json +0 -1653
  312. package/test-commonjs.cjs +0 -65
  313. package/tests-manager.sh +0 -96
  314. package/tsconfig.json +0 -111
  315. package/webpack.config.js +0 -46
@@ -35,6 +35,7 @@ class okx extends okx$1 {
35
35
  'cancelOrders': true,
36
36
  'closeAllPositions': false,
37
37
  'closePosition': true,
38
+ 'createConvertTrade': true,
38
39
  'createDepositAddress': false,
39
40
  'createMarketBuyOrderWithCost': true,
40
41
  'createMarketSellOrderWithCost': true,
@@ -7658,6 +7659,59 @@ class okx extends okx$1 {
7658
7659
  const toCurrency = this.currency(toCurrencyId);
7659
7660
  return this.parseConversion(result, fromCurrency, toCurrency);
7660
7661
  }
7662
+ async createConvertTrade(id, fromCode, toCode, amount = undefined, params = {}) {
7663
+ /**
7664
+ * @method
7665
+ * @name okx#createConvertTrade
7666
+ * @description convert from one currency to another
7667
+ * @see https://www.okx.com/docs-v5/en/#funding-account-rest-api-convert-trade
7668
+ * @param {string} id the id of the trade that you want to make
7669
+ * @param {string} fromCode the currency that you want to sell and convert from
7670
+ * @param {string} toCode the currency that you want to buy and convert into
7671
+ * @param {float} [amount] how much you want to trade in units of the from currency
7672
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
7673
+ * @returns {object} a [conversion structure]{@link https://docs.ccxt.com/#/?id=conversion-structure}
7674
+ */
7675
+ await this.loadMarkets();
7676
+ const request = {
7677
+ 'quoteId': id,
7678
+ 'baseCcy': fromCode,
7679
+ 'quoteCcy': toCode,
7680
+ 'szCcy': fromCode,
7681
+ 'sz': this.numberToString(amount),
7682
+ 'side': 'sell',
7683
+ };
7684
+ const response = await this.privatePostAssetConvertTrade(this.extend(request, params));
7685
+ //
7686
+ // {
7687
+ // "code": "0",
7688
+ // "data": [
7689
+ // {
7690
+ // "baseCcy": "ETH",
7691
+ // "clTReqId": "",
7692
+ // "fillBaseSz": "0.01023052",
7693
+ // "fillPx": "2932.40104429",
7694
+ // "fillQuoteSz": "30",
7695
+ // "instId": "ETH-USDT",
7696
+ // "quoteCcy": "USDT",
7697
+ // "quoteId": "quoterETH-USDT16461885104612381",
7698
+ // "side": "buy",
7699
+ // "state": "fullyFilled",
7700
+ // "tradeId": "trader16461885203381437",
7701
+ // "ts": "1646188520338"
7702
+ // }
7703
+ // ],
7704
+ // "msg": ""
7705
+ // }
7706
+ //
7707
+ const data = this.safeList(response, 'data', []);
7708
+ const result = this.safeDict(data, 0, {});
7709
+ const fromCurrencyId = this.safeString(result, 'baseCcy', fromCode);
7710
+ const fromCurrency = this.currency(fromCurrencyId);
7711
+ const toCurrencyId = this.safeString(result, 'quoteCcy', toCode);
7712
+ const toCurrency = this.currency(toCurrencyId);
7713
+ return this.parseConversion(result, fromCurrency, toCurrency);
7714
+ }
7661
7715
  parseConversion(conversion, fromCurrency = undefined, toCurrency = undefined) {
7662
7716
  //
7663
7717
  // fetchConvertQuote
@@ -7678,7 +7732,24 @@ class okx extends okx$1 {
7678
7732
  // "ttlMs": "10000"
7679
7733
  // }
7680
7734
  //
7681
- const timestamp = this.safeInteger(conversion, 'quoteTime');
7735
+ // createConvertTrade
7736
+ //
7737
+ // {
7738
+ // "baseCcy": "ETH",
7739
+ // "clTReqId": "",
7740
+ // "fillBaseSz": "0.01023052",
7741
+ // "fillPx": "2932.40104429",
7742
+ // "fillQuoteSz": "30",
7743
+ // "instId": "ETH-USDT",
7744
+ // "quoteCcy": "USDT",
7745
+ // "quoteId": "quoterETH-USDT16461885104612381",
7746
+ // "side": "buy",
7747
+ // "state": "fullyFilled",
7748
+ // "tradeId": "trader16461885203381437",
7749
+ // "ts": "1646188520338"
7750
+ // }
7751
+ //
7752
+ const timestamp = this.safeInteger2(conversion, 'quoteTime', 'ts');
7682
7753
  const fromCoin = this.safeString(conversion, 'baseCcy');
7683
7754
  const fromCode = this.safeCurrencyCode(fromCoin, fromCurrency);
7684
7755
  const to = this.safeString(conversion, 'quoteCcy');
@@ -7687,12 +7758,12 @@ class okx extends okx$1 {
7687
7758
  'info': conversion,
7688
7759
  'timestamp': timestamp,
7689
7760
  'datetime': this.iso8601(timestamp),
7690
- 'id': this.safeString(conversion, 'clQReqId'),
7761
+ 'id': this.safeStringN(conversion, ['clQReqId', 'tradeId', 'quoteId']),
7691
7762
  'fromCurrency': fromCode,
7692
- 'fromAmount': this.safeNumber(conversion, 'baseSz'),
7763
+ 'fromAmount': this.safeNumber2(conversion, 'baseSz', 'fillBaseSz'),
7693
7764
  'toCurrency': toCode,
7694
- 'toAmount': this.safeNumber(conversion, 'quoteSz'),
7695
- 'price': this.safeNumber(conversion, 'cnvtPx'),
7765
+ 'toAmount': this.safeNumber2(conversion, 'quoteSz', 'fillQuoteSz'),
7766
+ 'price': this.safeNumber2(conversion, 'cnvtPx', 'fillPx'),
7696
7767
  'fee': undefined,
7697
7768
  };
7698
7769
  }
@@ -134,7 +134,7 @@ class kraken extends kraken$1 {
134
134
  'pair': market['wsId'],
135
135
  'volume': this.amountToPrecision(symbol, amount),
136
136
  };
137
- [request, params] = this.orderRequest('createOrderWs()', symbol, type, request, price, params);
137
+ [request, params] = this.orderRequest('createOrderWs', symbol, type, request, price, params);
138
138
  return await this.watch(url, messageHash, this.extend(request, params), messageHash);
139
139
  }
140
140
  handleCreateEditOrder(client, message) {
@@ -190,7 +190,7 @@ class kraken extends kraken$1 {
190
190
  'pair': market['wsId'],
191
191
  'volume': this.amountToPrecision(symbol, amount),
192
192
  };
193
- [request, params] = this.orderRequest('editOrderWs()', symbol, type, request, price, params);
193
+ [request, params] = this.orderRequest('editOrderWs', symbol, type, request, price, params);
194
194
  return await this.watch(url, messageHash, this.extend(request, params), messageHash);
195
195
  }
196
196
  async cancelOrdersWs(ids, symbol = undefined, params = {}) {
@@ -36,6 +36,7 @@ class woo extends woo$1 {
36
36
  'cancelWithdraw': false,
37
37
  'closeAllPositions': false,
38
38
  'closePosition': false,
39
+ 'createConvertTrade': true,
39
40
  'createDepositAddress': false,
40
41
  'createMarketBuyOrderWithCost': true,
41
42
  'createMarketOrder': false,
@@ -3029,6 +3030,37 @@ class woo extends woo$1 {
3029
3030
  const toCurrency = this.currency(toCurrencyId);
3030
3031
  return this.parseConversion(data, fromCurrency, toCurrency);
3031
3032
  }
3033
+ async createConvertTrade(id, fromCode, toCode, amount = undefined, params = {}) {
3034
+ /**
3035
+ * @method
3036
+ * @name woo#createConvertTrade
3037
+ * @description convert from one currency to another
3038
+ * @see https://docs.woo.org/#send-quote-rft
3039
+ * @param {string} id the id of the trade that you want to make
3040
+ * @param {string} fromCode the currency that you want to sell and convert from
3041
+ * @param {string} toCode the currency that you want to buy and convert into
3042
+ * @param {float} [amount] how much you want to trade in units of the from currency
3043
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3044
+ * @returns {object} a [conversion structure]{@link https://docs.ccxt.com/#/?id=conversion-structure}
3045
+ */
3046
+ await this.loadMarkets();
3047
+ const request = {
3048
+ 'quoteId': id,
3049
+ };
3050
+ const response = await this.v3PrivatePostConvertRft(this.extend(request, params));
3051
+ //
3052
+ // {
3053
+ // "success": true,
3054
+ // "data": {
3055
+ // "quoteId": 123123123,
3056
+ // "counterPartyId": "",
3057
+ // "rftAccepted": 1 // 1 -> success; 2 -> processing; 3 -> fail
3058
+ // }
3059
+ // }
3060
+ //
3061
+ const data = this.safeDict(response, 'data', {});
3062
+ return this.parseConversion(data);
3063
+ }
3032
3064
  parseConversion(conversion, fromCurrency = undefined, toCurrency = undefined) {
3033
3065
  //
3034
3066
  // fetchConvertQuote
@@ -3045,6 +3077,14 @@ class woo extends woo$1 {
3045
3077
  // "message": 1659084466000
3046
3078
  // }
3047
3079
  //
3080
+ // createConvertTrade
3081
+ //
3082
+ // {
3083
+ // "quoteId": 123123123,
3084
+ // "counterPartyId": "",
3085
+ // "rftAccepted": 1 // 1 -> success; 2 -> processing; 3 -> fail
3086
+ // }
3087
+ //
3048
3088
  const timestamp = this.safeInteger(conversion, 'expireTimestamp');
3049
3089
  const fromCoin = this.safeString(conversion, 'sellToken');
3050
3090
  const fromCode = this.safeCurrencyCode(fromCoin, fromCurrency);
package/js/ccxt.d.ts CHANGED
@@ -4,7 +4,7 @@ import * as functions from './src/base/functions.js';
4
4
  import * as errors from './src/base/errors.js';
5
5
  import type { Market, Trade, Fee, Ticker, OrderBook, Order, Transaction, Tickers, Currency, Balance, DepositAddress, WithdrawalResponse, DepositAddressResponse, OHLCV, Balances, PartialBalances, Dictionary, MinMax, Position, FundingRateHistory, Liquidation, FundingHistory, MarginMode, Greeks, Leverage, Leverages, Option, OptionChain, Conversion } from './src/base/types.js';
6
6
  import { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, ProxyError, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout } from './src/base/errors.js';
7
- declare const version = "4.2.99";
7
+ declare const version = "4.3.0";
8
8
  import ace from './src/ace.js';
9
9
  import alpaca from './src/alpaca.js';
10
10
  import ascendex from './src/ascendex.js';
package/js/ccxt.js CHANGED
@@ -38,7 +38,7 @@ import * as errors from './src/base/errors.js';
38
38
  import { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, ProxyError, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout } from './src/base/errors.js';
39
39
  //-----------------------------------------------------------------------------
40
40
  // this is updated by vss.js when building
41
- const version = '4.2.100';
41
+ const version = '4.3.1';
42
42
  Exchange.ccxtVersion = version;
43
43
  //-----------------------------------------------------------------------------
44
44
  import ace from './src/ace.js';
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/binance.js';
2
- import type { TransferEntry, Int, OrderSide, Balances, OrderType, Trade, OHLCV, Order, FundingRateHistory, OpenInterest, Liquidation, OrderRequest, Str, Transaction, Ticker, OrderBook, Tickers, Market, Greeks, Strings, Currency, MarketInterface, MarginMode, MarginModes, Leverage, Leverages, Num, Option, MarginModification, TradingFeeInterface, Currencies, TradingFees } from './base/types.js';
2
+ import type { TransferEntry, Int, OrderSide, Balances, OrderType, Trade, OHLCV, Order, FundingRateHistory, OpenInterest, Liquidation, OrderRequest, Str, Transaction, Ticker, OrderBook, Tickers, Market, Greeks, Strings, Currency, MarketInterface, MarginMode, MarginModes, Leverage, Leverages, Num, Option, MarginModification, TradingFeeInterface, Currencies, TradingFees, Conversion } from './base/types.js';
3
3
  /**
4
4
  * @class binance
5
5
  * @augments Exchange
@@ -440,4 +440,6 @@ export default class binance extends Exchange {
440
440
  };
441
441
  fetchMarginAdjustmentHistory(symbol?: Str, type?: Str, since?: Num, limit?: Num, params?: {}): Promise<MarginModification[]>;
442
442
  fetchConvertCurrencies(params?: {}): Promise<Currencies>;
443
+ createConvertTrade(id: string, fromCode: string, toCode: string, amount?: Num, params?: {}): Promise<Conversion>;
444
+ parseConversion(conversion: any, fromCurrency?: Currency, toCurrency?: Currency): Conversion;
443
445
  }
package/js/src/binance.js CHANGED
@@ -43,6 +43,7 @@ export default class binance extends Exchange {
43
43
  'cancelOrders': true,
44
44
  'closeAllPositions': false,
45
45
  'closePosition': false,
46
+ 'createConvertTrade': true,
46
47
  'createDepositAddress': false,
47
48
  'createLimitBuyOrder': true,
48
49
  'createLimitSellOrder': true,
@@ -12649,4 +12650,59 @@ export default class binance extends Exchange {
12649
12650
  }
12650
12651
  return result;
12651
12652
  }
12653
+ async createConvertTrade(id, fromCode, toCode, amount = undefined, params = {}) {
12654
+ /**
12655
+ * @method
12656
+ * @name binance#createConvertTrade
12657
+ * @description convert from one currency to another
12658
+ * @see https://binance-docs.github.io/apidocs/spot/en/#busd-convert-trade
12659
+ * @param {string} id the id of the trade that you want to make
12660
+ * @param {string} fromCode the currency that you want to sell and convert from
12661
+ * @param {string} toCode the currency that you want to buy and convert into
12662
+ * @param {float} [amount] how much you want to trade in units of the from currency
12663
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
12664
+ * @returns {object} a [conversion structure]{@link https://docs.ccxt.com/#/?id=conversion-structure}
12665
+ */
12666
+ await this.loadMarkets();
12667
+ const request = {
12668
+ 'clientTranId': id,
12669
+ 'asset': fromCode,
12670
+ 'targetAsset': toCode,
12671
+ 'amount': amount,
12672
+ };
12673
+ const response = await this.sapiPostAssetConvertTransfer(this.extend(request, params));
12674
+ //
12675
+ // {
12676
+ // "tranId": 118263407119,
12677
+ // "status": "S"
12678
+ // }
12679
+ //
12680
+ const fromCurrency = this.currency(fromCode);
12681
+ const toCurrency = this.currency(toCode);
12682
+ return this.parseConversion(response, fromCurrency, toCurrency);
12683
+ }
12684
+ parseConversion(conversion, fromCurrency = undefined, toCurrency = undefined) {
12685
+ //
12686
+ // createConvertTrade
12687
+ //
12688
+ // {
12689
+ // "tranId": 118263407119,
12690
+ // "status": "S"
12691
+ // }
12692
+ //
12693
+ const fromCode = this.safeCurrencyCode(undefined, fromCurrency);
12694
+ const toCode = this.safeCurrencyCode(undefined, toCurrency);
12695
+ return {
12696
+ 'info': conversion,
12697
+ 'timestamp': undefined,
12698
+ 'datetime': undefined,
12699
+ 'id': this.safeString(conversion, 'tranId'),
12700
+ 'fromCurrency': fromCode,
12701
+ 'fromAmount': undefined,
12702
+ 'toCurrency': toCode,
12703
+ 'toAmount': undefined,
12704
+ 'price': undefined,
12705
+ 'fee': undefined,
12706
+ };
12707
+ }
12652
12708
  }
package/js/src/bingx.js CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  // ---------------------------------------------------------------------------
8
8
  import Exchange from './abstract/bingx.js';
9
- import { AuthenticationError, PermissionDenied, AccountSuspended, ExchangeError, InsufficientFunds, BadRequest, OrderNotFound, DDoSProtection, BadSymbol, ArgumentsRequired, NotSupported } from './base/errors.js';
9
+ import { AuthenticationError, PermissionDenied, AccountSuspended, ExchangeError, InsufficientFunds, BadRequest, OrderNotFound, DDoSProtection, BadSymbol, ArgumentsRequired, NotSupported, ExchangeNotAvailable } from './base/errors.js';
10
10
  import { Precise } from './base/Precise.js';
11
11
  import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
12
12
  import { DECIMAL_PLACES } from './base/functions/number.js';
@@ -387,7 +387,7 @@ export default class bingx extends Exchange {
387
387
  '100400': BadRequest,
388
388
  '100421': BadSymbol,
389
389
  '100440': ExchangeError,
390
- '100500': ExchangeError,
390
+ '100500': ExchangeNotAvailable,
391
391
  '100503': ExchangeError,
392
392
  '80001': BadRequest,
393
393
  '80012': InsufficientFunds,
@@ -3979,7 +3979,7 @@ export default class bingx extends Exchange {
3979
3979
  let market = undefined;
3980
3980
  if (symbol !== undefined) {
3981
3981
  market = this.market(symbol);
3982
- request['symbol'] = symbol;
3982
+ request['symbol'] = market['id'];
3983
3983
  }
3984
3984
  if (since !== undefined) {
3985
3985
  request['startTime'] = since;
@@ -283,6 +283,7 @@ export default class bitget extends Exchange {
283
283
  fetchMarginMode(symbol: string, params?: {}): Promise<MarginMode>;
284
284
  parseMarginMode(marginMode: any, market?: any): MarginMode;
285
285
  fetchConvertQuote(fromCode: string, toCode: string, amount?: Num, params?: {}): Promise<Conversion>;
286
+ createConvertTrade(id: string, fromCode: string, toCode: string, amount?: Num, params?: {}): Promise<Conversion>;
286
287
  parseConversion(conversion: any, fromCurrency?: Currency, toCurrency?: Currency): Conversion;
287
288
  fetchConvertCurrencies(params?: {}): Promise<Currencies>;
288
289
  handleErrors(code: any, reason: any, url: any, method: any, headers: any, body: any, response: any, requestHeaders: any, requestBody: any): any;
package/js/src/bitget.js CHANGED
@@ -40,6 +40,7 @@ export default class bitget extends Exchange {
40
40
  'cancelOrders': true,
41
41
  'closeAllPositions': true,
42
42
  'closePosition': true,
43
+ 'createConvertTrade': true,
43
44
  'createDepositAddress': false,
44
45
  'createMarketBuyOrderWithCost': true,
45
46
  'createMarketOrderWithCost': false,
@@ -8461,8 +8462,8 @@ export default class bitget extends Exchange {
8461
8462
  */
8462
8463
  await this.loadMarkets();
8463
8464
  const request = {
8464
- 'fromCoin': fromCode.toUpperCase(),
8465
- 'toCoin': toCode.toUpperCase(),
8465
+ 'fromCoin': fromCode,
8466
+ 'toCoin': toCode,
8466
8467
  'fromCoinSize': this.numberToString(amount),
8467
8468
  };
8468
8469
  const response = await this.privateConvertGetV2ConvertQuotedPrice(this.extend(request, params));
@@ -8489,6 +8490,58 @@ export default class bitget extends Exchange {
8489
8490
  const toCurrency = this.currency(toCurrencyId);
8490
8491
  return this.parseConversion(data, fromCurrency, toCurrency);
8491
8492
  }
8493
+ async createConvertTrade(id, fromCode, toCode, amount = undefined, params = {}) {
8494
+ /**
8495
+ * @method
8496
+ * @name bitget#createConvertTrade
8497
+ * @description convert from one currency to another
8498
+ * @see https://www.bitget.com/api-doc/common/convert/Trade
8499
+ * @param {string} id the id of the trade that you want to make
8500
+ * @param {string} fromCode the currency that you want to sell and convert from
8501
+ * @param {string} toCode the currency that you want to buy and convert into
8502
+ * @param {float} amount how much you want to trade in units of the from currency
8503
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
8504
+ * @param {string} params.price the price of the conversion, obtained from fetchConvertQuote()
8505
+ * @param {string} params.toAmount the amount you want to trade in units of the toCurrency, obtained from fetchConvertQuote()
8506
+ * @returns {object} a [conversion structure]{@link https://docs.ccxt.com/#/?id=conversion-structure}
8507
+ */
8508
+ await this.loadMarkets();
8509
+ const price = this.safeString2(params, 'price', 'cnvtPrice');
8510
+ if (price === undefined) {
8511
+ throw new ArgumentsRequired(this.id + ' createConvertTrade() requires a price parameter');
8512
+ }
8513
+ const toAmount = this.safeString2(params, 'toAmount', 'toCoinSize');
8514
+ if (toAmount === undefined) {
8515
+ throw new ArgumentsRequired(this.id + ' createConvertTrade() requires a toAmount parameter');
8516
+ }
8517
+ params = this.omit(params, ['price', 'toAmount']);
8518
+ const request = {
8519
+ 'traceId': id,
8520
+ 'fromCoin': fromCode,
8521
+ 'toCoin': toCode,
8522
+ 'fromCoinSize': this.numberToString(amount),
8523
+ 'toCoinSize': toAmount,
8524
+ 'cnvtPrice': price,
8525
+ };
8526
+ const response = await this.privateConvertPostV2ConvertTrade(this.extend(request, params));
8527
+ //
8528
+ // {
8529
+ // "code": "00000",
8530
+ // "msg": "success",
8531
+ // "requestTime": 1712123746203,
8532
+ // "data": {
8533
+ // "cnvtPrice": "0.99940076",
8534
+ // "toCoin": "USDC",
8535
+ // "toCoinSize": "4.99700379",
8536
+ // "ts": "1712123746217"
8537
+ // }
8538
+ // }
8539
+ //
8540
+ const data = this.safeDict(response, 'data', {});
8541
+ const toCurrencyId = this.safeString(data, 'toCoin', toCode);
8542
+ const toCurrency = this.currency(toCurrencyId);
8543
+ return this.parseConversion(data, undefined, toCurrency);
8544
+ }
8492
8545
  parseConversion(conversion, fromCurrency = undefined, toCurrency = undefined) {
8493
8546
  //
8494
8547
  // fetchConvertQuote
@@ -8503,6 +8556,15 @@ export default class bitget extends Exchange {
8503
8556
  // "fee": "0"
8504
8557
  // }
8505
8558
  //
8559
+ // createConvertTrade
8560
+ //
8561
+ // {
8562
+ // "cnvtPrice": "0.99940076",
8563
+ // "toCoin": "USDC",
8564
+ // "toCoinSize": "4.99700379",
8565
+ // "ts": "1712123746217"
8566
+ // }
8567
+ //
8506
8568
  const timestamp = this.safeInteger(conversion, 'ts');
8507
8569
  const fromCoin = this.safeString(conversion, 'fromCoin');
8508
8570
  const fromCode = this.safeCurrencyCode(fromCoin, fromCurrency);
package/js/src/bybit.js CHANGED
@@ -5381,7 +5381,7 @@ export default class bybit extends Exchange {
5381
5381
  const coin = this.safeString(result, 'coin');
5382
5382
  currency = this.currency(coin);
5383
5383
  const parsed = this.parseDepositAddresses(chains, [currency['code']], false, {
5384
- 'currency': currency['id'],
5384
+ 'currency': currency['code'],
5385
5385
  });
5386
5386
  return this.indexBy(parsed, 'network');
5387
5387
  }
package/js/src/coinex.js CHANGED
@@ -615,55 +615,52 @@ export default class coinex extends Exchange {
615
615
  * @method
616
616
  * @name coinex#fetchMarkets
617
617
  * @description retrieves data on all markets for coinex
618
- * @see https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot001_market002_all_market_info
619
- * @see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http006_market_list
618
+ * @see https://docs.coinex.com/api/v2/spot/market/http/list-market
619
+ * @see https://docs.coinex.com/api/v2/futures/market/http/list-market
620
620
  * @param {object} [params] extra parameters specific to the exchange API endpoint
621
621
  * @returns {object[]} an array of objects representing market data
622
622
  */
623
- let promises = [
623
+ const promisesUnresolved = [
624
624
  this.fetchSpotMarkets(params),
625
625
  this.fetchContractMarkets(params),
626
626
  ];
627
- promises = await Promise.all(promises);
627
+ const promises = await Promise.all(promisesUnresolved);
628
628
  const spotMarkets = promises[0];
629
629
  const swapMarkets = promises[1];
630
630
  return this.arrayConcat(spotMarkets, swapMarkets);
631
631
  }
632
632
  async fetchSpotMarkets(params) {
633
- const response = await this.v1PublicGetMarketInfo(params);
633
+ const response = await this.v2PublicGetSpotMarket(params);
634
634
  //
635
635
  // {
636
636
  // "code": 0,
637
- // "data": {
638
- // "WAVESBTC": {
639
- // "name": "WAVESBTC",
640
- // "min_amount": "1",
641
- // "maker_fee_rate": "0.001",
642
- // "taker_fee_rate": "0.001",
643
- // "pricing_name": "BTC",
644
- // "pricing_decimal": 8,
645
- // "trading_name": "WAVES",
646
- // "trading_decimal": 8
647
- // }
648
- // }
637
+ // "data": [
638
+ // {
639
+ // "base_ccy": "SORA",
640
+ // "base_ccy_precision": 8,
641
+ // "is_amm_available": true,
642
+ // "is_margin_available": false,
643
+ // "maker_fee_rate": "0.003",
644
+ // "market": "SORAUSDT",
645
+ // "min_amount": "500",
646
+ // "quote_ccy": "USDT",
647
+ // "quote_ccy_precision": 6,
648
+ // "taker_fee_rate": "0.003"
649
+ // },
650
+ // ],
651
+ // "message": "OK"
649
652
  // }
650
653
  //
651
- const markets = this.safeValue(response, 'data', {});
654
+ const markets = this.safeList(response, 'data', []);
652
655
  const result = [];
653
- const keys = Object.keys(markets);
654
- for (let i = 0; i < keys.length; i++) {
655
- const key = keys[i];
656
- const market = markets[key];
657
- const id = this.safeString(market, 'name');
658
- const tradingName = this.safeString(market, 'trading_name');
659
- const baseId = tradingName;
660
- const quoteId = this.safeString(market, 'pricing_name');
656
+ for (let i = 0; i < markets.length; i++) {
657
+ const market = markets[i];
658
+ const id = this.safeString(market, 'market');
659
+ const baseId = this.safeString(market, 'base_ccy');
660
+ const quoteId = this.safeString(market, 'quote_ccy');
661
661
  const base = this.safeCurrencyCode(baseId);
662
662
  const quote = this.safeCurrencyCode(quoteId);
663
- let symbol = base + '/' + quote;
664
- if (tradingName === id) {
665
- symbol = id;
666
- }
663
+ const symbol = base + '/' + quote;
667
664
  result.push({
668
665
  'id': id,
669
666
  'symbol': symbol,
@@ -691,8 +688,8 @@ export default class coinex extends Exchange {
691
688
  'strike': undefined,
692
689
  'optionType': undefined,
693
690
  'precision': {
694
- 'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'trading_decimal'))),
695
- 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'pricing_decimal'))),
691
+ 'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'base_ccy_precision'))),
692
+ 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'quote_ccy_precision'))),
696
693
  },
697
694
  'limits': {
698
695
  'leverage': {
@@ -719,45 +716,43 @@ export default class coinex extends Exchange {
719
716
  return result;
720
717
  }
721
718
  async fetchContractMarkets(params) {
722
- const response = await this.v1PerpetualPublicGetMarketList(params);
719
+ const response = await this.v2PublicGetFuturesMarket(params);
723
720
  //
724
721
  // {
725
722
  // "code": 0,
726
723
  // "data": [
727
724
  // {
728
- // "name": "BTCUSD",
729
- // "type": 2, // 1: USDT-M Contracts, 2: Coin-M Contracts
730
- // "leverages": ["3", "5", "8", "10", "15", "20", "30", "50", "100"],
731
- // "stock": "BTC",
732
- // "money": "USD",
733
- // "fee_prec": 5,
734
- // "stock_prec": 8,
735
- // "money_prec": 1,
736
- // "amount_prec": 0,
737
- // "amount_min": "10",
738
- // "multiplier": "1",
739
- // "tick_size": "0.1", // Min. Price Increment
740
- // "available": true
725
+ // "base_ccy": "BTC",
726
+ // "base_ccy_precision": 8,
727
+ // "contract_type": "inverse",
728
+ // "leverage": ["1","2","3","5","8","10","15","20","30","50","100"],
729
+ // "maker_fee_rate": "0",
730
+ // "market": "BTCUSD",
731
+ // "min_amount": "10",
732
+ // "open_interest_volume": "2566879",
733
+ // "quote_ccy": "USD",
734
+ // "quote_ccy_precision": 2,
735
+ // "taker_fee_rate": "0"
741
736
  // },
742
737
  // ],
743
738
  // "message": "OK"
744
739
  // }
745
740
  //
746
- const markets = this.safeValue(response, 'data', []);
741
+ const markets = this.safeList(response, 'data', []);
747
742
  const result = [];
748
743
  for (let i = 0; i < markets.length; i++) {
749
744
  const entry = markets[i];
750
745
  const fees = this.fees;
751
- const leverages = this.safeValue(entry, 'leverages', []);
752
- const subType = this.safeInteger(entry, 'type');
753
- const linear = (subType === 1);
754
- const inverse = (subType === 2);
755
- const id = this.safeString(entry, 'name');
756
- const baseId = this.safeString(entry, 'stock');
757
- const quoteId = this.safeString(entry, 'money');
746
+ const leverages = this.safeList(entry, 'leverage', []);
747
+ const subType = this.safeString(entry, 'contract_type');
748
+ const linear = (subType === 'linear');
749
+ const inverse = (subType === 'inverse');
750
+ const id = this.safeString(entry, 'market');
751
+ const baseId = this.safeString(entry, 'base_ccy');
752
+ const quoteId = this.safeString(entry, 'quote_ccy');
758
753
  const base = this.safeCurrencyCode(baseId);
759
754
  const quote = this.safeCurrencyCode(quoteId);
760
- const settleId = (subType === 1) ? 'USDT' : baseId;
755
+ const settleId = (subType === 'linear') ? 'USDT' : baseId;
761
756
  const settle = this.safeCurrencyCode(settleId);
762
757
  const symbol = base + '/' + quote + ':' + settle;
763
758
  const leveragesLength = leverages.length;
@@ -776,20 +771,20 @@ export default class coinex extends Exchange {
776
771
  'swap': true,
777
772
  'future': false,
778
773
  'option': false,
779
- 'active': this.safeValue(entry, 'available'),
774
+ 'active': undefined,
780
775
  'contract': true,
781
776
  'linear': linear,
782
777
  'inverse': inverse,
783
778
  'taker': fees['trading']['taker'],
784
779
  'maker': fees['trading']['maker'],
785
- 'contractSize': this.safeNumber(entry, 'multiplier'),
780
+ 'contractSize': this.parseNumber('1'),
786
781
  'expiry': undefined,
787
782
  'expiryDatetime': undefined,
788
783
  'strike': undefined,
789
784
  'optionType': undefined,
790
785
  'precision': {
791
- 'amount': this.parseNumber(this.parsePrecision(this.safeString(entry, 'amount_prec'))),
792
- 'price': this.parseNumber(this.parsePrecision(this.safeString(entry, 'money_prec'))),
786
+ 'amount': this.parseNumber(this.parsePrecision(this.safeString(entry, 'base_ccy_precision'))),
787
+ 'price': this.parseNumber(this.parsePrecision(this.safeString(entry, 'quote_ccy_precision'))),
793
788
  },
794
789
  'limits': {
795
790
  'leverage': {
@@ -797,7 +792,7 @@ export default class coinex extends Exchange {
797
792
  'max': this.safeNumber(leverages, leveragesLength - 1),
798
793
  },
799
794
  'amount': {
800
- 'min': this.safeNumber(entry, 'amount_min'),
795
+ 'min': this.safeNumber(entry, 'min_amount'),
801
796
  'max': undefined,
802
797
  },
803
798
  'price': {