ccxt 4.3.13 → 4.3.15

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 (61) hide show
  1. package/LICENSE.txt +1 -1
  2. package/README.md +3 -3
  3. package/dist/cjs/ccxt.js +2 -1
  4. package/dist/cjs/src/base/Exchange.js +14 -6
  5. package/dist/cjs/src/base/errors.js +8 -1
  6. package/dist/cjs/src/base/functions/misc.js +2 -2
  7. package/dist/cjs/src/base/ws/Client.js +2 -1
  8. package/dist/cjs/src/binance.js +106 -5
  9. package/dist/cjs/src/bingx.js +1 -0
  10. package/dist/cjs/src/bybit.js +105 -105
  11. package/dist/cjs/src/coinbase.js +103 -0
  12. package/dist/cjs/src/coinex.js +435 -423
  13. package/dist/cjs/src/cryptocom.js +2 -1
  14. package/dist/cjs/src/hitbtc.js +1 -0
  15. package/dist/cjs/src/luno.js +2 -0
  16. package/dist/cjs/src/okx.js +1 -1
  17. package/dist/cjs/src/phemex.js +1 -1
  18. package/dist/cjs/src/pro/hitbtc.js +1 -1
  19. package/dist/cjs/src/pro/independentreserve.js +3 -3
  20. package/dist/cjs/src/pro/poloniex.js +3 -3
  21. package/dist/cjs/src/pro/woo.js +147 -9
  22. package/js/ccxt.d.ts +3 -3
  23. package/js/ccxt.js +3 -3
  24. package/js/src/abstract/luno.d.ts +2 -0
  25. package/js/src/alpaca.d.ts +1 -1
  26. package/js/src/base/Exchange.d.ts +5 -5
  27. package/js/src/base/Exchange.js +14 -6
  28. package/js/src/base/errorHierarchy.d.ts +1 -0
  29. package/js/src/base/errorHierarchy.js +1 -0
  30. package/js/src/base/errors.d.ts +5 -1
  31. package/js/src/base/errors.js +8 -2
  32. package/js/src/base/functions/generic.d.ts +1 -1
  33. package/js/src/base/functions/misc.d.ts +5 -4
  34. package/js/src/base/functions/misc.js +2 -2
  35. package/js/src/base/functions/number.d.ts +5 -5
  36. package/js/src/base/functions/rsa.d.ts +2 -1
  37. package/js/src/base/functions/totp.d.ts +1 -1
  38. package/js/src/base/ws/Client.d.ts +8 -7
  39. package/js/src/base/ws/Client.js +2 -1
  40. package/js/src/binance.d.ts +14 -1
  41. package/js/src/binance.js +107 -6
  42. package/js/src/bingx.d.ts +1 -1
  43. package/js/src/bingx.js +1 -0
  44. package/js/src/bybit.js +105 -105
  45. package/js/src/coinbase.d.ts +5 -1
  46. package/js/src/coinbase.js +103 -0
  47. package/js/src/coinex.js +435 -423
  48. package/js/src/cryptocom.js +2 -1
  49. package/js/src/hitbtc.js +1 -0
  50. package/js/src/luno.js +2 -0
  51. package/js/src/okx.js +1 -1
  52. package/js/src/phemex.js +1 -1
  53. package/js/src/pro/hitbtc.js +1 -1
  54. package/js/src/pro/independentreserve.js +3 -3
  55. package/js/src/pro/poloniex.js +3 -3
  56. package/js/src/pro/woo.d.ts +2 -0
  57. package/js/src/pro/woo.js +147 -9
  58. package/js/src/upbit.d.ts +1 -1
  59. package/js/src/woo.d.ts +1 -1
  60. package/js/src/zonda.d.ts +1 -1
  61. package/package.json +1 -1
package/js/src/coinex.js CHANGED
@@ -1719,111 +1719,7 @@ export default class coinex extends Exchange {
1719
1719
  }
1720
1720
  parseOrder(order, market = undefined) {
1721
1721
  //
1722
- // Spot and Margin fetchOpenOrders, fetchClosedOrders
1723
- //
1724
- // {
1725
- // "account_id": 0,
1726
- // "amount": "0.0005",
1727
- // "asset_fee": "0",
1728
- // "avg_price": "0.00",
1729
- // "client_id": "",
1730
- // "create_time": 1651089247,
1731
- // "deal_amount": "0",
1732
- // "deal_fee": "0",
1733
- // "deal_money": "0",
1734
- // "fee_asset": null,
1735
- // "fee_discount": "1",
1736
- // "finished_time": 0,
1737
- // "id": 74660190839,
1738
- // "left": "0.0005",
1739
- // "maker_fee_rate": "0.002",
1740
- // "market": "BTCUSDT",
1741
- // "money_fee": "0",
1742
- // "order_type": "limit",
1743
- // "price": "31000",
1744
- // "status": "not_deal",
1745
- // "stock_fee": "0",
1746
- // "taker_fee_rate": "0.002",
1747
- // "type": "buy"
1748
- // }
1749
- //
1750
- // Swap fetchOpenOrders, fetchClosedOrders
1751
- //
1752
- // {
1753
- // "amount": "0.0005",
1754
- // "client_id": "",
1755
- // "create_time": 1651030414.088431,
1756
- // "deal_asset_fee": "0",
1757
- // "deal_fee": "0.00960069",
1758
- // "deal_profit": "0.009825",
1759
- // "deal_stock": "19.20138",
1760
- // "effect_type": 0,
1761
- // "fee_asset": "",
1762
- // "fee_discount": "0",
1763
- // "left": "0",
1764
- // "leverage": "3",
1765
- // "maker_fee": "0",
1766
- // "market": "BTCUSDT",
1767
- // "order_id": 18253447431,
1768
- // "position_id": 0,
1769
- // "position_type": 1,
1770
- // "price": "0",
1771
- // "side": 1,
1772
- // "source": "web",
1773
- // "stop_id": 0,
1774
- // "taker_fee": "0.0005",
1775
- // "target": 0,
1776
- // "type": 2,
1777
- // "update_time": 1651030414.08847,
1778
- // "user_id": 3620173
1779
- // }
1780
- //
1781
- // Spot and Margin Stop fetchOpenOrders, fetchClosedOrders
1782
- //
1783
- // {
1784
- // "account_id": 0,
1785
- // "amount": "155",
1786
- // "client_id": "",
1787
- // "create_time": 1651089182,
1788
- // "fee_asset": null,
1789
- // "fee_discount": "1",
1790
- // "maker_fee": "0.002",
1791
- // "market": "BTCUSDT",
1792
- // "order_id": 74660111965,
1793
- // "order_type": "market",
1794
- // "price": "0",
1795
- // "state": 0,
1796
- // "stop_price": "31500",
1797
- // "taker_fee": "0.002",
1798
- // "type": "buy"
1799
- // }
1800
- //
1801
- // Swap Stop fetchOpenOrders
1802
- //
1803
- // {
1804
- // "amount": "0.0005",
1805
- // "client_id": "",
1806
- // "create_time": 1651089147.321691,
1807
- // "effect_type": 1,
1808
- // "fee_asset": "",
1809
- // "fee_discount": "0.00000000000000000000",
1810
- // "maker_fee": "0.00030",
1811
- // "market": "BTCUSDT",
1812
- // "order_id": 18332143848,
1813
- // "price": "31000.00",
1814
- // "side": 2,
1815
- // "source": "api.v1",
1816
- // "state": 1,
1817
- // "stop_price": "31500.00",
1818
- // "stop_type": 1,
1819
- // "taker_fee": "0.00050",
1820
- // "target": 0,
1821
- // "type": 1,
1822
- // "update_time": 1651089147.321691,
1823
- // "user_id": 3620173
1824
- // }
1825
- //
1826
- // Spot and Margin createOrder, createOrders, editOrder, cancelOrders, cancelOrder v2
1722
+ // Spot and Margin createOrder, createOrders, editOrder, cancelOrders, cancelOrder, fetchOpenOrders
1827
1723
  //
1828
1724
  // {
1829
1725
  // "amount": "0.0001",
@@ -1849,13 +1745,37 @@ export default class coinex extends Exchange {
1849
1745
  // "updated_at": 1714114386250
1850
1746
  // }
1851
1747
  //
1852
- // Spot, Margin and Swap trigger createOrder, createOrders, editOrder v2
1748
+ // Spot and Margin fetchClosedOrders
1749
+ //
1750
+ // {
1751
+ // "order_id": 117180532345,
1752
+ // "market": "BTCUSDT",
1753
+ // "market_type": "SPOT",
1754
+ // "side": "sell",
1755
+ // "type": "market",
1756
+ // "ccy": "BTC",
1757
+ // "amount": "0.00015484",
1758
+ // "price": "0",
1759
+ // "client_id": "",
1760
+ // "created_at": 1714116494219,
1761
+ // "updated_at": 0,
1762
+ // "base_fee": "0",
1763
+ // "quote_fee": "0.0199931699632",
1764
+ // "discount_fee": "0",
1765
+ // "maker_fee_rate": "0",
1766
+ // "taker_fee_rate": "0.002",
1767
+ // "unfilled_amount": "0",
1768
+ // "filled_amount": "0.00015484",
1769
+ // "filled_value": "9.9965849816"
1770
+ // }
1771
+ //
1772
+ // Spot, Margin and Swap trigger createOrder, createOrders, editOrder
1853
1773
  //
1854
1774
  // {
1855
1775
  // "stop_id": 117180138153
1856
1776
  // }
1857
1777
  //
1858
- // Swap createOrder, createOrders, editOrder, cancelOrders, cancelOrder v2
1778
+ // Swap createOrder, createOrders, editOrder, cancelOrders, cancelOrder, fetchOpenOrders, fetchClosedOrders
1859
1779
  //
1860
1780
  // {
1861
1781
  // "amount": "0.0001",
@@ -1880,7 +1800,7 @@ export default class coinex extends Exchange {
1880
1800
  // "updated_at": 1714116769986
1881
1801
  // }
1882
1802
  //
1883
- // Swap stopLossPrice and takeProfitPrice createOrder v2
1803
+ // Swap stopLossPrice and takeProfitPrice createOrder
1884
1804
  //
1885
1805
  // {
1886
1806
  // "adl_level": 1,
@@ -1915,25 +1835,7 @@ export default class coinex extends Exchange {
1915
1835
  // "updated_at": 1714119054559
1916
1836
  // }
1917
1837
  //
1918
- // Swap and Spot stop cancelOrders, cancelOrder v2
1919
- //
1920
- // {
1921
- // "amount": "0.0001",
1922
- // "client_id": "x-167673045-a7d7714c6478acf6",
1923
- // "created_at": 1714187923820,
1924
- // "market": "BTCUSDT",
1925
- // "market_type": "FUTURES",
1926
- // "price": "61000",
1927
- // "side": "buy",
1928
- // "stop_id": 136984426097,
1929
- // "trigger_direction": "higher",
1930
- // "trigger_price": "62000",
1931
- // "trigger_price_type": "latest_price",
1932
- // "type": "limit",
1933
- // "updated_at": 1714187974363
1934
- // }
1935
- //
1936
- // Swap fetchOrder v2
1838
+ // Swap fetchOrder
1937
1839
  //
1938
1840
  // {
1939
1841
  // "amount": "0.0001",
@@ -1959,7 +1861,7 @@ export default class coinex extends Exchange {
1959
1861
  // "updated_at": 1714460987164
1960
1862
  // }
1961
1863
  //
1962
- // Spot and Margin fetchOrder v2
1864
+ // Spot and Margin fetchOrder
1963
1865
  //
1964
1866
  // {
1965
1867
  // "amount": "0.0001",
@@ -1986,91 +1888,100 @@ export default class coinex extends Exchange {
1986
1888
  // "updated_at": 1714461638958
1987
1889
  // }
1988
1890
  //
1891
+ // Swap trigger fetchOpenOrders, fetchClosedOrders - Spot and Swap trigger cancelOrders, cancelOrder
1892
+ //
1893
+ // {
1894
+ // "amount": "0.0001",
1895
+ // "client_id": "x-167673045-a7d7714c6478acf6",
1896
+ // "created_at": 1714187923820,
1897
+ // "market": "BTCUSDT",
1898
+ // "market_type": "FUTURES",
1899
+ // "price": "61000",
1900
+ // "side": "buy",
1901
+ // "stop_id": 136984426097,
1902
+ // "trigger_direction": "higher",
1903
+ // "trigger_price": "62000",
1904
+ // "trigger_price_type": "latest_price",
1905
+ // "type": "limit",
1906
+ // "updated_at": 1714187974363
1907
+ // }
1908
+ //
1909
+ // Spot and Margin trigger fetchOpenOrders, fetchClosedOrders
1910
+ //
1911
+ // {
1912
+ // "stop_id": 117586439530,
1913
+ // "market": "BTCUSDT",
1914
+ // "market_type": "SPOT",
1915
+ // "ccy": "BTC",
1916
+ // "side": "buy",
1917
+ // "type": "limit",
1918
+ // "amount": "0.0001",
1919
+ // "price": "51000",
1920
+ // "trigger_price": "52000",
1921
+ // "trigger_direction": "higher",
1922
+ // "trigger_price_type": "mark_price",
1923
+ // "client_id": "x-167673045-df61777094c69312",
1924
+ // "created_at": 1714551237335,
1925
+ // "updated_at": 1714551237335
1926
+ // }
1927
+ //
1989
1928
  const rawStatus = this.safeString(order, 'status');
1990
- let timestamp = this.safeTimestamp(order, 'create_time');
1991
- if (timestamp === undefined) {
1992
- timestamp = this.safeInteger(order, 'created_at');
1993
- }
1994
- let update = this.safeTimestamp(order, 'update_time');
1995
- if (update === undefined) {
1996
- update = this.safeInteger(order, 'updated_at');
1929
+ const timestamp = this.safeInteger(order, 'created_at');
1930
+ let updatedTimestamp = this.safeInteger(order, 'updated_at');
1931
+ if (updatedTimestamp === 0) {
1932
+ updatedTimestamp = timestamp;
1997
1933
  }
1998
1934
  const marketId = this.safeString(order, 'market');
1999
1935
  const defaultType = this.safeString(this.options, 'defaultType');
2000
- const orderType = ('source' in order) ? 'swap' : defaultType;
2001
- market = this.safeMarket(marketId, market, undefined, orderType);
2002
- const feeCurrencyId = this.safeString2(order, 'fee_asset', 'fee_ccy');
1936
+ let orderType = this.safeStringLower(order, 'market_type', defaultType);
1937
+ if (orderType === 'futures') {
1938
+ orderType = 'swap';
1939
+ }
1940
+ const marketType = (orderType === 'swap') ? 'swap' : 'spot';
1941
+ market = this.safeMarket(marketId, market, undefined, marketType);
1942
+ const feeCurrencyId = this.safeString(order, 'fee_ccy');
2003
1943
  let feeCurrency = this.safeCurrencyCode(feeCurrencyId);
2004
1944
  if (feeCurrency === undefined) {
2005
1945
  feeCurrency = market['quote'];
2006
1946
  }
2007
- const rawIntegerSide = this.safeInteger(order, 'side');
2008
- const rawStringSide = this.safeString(order, 'side');
2009
- let side = undefined;
2010
- if (rawIntegerSide === 1) {
2011
- side = 'sell';
2012
- }
2013
- else if (rawIntegerSide === 2) {
1947
+ let side = this.safeString(order, 'side');
1948
+ if (side === 'long') {
2014
1949
  side = 'buy';
2015
1950
  }
2016
- else if ((rawStringSide === 'buy') || (rawStringSide === 'sell')) {
2017
- side = rawStringSide;
2018
- }
2019
- else {
2020
- side = this.safeString(order, 'type');
2021
- }
2022
- const rawType = this.safeString(order, 'order_type');
2023
- let type = undefined;
2024
- if (rawType === undefined) {
2025
- const typeInteger = this.safeInteger(order, 'type');
2026
- const typeString = this.safeString(order, 'type');
2027
- if (typeInteger === 1) {
2028
- type = 'limit';
2029
- }
2030
- else if (typeInteger === 2) {
2031
- type = 'market';
2032
- }
2033
- else if ((typeString === 'limit') || (typeString === 'market')) {
2034
- type = typeString;
2035
- }
2036
- else if (typeString === 'maker_only') {
2037
- type = 'limit';
2038
- }
2039
- }
2040
- else {
2041
- type = rawType;
1951
+ else if (side === 'short') {
1952
+ side = 'sell';
2042
1953
  }
2043
1954
  let clientOrderId = this.safeString(order, 'client_id');
2044
1955
  if (clientOrderId === '') {
2045
1956
  clientOrderId = undefined;
2046
1957
  }
2047
1958
  return this.safeOrder({
2048
- 'id': this.safeStringN(order, ['id', 'order_id', 'stop_id']),
1959
+ 'id': this.safeStringN(order, ['position_id', 'order_id', 'stop_id']),
2049
1960
  'clientOrderId': clientOrderId,
2050
1961
  'datetime': this.iso8601(timestamp),
2051
1962
  'timestamp': timestamp,
2052
- 'lastTradeTimestamp': update,
1963
+ 'lastTradeTimestamp': updatedTimestamp,
2053
1964
  'status': this.parseOrderStatus(rawStatus),
2054
1965
  'symbol': market['symbol'],
2055
- 'type': type,
1966
+ 'type': this.safeString(order, 'type'),
2056
1967
  'timeInForce': undefined,
2057
1968
  'postOnly': undefined,
2058
1969
  'reduceOnly': undefined,
2059
1970
  'side': side,
2060
1971
  'price': this.safeString(order, 'price'),
2061
- 'stopPrice': this.safeString2(order, 'stop_price', 'trigger_price'),
2062
- 'triggerPrice': this.safeString2(order, 'stop_price', 'trigger_price'),
1972
+ 'stopPrice': this.safeString(order, 'trigger_price'),
1973
+ 'triggerPrice': this.safeString(order, 'trigger_price'),
2063
1974
  'takeProfitPrice': this.safeNumber(order, 'take_profit_price'),
2064
1975
  'stopLossPrice': this.safeNumber(order, 'stop_loss_price'),
2065
- 'cost': this.safeString2(order, 'deal_money', 'filled_value'),
2066
- 'average': this.safeString2(order, 'avg_price', 'avg_entry_price'),
1976
+ 'cost': this.safeString(order, 'filled_value'),
1977
+ 'average': this.safeString(order, 'avg_entry_price'),
2067
1978
  'amount': this.safeString(order, 'amount'),
2068
- 'filled': this.safeString2(order, 'deal_amount', 'filled_amount'),
2069
- 'remaining': this.safeString2(order, 'left', 'unfilled_amount'),
1979
+ 'filled': this.safeString(order, 'filled_amount'),
1980
+ 'remaining': this.safeString(order, 'unfilled_amount'),
2070
1981
  'trades': undefined,
2071
1982
  'fee': {
2072
1983
  'currency': feeCurrency,
2073
- 'cost': this.safeStringN(order, ['deal_fee', 'quote_fee', 'fee']),
1984
+ 'cost': this.safeString2(order, 'quote_fee', 'fee'),
2074
1985
  },
2075
1986
  'info': order,
2076
1987
  }, market);
@@ -3325,7 +3236,7 @@ export default class coinex extends Exchange {
3325
3236
  }
3326
3237
  else {
3327
3238
  let marginMode = undefined;
3328
- [marginMode, params] = this.handleMarginModeAndParams('fetchOrdersByStatus', params);
3239
+ [marginMode, params] = this.handleMarginModeAndParams('cancelAllOrders', params);
3329
3240
  if (marginMode !== undefined) {
3330
3241
  request['market_type'] = 'MARGIN';
3331
3242
  }
@@ -3429,244 +3340,340 @@ export default class coinex extends Exchange {
3429
3340
  return this.parseOrder(data, market);
3430
3341
  }
3431
3342
  async fetchOrdersByStatus(status, symbol = undefined, since = undefined, limit = undefined, params = {}) {
3343
+ /**
3344
+ * @method
3345
+ * @name coinex#fetchOrdersByStatus
3346
+ * @description fetch a list of orders
3347
+ * @see https://docs.coinex.com/api/v2/spot/order/http/list-finished-order
3348
+ * @see https://docs.coinex.com/api/v2/spot/order/http/list-finished-stop-order
3349
+ * @see https://docs.coinex.com/api/v2/futures/order/http/list-finished-order
3350
+ * @see https://docs.coinex.com/api/v2/futures/order/http/list-finished-stop-order
3351
+ * @param {string} symbol unified market symbol of the market orders were made in
3352
+ * @param {int} [since] the earliest time in ms to fetch orders for
3353
+ * @param {int} [limit] the maximum number of order structures to retrieve
3354
+ * @param {boolean} [params.trigger] set to true for fetching trigger orders
3355
+ * @param {string} [params.marginMode] 'cross' or 'isolated' for fetching spot margin orders
3356
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
3357
+ */
3432
3358
  await this.loadMarkets();
3433
- limit = (limit === undefined) ? 100 : limit;
3434
- const request = {
3435
- 'limit': limit,
3436
- // 'page': 1, // SPOT
3437
- // 'offset': 0, // SWAP
3438
- // 'side': 0, // SWAP, 0: All, 1: Sell, 2: Buy
3439
- };
3440
- const stop = this.safeValue(params, 'stop');
3441
- const side = this.safeInteger(params, 'side');
3442
- params = this.omit(params, 'stop');
3359
+ const request = {};
3443
3360
  let market = undefined;
3444
3361
  if (symbol !== undefined) {
3445
3362
  market = this.market(symbol);
3446
3363
  request['market'] = market['id'];
3447
3364
  }
3448
- const [marketType, query] = this.handleMarketTypeAndParams('fetchOrdersByStatus', market, params);
3449
- const accountId = this.safeInteger(params, 'account_id');
3450
- let marginMode = undefined;
3451
- [marginMode, params] = this.handleMarginModeAndParams('fetchOrdersByStatus', params);
3452
- if (marginMode !== undefined) {
3453
- if (accountId === undefined) {
3454
- throw new BadRequest(this.id + ' fetchOpenOrders() and fetchClosedOrders() require an account_id parameter for margin orders');
3455
- }
3456
- request['account_id'] = accountId;
3365
+ if (limit !== undefined) {
3366
+ request['limit'] = limit;
3457
3367
  }
3458
- params = this.omit(query, 'account_id');
3368
+ const stop = this.safeBool2(params, 'stop', 'trigger');
3369
+ params = this.omit(params, ['stop', 'trigger']);
3370
+ let marketType = undefined;
3371
+ [marketType, params] = this.handleMarketTypeAndParams('fetchOrdersByStatus', market, params);
3459
3372
  let response = undefined;
3373
+ const isClosed = (status === 'finished') || (status === 'closed');
3374
+ const isOpen = (status === 'pending') || (status === 'open');
3460
3375
  if (marketType === 'swap') {
3461
- if (symbol === undefined) {
3462
- throw new ArgumentsRequired(this.id + ' fetchOrdersByStatus() requires a symbol argument for swap markets');
3463
- }
3464
- if (side !== undefined) {
3465
- request['side'] = side;
3466
- }
3467
- else {
3468
- request['side'] = 0;
3469
- }
3470
- request['offset'] = 0;
3471
- if (stop) {
3472
- response = await this.v1PerpetualPrivateGetOrderStopPending(this.extend(request, params));
3376
+ request['market_type'] = 'FUTURES';
3377
+ if (isClosed) {
3378
+ if (stop) {
3379
+ response = await this.v2PrivateGetFuturesFinishedStopOrder(this.extend(request, params));
3380
+ //
3381
+ // {
3382
+ // "code": 0,
3383
+ // "data": [
3384
+ // {
3385
+ // "stop_id": 52431158859,
3386
+ // "market": "BTCUSDT",
3387
+ // "market_type": "FUTURES",
3388
+ // "side": "sell",
3389
+ // "type": "market",
3390
+ // "amount": "0.0005",
3391
+ // "price": "20599.64",
3392
+ // "client_id": "",
3393
+ // "created_at": 1667547909856,
3394
+ // "updated_at": 1667547909856,
3395
+ // "trigger_price": "20599.64",
3396
+ // "trigger_price_type": "latest_price",
3397
+ // "trigger_direction": ""
3398
+ // },
3399
+ // ],
3400
+ // "message": "OK",
3401
+ // "pagination": {
3402
+ // "has_next": false
3403
+ // }
3404
+ // }
3405
+ //
3406
+ }
3407
+ else {
3408
+ response = await this.v2PrivateGetFuturesFinishedOrder(this.extend(request, params));
3409
+ //
3410
+ // {
3411
+ // "code": 0,
3412
+ // "data": [
3413
+ // {
3414
+ // "order_id": 136915813578,
3415
+ // "market": "BTCUSDT",
3416
+ // "market_type": "FUTURES",
3417
+ // "side": "sell",
3418
+ // "type": "market",
3419
+ // "amount": "0.0001",
3420
+ // "price": "0",
3421
+ // "client_id": "x-167673045-4f264600c432ac06",
3422
+ // "created_at": 1714119323764,
3423
+ // "updated_at": 1714119323764,
3424
+ // "unfilled_amount": "0",
3425
+ // "filled_amount": "0.0001",
3426
+ // "filled_value": "6.442017",
3427
+ // "fee": "0.003221",
3428
+ // "fee_ccy": "USDT",
3429
+ // "maker_fee_rate": "0",
3430
+ // "taker_fee_rate": "0.0005"
3431
+ // },
3432
+ // ],
3433
+ // "message": "OK",
3434
+ // "pagination": {
3435
+ // "has_next": false
3436
+ // }
3437
+ // }
3438
+ //
3439
+ }
3473
3440
  }
3474
- else {
3475
- if (status === 'finished') {
3476
- response = await this.v1PerpetualPrivateGetOrderFinished(this.extend(request, params));
3441
+ else if (isOpen) {
3442
+ if (stop) {
3443
+ response = await this.v2PrivateGetFuturesPendingStopOrder(this.extend(request, params));
3444
+ //
3445
+ // {
3446
+ // "code": 0,
3447
+ // "data": [
3448
+ // {
3449
+ // "stop_id": 137481469849,
3450
+ // "market": "BTCUSDT",
3451
+ // "market_type": "FUTURES",
3452
+ // "side": "buy",
3453
+ // "type": "limit",
3454
+ // "amount": "0.0001",
3455
+ // "price": "51000",
3456
+ // "client_id": "x-167673045-2b932341949fa2a1",
3457
+ // "created_at": 1714552257876,
3458
+ // "updated_at": 1714552257876,
3459
+ // "trigger_price": "52000",
3460
+ // "trigger_price_type": "latest_price",
3461
+ // "trigger_direction": "higher"
3462
+ // }
3463
+ // ],
3464
+ // "message": "OK",
3465
+ // "pagination": {
3466
+ // "total": 1,
3467
+ // "has_next": false
3468
+ // }
3469
+ // }
3470
+ //
3477
3471
  }
3478
- else if (status === 'pending') {
3479
- response = await this.v1PerpetualPrivateGetOrderPending(this.extend(request, params));
3472
+ else {
3473
+ response = await this.v2PrivateGetFuturesPendingOrder(this.extend(request, params));
3474
+ //
3475
+ // {
3476
+ // "code": 0,
3477
+ // "data": [
3478
+ // {
3479
+ // "order_id": 137480580906,
3480
+ // "market": "BTCUSDT",
3481
+ // "market_type": "FUTURES",
3482
+ // "side": "buy",
3483
+ // "type": "limit",
3484
+ // "amount": "0.0001",
3485
+ // "price": "51000",
3486
+ // "client_id": "",
3487
+ // "created_at": 1714551877569,
3488
+ // "updated_at": 1714551877569,
3489
+ // "unfilled_amount": "0.0001",
3490
+ // "filled_amount": "0",
3491
+ // "filled_value": "0",
3492
+ // "fee": "0",
3493
+ // "fee_ccy": "USDT",
3494
+ // "maker_fee_rate": "0.0003",
3495
+ // "taker_fee_rate": "0.0005",
3496
+ // "last_filled_amount": "0",
3497
+ // "last_filled_price": "0",
3498
+ // "realized_pnl": "0"
3499
+ // }
3500
+ // ],
3501
+ // "message": "OK",
3502
+ // "pagination": {
3503
+ // "total": 1,
3504
+ // "has_next": false
3505
+ // }
3506
+ // }
3507
+ //
3480
3508
  }
3481
3509
  }
3482
3510
  }
3483
3511
  else {
3484
- request['page'] = 1;
3485
- if (status === 'finished') {
3512
+ let marginMode = undefined;
3513
+ [marginMode, params] = this.handleMarginModeAndParams('fetchOrdersByStatus', params);
3514
+ if (marginMode !== undefined) {
3515
+ request['market_type'] = 'MARGIN';
3516
+ }
3517
+ else {
3518
+ request['market_type'] = 'SPOT';
3519
+ }
3520
+ if (isClosed) {
3486
3521
  if (stop) {
3487
- response = await this.v1PrivateGetOrderStopFinished(this.extend(request, params));
3522
+ response = await this.v2PrivateGetSpotFinishedStopOrder(this.extend(request, params));
3523
+ //
3524
+ // {
3525
+ // "code": 0,
3526
+ // "data": [
3527
+ // {
3528
+ // "stop_id": 117654881420,
3529
+ // "market": "BTCUSDT",
3530
+ // "market_type": "SPOT",
3531
+ // "ccy": "USDT",
3532
+ // "side": "buy",
3533
+ // "type": "market",
3534
+ // "amount": "5.83325524",
3535
+ // "price": "0",
3536
+ // "trigger_price": "57418",
3537
+ // "trigger_direction": "lower",
3538
+ // "trigger_price_type": "mark_price",
3539
+ // "client_id": "",
3540
+ // "created_at": 1714618050597,
3541
+ // "updated_at": 0
3542
+ // }
3543
+ // ],
3544
+ // "message": "OK",
3545
+ // "pagination": {
3546
+ // "has_next": false
3547
+ // }
3548
+ // }
3549
+ //
3488
3550
  }
3489
3551
  else {
3490
- response = await this.v1PrivateGetOrderFinished(this.extend(request, params));
3552
+ response = await this.v2PrivateGetSpotFinishedOrder(this.extend(request, params));
3553
+ //
3554
+ // {
3555
+ // "code": 0,
3556
+ // "data": [
3557
+ // {
3558
+ // "order_id": 117180532345,
3559
+ // "market": "BTCUSDT",
3560
+ // "market_type": "SPOT",
3561
+ // "side": "sell",
3562
+ // "type": "market",
3563
+ // "ccy": "BTC",
3564
+ // "amount": "0.00015484",
3565
+ // "price": "0",
3566
+ // "client_id": "",
3567
+ // "created_at": 1714116494219,
3568
+ // "updated_at": 0,
3569
+ // "base_fee": "0",
3570
+ // "quote_fee": "0.0199931699632",
3571
+ // "discount_fee": "0",
3572
+ // "maker_fee_rate": "0",
3573
+ // "taker_fee_rate": "0.002",
3574
+ // "unfilled_amount": "0",
3575
+ // "filled_amount": "0.00015484",
3576
+ // "filled_value": "9.9965849816"
3577
+ // },
3578
+ // ],
3579
+ // "message": "OK",
3580
+ // "pagination": {
3581
+ // "has_next": false
3582
+ // }
3583
+ // }
3584
+ //
3491
3585
  }
3492
3586
  }
3493
3587
  else if (status === 'pending') {
3494
3588
  if (stop) {
3495
- response = await this.v1PrivateGetOrderStopPending(this.extend(request, params));
3589
+ response = await this.v2PrivateGetSpotPendingStopOrder(this.extend(request, params));
3590
+ //
3591
+ // {
3592
+ // "code": 0,
3593
+ // "data": [
3594
+ // {
3595
+ // "stop_id": 117586439530,
3596
+ // "market": "BTCUSDT",
3597
+ // "market_type": "SPOT",
3598
+ // "ccy": "BTC",
3599
+ // "side": "buy",
3600
+ // "type": "limit",
3601
+ // "amount": "0.0001",
3602
+ // "price": "51000",
3603
+ // "trigger_price": "52000",
3604
+ // "trigger_direction": "higher",
3605
+ // "trigger_price_type": "mark_price",
3606
+ // "client_id": "x-167673045-df61777094c69312",
3607
+ // "created_at": 1714551237335,
3608
+ // "updated_at": 1714551237335
3609
+ // }
3610
+ // ],
3611
+ // "message": "OK",
3612
+ // "pagination": {
3613
+ // "total": 1,
3614
+ // "has_next": false
3615
+ // }
3616
+ // }
3617
+ //
3496
3618
  }
3497
3619
  else {
3498
- response = await this.v1PrivateGetOrderPending(this.extend(request, params));
3620
+ response = await this.v2PrivateGetSpotPendingOrder(this.extend(request, params));
3621
+ //
3622
+ // {
3623
+ // "code": 0,
3624
+ // "data": [
3625
+ // {
3626
+ // "order_id": 117585921297,
3627
+ // "market": "BTCUSDT",
3628
+ // "market_type": "SPOT",
3629
+ // "side": "buy",
3630
+ // "type": "limit",
3631
+ // "ccy": "BTC",
3632
+ // "amount": "0.00011793",
3633
+ // "price": "52000",
3634
+ // "client_id": "",
3635
+ // "created_at": 1714550707486,
3636
+ // "updated_at": 1714550707486,
3637
+ // "base_fee": "0",
3638
+ // "quote_fee": "0",
3639
+ // "discount_fee": "0",
3640
+ // "maker_fee_rate": "0.002",
3641
+ // "taker_fee_rate": "0.002",
3642
+ // "last_fill_amount": "0",
3643
+ // "last_fill_price": "0",
3644
+ // "unfilled_amount": "0.00011793",
3645
+ // "filled_amount": "0",
3646
+ // "filled_value": "0"
3647
+ // }
3648
+ // ],
3649
+ // "message": "OK",
3650
+ // "pagination": {
3651
+ // "total": 1,
3652
+ // "has_next": false
3653
+ // }
3654
+ // }
3655
+ //
3499
3656
  }
3500
3657
  }
3501
3658
  }
3502
- //
3503
- // Spot and Margin
3504
- //
3505
- // {
3506
- // "code": 0,
3507
- // "data": {
3508
- // "count": 1,
3509
- // "curr_page": 1,
3510
- // "data": [
3511
- // {
3512
- // "account_id": 0,
3513
- // "amount": "0.0005",
3514
- // "asset_fee": "0",
3515
- // "avg_price": "0.00",
3516
- // "client_id": "",
3517
- // "create_time": 1651089247,
3518
- // "deal_amount": "0",
3519
- // "deal_fee": "0",
3520
- // "deal_money": "0",
3521
- // "fee_asset": null,
3522
- // "fee_discount": "1",
3523
- // "finished_time": 0,
3524
- // "id": 74660190839,
3525
- // "left": "0.0005",
3526
- // "maker_fee_rate": "0.002",
3527
- // "market": "BTCUSDT",
3528
- // "money_fee": "0",
3529
- // "order_type": "limit",
3530
- // "price": "31000",
3531
- // "status": "not_deal",
3532
- // "stock_fee": "0",
3533
- // "taker_fee_rate": "0.002",
3534
- // "type": "buy"
3535
- // }
3536
- // ],
3537
- // "has_next": false,
3538
- // "total": 1
3539
- // },
3540
- // "message": "Success"
3541
- // }
3542
- //
3543
- // Swap
3544
- //
3545
- // {
3546
- // "code": 0,
3547
- // "data": {
3548
- // "limit": 100,
3549
- // "offset": 0,
3550
- // "records": [
3551
- // {
3552
- // "amount": "0.0005",
3553
- // "client_id": "",
3554
- // "create_time": 1651030414.088431,
3555
- // "deal_asset_fee": "0",
3556
- // "deal_fee": "0.00960069",
3557
- // "deal_profit": "0.009825",
3558
- // "deal_stock": "19.20138",
3559
- // "effect_type": 0,
3560
- // "fee_asset": "",
3561
- // "fee_discount": "0",
3562
- // "left": "0",
3563
- // "leverage": "3",
3564
- // "maker_fee": "0",
3565
- // "market": "BTCUSDT",
3566
- // "order_id": 18253447431,
3567
- // "position_id": 0,
3568
- // "position_type": 1,
3569
- // "price": "0",
3570
- // "side": 1,
3571
- // "source": "web",
3572
- // "stop_id": 0,
3573
- // "taker_fee": "0.0005",
3574
- // "target": 0,
3575
- // "type": 2,
3576
- // "update_time": 1651030414.08847,
3577
- // "user_id": 3620173
3578
- // },
3579
- // ]
3580
- // },
3581
- // "message": "OK"
3582
- // }
3583
- //
3584
- // Spot and Margin Stop
3585
- //
3586
- // {
3587
- // "code": 0,
3588
- // "data": {
3589
- // "count": 1,
3590
- // "curr_page": 1,
3591
- // "data": [
3592
- // {
3593
- // "account_id": 0,
3594
- // "amount": "155",
3595
- // "client_id": "",
3596
- // "create_time": 1651089182,
3597
- // "fee_asset": null,
3598
- // "fee_discount": "1",
3599
- // "maker_fee": "0.002",
3600
- // "market": "BTCUSDT",
3601
- // "order_id": 74660111965,
3602
- // "order_type": "market",
3603
- // "price": "0",
3604
- // "state": 0,
3605
- // "stop_price": "31500",
3606
- // "taker_fee": "0.002",
3607
- // "type": "buy"
3608
- // }
3609
- // ],
3610
- // "has_next": false,
3611
- // "total": 0
3612
- // },
3613
- // "message": "Success"
3614
- // }
3615
- //
3616
- // Swap Stop
3617
- //
3618
- // {
3619
- // "code": 0,
3620
- // "data": {
3621
- // "limit": 100,
3622
- // "offset": 0,
3623
- // "records": [
3624
- // {
3625
- // "amount": "0.0005",
3626
- // "client_id": "",
3627
- // "create_time": 1651089147.321691,
3628
- // "effect_type": 1,
3629
- // "fee_asset": "",
3630
- // "fee_discount": "0.00000000000000000000",
3631
- // "maker_fee": "0.00030",
3632
- // "market": "BTCUSDT",
3633
- // "order_id": 18332143848,
3634
- // "price": "31000.00",
3635
- // "side": 2,
3636
- // "source": "api.v1",
3637
- // "state": 1,
3638
- // "stop_price": "31500.00",
3639
- // "stop_type": 1,
3640
- // "taker_fee": "0.00050",
3641
- // "target": 0,
3642
- // "type": 1,
3643
- // "update_time": 1651089147.321691,
3644
- // "user_id": 3620173
3645
- // }
3646
- // ],
3647
- // "total": 1
3648
- // },
3649
- // "message": "OK"
3650
- // }
3651
- //
3652
- const tradeRequest = (marketType === 'swap') ? 'records' : 'data';
3653
- const data = this.safeValue(response, 'data');
3654
- const orders = this.safeList(data, tradeRequest, []);
3655
- return this.parseOrders(orders, market, since, limit);
3659
+ const data = this.safeList(response, 'data', []);
3660
+ return this.parseOrders(data, market, since, limit);
3656
3661
  }
3657
3662
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
3658
3663
  /**
3659
3664
  * @method
3660
3665
  * @name coinex#fetchOpenOrders
3661
3666
  * @description fetch all unfilled currently open orders
3662
- * @see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http027_query_pending_stop
3663
- * @see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http025_query_pending
3664
- * @see https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot003_trade013_stop_pending_order
3665
- * @see https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot003_trade011_pending_order
3667
+ * @see https://docs.coinex.com/api/v2/spot/order/http/list-pending-order
3668
+ * @see https://docs.coinex.com/api/v2/spot/order/http/list-pending-stop-order
3669
+ * @see https://docs.coinex.com/api/v2/futures/order/http/list-pending-order
3670
+ * @see https://docs.coinex.com/api/v2/futures/order/http/list-pending-stop-order
3666
3671
  * @param {string} symbol unified market symbol
3667
3672
  * @param {int} [since] the earliest time in ms to fetch open orders for
3668
- * @param {int} [limit] the maximum number of open orders structures to retrieve
3673
+ * @param {int} [limit] the maximum number of open order structures to retrieve
3669
3674
  * @param {object} [params] extra parameters specific to the exchange API endpoint
3675
+ * @param {boolean} [params.trigger] set to true for fetching trigger orders
3676
+ * @param {string} [params.marginMode] 'cross' or 'isolated' for fetching spot margin orders
3670
3677
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
3671
3678
  */
3672
3679
  return await this.fetchOrdersByStatus('pending', symbol, since, limit, params);
@@ -3676,13 +3683,15 @@ export default class coinex extends Exchange {
3676
3683
  * @method
3677
3684
  * @name coinex#fetchClosedOrders
3678
3685
  * @description fetches information on multiple closed orders made by the user
3679
- * @see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http029_query_finished
3680
- * @see https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot003_trade010_stop_finished_order
3681
- * @see https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot003_trade012_finished_order
3686
+ * @see https://docs.coinex.com/api/v2/spot/order/http/list-finished-order
3687
+ * @see https://docs.coinex.com/api/v2/spot/order/http/list-finished-stop-order
3688
+ * @see https://docs.coinex.com/api/v2/futures/order/http/list-finished-order
3689
+ * @see https://docs.coinex.com/api/v2/futures/order/http/list-finished-stop-order
3682
3690
  * @param {string} symbol unified market symbol of the market orders were made in
3683
3691
  * @param {int} [since] the earliest time in ms to fetch orders for
3684
3692
  * @param {int} [limit] the maximum number of order structures to retrieve
3685
- * @param {object} [params] extra parameters specific to the exchange API endpoint
3693
+ * @param {boolean} [params.trigger] set to true for fetching trigger orders
3694
+ * @param {string} [params.marginMode] 'cross' or 'isolated' for fetching spot margin orders
3686
3695
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
3687
3696
  */
3688
3697
  return await this.fetchOrdersByStatus('finished', symbol, since, limit, params);
@@ -3692,31 +3701,34 @@ export default class coinex extends Exchange {
3692
3701
  * @method
3693
3702
  * @name coinex#createDepositAddress
3694
3703
  * @description create a currency deposit address
3695
- * @see https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot002_account019_update_deposit_address
3704
+ * @see https://docs.coinex.com/api/v2/assets/deposit-withdrawal/http/update-deposit-address
3696
3705
  * @param {string} code unified currency code of the currency for the deposit address
3697
3706
  * @param {object} [params] extra parameters specific to the exchange API endpoint
3707
+ * @param {string} [params.network] the blockchain network to create a deposit address on
3698
3708
  * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
3699
3709
  */
3700
3710
  await this.loadMarkets();
3701
3711
  const currency = this.currency(code);
3712
+ const network = this.safeString2(params, 'chain', 'network');
3713
+ if (network === undefined) {
3714
+ throw new ArgumentsRequired(this.id + ' createDepositAddress() requires a network parameter');
3715
+ }
3716
+ params = this.omit(params, 'network');
3702
3717
  const request = {
3703
- 'coin_type': currency['id'],
3718
+ 'ccy': currency['id'],
3719
+ 'chain': this.networkCodeToId(network, currency['code']),
3704
3720
  };
3705
- if ('network' in params) {
3706
- const network = this.safeString(params, 'network');
3707
- params = this.omit(params, 'network');
3708
- request['smart_contract_name'] = network;
3709
- }
3710
- const response = await this.v1PrivatePutBalanceDepositAddressCoinType(this.extend(request, params));
3721
+ const response = await this.v2PrivatePostAssetsRenewalDepositAddress(this.extend(request, params));
3711
3722
  //
3712
3723
  // {
3713
3724
  // "code": 0,
3714
3725
  // "data": {
3715
- // "coin_address": "TV639dSpb9iGRtoFYkCp4AoaaDYKrK1pw5",
3716
- // "is_bitcoin_cash": false
3726
+ // "address": "0x321bd6479355142334f45653ad5d8b76105a1234",
3727
+ // "memo": ""
3717
3728
  // },
3718
- // "message": "Success"
3729
+ // "message": "OK"
3719
3730
  // }
3731
+ //
3720
3732
  const data = this.safeDict(response, 'data', {});
3721
3733
  return this.parseDepositAddress(data, currency);
3722
3734
  }
@@ -3725,18 +3737,16 @@ export default class coinex extends Exchange {
3725
3737
  * @method
3726
3738
  * @name coinex#fetchDepositAddress
3727
3739
  * @description fetch the deposit address for a currency associated with this account
3728
- * @see https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot002_account020_query_deposit_address
3740
+ * @see https://docs.coinex.com/api/v2/assets/deposit-withdrawal/http/get-deposit-address
3729
3741
  * @param {string} code unified currency code
3730
3742
  * @param {object} [params] extra parameters specific to the exchange API endpoint
3743
+ * @param {string} [params.network] the blockchain network to create a deposit address on
3731
3744
  * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
3732
3745
  */
3733
3746
  await this.loadMarkets();
3734
3747
  const currency = this.currency(code);
3735
- const request = {
3736
- 'coin_type': currency['id'],
3737
- };
3738
- const networks = this.safeValue(currency, 'networks', {});
3739
- const network = this.safeString(params, 'network');
3748
+ const networks = this.safeDict(currency, 'networks', {});
3749
+ const network = this.safeString2(params, 'network', 'chain');
3740
3750
  params = this.omit(params, 'network');
3741
3751
  const networksKeys = Object.keys(networks);
3742
3752
  const numOfNetworks = networksKeys.length;
@@ -3748,24 +3758,24 @@ export default class coinex extends Exchange {
3748
3758
  throw new ExchangeError(this.id + ' fetchDepositAddress() ' + network + ' network not supported for ' + code);
3749
3759
  }
3750
3760
  }
3751
- if (network !== undefined) {
3752
- request['smart_contract_name'] = network;
3753
- }
3754
- const response = await this.v1PrivateGetBalanceDepositAddressCoinType(this.extend(request, params));
3761
+ const request = {
3762
+ 'ccy': currency['id'],
3763
+ 'chain': network,
3764
+ };
3765
+ const response = await this.v2PrivateGetAssetsDepositAddress(this.extend(request, params));
3755
3766
  //
3756
- // {
3757
- // "code": 0,
3758
- // "data": {
3759
- // "coin_address": "1P1JqozxioQwaqPwgMAQdNDYNyaVSqgARq",
3760
- // // coin_address: "xxxxxxxxxxxxxx:yyyyyyyyy", // with embedded tag/memo
3761
- // "is_bitcoin_cash": false
3762
- // },
3763
- // "message": "Success"
3764
- // }
3767
+ // {
3768
+ // "code": 0,
3769
+ // "data": {
3770
+ // "address": "0x321bd6479355142334f45653ad5d8b76105a1234",
3771
+ // "memo": ""
3772
+ // },
3773
+ // "message": "OK"
3774
+ // }
3765
3775
  //
3766
- const data = this.safeValue(response, 'data', {});
3776
+ const data = this.safeDict(response, 'data', {});
3767
3777
  const depositAddress = this.parseDepositAddress(data, currency);
3768
- const options = this.safeValue(this.options, 'fetchDepositAddress', {});
3778
+ const options = this.safeDict(this.options, 'fetchDepositAddress', {});
3769
3779
  const fillResponseFromRequest = this.safeBool(options, 'fillResponseFromRequest', true);
3770
3780
  if (fillResponseFromRequest) {
3771
3781
  depositAddress['network'] = this.safeNetworkCode(network, currency);
@@ -3791,11 +3801,11 @@ export default class coinex extends Exchange {
3791
3801
  parseDepositAddress(depositAddress, currency = undefined) {
3792
3802
  //
3793
3803
  // {
3794
- // "coin_address": "1P1JqozxioQwaqPwgMAQdNDYNyaVSqgARq",
3795
- // "is_bitcoin_cash": false
3804
+ // "address": "1P1JqozxioQwaqPwgMAQdNDYNyaVSqgARq",
3805
+ // "memo": ""
3796
3806
  // }
3797
3807
  //
3798
- const coinAddress = this.safeString(depositAddress, 'coin_address');
3808
+ const coinAddress = this.safeString(depositAddress, 'address');
3799
3809
  const parts = coinAddress.split(':');
3800
3810
  let address = undefined;
3801
3811
  let tag = undefined;
@@ -6115,6 +6125,8 @@ export default class coinex extends Exchange {
6115
6125
  preparedString += nonce + this.secret;
6116
6126
  const signature = this.hash(this.encode(preparedString), sha256);
6117
6127
  headers = {
6128
+ 'Content-Type': 'application/json; charset=utf-8',
6129
+ 'Accept': 'application/json',
6118
6130
  'X-COINEX-KEY': this.apiKey,
6119
6131
  'X-COINEX-SIGN': signature,
6120
6132
  'X-COINEX-TIMESTAMP': nonce,