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/__init__.py +1 -1
- ccxt/abstract/bybit.py +1 -0
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/binance.py +99 -3
- ccxt/async_support/bybit.py +100 -99
- ccxt/async_support/coinbase.py +96 -1
- ccxt/async_support/coinex.py +392 -375
- ccxt/async_support/okx.py +1 -1
- ccxt/base/exchange.py +5 -1
- ccxt/binance.py +99 -3
- ccxt/bybit.py +100 -99
- ccxt/coinbase.py +96 -1
- ccxt/coinex.py +392 -375
- ccxt/okx.py +1 -1
- ccxt/pro/__init__.py +1 -1
- ccxt/pro/woo.py +137 -9
- {ccxt-4.3.12.dist-info → ccxt-4.3.14.dist-info}/METADATA +4 -4
- {ccxt-4.3.12.dist-info → ccxt-4.3.14.dist-info}/RECORD +21 -21
- {ccxt-4.3.12.dist-info → ccxt-4.3.14.dist-info}/WHEEL +0 -0
- {ccxt-4.3.12.dist-info → ccxt-4.3.14.dist-info}/top_level.txt +0 -0
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
|
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
|
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
|
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
|
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
|
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
|
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.
|
1936
|
-
|
1937
|
-
|
1938
|
-
|
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 =
|
1944
|
-
|
1945
|
-
|
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
|
-
|
1950
|
-
|
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
|
1957
|
-
side =
|
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, ['
|
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':
|
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.
|
1993
|
-
'triggerPrice': self.
|
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.
|
1997
|
-
'average': self.
|
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.
|
2000
|
-
'remaining': self.
|
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.
|
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('
|
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
|
-
|
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
|
-
|
3252
|
-
|
3253
|
-
|
3254
|
-
|
3255
|
-
|
3256
|
-
|
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
|
-
|
3263
|
-
|
3264
|
-
|
3265
|
-
|
3266
|
-
|
3267
|
-
|
3268
|
-
|
3269
|
-
|
3270
|
-
|
3271
|
-
|
3272
|
-
|
3273
|
-
|
3274
|
-
|
3275
|
-
|
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
|
-
|
3278
|
-
|
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.
|
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.
|
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.
|
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.
|
3288
|
-
|
3289
|
-
|
3290
|
-
|
3291
|
-
|
3292
|
-
|
3293
|
-
|
3294
|
-
|
3295
|
-
|
3296
|
-
|
3297
|
-
|
3298
|
-
|
3299
|
-
|
3300
|
-
|
3301
|
-
|
3302
|
-
|
3303
|
-
|
3304
|
-
|
3305
|
-
|
3306
|
-
|
3307
|
-
|
3308
|
-
|
3309
|
-
|
3310
|
-
|
3311
|
-
|
3312
|
-
|
3313
|
-
|
3314
|
-
|
3315
|
-
|
3316
|
-
|
3317
|
-
|
3318
|
-
|
3319
|
-
|
3320
|
-
|
3321
|
-
|
3322
|
-
|
3323
|
-
|
3324
|
-
|
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://
|
3447
|
-
:see: https://
|
3448
|
-
:see: https://
|
3449
|
-
:see: https://
|
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
|
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://
|
3462
|
-
:see: https://
|
3463
|
-
:see: https://
|
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
|
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,
|