ccxt 4.3.12__py2.py3-none-any.whl → 4.3.14__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
ccxt/coinex.py CHANGED
@@ -1664,111 +1664,7 @@ class coinex(Exchange, ImplicitAPI):
1664
1664
 
1665
1665
  def parse_order(self, order, market: Market = None) -> Order:
1666
1666
  #
1667
- # Spot and Margin fetchOpenOrders, fetchClosedOrders
1668
- #
1669
- # {
1670
- # "account_id": 0,
1671
- # "amount": "0.0005",
1672
- # "asset_fee": "0",
1673
- # "avg_price": "0.00",
1674
- # "client_id": "",
1675
- # "create_time": 1651089247,
1676
- # "deal_amount": "0",
1677
- # "deal_fee": "0",
1678
- # "deal_money": "0",
1679
- # "fee_asset": null,
1680
- # "fee_discount": "1",
1681
- # "finished_time": 0,
1682
- # "id": 74660190839,
1683
- # "left": "0.0005",
1684
- # "maker_fee_rate": "0.002",
1685
- # "market": "BTCUSDT",
1686
- # "money_fee": "0",
1687
- # "order_type": "limit",
1688
- # "price": "31000",
1689
- # "status": "not_deal",
1690
- # "stock_fee": "0",
1691
- # "taker_fee_rate": "0.002",
1692
- # "type": "buy"
1693
- # }
1694
- #
1695
- # Swap fetchOpenOrders, fetchClosedOrders
1696
- #
1697
- # {
1698
- # "amount": "0.0005",
1699
- # "client_id": "",
1700
- # "create_time": 1651030414.088431,
1701
- # "deal_asset_fee": "0",
1702
- # "deal_fee": "0.00960069",
1703
- # "deal_profit": "0.009825",
1704
- # "deal_stock": "19.20138",
1705
- # "effect_type": 0,
1706
- # "fee_asset": "",
1707
- # "fee_discount": "0",
1708
- # "left": "0",
1709
- # "leverage": "3",
1710
- # "maker_fee": "0",
1711
- # "market": "BTCUSDT",
1712
- # "order_id": 18253447431,
1713
- # "position_id": 0,
1714
- # "position_type": 1,
1715
- # "price": "0",
1716
- # "side": 1,
1717
- # "source": "web",
1718
- # "stop_id": 0,
1719
- # "taker_fee": "0.0005",
1720
- # "target": 0,
1721
- # "type": 2,
1722
- # "update_time": 1651030414.08847,
1723
- # "user_id": 3620173
1724
- # }
1725
- #
1726
- # Spot and Margin Stop fetchOpenOrders, fetchClosedOrders
1727
- #
1728
- # {
1729
- # "account_id": 0,
1730
- # "amount": "155",
1731
- # "client_id": "",
1732
- # "create_time": 1651089182,
1733
- # "fee_asset": null,
1734
- # "fee_discount": "1",
1735
- # "maker_fee": "0.002",
1736
- # "market": "BTCUSDT",
1737
- # "order_id": 74660111965,
1738
- # "order_type": "market",
1739
- # "price": "0",
1740
- # "state": 0,
1741
- # "stop_price": "31500",
1742
- # "taker_fee": "0.002",
1743
- # "type": "buy"
1744
- # }
1745
- #
1746
- # Swap Stop fetchOpenOrders
1747
- #
1748
- # {
1749
- # "amount": "0.0005",
1750
- # "client_id": "",
1751
- # "create_time": 1651089147.321691,
1752
- # "effect_type": 1,
1753
- # "fee_asset": "",
1754
- # "fee_discount": "0.00000000000000000000",
1755
- # "maker_fee": "0.00030",
1756
- # "market": "BTCUSDT",
1757
- # "order_id": 18332143848,
1758
- # "price": "31000.00",
1759
- # "side": 2,
1760
- # "source": "api.v1",
1761
- # "state": 1,
1762
- # "stop_price": "31500.00",
1763
- # "stop_type": 1,
1764
- # "taker_fee": "0.00050",
1765
- # "target": 0,
1766
- # "type": 1,
1767
- # "update_time": 1651089147.321691,
1768
- # "user_id": 3620173
1769
- # }
1770
- #
1771
- # Spot and Margin createOrder, createOrders, editOrder, cancelOrders, cancelOrder v2
1667
+ # Spot and Margin createOrder, createOrders, editOrder, cancelOrders, cancelOrder, fetchOpenOrders
1772
1668
  #
1773
1669
  # {
1774
1670
  # "amount": "0.0001",
@@ -1794,13 +1690,37 @@ class coinex(Exchange, ImplicitAPI):
1794
1690
  # "updated_at": 1714114386250
1795
1691
  # }
1796
1692
  #
1797
- # Spot, Margin and Swap trigger createOrder, createOrders, editOrder v2
1693
+ # Spot and Margin fetchClosedOrders
1694
+ #
1695
+ # {
1696
+ # "order_id": 117180532345,
1697
+ # "market": "BTCUSDT",
1698
+ # "market_type": "SPOT",
1699
+ # "side": "sell",
1700
+ # "type": "market",
1701
+ # "ccy": "BTC",
1702
+ # "amount": "0.00015484",
1703
+ # "price": "0",
1704
+ # "client_id": "",
1705
+ # "created_at": 1714116494219,
1706
+ # "updated_at": 0,
1707
+ # "base_fee": "0",
1708
+ # "quote_fee": "0.0199931699632",
1709
+ # "discount_fee": "0",
1710
+ # "maker_fee_rate": "0",
1711
+ # "taker_fee_rate": "0.002",
1712
+ # "unfilled_amount": "0",
1713
+ # "filled_amount": "0.00015484",
1714
+ # "filled_value": "9.9965849816"
1715
+ # }
1716
+ #
1717
+ # Spot, Margin and Swap trigger createOrder, createOrders, editOrder
1798
1718
  #
1799
1719
  # {
1800
1720
  # "stop_id": 117180138153
1801
1721
  # }
1802
1722
  #
1803
- # Swap createOrder, createOrders, editOrder, cancelOrders, cancelOrder v2
1723
+ # Swap createOrder, createOrders, editOrder, cancelOrders, cancelOrder, fetchOpenOrders, fetchClosedOrders
1804
1724
  #
1805
1725
  # {
1806
1726
  # "amount": "0.0001",
@@ -1825,7 +1745,7 @@ class coinex(Exchange, ImplicitAPI):
1825
1745
  # "updated_at": 1714116769986
1826
1746
  # }
1827
1747
  #
1828
- # Swap stopLossPrice and takeProfitPrice createOrder v2
1748
+ # Swap stopLossPrice and takeProfitPrice createOrder
1829
1749
  #
1830
1750
  # {
1831
1751
  # "adl_level": 1,
@@ -1860,25 +1780,7 @@ class coinex(Exchange, ImplicitAPI):
1860
1780
  # "updated_at": 1714119054559
1861
1781
  # }
1862
1782
  #
1863
- # Swap and Spot stop cancelOrders, cancelOrder v2
1864
- #
1865
- # {
1866
- # "amount": "0.0001",
1867
- # "client_id": "x-167673045-a7d7714c6478acf6",
1868
- # "created_at": 1714187923820,
1869
- # "market": "BTCUSDT",
1870
- # "market_type": "FUTURES",
1871
- # "price": "61000",
1872
- # "side": "buy",
1873
- # "stop_id": 136984426097,
1874
- # "trigger_direction": "higher",
1875
- # "trigger_price": "62000",
1876
- # "trigger_price_type": "latest_price",
1877
- # "type": "limit",
1878
- # "updated_at": 1714187974363
1879
- # }
1880
- #
1881
- # Swap fetchOrder v2
1783
+ # Swap fetchOrder
1882
1784
  #
1883
1785
  # {
1884
1786
  # "amount": "0.0001",
@@ -1904,7 +1806,7 @@ class coinex(Exchange, ImplicitAPI):
1904
1806
  # "updated_at": 1714460987164
1905
1807
  # }
1906
1808
  #
1907
- # Spot and Margin fetchOrder v2
1809
+ # Spot and Margin fetchOrder
1908
1810
  #
1909
1811
  # {
1910
1812
  # "amount": "0.0001",
@@ -1931,77 +1833,94 @@ class coinex(Exchange, ImplicitAPI):
1931
1833
  # "updated_at": 1714461638958
1932
1834
  # }
1933
1835
  #
1836
+ # Swap trigger fetchOpenOrders, fetchClosedOrders - Spot and Swap trigger cancelOrders, cancelOrder
1837
+ #
1838
+ # {
1839
+ # "amount": "0.0001",
1840
+ # "client_id": "x-167673045-a7d7714c6478acf6",
1841
+ # "created_at": 1714187923820,
1842
+ # "market": "BTCUSDT",
1843
+ # "market_type": "FUTURES",
1844
+ # "price": "61000",
1845
+ # "side": "buy",
1846
+ # "stop_id": 136984426097,
1847
+ # "trigger_direction": "higher",
1848
+ # "trigger_price": "62000",
1849
+ # "trigger_price_type": "latest_price",
1850
+ # "type": "limit",
1851
+ # "updated_at": 1714187974363
1852
+ # }
1853
+ #
1854
+ # Spot and Margin trigger fetchOpenOrders, fetchClosedOrders
1855
+ #
1856
+ # {
1857
+ # "stop_id": 117586439530,
1858
+ # "market": "BTCUSDT",
1859
+ # "market_type": "SPOT",
1860
+ # "ccy": "BTC",
1861
+ # "side": "buy",
1862
+ # "type": "limit",
1863
+ # "amount": "0.0001",
1864
+ # "price": "51000",
1865
+ # "trigger_price": "52000",
1866
+ # "trigger_direction": "higher",
1867
+ # "trigger_price_type": "mark_price",
1868
+ # "client_id": "x-167673045-df61777094c69312",
1869
+ # "created_at": 1714551237335,
1870
+ # "updated_at": 1714551237335
1871
+ # }
1872
+ #
1934
1873
  rawStatus = self.safe_string(order, 'status')
1935
- timestamp = self.safe_timestamp(order, 'create_time')
1936
- if timestamp is None:
1937
- timestamp = self.safe_integer(order, 'created_at')
1938
- update = self.safe_timestamp(order, 'update_time')
1939
- if update is None:
1940
- update = self.safe_integer(order, 'updated_at')
1874
+ timestamp = self.safe_integer(order, 'created_at')
1875
+ updatedTimestamp = self.safe_integer(order, 'updated_at')
1876
+ if updatedTimestamp == 0:
1877
+ updatedTimestamp = timestamp
1941
1878
  marketId = self.safe_string(order, 'market')
1942
1879
  defaultType = self.safe_string(self.options, 'defaultType')
1943
- orderType = 'swap' if ('source' in order) else defaultType
1944
- market = self.safe_market(marketId, market, None, orderType)
1945
- feeCurrencyId = self.safe_string_2(order, 'fee_asset', 'fee_ccy')
1880
+ orderType = self.safe_string_lower(order, 'market_type', defaultType)
1881
+ if orderType == 'futures':
1882
+ orderType = 'swap'
1883
+ marketType = 'swap' if (orderType == 'swap') else 'spot'
1884
+ market = self.safe_market(marketId, market, None, marketType)
1885
+ feeCurrencyId = self.safe_string(order, 'fee_ccy')
1946
1886
  feeCurrency = self.safe_currency_code(feeCurrencyId)
1947
1887
  if feeCurrency is None:
1948
1888
  feeCurrency = market['quote']
1949
- rawIntegerSide = self.safe_integer(order, 'side')
1950
- rawStringSide = self.safe_string(order, 'side')
1951
- side: Str = None
1952
- if rawIntegerSide == 1:
1953
- side = 'sell'
1954
- elif rawIntegerSide == 2:
1889
+ side = self.safe_string(order, 'side')
1890
+ if side == 'long':
1955
1891
  side = 'buy'
1956
- elif (rawStringSide == 'buy') or (rawStringSide == 'sell'):
1957
- side = rawStringSide
1958
- else:
1959
- side = self.safe_string(order, 'type')
1960
- rawType = self.safe_string(order, 'order_type')
1961
- type: Str = None
1962
- if rawType is None:
1963
- typeInteger = self.safe_integer(order, 'type')
1964
- typeString = self.safe_string(order, 'type')
1965
- if typeInteger == 1:
1966
- type = 'limit'
1967
- elif typeInteger == 2:
1968
- type = 'market'
1969
- elif (typeString == 'limit') or (typeString == 'market'):
1970
- type = typeString
1971
- elif typeString == 'maker_only':
1972
- type = 'limit'
1973
- else:
1974
- type = rawType
1892
+ elif side == 'short':
1893
+ side = 'sell'
1975
1894
  clientOrderId = self.safe_string(order, 'client_id')
1976
1895
  if clientOrderId == '':
1977
1896
  clientOrderId = None
1978
1897
  return self.safe_order({
1979
- 'id': self.safe_string_n(order, ['id', 'order_id', 'stop_id']),
1898
+ 'id': self.safe_string_n(order, ['position_id', 'order_id', 'stop_id']),
1980
1899
  'clientOrderId': clientOrderId,
1981
1900
  'datetime': self.iso8601(timestamp),
1982
1901
  'timestamp': timestamp,
1983
- 'lastTradeTimestamp': update,
1902
+ 'lastTradeTimestamp': updatedTimestamp,
1984
1903
  'status': self.parse_order_status(rawStatus),
1985
1904
  'symbol': market['symbol'],
1986
- 'type': type,
1905
+ 'type': self.safe_string(order, 'type'),
1987
1906
  'timeInForce': None,
1988
1907
  'postOnly': None,
1989
1908
  'reduceOnly': None,
1990
1909
  'side': side,
1991
1910
  'price': self.safe_string(order, 'price'),
1992
- 'stopPrice': self.safe_string_2(order, 'stop_price', 'trigger_price'),
1993
- 'triggerPrice': self.safe_string_2(order, 'stop_price', 'trigger_price'),
1911
+ 'stopPrice': self.safe_string(order, 'trigger_price'),
1912
+ 'triggerPrice': self.safe_string(order, 'trigger_price'),
1994
1913
  'takeProfitPrice': self.safe_number(order, 'take_profit_price'),
1995
1914
  'stopLossPrice': self.safe_number(order, 'stop_loss_price'),
1996
- 'cost': self.safe_string_2(order, 'deal_money', 'filled_value'),
1997
- 'average': self.safe_string_2(order, 'avg_price', 'avg_entry_price'),
1915
+ 'cost': self.safe_string(order, 'filled_value'),
1916
+ 'average': self.safe_string(order, 'avg_entry_price'),
1998
1917
  'amount': self.safe_string(order, 'amount'),
1999
- 'filled': self.safe_string_2(order, 'deal_amount', 'filled_amount'),
2000
- 'remaining': self.safe_string_2(order, 'left', 'unfilled_amount'),
1918
+ 'filled': self.safe_string(order, 'filled_amount'),
1919
+ 'remaining': self.safe_string(order, 'unfilled_amount'),
2001
1920
  'trades': None,
2002
1921
  'fee': {
2003
1922
  'currency': feeCurrency,
2004
- 'cost': self.safe_string_n(order, ['deal_fee', 'quote_fee', 'fee']),
1923
+ 'cost': self.safe_string_2(order, 'quote_fee', 'fee'),
2005
1924
  },
2006
1925
  'info': order,
2007
1926
  }, market)
@@ -3137,7 +3056,7 @@ class coinex(Exchange, ImplicitAPI):
3137
3056
  #
3138
3057
  else:
3139
3058
  marginMode = None
3140
- marginMode, params = self.handle_margin_mode_and_params('fetchOrdersByStatus', params)
3059
+ marginMode, params = self.handle_margin_mode_and_params('cancelAllOrders', params)
3141
3060
  if marginMode is not None:
3142
3061
  request['market_type'] = 'MARGIN'
3143
3062
  else:
@@ -3233,224 +3152,318 @@ class coinex(Exchange, ImplicitAPI):
3233
3152
  return self.parse_order(data, market)
3234
3153
 
3235
3154
  def fetch_orders_by_status(self, status, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
3155
+ """
3156
+ fetch a list of orders
3157
+ :see: https://docs.coinex.com/api/v2/spot/order/http/list-finished-order
3158
+ :see: https://docs.coinex.com/api/v2/spot/order/http/list-finished-stop-order
3159
+ :see: https://docs.coinex.com/api/v2/futures/order/http/list-finished-order
3160
+ :see: https://docs.coinex.com/api/v2/futures/order/http/list-finished-stop-order
3161
+ :param str symbol: unified market symbol of the market orders were made in
3162
+ :param int [since]: the earliest time in ms to fetch orders for
3163
+ :param int [limit]: the maximum number of order structures to retrieve
3164
+ :param boolean [params.trigger]: set to True for fetching trigger orders
3165
+ :param str [params.marginMode]: 'cross' or 'isolated' for fetching spot margin orders
3166
+ :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
3167
+ """
3236
3168
  self.load_markets()
3237
- limit = 100 if (limit is None) else limit
3238
- request = {
3239
- 'limit': limit,
3240
- # 'page': 1, # SPOT
3241
- # 'offset': 0, # SWAP
3242
- # 'side': 0, # SWAP, 0: All, 1: Sell, 2: Buy
3243
- }
3244
- stop = self.safe_value(params, 'stop')
3245
- side = self.safe_integer(params, 'side')
3246
- params = self.omit(params, 'stop')
3169
+ request = {}
3247
3170
  market = None
3248
3171
  if symbol is not None:
3249
3172
  market = self.market(symbol)
3250
3173
  request['market'] = market['id']
3251
- marketType, query = self.handle_market_type_and_params('fetchOrdersByStatus', market, params)
3252
- accountId = self.safe_integer(params, 'account_id')
3253
- marginMode = None
3254
- marginMode, params = self.handle_margin_mode_and_params('fetchOrdersByStatus', params)
3255
- if marginMode is not None:
3256
- if accountId is None:
3257
- raise BadRequest(self.id + ' fetchOpenOrders() and fetchClosedOrders() require an account_id parameter for margin orders')
3258
- request['account_id'] = accountId
3259
- params = self.omit(query, 'account_id')
3174
+ if limit is not None:
3175
+ request['limit'] = limit
3176
+ stop = self.safe_bool_2(params, 'stop', 'trigger')
3177
+ params = self.omit(params, ['stop', 'trigger'])
3178
+ marketType = None
3179
+ marketType, params = self.handle_market_type_and_params('fetchOrdersByStatus', market, params)
3260
3180
  response = None
3181
+ isClosed = (status == 'finished') or (status == 'closed')
3182
+ isOpen = (status == 'pending') or (status == 'open')
3261
3183
  if marketType == 'swap':
3262
- if symbol is None:
3263
- raise ArgumentsRequired(self.id + ' fetchOrdersByStatus() requires a symbol argument for swap markets')
3264
- if side is not None:
3265
- request['side'] = side
3266
- else:
3267
- request['side'] = 0
3268
- request['offset'] = 0
3269
- if stop:
3270
- response = self.v1PerpetualPrivateGetOrderStopPending(self.extend(request, params))
3271
- else:
3272
- if status == 'finished':
3273
- response = self.v1PerpetualPrivateGetOrderFinished(self.extend(request, params))
3274
- elif status == 'pending':
3275
- response = self.v1PerpetualPrivateGetOrderPending(self.extend(request, params))
3184
+ request['market_type'] = 'FUTURES'
3185
+ if isClosed:
3186
+ if stop:
3187
+ response = self.v2PrivateGetFuturesFinishedStopOrder(self.extend(request, params))
3188
+ #
3189
+ # {
3190
+ # "code": 0,
3191
+ # "data": [
3192
+ # {
3193
+ # "stop_id": 52431158859,
3194
+ # "market": "BTCUSDT",
3195
+ # "market_type": "FUTURES",
3196
+ # "side": "sell",
3197
+ # "type": "market",
3198
+ # "amount": "0.0005",
3199
+ # "price": "20599.64",
3200
+ # "client_id": "",
3201
+ # "created_at": 1667547909856,
3202
+ # "updated_at": 1667547909856,
3203
+ # "trigger_price": "20599.64",
3204
+ # "trigger_price_type": "latest_price",
3205
+ # "trigger_direction": ""
3206
+ # },
3207
+ # ],
3208
+ # "message": "OK",
3209
+ # "pagination": {
3210
+ # "has_next": False
3211
+ # }
3212
+ # }
3213
+ #
3214
+ else:
3215
+ response = self.v2PrivateGetFuturesFinishedOrder(self.extend(request, params))
3216
+ #
3217
+ # {
3218
+ # "code": 0,
3219
+ # "data": [
3220
+ # {
3221
+ # "order_id": 136915813578,
3222
+ # "market": "BTCUSDT",
3223
+ # "market_type": "FUTURES",
3224
+ # "side": "sell",
3225
+ # "type": "market",
3226
+ # "amount": "0.0001",
3227
+ # "price": "0",
3228
+ # "client_id": "x-167673045-4f264600c432ac06",
3229
+ # "created_at": 1714119323764,
3230
+ # "updated_at": 1714119323764,
3231
+ # "unfilled_amount": "0",
3232
+ # "filled_amount": "0.0001",
3233
+ # "filled_value": "6.442017",
3234
+ # "fee": "0.003221",
3235
+ # "fee_ccy": "USDT",
3236
+ # "maker_fee_rate": "0",
3237
+ # "taker_fee_rate": "0.0005"
3238
+ # },
3239
+ # ],
3240
+ # "message": "OK",
3241
+ # "pagination": {
3242
+ # "has_next": False
3243
+ # }
3244
+ # }
3245
+ #
3246
+ elif isOpen:
3247
+ if stop:
3248
+ response = self.v2PrivateGetFuturesPendingStopOrder(self.extend(request, params))
3249
+ #
3250
+ # {
3251
+ # "code": 0,
3252
+ # "data": [
3253
+ # {
3254
+ # "stop_id": 137481469849,
3255
+ # "market": "BTCUSDT",
3256
+ # "market_type": "FUTURES",
3257
+ # "side": "buy",
3258
+ # "type": "limit",
3259
+ # "amount": "0.0001",
3260
+ # "price": "51000",
3261
+ # "client_id": "x-167673045-2b932341949fa2a1",
3262
+ # "created_at": 1714552257876,
3263
+ # "updated_at": 1714552257876,
3264
+ # "trigger_price": "52000",
3265
+ # "trigger_price_type": "latest_price",
3266
+ # "trigger_direction": "higher"
3267
+ # }
3268
+ # ],
3269
+ # "message": "OK",
3270
+ # "pagination": {
3271
+ # "total": 1,
3272
+ # "has_next": False
3273
+ # }
3274
+ # }
3275
+ #
3276
+ else:
3277
+ response = self.v2PrivateGetFuturesPendingOrder(self.extend(request, params))
3278
+ #
3279
+ # {
3280
+ # "code": 0,
3281
+ # "data": [
3282
+ # {
3283
+ # "order_id": 137480580906,
3284
+ # "market": "BTCUSDT",
3285
+ # "market_type": "FUTURES",
3286
+ # "side": "buy",
3287
+ # "type": "limit",
3288
+ # "amount": "0.0001",
3289
+ # "price": "51000",
3290
+ # "client_id": "",
3291
+ # "created_at": 1714551877569,
3292
+ # "updated_at": 1714551877569,
3293
+ # "unfilled_amount": "0.0001",
3294
+ # "filled_amount": "0",
3295
+ # "filled_value": "0",
3296
+ # "fee": "0",
3297
+ # "fee_ccy": "USDT",
3298
+ # "maker_fee_rate": "0.0003",
3299
+ # "taker_fee_rate": "0.0005",
3300
+ # "last_filled_amount": "0",
3301
+ # "last_filled_price": "0",
3302
+ # "realized_pnl": "0"
3303
+ # }
3304
+ # ],
3305
+ # "message": "OK",
3306
+ # "pagination": {
3307
+ # "total": 1,
3308
+ # "has_next": False
3309
+ # }
3310
+ # }
3311
+ #
3276
3312
  else:
3277
- request['page'] = 1
3278
- if status == 'finished':
3313
+ marginMode = None
3314
+ marginMode, params = self.handle_margin_mode_and_params('fetchOrdersByStatus', params)
3315
+ if marginMode is not None:
3316
+ request['market_type'] = 'MARGIN'
3317
+ else:
3318
+ request['market_type'] = 'SPOT'
3319
+ if isClosed:
3279
3320
  if stop:
3280
- response = self.v1PrivateGetOrderStopFinished(self.extend(request, params))
3321
+ response = self.v2PrivateGetSpotFinishedStopOrder(self.extend(request, params))
3322
+ #
3323
+ # {
3324
+ # "code": 0,
3325
+ # "data": [
3326
+ # {
3327
+ # "stop_id": 117654881420,
3328
+ # "market": "BTCUSDT",
3329
+ # "market_type": "SPOT",
3330
+ # "ccy": "USDT",
3331
+ # "side": "buy",
3332
+ # "type": "market",
3333
+ # "amount": "5.83325524",
3334
+ # "price": "0",
3335
+ # "trigger_price": "57418",
3336
+ # "trigger_direction": "lower",
3337
+ # "trigger_price_type": "mark_price",
3338
+ # "client_id": "",
3339
+ # "created_at": 1714618050597,
3340
+ # "updated_at": 0
3341
+ # }
3342
+ # ],
3343
+ # "message": "OK",
3344
+ # "pagination": {
3345
+ # "has_next": False
3346
+ # }
3347
+ # }
3348
+ #
3281
3349
  else:
3282
- response = self.v1PrivateGetOrderFinished(self.extend(request, params))
3350
+ response = self.v2PrivateGetSpotFinishedOrder(self.extend(request, params))
3351
+ #
3352
+ # {
3353
+ # "code": 0,
3354
+ # "data": [
3355
+ # {
3356
+ # "order_id": 117180532345,
3357
+ # "market": "BTCUSDT",
3358
+ # "market_type": "SPOT",
3359
+ # "side": "sell",
3360
+ # "type": "market",
3361
+ # "ccy": "BTC",
3362
+ # "amount": "0.00015484",
3363
+ # "price": "0",
3364
+ # "client_id": "",
3365
+ # "created_at": 1714116494219,
3366
+ # "updated_at": 0,
3367
+ # "base_fee": "0",
3368
+ # "quote_fee": "0.0199931699632",
3369
+ # "discount_fee": "0",
3370
+ # "maker_fee_rate": "0",
3371
+ # "taker_fee_rate": "0.002",
3372
+ # "unfilled_amount": "0",
3373
+ # "filled_amount": "0.00015484",
3374
+ # "filled_value": "9.9965849816"
3375
+ # },
3376
+ # ],
3377
+ # "message": "OK",
3378
+ # "pagination": {
3379
+ # "has_next": False
3380
+ # }
3381
+ # }
3382
+ #
3283
3383
  elif status == 'pending':
3284
3384
  if stop:
3285
- response = self.v1PrivateGetOrderStopPending(self.extend(request, params))
3385
+ response = self.v2PrivateGetSpotPendingStopOrder(self.extend(request, params))
3386
+ #
3387
+ # {
3388
+ # "code": 0,
3389
+ # "data": [
3390
+ # {
3391
+ # "stop_id": 117586439530,
3392
+ # "market": "BTCUSDT",
3393
+ # "market_type": "SPOT",
3394
+ # "ccy": "BTC",
3395
+ # "side": "buy",
3396
+ # "type": "limit",
3397
+ # "amount": "0.0001",
3398
+ # "price": "51000",
3399
+ # "trigger_price": "52000",
3400
+ # "trigger_direction": "higher",
3401
+ # "trigger_price_type": "mark_price",
3402
+ # "client_id": "x-167673045-df61777094c69312",
3403
+ # "created_at": 1714551237335,
3404
+ # "updated_at": 1714551237335
3405
+ # }
3406
+ # ],
3407
+ # "message": "OK",
3408
+ # "pagination": {
3409
+ # "total": 1,
3410
+ # "has_next": False
3411
+ # }
3412
+ # }
3413
+ #
3286
3414
  else:
3287
- response = self.v1PrivateGetOrderPending(self.extend(request, params))
3288
- #
3289
- # Spot and Margin
3290
- #
3291
- # {
3292
- # "code": 0,
3293
- # "data": {
3294
- # "count": 1,
3295
- # "curr_page": 1,
3296
- # "data": [
3297
- # {
3298
- # "account_id": 0,
3299
- # "amount": "0.0005",
3300
- # "asset_fee": "0",
3301
- # "avg_price": "0.00",
3302
- # "client_id": "",
3303
- # "create_time": 1651089247,
3304
- # "deal_amount": "0",
3305
- # "deal_fee": "0",
3306
- # "deal_money": "0",
3307
- # "fee_asset": null,
3308
- # "fee_discount": "1",
3309
- # "finished_time": 0,
3310
- # "id": 74660190839,
3311
- # "left": "0.0005",
3312
- # "maker_fee_rate": "0.002",
3313
- # "market": "BTCUSDT",
3314
- # "money_fee": "0",
3315
- # "order_type": "limit",
3316
- # "price": "31000",
3317
- # "status": "not_deal",
3318
- # "stock_fee": "0",
3319
- # "taker_fee_rate": "0.002",
3320
- # "type": "buy"
3321
- # }
3322
- # ],
3323
- # "has_next": False,
3324
- # "total": 1
3325
- # },
3326
- # "message": "Success"
3327
- # }
3328
- #
3329
- # Swap
3330
- #
3331
- # {
3332
- # "code": 0,
3333
- # "data": {
3334
- # "limit": 100,
3335
- # "offset": 0,
3336
- # "records": [
3337
- # {
3338
- # "amount": "0.0005",
3339
- # "client_id": "",
3340
- # "create_time": 1651030414.088431,
3341
- # "deal_asset_fee": "0",
3342
- # "deal_fee": "0.00960069",
3343
- # "deal_profit": "0.009825",
3344
- # "deal_stock": "19.20138",
3345
- # "effect_type": 0,
3346
- # "fee_asset": "",
3347
- # "fee_discount": "0",
3348
- # "left": "0",
3349
- # "leverage": "3",
3350
- # "maker_fee": "0",
3351
- # "market": "BTCUSDT",
3352
- # "order_id": 18253447431,
3353
- # "position_id": 0,
3354
- # "position_type": 1,
3355
- # "price": "0",
3356
- # "side": 1,
3357
- # "source": "web",
3358
- # "stop_id": 0,
3359
- # "taker_fee": "0.0005",
3360
- # "target": 0,
3361
- # "type": 2,
3362
- # "update_time": 1651030414.08847,
3363
- # "user_id": 3620173
3364
- # },
3365
- # ]
3366
- # },
3367
- # "message": "OK"
3368
- # }
3369
- #
3370
- # Spot and Margin Stop
3371
- #
3372
- # {
3373
- # "code": 0,
3374
- # "data": {
3375
- # "count": 1,
3376
- # "curr_page": 1,
3377
- # "data": [
3378
- # {
3379
- # "account_id": 0,
3380
- # "amount": "155",
3381
- # "client_id": "",
3382
- # "create_time": 1651089182,
3383
- # "fee_asset": null,
3384
- # "fee_discount": "1",
3385
- # "maker_fee": "0.002",
3386
- # "market": "BTCUSDT",
3387
- # "order_id": 74660111965,
3388
- # "order_type": "market",
3389
- # "price": "0",
3390
- # "state": 0,
3391
- # "stop_price": "31500",
3392
- # "taker_fee": "0.002",
3393
- # "type": "buy"
3394
- # }
3395
- # ],
3396
- # "has_next": False,
3397
- # "total": 0
3398
- # },
3399
- # "message": "Success"
3400
- # }
3401
- #
3402
- # Swap Stop
3403
- #
3404
- # {
3405
- # "code": 0,
3406
- # "data": {
3407
- # "limit": 100,
3408
- # "offset": 0,
3409
- # "records": [
3410
- # {
3411
- # "amount": "0.0005",
3412
- # "client_id": "",
3413
- # "create_time": 1651089147.321691,
3414
- # "effect_type": 1,
3415
- # "fee_asset": "",
3416
- # "fee_discount": "0.00000000000000000000",
3417
- # "maker_fee": "0.00030",
3418
- # "market": "BTCUSDT",
3419
- # "order_id": 18332143848,
3420
- # "price": "31000.00",
3421
- # "side": 2,
3422
- # "source": "api.v1",
3423
- # "state": 1,
3424
- # "stop_price": "31500.00",
3425
- # "stop_type": 1,
3426
- # "taker_fee": "0.00050",
3427
- # "target": 0,
3428
- # "type": 1,
3429
- # "update_time": 1651089147.321691,
3430
- # "user_id": 3620173
3431
- # }
3432
- # ],
3433
- # "total": 1
3434
- # },
3435
- # "message": "OK"
3436
- # }
3437
- #
3438
- tradeRequest = 'records' if (marketType == 'swap') else 'data'
3439
- data = self.safe_value(response, 'data')
3440
- orders = self.safe_list(data, tradeRequest, [])
3441
- return self.parse_orders(orders, market, since, limit)
3415
+ response = self.v2PrivateGetSpotPendingOrder(self.extend(request, params))
3416
+ #
3417
+ # {
3418
+ # "code": 0,
3419
+ # "data": [
3420
+ # {
3421
+ # "order_id": 117585921297,
3422
+ # "market": "BTCUSDT",
3423
+ # "market_type": "SPOT",
3424
+ # "side": "buy",
3425
+ # "type": "limit",
3426
+ # "ccy": "BTC",
3427
+ # "amount": "0.00011793",
3428
+ # "price": "52000",
3429
+ # "client_id": "",
3430
+ # "created_at": 1714550707486,
3431
+ # "updated_at": 1714550707486,
3432
+ # "base_fee": "0",
3433
+ # "quote_fee": "0",
3434
+ # "discount_fee": "0",
3435
+ # "maker_fee_rate": "0.002",
3436
+ # "taker_fee_rate": "0.002",
3437
+ # "last_fill_amount": "0",
3438
+ # "last_fill_price": "0",
3439
+ # "unfilled_amount": "0.00011793",
3440
+ # "filled_amount": "0",
3441
+ # "filled_value": "0"
3442
+ # }
3443
+ # ],
3444
+ # "message": "OK",
3445
+ # "pagination": {
3446
+ # "total": 1,
3447
+ # "has_next": False
3448
+ # }
3449
+ # }
3450
+ #
3451
+ data = self.safe_list(response, 'data', [])
3452
+ return self.parse_orders(data, market, since, limit)
3442
3453
 
3443
3454
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
3444
3455
  """
3445
3456
  fetch all unfilled currently open orders
3446
- :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http027_query_pending_stop
3447
- :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http025_query_pending
3448
- :see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot003_trade013_stop_pending_order
3449
- :see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot003_trade011_pending_order
3457
+ :see: https://docs.coinex.com/api/v2/spot/order/http/list-pending-order
3458
+ :see: https://docs.coinex.com/api/v2/spot/order/http/list-pending-stop-order
3459
+ :see: https://docs.coinex.com/api/v2/futures/order/http/list-pending-order
3460
+ :see: https://docs.coinex.com/api/v2/futures/order/http/list-pending-stop-order
3450
3461
  :param str symbol: unified market symbol
3451
3462
  :param int [since]: the earliest time in ms to fetch open orders for
3452
- :param int [limit]: the maximum number of open orders structures to retrieve
3463
+ :param int [limit]: the maximum number of open order structures to retrieve
3453
3464
  :param dict [params]: extra parameters specific to the exchange API endpoint
3465
+ :param boolean [params.trigger]: set to True for fetching trigger orders
3466
+ :param str [params.marginMode]: 'cross' or 'isolated' for fetching spot margin orders
3454
3467
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
3455
3468
  """
3456
3469
  return self.fetch_orders_by_status('pending', symbol, since, limit, params)
@@ -3458,13 +3471,15 @@ class coinex(Exchange, ImplicitAPI):
3458
3471
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
3459
3472
  """
3460
3473
  fetches information on multiple closed orders made by the user
3461
- :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http029_query_finished
3462
- :see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot003_trade010_stop_finished_order
3463
- :see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot003_trade012_finished_order
3474
+ :see: https://docs.coinex.com/api/v2/spot/order/http/list-finished-order
3475
+ :see: https://docs.coinex.com/api/v2/spot/order/http/list-finished-stop-order
3476
+ :see: https://docs.coinex.com/api/v2/futures/order/http/list-finished-order
3477
+ :see: https://docs.coinex.com/api/v2/futures/order/http/list-finished-stop-order
3464
3478
  :param str symbol: unified market symbol of the market orders were made in
3465
3479
  :param int [since]: the earliest time in ms to fetch orders for
3466
3480
  :param int [limit]: the maximum number of order structures to retrieve
3467
- :param dict [params]: extra parameters specific to the exchange API endpoint
3481
+ :param boolean [params.trigger]: set to True for fetching trigger orders
3482
+ :param str [params.marginMode]: 'cross' or 'isolated' for fetching spot margin orders
3468
3483
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
3469
3484
  """
3470
3485
  return self.fetch_orders_by_status('finished', symbol, since, limit, params)
@@ -5733,6 +5748,8 @@ class coinex(Exchange, ImplicitAPI):
5733
5748
  preparedString += nonce + self.secret
5734
5749
  signature = self.hash(self.encode(preparedString), 'sha256')
5735
5750
  headers = {
5751
+ 'Content-Type': 'application/json; charset=utf-8',
5752
+ 'Accept': 'application/json',
5736
5753
  'X-COINEX-KEY': self.apiKey,
5737
5754
  'X-COINEX-SIGN': signature,
5738
5755
  'X-COINEX-TIMESTAMP': nonce,