ccxt 4.4.2__py2.py3-none-any.whl → 4.4.3__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/bitmart.py +1 -0
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/binance.py +10 -10
- ccxt/async_support/bitmart.py +3 -1
- ccxt/async_support/bitstamp.py +24 -36
- ccxt/async_support/bybit.py +2 -0
- ccxt/async_support/cryptocom.py +2 -1
- ccxt/async_support/mexc.py +15 -0
- ccxt/async_support/xt.py +5 -1
- ccxt/base/exchange.py +1 -1
- ccxt/binance.py +10 -10
- ccxt/bitmart.py +3 -1
- ccxt/bitstamp.py +24 -36
- ccxt/bybit.py +2 -0
- ccxt/cryptocom.py +2 -1
- ccxt/mexc.py +15 -0
- ccxt/pro/__init__.py +1 -1
- ccxt/pro/cryptocom.py +181 -22
- ccxt/pro/mexc.py +76 -4
- ccxt/pro/okx.py +5 -3
- ccxt/pro/oxfun.py +70 -0
- ccxt/pro/phemex.py +41 -2
- ccxt/pro/woofipro.py +64 -0
- ccxt/xt.py +5 -1
- {ccxt-4.4.2.dist-info → ccxt-4.4.3.dist-info}/METADATA +4 -4
- {ccxt-4.4.2.dist-info → ccxt-4.4.3.dist-info}/RECORD +31 -31
- {ccxt-4.4.2.dist-info → ccxt-4.4.3.dist-info}/LICENSE.txt +0 -0
- {ccxt-4.4.2.dist-info → ccxt-4.4.3.dist-info}/WHEEL +0 -0
- {ccxt-4.4.2.dist-info → ccxt-4.4.3.dist-info}/top_level.txt +0 -0
ccxt/__init__.py
CHANGED
ccxt/abstract/bitmart.py
CHANGED
@@ -84,6 +84,7 @@ class ImplicitAPI:
|
|
84
84
|
private_post_spot_v4_query_trades = privatePostSpotV4QueryTrades = Entry('spot/v4/query/trades', 'private', 'POST', {'cost': 5})
|
85
85
|
private_post_spot_v4_query_order_trades = privatePostSpotV4QueryOrderTrades = Entry('spot/v4/query/order-trades', 'private', 'POST', {'cost': 5})
|
86
86
|
private_post_spot_v4_cancel_orders = privatePostSpotV4CancelOrders = Entry('spot/v4/cancel_orders', 'private', 'POST', {'cost': 3})
|
87
|
+
private_post_spot_v4_cancel_all = privatePostSpotV4CancelAll = Entry('spot/v4/cancel_all', 'private', 'POST', {'cost': 90})
|
87
88
|
private_post_spot_v4_batch_orders = privatePostSpotV4BatchOrders = Entry('spot/v4/batch_orders', 'private', 'POST', {'cost': 3})
|
88
89
|
private_post_spot_v3_cancel_order = privatePostSpotV3CancelOrder = Entry('spot/v3/cancel_order', 'private', 'POST', {'cost': 1})
|
89
90
|
private_post_spot_v2_batch_orders = privatePostSpotV2BatchOrders = Entry('spot/v2/batch_orders', 'private', 'POST', {'cost': 1})
|
ccxt/async_support/__init__.py
CHANGED
ccxt/async_support/binance.py
CHANGED
@@ -6033,8 +6033,8 @@ class binance(Exchange, ImplicitAPI):
|
|
6033
6033
|
marginMode, params = self.handle_margin_mode_and_params('fetchOrders', params)
|
6034
6034
|
isPortfolioMargin = None
|
6035
6035
|
isPortfolioMargin, params = self.handle_option_and_params_2(params, 'fetchOrders', 'papi', 'portfolioMargin', False)
|
6036
|
-
isConditional = self.
|
6037
|
-
params = self.omit(params, ['stop', 'conditional', 'type'])
|
6036
|
+
isConditional = self.safe_bool_n(params, ['stop', 'trigger', 'conditional'])
|
6037
|
+
params = self.omit(params, ['stop', 'trigger', 'conditional', 'type'])
|
6038
6038
|
request: dict = {
|
6039
6039
|
'symbol': market['id'],
|
6040
6040
|
}
|
@@ -6283,7 +6283,7 @@ class binance(Exchange, ImplicitAPI):
|
|
6283
6283
|
marginMode, params = self.handle_margin_mode_and_params('fetchOpenOrders', params)
|
6284
6284
|
isPortfolioMargin = None
|
6285
6285
|
isPortfolioMargin, params = self.handle_option_and_params_2(params, 'fetchOpenOrders', 'papi', 'portfolioMargin', False)
|
6286
|
-
isConditional = self.safe_bool_n(params, ['stop', '
|
6286
|
+
isConditional = self.safe_bool_n(params, ['stop', 'trigger', 'conditional'])
|
6287
6287
|
if symbol is not None:
|
6288
6288
|
market = self.market(symbol)
|
6289
6289
|
request['symbol'] = market['id']
|
@@ -6297,7 +6297,7 @@ class binance(Exchange, ImplicitAPI):
|
|
6297
6297
|
type = self.safe_string(params, 'type', defaultType)
|
6298
6298
|
subType = None
|
6299
6299
|
subType, params = self.handle_sub_type_and_params('fetchOpenOrders', market, params)
|
6300
|
-
params = self.omit(params, ['type', 'stop', '
|
6300
|
+
params = self.omit(params, ['type', 'stop', 'trigger', 'conditional'])
|
6301
6301
|
response = None
|
6302
6302
|
if type == 'option':
|
6303
6303
|
if since is not None:
|
@@ -6358,8 +6358,8 @@ class binance(Exchange, ImplicitAPI):
|
|
6358
6358
|
}
|
6359
6359
|
isPortfolioMargin = None
|
6360
6360
|
isPortfolioMargin, params = self.handle_option_and_params_2(params, 'fetchOpenOrder', 'papi', 'portfolioMargin', False)
|
6361
|
-
isConditional = self.safe_bool_n(params, ['stop', '
|
6362
|
-
params = self.omit(params, ['stop', '
|
6361
|
+
isConditional = self.safe_bool_n(params, ['stop', 'trigger', 'conditional'])
|
6362
|
+
params = self.omit(params, ['stop', 'trigger', 'conditional'])
|
6363
6363
|
isPortfolioMarginConditional = (isPortfolioMargin and isConditional)
|
6364
6364
|
orderIdRequest = 'strategyId' if isPortfolioMarginConditional else 'orderId'
|
6365
6365
|
request[orderIdRequest] = id
|
@@ -6649,7 +6649,7 @@ class binance(Exchange, ImplicitAPI):
|
|
6649
6649
|
marginMode, params = self.handle_margin_mode_and_params('cancelOrder', params)
|
6650
6650
|
isPortfolioMargin = None
|
6651
6651
|
isPortfolioMargin, params = self.handle_option_and_params_2(params, 'cancelOrder', 'papi', 'portfolioMargin', False)
|
6652
|
-
isConditional = self.
|
6652
|
+
isConditional = self.safe_bool_n(params, ['stop', 'trigger', 'conditional'])
|
6653
6653
|
request: dict = {
|
6654
6654
|
'symbol': market['id'],
|
6655
6655
|
}
|
@@ -6667,7 +6667,7 @@ class binance(Exchange, ImplicitAPI):
|
|
6667
6667
|
request['strategyId'] = id
|
6668
6668
|
else:
|
6669
6669
|
request['orderId'] = id
|
6670
|
-
params = self.omit(params, ['type', 'origClientOrderId', 'clientOrderId', 'newClientStrategyId', 'stop', 'conditional'])
|
6670
|
+
params = self.omit(params, ['type', 'origClientOrderId', 'clientOrderId', 'newClientStrategyId', 'stop', 'trigger', 'conditional'])
|
6671
6671
|
response = None
|
6672
6672
|
if market['option']:
|
6673
6673
|
response = await self.eapiPrivateDeleteOrder(self.extend(request, params))
|
@@ -6726,9 +6726,9 @@ class binance(Exchange, ImplicitAPI):
|
|
6726
6726
|
}
|
6727
6727
|
isPortfolioMargin = None
|
6728
6728
|
isPortfolioMargin, params = self.handle_option_and_params_2(params, 'cancelAllOrders', 'papi', 'portfolioMargin', False)
|
6729
|
-
isConditional = self.
|
6729
|
+
isConditional = self.safe_bool_n(params, ['stop', 'trigger', 'conditional'])
|
6730
6730
|
type = self.safe_string(params, 'type', market['type'])
|
6731
|
-
params = self.omit(params, ['type', 'stop', 'conditional'])
|
6731
|
+
params = self.omit(params, ['type', 'stop', 'trigger', 'conditional'])
|
6732
6732
|
marginMode = None
|
6733
6733
|
marginMode, params = self.handle_margin_mode_and_params('cancelAllOrders', params)
|
6734
6734
|
response = None
|
ccxt/async_support/bitmart.py
CHANGED
@@ -248,6 +248,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
248
248
|
'spot/v4/query/trades': 5, # 12 times/2 sec = 6/s => 30/6 = 5
|
249
249
|
'spot/v4/query/order-trades': 5, # 12 times/2 sec = 6/s => 30/6 = 5
|
250
250
|
'spot/v4/cancel_orders': 3,
|
251
|
+
'spot/v4/cancel_all': 90,
|
251
252
|
'spot/v4/batch_orders': 3,
|
252
253
|
# newer endpoint
|
253
254
|
'spot/v3/cancel_order': 1,
|
@@ -2789,6 +2790,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
2789
2790
|
"""
|
2790
2791
|
cancel all open orders in a market
|
2791
2792
|
:see: https://developer-pro.bitmart.com/en/spot/#cancel-all-orders
|
2793
|
+
:see: https://developer-pro.bitmart.com/en/spot/#new-batch-order-v4-signed
|
2792
2794
|
:see: https://developer-pro.bitmart.com/en/futures/#cancel-all-orders-signed
|
2793
2795
|
:see: https://developer-pro.bitmart.com/en/futuresv2/#cancel-all-orders-signed
|
2794
2796
|
:param str symbol: unified market symbol of the market to cancel orders in
|
@@ -2806,7 +2808,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
2806
2808
|
type = None
|
2807
2809
|
type, params = self.handle_market_type_and_params('cancelAllOrders', market, params)
|
2808
2810
|
if type == 'spot':
|
2809
|
-
response = await self.
|
2811
|
+
response = await self.privatePostSpotV4CancelAll(self.extend(request, params))
|
2810
2812
|
elif type == 'swap':
|
2811
2813
|
if symbol is None:
|
2812
2814
|
raise ArgumentsRequired(self.id + ' cancelAllOrders() requires a symbol argument')
|
ccxt/async_support/bitstamp.py
CHANGED
@@ -402,46 +402,34 @@ class bitstamp(Exchange, ImplicitAPI):
|
|
402
402
|
'trading': {
|
403
403
|
'tierBased': True,
|
404
404
|
'percentage': True,
|
405
|
-
'taker': self.parse_number('0.
|
406
|
-
'maker': self.parse_number('0.
|
405
|
+
'taker': self.parse_number('0.004'),
|
406
|
+
'maker': self.parse_number('0.004'),
|
407
407
|
'tiers': {
|
408
408
|
'taker': [
|
409
|
-
[self.parse_number('0'), self.parse_number('0.
|
410
|
-
[self.parse_number('
|
411
|
-
[self.parse_number('100000'), self.parse_number('0.
|
412
|
-
[self.parse_number('
|
413
|
-
[self.parse_number('
|
414
|
-
[self.parse_number('
|
415
|
-
[self.parse_number('
|
416
|
-
[self.parse_number('
|
417
|
-
[self.parse_number('
|
418
|
-
[self.parse_number('
|
419
|
-
[self.parse_number('
|
420
|
-
[self.parse_number('100000000'), self.parse_number('0.0007')],
|
421
|
-
[self.parse_number('500000000'), self.parse_number('0.0005')],
|
422
|
-
[self.parse_number('2000000000'), self.parse_number('0.0003')],
|
423
|
-
[self.parse_number('6000000000'), self.parse_number('0.0001')],
|
424
|
-
[self.parse_number('20000000000'), self.parse_number('0.00005')],
|
425
|
-
[self.parse_number('20000000001'), self.parse_number('0')],
|
409
|
+
[self.parse_number('0'), self.parse_number('0.004')],
|
410
|
+
[self.parse_number('10000'), self.parse_number('0.003')],
|
411
|
+
[self.parse_number('100000'), self.parse_number('0.002')],
|
412
|
+
[self.parse_number('500000'), self.parse_number('0.0018')],
|
413
|
+
[self.parse_number('1500000'), self.parse_number('0.0016')],
|
414
|
+
[self.parse_number('5000000'), self.parse_number('0.0012')],
|
415
|
+
[self.parse_number('20000000'), self.parse_number('0.001')],
|
416
|
+
[self.parse_number('50000000'), self.parse_number('0.0008')],
|
417
|
+
[self.parse_number('100000000'), self.parse_number('0.0006')],
|
418
|
+
[self.parse_number('250000000'), self.parse_number('0.0005')],
|
419
|
+
[self.parse_number('1000000000'), self.parse_number('0.0003')],
|
426
420
|
],
|
427
421
|
'maker': [
|
428
|
-
[self.parse_number('0'), self.parse_number('0.
|
429
|
-
[self.parse_number('
|
430
|
-
[self.parse_number('100000'), self.parse_number('0.
|
431
|
-
[self.parse_number('
|
432
|
-
[self.parse_number('
|
433
|
-
[self.parse_number('
|
434
|
-
[self.parse_number('
|
435
|
-
[self.parse_number('
|
436
|
-
[self.parse_number('
|
437
|
-
[self.parse_number('
|
438
|
-
[self.parse_number('
|
439
|
-
[self.parse_number('100000000'), self.parse_number('0.0007')],
|
440
|
-
[self.parse_number('500000000'), self.parse_number('0.0005')],
|
441
|
-
[self.parse_number('2000000000'), self.parse_number('0.0003')],
|
442
|
-
[self.parse_number('6000000000'), self.parse_number('0.0001')],
|
443
|
-
[self.parse_number('20000000000'), self.parse_number('0.00005')],
|
444
|
-
[self.parse_number('20000000001'), self.parse_number('0')],
|
422
|
+
[self.parse_number('0'), self.parse_number('0.003')],
|
423
|
+
[self.parse_number('10000'), self.parse_number('0.002')],
|
424
|
+
[self.parse_number('100000'), self.parse_number('0.001')],
|
425
|
+
[self.parse_number('500000'), self.parse_number('0.0008')],
|
426
|
+
[self.parse_number('1500000'), self.parse_number('0.0006')],
|
427
|
+
[self.parse_number('5000000'), self.parse_number('0.0003')],
|
428
|
+
[self.parse_number('20000000'), self.parse_number('0.002')],
|
429
|
+
[self.parse_number('50000000'), self.parse_number('0.0001')],
|
430
|
+
[self.parse_number('100000000'), self.parse_number('0')],
|
431
|
+
[self.parse_number('250000000'), self.parse_number('0')],
|
432
|
+
[self.parse_number('1000000000'), self.parse_number('0')],
|
445
433
|
],
|
446
434
|
},
|
447
435
|
},
|
ccxt/async_support/bybit.py
CHANGED
@@ -14,6 +14,7 @@ from ccxt.base.errors import AuthenticationError
|
|
14
14
|
from ccxt.base.errors import PermissionDenied
|
15
15
|
from ccxt.base.errors import ArgumentsRequired
|
16
16
|
from ccxt.base.errors import BadRequest
|
17
|
+
from ccxt.base.errors import BadSymbol
|
17
18
|
from ccxt.base.errors import NoChange
|
18
19
|
from ccxt.base.errors import MarginModeAlreadySet
|
19
20
|
from ccxt.base.errors import ManualInteractionNeeded
|
@@ -992,6 +993,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
992
993
|
'3200300': InsufficientFunds, # {"retCode":3200300,"retMsg":"Insufficient margin balance.","result":null,"retExtMap":{}}
|
993
994
|
},
|
994
995
|
'broad': {
|
996
|
+
'Not supported symbols': BadSymbol, # {"retCode":10001,"retMsg":"Not supported symbols","result":{},"retExtInfo":{},"time":1726147060461}
|
995
997
|
'Request timeout': RequestTimeout, # {"retCode":10016,"retMsg":"Request timeout, please try again later","result":{},"retExtInfo":{},"time":1675307914985}
|
996
998
|
'unknown orderInfo': OrderNotFound, # {"ret_code":-1,"ret_msg":"unknown orderInfo","ext_code":"","ext_info":"","result":null,"time_now":"1584030414.005545","rate_limit_status":99,"rate_limit_reset_ms":1584030414003,"rate_limit":100}
|
997
999
|
'invalid api_key': AuthenticationError, # {"ret_code":10003,"ret_msg":"invalid api_key","ext_code":"","ext_info":"","result":null,"time_now":"1599547085.415797"}
|
ccxt/async_support/cryptocom.py
CHANGED
@@ -611,7 +611,7 @@ class cryptocom(Exchange, ImplicitAPI):
|
|
611
611
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
612
612
|
"""
|
613
613
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
614
|
-
:see: https://exchange-docs.crypto.com/
|
614
|
+
:see: https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-tickers
|
615
615
|
:see: https://exchange-docs.crypto.com/derivatives/index.html#public-get-tickers
|
616
616
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
617
617
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1660,6 +1660,7 @@ class cryptocom(Exchange, ImplicitAPI):
|
|
1660
1660
|
async def fetch_deposit_address(self, code: str, params={}):
|
1661
1661
|
"""
|
1662
1662
|
fetch the deposit address for a currency associated with self account
|
1663
|
+
:see: https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-deposit-address
|
1663
1664
|
:param str code: unified currency code
|
1664
1665
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1665
1666
|
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
|
ccxt/async_support/mexc.py
CHANGED
@@ -4855,6 +4855,14 @@ class mexc(Exchange, ImplicitAPI):
|
|
4855
4855
|
return self.parse_transaction(response, currency)
|
4856
4856
|
|
4857
4857
|
async def set_position_mode(self, hedged: bool, symbol: Str = None, params={}):
|
4858
|
+
"""
|
4859
|
+
set hedged to True or False for a market
|
4860
|
+
:see: https://mexcdevelop.github.io/apidocs/contract_v1_en/#change-position-mode
|
4861
|
+
:param bool hedged: set to True to use dualSidePosition
|
4862
|
+
:param str symbol: not used by mexc setPositionMode()
|
4863
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
4864
|
+
:returns dict: response from the exchange
|
4865
|
+
"""
|
4858
4866
|
request: dict = {
|
4859
4867
|
'positionMode': 1 if hedged else 2, # 1 Hedge, 2 One-way, before changing position mode make sure that there are no active orders, planned orders, or open positions, the risk limit level will be reset to 1
|
4860
4868
|
}
|
@@ -4868,6 +4876,13 @@ class mexc(Exchange, ImplicitAPI):
|
|
4868
4876
|
return response
|
4869
4877
|
|
4870
4878
|
async def fetch_position_mode(self, symbol: Str = None, params={}):
|
4879
|
+
"""
|
4880
|
+
fetchs the position mode, hedged or one way, hedged for binance is set identically for all linear markets or all inverse markets
|
4881
|
+
:see: https://mexcdevelop.github.io/apidocs/contract_v1_en/#get-position-mode
|
4882
|
+
:param str symbol: not used by mexc fetchPositionMode
|
4883
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
4884
|
+
:returns dict: an object detailing whether the market is in hedged or one-way mode
|
4885
|
+
"""
|
4871
4886
|
response = await self.contractPrivateGetPositionPositionMode(params)
|
4872
4887
|
#
|
4873
4888
|
# {
|
ccxt/async_support/xt.py
CHANGED
@@ -1138,17 +1138,21 @@ class xt(Exchange, ImplicitAPI):
|
|
1138
1138
|
maxCost = None
|
1139
1139
|
minPrice = None
|
1140
1140
|
maxPrice = None
|
1141
|
+
amountPrecision = None
|
1141
1142
|
for i in range(0, len(filters)):
|
1142
1143
|
entry = filters[i]
|
1143
1144
|
filter = self.safe_string(entry, 'filter')
|
1144
1145
|
if filter == 'QUANTITY':
|
1145
1146
|
minAmount = self.safe_number(entry, 'min')
|
1146
1147
|
maxAmount = self.safe_number(entry, 'max')
|
1148
|
+
amountPrecision = self.safe_number(entry, 'tickSize')
|
1147
1149
|
if filter == 'QUOTE_QTY':
|
1148
1150
|
minCost = self.safe_number(entry, 'min')
|
1149
1151
|
if filter == 'PRICE':
|
1150
1152
|
minPrice = self.safe_number(entry, 'min')
|
1151
1153
|
maxPrice = self.safe_number(entry, 'max')
|
1154
|
+
if amountPrecision is None:
|
1155
|
+
amountPrecision = self.parse_number(self.parse_precision(self.safe_string(market, 'quantityPrecision')))
|
1152
1156
|
underlyingType = self.safe_string(market, 'underlyingType')
|
1153
1157
|
linear = None
|
1154
1158
|
inverse = None
|
@@ -1223,7 +1227,7 @@ class xt(Exchange, ImplicitAPI):
|
|
1223
1227
|
'optionType': None,
|
1224
1228
|
'precision': {
|
1225
1229
|
'price': self.parse_number(self.parse_precision(self.safe_string(market, 'pricePrecision'))),
|
1226
|
-
'amount':
|
1230
|
+
'amount': amountPrecision,
|
1227
1231
|
'base': self.parse_number(self.parse_precision(self.safe_string(market, 'baseCoinPrecision'))),
|
1228
1232
|
'quote': self.parse_number(self.parse_precision(self.safe_string(market, 'quoteCoinPrecision'))),
|
1229
1233
|
},
|
ccxt/base/exchange.py
CHANGED
ccxt/binance.py
CHANGED
@@ -6032,8 +6032,8 @@ class binance(Exchange, ImplicitAPI):
|
|
6032
6032
|
marginMode, params = self.handle_margin_mode_and_params('fetchOrders', params)
|
6033
6033
|
isPortfolioMargin = None
|
6034
6034
|
isPortfolioMargin, params = self.handle_option_and_params_2(params, 'fetchOrders', 'papi', 'portfolioMargin', False)
|
6035
|
-
isConditional = self.
|
6036
|
-
params = self.omit(params, ['stop', 'conditional', 'type'])
|
6035
|
+
isConditional = self.safe_bool_n(params, ['stop', 'trigger', 'conditional'])
|
6036
|
+
params = self.omit(params, ['stop', 'trigger', 'conditional', 'type'])
|
6037
6037
|
request: dict = {
|
6038
6038
|
'symbol': market['id'],
|
6039
6039
|
}
|
@@ -6282,7 +6282,7 @@ class binance(Exchange, ImplicitAPI):
|
|
6282
6282
|
marginMode, params = self.handle_margin_mode_and_params('fetchOpenOrders', params)
|
6283
6283
|
isPortfolioMargin = None
|
6284
6284
|
isPortfolioMargin, params = self.handle_option_and_params_2(params, 'fetchOpenOrders', 'papi', 'portfolioMargin', False)
|
6285
|
-
isConditional = self.safe_bool_n(params, ['stop', '
|
6285
|
+
isConditional = self.safe_bool_n(params, ['stop', 'trigger', 'conditional'])
|
6286
6286
|
if symbol is not None:
|
6287
6287
|
market = self.market(symbol)
|
6288
6288
|
request['symbol'] = market['id']
|
@@ -6296,7 +6296,7 @@ class binance(Exchange, ImplicitAPI):
|
|
6296
6296
|
type = self.safe_string(params, 'type', defaultType)
|
6297
6297
|
subType = None
|
6298
6298
|
subType, params = self.handle_sub_type_and_params('fetchOpenOrders', market, params)
|
6299
|
-
params = self.omit(params, ['type', 'stop', '
|
6299
|
+
params = self.omit(params, ['type', 'stop', 'trigger', 'conditional'])
|
6300
6300
|
response = None
|
6301
6301
|
if type == 'option':
|
6302
6302
|
if since is not None:
|
@@ -6357,8 +6357,8 @@ class binance(Exchange, ImplicitAPI):
|
|
6357
6357
|
}
|
6358
6358
|
isPortfolioMargin = None
|
6359
6359
|
isPortfolioMargin, params = self.handle_option_and_params_2(params, 'fetchOpenOrder', 'papi', 'portfolioMargin', False)
|
6360
|
-
isConditional = self.safe_bool_n(params, ['stop', '
|
6361
|
-
params = self.omit(params, ['stop', '
|
6360
|
+
isConditional = self.safe_bool_n(params, ['stop', 'trigger', 'conditional'])
|
6361
|
+
params = self.omit(params, ['stop', 'trigger', 'conditional'])
|
6362
6362
|
isPortfolioMarginConditional = (isPortfolioMargin and isConditional)
|
6363
6363
|
orderIdRequest = 'strategyId' if isPortfolioMarginConditional else 'orderId'
|
6364
6364
|
request[orderIdRequest] = id
|
@@ -6648,7 +6648,7 @@ class binance(Exchange, ImplicitAPI):
|
|
6648
6648
|
marginMode, params = self.handle_margin_mode_and_params('cancelOrder', params)
|
6649
6649
|
isPortfolioMargin = None
|
6650
6650
|
isPortfolioMargin, params = self.handle_option_and_params_2(params, 'cancelOrder', 'papi', 'portfolioMargin', False)
|
6651
|
-
isConditional = self.
|
6651
|
+
isConditional = self.safe_bool_n(params, ['stop', 'trigger', 'conditional'])
|
6652
6652
|
request: dict = {
|
6653
6653
|
'symbol': market['id'],
|
6654
6654
|
}
|
@@ -6666,7 +6666,7 @@ class binance(Exchange, ImplicitAPI):
|
|
6666
6666
|
request['strategyId'] = id
|
6667
6667
|
else:
|
6668
6668
|
request['orderId'] = id
|
6669
|
-
params = self.omit(params, ['type', 'origClientOrderId', 'clientOrderId', 'newClientStrategyId', 'stop', 'conditional'])
|
6669
|
+
params = self.omit(params, ['type', 'origClientOrderId', 'clientOrderId', 'newClientStrategyId', 'stop', 'trigger', 'conditional'])
|
6670
6670
|
response = None
|
6671
6671
|
if market['option']:
|
6672
6672
|
response = self.eapiPrivateDeleteOrder(self.extend(request, params))
|
@@ -6725,9 +6725,9 @@ class binance(Exchange, ImplicitAPI):
|
|
6725
6725
|
}
|
6726
6726
|
isPortfolioMargin = None
|
6727
6727
|
isPortfolioMargin, params = self.handle_option_and_params_2(params, 'cancelAllOrders', 'papi', 'portfolioMargin', False)
|
6728
|
-
isConditional = self.
|
6728
|
+
isConditional = self.safe_bool_n(params, ['stop', 'trigger', 'conditional'])
|
6729
6729
|
type = self.safe_string(params, 'type', market['type'])
|
6730
|
-
params = self.omit(params, ['type', 'stop', 'conditional'])
|
6730
|
+
params = self.omit(params, ['type', 'stop', 'trigger', 'conditional'])
|
6731
6731
|
marginMode = None
|
6732
6732
|
marginMode, params = self.handle_margin_mode_and_params('cancelAllOrders', params)
|
6733
6733
|
response = None
|
ccxt/bitmart.py
CHANGED
@@ -248,6 +248,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
248
248
|
'spot/v4/query/trades': 5, # 12 times/2 sec = 6/s => 30/6 = 5
|
249
249
|
'spot/v4/query/order-trades': 5, # 12 times/2 sec = 6/s => 30/6 = 5
|
250
250
|
'spot/v4/cancel_orders': 3,
|
251
|
+
'spot/v4/cancel_all': 90,
|
251
252
|
'spot/v4/batch_orders': 3,
|
252
253
|
# newer endpoint
|
253
254
|
'spot/v3/cancel_order': 1,
|
@@ -2789,6 +2790,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
2789
2790
|
"""
|
2790
2791
|
cancel all open orders in a market
|
2791
2792
|
:see: https://developer-pro.bitmart.com/en/spot/#cancel-all-orders
|
2793
|
+
:see: https://developer-pro.bitmart.com/en/spot/#new-batch-order-v4-signed
|
2792
2794
|
:see: https://developer-pro.bitmart.com/en/futures/#cancel-all-orders-signed
|
2793
2795
|
:see: https://developer-pro.bitmart.com/en/futuresv2/#cancel-all-orders-signed
|
2794
2796
|
:param str symbol: unified market symbol of the market to cancel orders in
|
@@ -2806,7 +2808,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
2806
2808
|
type = None
|
2807
2809
|
type, params = self.handle_market_type_and_params('cancelAllOrders', market, params)
|
2808
2810
|
if type == 'spot':
|
2809
|
-
response = self.
|
2811
|
+
response = self.privatePostSpotV4CancelAll(self.extend(request, params))
|
2810
2812
|
elif type == 'swap':
|
2811
2813
|
if symbol is None:
|
2812
2814
|
raise ArgumentsRequired(self.id + ' cancelAllOrders() requires a symbol argument')
|
ccxt/bitstamp.py
CHANGED
@@ -402,46 +402,34 @@ class bitstamp(Exchange, ImplicitAPI):
|
|
402
402
|
'trading': {
|
403
403
|
'tierBased': True,
|
404
404
|
'percentage': True,
|
405
|
-
'taker': self.parse_number('0.
|
406
|
-
'maker': self.parse_number('0.
|
405
|
+
'taker': self.parse_number('0.004'),
|
406
|
+
'maker': self.parse_number('0.004'),
|
407
407
|
'tiers': {
|
408
408
|
'taker': [
|
409
|
-
[self.parse_number('0'), self.parse_number('0.
|
410
|
-
[self.parse_number('
|
411
|
-
[self.parse_number('100000'), self.parse_number('0.
|
412
|
-
[self.parse_number('
|
413
|
-
[self.parse_number('
|
414
|
-
[self.parse_number('
|
415
|
-
[self.parse_number('
|
416
|
-
[self.parse_number('
|
417
|
-
[self.parse_number('
|
418
|
-
[self.parse_number('
|
419
|
-
[self.parse_number('
|
420
|
-
[self.parse_number('100000000'), self.parse_number('0.0007')],
|
421
|
-
[self.parse_number('500000000'), self.parse_number('0.0005')],
|
422
|
-
[self.parse_number('2000000000'), self.parse_number('0.0003')],
|
423
|
-
[self.parse_number('6000000000'), self.parse_number('0.0001')],
|
424
|
-
[self.parse_number('20000000000'), self.parse_number('0.00005')],
|
425
|
-
[self.parse_number('20000000001'), self.parse_number('0')],
|
409
|
+
[self.parse_number('0'), self.parse_number('0.004')],
|
410
|
+
[self.parse_number('10000'), self.parse_number('0.003')],
|
411
|
+
[self.parse_number('100000'), self.parse_number('0.002')],
|
412
|
+
[self.parse_number('500000'), self.parse_number('0.0018')],
|
413
|
+
[self.parse_number('1500000'), self.parse_number('0.0016')],
|
414
|
+
[self.parse_number('5000000'), self.parse_number('0.0012')],
|
415
|
+
[self.parse_number('20000000'), self.parse_number('0.001')],
|
416
|
+
[self.parse_number('50000000'), self.parse_number('0.0008')],
|
417
|
+
[self.parse_number('100000000'), self.parse_number('0.0006')],
|
418
|
+
[self.parse_number('250000000'), self.parse_number('0.0005')],
|
419
|
+
[self.parse_number('1000000000'), self.parse_number('0.0003')],
|
426
420
|
],
|
427
421
|
'maker': [
|
428
|
-
[self.parse_number('0'), self.parse_number('0.
|
429
|
-
[self.parse_number('
|
430
|
-
[self.parse_number('100000'), self.parse_number('0.
|
431
|
-
[self.parse_number('
|
432
|
-
[self.parse_number('
|
433
|
-
[self.parse_number('
|
434
|
-
[self.parse_number('
|
435
|
-
[self.parse_number('
|
436
|
-
[self.parse_number('
|
437
|
-
[self.parse_number('
|
438
|
-
[self.parse_number('
|
439
|
-
[self.parse_number('100000000'), self.parse_number('0.0007')],
|
440
|
-
[self.parse_number('500000000'), self.parse_number('0.0005')],
|
441
|
-
[self.parse_number('2000000000'), self.parse_number('0.0003')],
|
442
|
-
[self.parse_number('6000000000'), self.parse_number('0.0001')],
|
443
|
-
[self.parse_number('20000000000'), self.parse_number('0.00005')],
|
444
|
-
[self.parse_number('20000000001'), self.parse_number('0')],
|
422
|
+
[self.parse_number('0'), self.parse_number('0.003')],
|
423
|
+
[self.parse_number('10000'), self.parse_number('0.002')],
|
424
|
+
[self.parse_number('100000'), self.parse_number('0.001')],
|
425
|
+
[self.parse_number('500000'), self.parse_number('0.0008')],
|
426
|
+
[self.parse_number('1500000'), self.parse_number('0.0006')],
|
427
|
+
[self.parse_number('5000000'), self.parse_number('0.0003')],
|
428
|
+
[self.parse_number('20000000'), self.parse_number('0.002')],
|
429
|
+
[self.parse_number('50000000'), self.parse_number('0.0001')],
|
430
|
+
[self.parse_number('100000000'), self.parse_number('0')],
|
431
|
+
[self.parse_number('250000000'), self.parse_number('0')],
|
432
|
+
[self.parse_number('1000000000'), self.parse_number('0')],
|
445
433
|
],
|
446
434
|
},
|
447
435
|
},
|
ccxt/bybit.py
CHANGED
@@ -13,6 +13,7 @@ from ccxt.base.errors import AuthenticationError
|
|
13
13
|
from ccxt.base.errors import PermissionDenied
|
14
14
|
from ccxt.base.errors import ArgumentsRequired
|
15
15
|
from ccxt.base.errors import BadRequest
|
16
|
+
from ccxt.base.errors import BadSymbol
|
16
17
|
from ccxt.base.errors import NoChange
|
17
18
|
from ccxt.base.errors import MarginModeAlreadySet
|
18
19
|
from ccxt.base.errors import ManualInteractionNeeded
|
@@ -991,6 +992,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
991
992
|
'3200300': InsufficientFunds, # {"retCode":3200300,"retMsg":"Insufficient margin balance.","result":null,"retExtMap":{}}
|
992
993
|
},
|
993
994
|
'broad': {
|
995
|
+
'Not supported symbols': BadSymbol, # {"retCode":10001,"retMsg":"Not supported symbols","result":{},"retExtInfo":{},"time":1726147060461}
|
994
996
|
'Request timeout': RequestTimeout, # {"retCode":10016,"retMsg":"Request timeout, please try again later","result":{},"retExtInfo":{},"time":1675307914985}
|
995
997
|
'unknown orderInfo': OrderNotFound, # {"ret_code":-1,"ret_msg":"unknown orderInfo","ext_code":"","ext_info":"","result":null,"time_now":"1584030414.005545","rate_limit_status":99,"rate_limit_reset_ms":1584030414003,"rate_limit":100}
|
996
998
|
'invalid api_key': AuthenticationError, # {"ret_code":10003,"ret_msg":"invalid api_key","ext_code":"","ext_info":"","result":null,"time_now":"1599547085.415797"}
|
ccxt/cryptocom.py
CHANGED
@@ -611,7 +611,7 @@ class cryptocom(Exchange, ImplicitAPI):
|
|
611
611
|
def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
612
612
|
"""
|
613
613
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
614
|
-
:see: https://exchange-docs.crypto.com/
|
614
|
+
:see: https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-tickers
|
615
615
|
:see: https://exchange-docs.crypto.com/derivatives/index.html#public-get-tickers
|
616
616
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
617
617
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1660,6 +1660,7 @@ class cryptocom(Exchange, ImplicitAPI):
|
|
1660
1660
|
def fetch_deposit_address(self, code: str, params={}):
|
1661
1661
|
"""
|
1662
1662
|
fetch the deposit address for a currency associated with self account
|
1663
|
+
:see: https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-deposit-address
|
1663
1664
|
:param str code: unified currency code
|
1664
1665
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1665
1666
|
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
|
ccxt/mexc.py
CHANGED
@@ -4855,6 +4855,14 @@ class mexc(Exchange, ImplicitAPI):
|
|
4855
4855
|
return self.parse_transaction(response, currency)
|
4856
4856
|
|
4857
4857
|
def set_position_mode(self, hedged: bool, symbol: Str = None, params={}):
|
4858
|
+
"""
|
4859
|
+
set hedged to True or False for a market
|
4860
|
+
:see: https://mexcdevelop.github.io/apidocs/contract_v1_en/#change-position-mode
|
4861
|
+
:param bool hedged: set to True to use dualSidePosition
|
4862
|
+
:param str symbol: not used by mexc setPositionMode()
|
4863
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
4864
|
+
:returns dict: response from the exchange
|
4865
|
+
"""
|
4858
4866
|
request: dict = {
|
4859
4867
|
'positionMode': 1 if hedged else 2, # 1 Hedge, 2 One-way, before changing position mode make sure that there are no active orders, planned orders, or open positions, the risk limit level will be reset to 1
|
4860
4868
|
}
|
@@ -4868,6 +4876,13 @@ class mexc(Exchange, ImplicitAPI):
|
|
4868
4876
|
return response
|
4869
4877
|
|
4870
4878
|
def fetch_position_mode(self, symbol: Str = None, params={}):
|
4879
|
+
"""
|
4880
|
+
fetchs the position mode, hedged or one way, hedged for binance is set identically for all linear markets or all inverse markets
|
4881
|
+
:see: https://mexcdevelop.github.io/apidocs/contract_v1_en/#get-position-mode
|
4882
|
+
:param str symbol: not used by mexc fetchPositionMode
|
4883
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
4884
|
+
:returns dict: an object detailing whether the market is in hedged or one-way mode
|
4885
|
+
"""
|
4871
4886
|
response = self.contractPrivateGetPositionPositionMode(params)
|
4872
4887
|
#
|
4873
4888
|
# {
|