ccxt 4.4.40__py2.py3-none-any.whl → 4.4.42__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/binance.py +3 -0
- ccxt/abstract/binancecoinm.py +3 -0
- ccxt/abstract/binanceus.py +3 -0
- ccxt/abstract/binanceusdm.py +3 -0
- ccxt/abstract/bitmart.py +2 -0
- ccxt/abstract/okx.py +5 -0
- ccxt/ace.py +1 -1
- ccxt/alpaca.py +0 -1
- ccxt/ascendex.py +0 -1
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/ace.py +1 -1
- ccxt/async_support/alpaca.py +0 -1
- ccxt/async_support/ascendex.py +0 -1
- ccxt/async_support/base/exchange.py +24 -17
- ccxt/async_support/bigone.py +0 -1
- ccxt/async_support/binance.py +27 -24
- ccxt/async_support/bingx.py +5 -1
- ccxt/async_support/bitfinex.py +123 -1
- ccxt/async_support/bitget.py +1 -0
- ccxt/async_support/bitmart.py +243 -2
- ccxt/async_support/blofin.py +16 -7
- ccxt/async_support/bybit.py +8 -8
- ccxt/async_support/cex.py +1 -1
- ccxt/async_support/coinbase.py +8 -9
- ccxt/async_support/coinbaseexchange.py +5 -6
- ccxt/async_support/coinbaseinternational.py +7 -8
- ccxt/async_support/coincatch.py +0 -1
- ccxt/async_support/coincheck.py +0 -1
- ccxt/async_support/coinex.py +91 -6
- ccxt/async_support/coinlist.py +3 -4
- ccxt/async_support/coinmate.py +1 -3
- ccxt/async_support/coinmetro.py +4 -5
- ccxt/async_support/coinone.py +0 -1
- ccxt/async_support/coinsph.py +7 -8
- ccxt/async_support/cryptocom.py +3 -0
- ccxt/async_support/currencycom.py +3 -4
- ccxt/async_support/defx.py +6 -7
- ccxt/async_support/deribit.py +1 -3
- ccxt/async_support/digifinex.py +0 -1
- ccxt/async_support/ellipx.py +0 -2
- ccxt/async_support/exmo.py +61 -6
- ccxt/async_support/gate.py +2 -3
- ccxt/async_support/gemini.py +4 -5
- ccxt/async_support/hashkey.py +79 -67
- ccxt/async_support/hitbtc.py +47 -5
- ccxt/async_support/hollaex.py +4 -6
- ccxt/async_support/htx.py +2 -4
- ccxt/async_support/huobijp.py +0 -1
- ccxt/async_support/hyperliquid.py +60 -1
- ccxt/async_support/idex.py +8 -8
- ccxt/async_support/independentreserve.py +0 -1
- ccxt/async_support/indodax.py +0 -1
- ccxt/async_support/kraken.py +186 -28
- ccxt/async_support/krakenfutures.py +75 -3
- ccxt/async_support/kucoin.py +6 -4
- ccxt/async_support/kucoinfutures.py +10 -9
- ccxt/async_support/kuna.py +1 -3
- ccxt/async_support/latoken.py +1 -3
- ccxt/async_support/lbank.py +0 -1
- ccxt/async_support/luno.py +0 -1
- ccxt/async_support/lykke.py +0 -1
- ccxt/async_support/mercado.py +0 -1
- ccxt/async_support/mexc.py +6 -7
- ccxt/async_support/ndax.py +1 -1
- ccxt/async_support/novadax.py +4 -6
- ccxt/async_support/oceanex.py +0 -1
- ccxt/async_support/okcoin.py +1 -3
- ccxt/async_support/okx.py +7 -4
- ccxt/async_support/onetrading.py +1 -3
- ccxt/async_support/p2b.py +1 -1
- ccxt/async_support/paradex.py +5 -7
- ccxt/async_support/phemex.py +8 -10
- ccxt/async_support/poloniex.py +1 -3
- ccxt/async_support/poloniexfutures.py +6 -6
- ccxt/async_support/probit.py +0 -1
- ccxt/async_support/timex.py +0 -1
- ccxt/async_support/tokocrypto.py +11 -14
- ccxt/async_support/tradeogre.py +1 -1
- ccxt/async_support/upbit.py +0 -1
- ccxt/async_support/wavesexchange.py +4 -5
- ccxt/async_support/whitebit.py +8 -9
- ccxt/async_support/woo.py +98 -12
- ccxt/async_support/woofipro.py +96 -15
- ccxt/async_support/xt.py +6 -3
- ccxt/async_support/yobit.py +0 -1
- ccxt/async_support/zaif.py +0 -1
- ccxt/async_support/zonda.py +1 -2
- ccxt/base/exchange.py +39 -20
- ccxt/base/types.py +10 -0
- ccxt/bigone.py +0 -1
- ccxt/binance.py +27 -24
- ccxt/bingx.py +5 -1
- ccxt/bitfinex.py +123 -1
- ccxt/bitget.py +1 -0
- ccxt/bitmart.py +243 -2
- ccxt/blofin.py +16 -7
- ccxt/bybit.py +8 -8
- ccxt/cex.py +1 -1
- ccxt/coinbase.py +8 -9
- ccxt/coinbaseexchange.py +5 -6
- ccxt/coinbaseinternational.py +7 -8
- ccxt/coincatch.py +0 -1
- ccxt/coincheck.py +0 -1
- ccxt/coinex.py +91 -6
- ccxt/coinlist.py +3 -4
- ccxt/coinmate.py +1 -3
- ccxt/coinmetro.py +4 -5
- ccxt/coinone.py +0 -1
- ccxt/coinsph.py +7 -8
- ccxt/cryptocom.py +3 -0
- ccxt/currencycom.py +3 -4
- ccxt/defx.py +6 -7
- ccxt/deribit.py +1 -3
- ccxt/digifinex.py +0 -1
- ccxt/ellipx.py +0 -2
- ccxt/exmo.py +61 -6
- ccxt/gate.py +2 -3
- ccxt/gemini.py +4 -5
- ccxt/hashkey.py +79 -67
- ccxt/hitbtc.py +47 -5
- ccxt/hollaex.py +4 -6
- ccxt/htx.py +2 -4
- ccxt/huobijp.py +0 -1
- ccxt/hyperliquid.py +60 -1
- ccxt/idex.py +8 -8
- ccxt/independentreserve.py +0 -1
- ccxt/indodax.py +0 -1
- ccxt/kraken.py +186 -28
- ccxt/krakenfutures.py +75 -3
- ccxt/kucoin.py +6 -4
- ccxt/kucoinfutures.py +10 -9
- ccxt/kuna.py +1 -3
- ccxt/latoken.py +1 -3
- ccxt/lbank.py +0 -1
- ccxt/luno.py +0 -1
- ccxt/lykke.py +0 -1
- ccxt/mercado.py +0 -1
- ccxt/mexc.py +6 -7
- ccxt/ndax.py +1 -1
- ccxt/novadax.py +4 -6
- ccxt/oceanex.py +0 -1
- ccxt/okcoin.py +1 -3
- ccxt/okx.py +7 -4
- ccxt/onetrading.py +1 -3
- ccxt/p2b.py +1 -1
- ccxt/paradex.py +5 -7
- ccxt/phemex.py +8 -10
- ccxt/poloniex.py +1 -3
- ccxt/poloniexfutures.py +6 -6
- ccxt/pro/__init__.py +1 -1
- ccxt/probit.py +0 -1
- ccxt/timex.py +0 -1
- ccxt/tokocrypto.py +11 -14
- ccxt/tradeogre.py +1 -1
- ccxt/upbit.py +0 -1
- ccxt/wavesexchange.py +4 -5
- ccxt/whitebit.py +8 -9
- ccxt/woo.py +98 -12
- ccxt/woofipro.py +96 -15
- ccxt/xt.py +6 -3
- ccxt/yobit.py +0 -1
- ccxt/zaif.py +0 -1
- ccxt/zonda.py +1 -2
- {ccxt-4.4.40.dist-info → ccxt-4.4.42.dist-info}/METADATA +5 -5
- {ccxt-4.4.40.dist-info → ccxt-4.4.42.dist-info}/RECORD +169 -173
- ccxt/bitbay.py +0 -17
- ccxt/bitfinex2.py +0 -3624
- ccxt/hitbtc3.py +0 -16
- ccxt/pro/bitfinex2.py +0 -1086
- {ccxt-4.4.40.dist-info → ccxt-4.4.42.dist-info}/LICENSE.txt +0 -0
- {ccxt-4.4.40.dist-info → ccxt-4.4.42.dist-info}/WHEEL +0 -0
- {ccxt-4.4.40.dist-info → ccxt-4.4.42.dist-info}/top_level.txt +0 -0
ccxt/async_support/gate.py
CHANGED
@@ -3916,7 +3916,7 @@ class gate(Exchange, ImplicitAPI):
|
|
3916
3916
|
:param float amount: the amount of currency to trade
|
3917
3917
|
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
3918
3918
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3919
|
-
:param float [params.
|
3919
|
+
:param float [params.triggerPrice]: The price at which a trigger order is triggered at
|
3920
3920
|
:param str [params.timeInForce]: "GTC", "IOC", or "PO"
|
3921
3921
|
:param float [params.stopLossPrice]: The price at which a stop loss order is triggered at
|
3922
3922
|
:param float [params.takeProfitPrice]: The price at which a take profit order is triggered at
|
@@ -4664,7 +4664,6 @@ class gate(Exchange, ImplicitAPI):
|
|
4664
4664
|
'reduceOnly': self.safe_value(order, 'is_reduce_only'),
|
4665
4665
|
'side': side,
|
4666
4666
|
'price': price,
|
4667
|
-
'stopPrice': triggerPrice,
|
4668
4667
|
'triggerPrice': triggerPrice,
|
4669
4668
|
'average': average,
|
4670
4669
|
'amount': Precise.string_abs(amount),
|
@@ -6488,7 +6487,7 @@ class gate(Exchange, ImplicitAPI):
|
|
6488
6487
|
# ...
|
6489
6488
|
# ]
|
6490
6489
|
#
|
6491
|
-
return self.
|
6490
|
+
return self.parse_open_interests_history(response, market, since, limit)
|
6492
6491
|
|
6493
6492
|
def parse_open_interest(self, interest, market: Market = None):
|
6494
6493
|
#
|
ccxt/async_support/gemini.py
CHANGED
@@ -1301,7 +1301,6 @@ class gemini(Exchange, ImplicitAPI):
|
|
1301
1301
|
'postOnly': postOnly,
|
1302
1302
|
'side': side,
|
1303
1303
|
'price': price,
|
1304
|
-
'stopPrice': None,
|
1305
1304
|
'triggerPrice': None,
|
1306
1305
|
'average': average,
|
1307
1306
|
'cost': None,
|
@@ -1432,12 +1431,12 @@ class gemini(Exchange, ImplicitAPI):
|
|
1432
1431
|
}
|
1433
1432
|
type = self.safe_string(params, 'type', type)
|
1434
1433
|
params = self.omit(params, 'type')
|
1435
|
-
|
1434
|
+
triggerPrice = self.safe_string_n(params, ['stop_price', 'stopPrice'])
|
1436
1435
|
params = self.omit(params, ['stop_price', 'stopPrice', 'type'])
|
1437
1436
|
if type == 'stopLimit':
|
1438
|
-
raise ArgumentsRequired(self.id + ' createOrder() requires a
|
1439
|
-
if
|
1440
|
-
request['stop_price'] = self.price_to_precision(symbol,
|
1437
|
+
raise ArgumentsRequired(self.id + ' createOrder() requires a triggerPrice parameter or a stop_price parameter for ' + type + ' orders')
|
1438
|
+
if triggerPrice is not None:
|
1439
|
+
request['stop_price'] = self.price_to_precision(symbol, triggerPrice)
|
1441
1440
|
request['type'] = 'exchange stop limit'
|
1442
1441
|
else:
|
1443
1442
|
# No options can be applied to stop-limit orders at self time.
|
ccxt/async_support/hashkey.py
CHANGED
@@ -361,6 +361,84 @@ class hashkey(Exchange, ImplicitAPI):
|
|
361
361
|
},
|
362
362
|
'defaultNetwork': 'ERC20',
|
363
363
|
},
|
364
|
+
'features': {
|
365
|
+
'default': {
|
366
|
+
'sandbox': True,
|
367
|
+
'createOrder': {
|
368
|
+
'marginMode': False,
|
369
|
+
'triggerPrice': False,
|
370
|
+
'triggerPriceType': None,
|
371
|
+
'triggerDirection': False,
|
372
|
+
'stopLossPrice': False,
|
373
|
+
'takeProfitPrice': False,
|
374
|
+
'attachedStopLossTakeProfit': None,
|
375
|
+
'timeInForce': {
|
376
|
+
'IOC': True,
|
377
|
+
'FOK': True,
|
378
|
+
'PO': True,
|
379
|
+
'GTD': False,
|
380
|
+
},
|
381
|
+
'hedged': False,
|
382
|
+
'trailing': False,
|
383
|
+
# exchange-supported features
|
384
|
+
# 'marketBuyRequiresPrice': False,
|
385
|
+
# 'marketBuyByCost': False,
|
386
|
+
# 'selfTradePrevention': True,
|
387
|
+
# 'twap': False,
|
388
|
+
# 'iceberg': False,
|
389
|
+
# 'oco': False,
|
390
|
+
},
|
391
|
+
'createOrders': {
|
392
|
+
'max': 20,
|
393
|
+
},
|
394
|
+
'fetchMyTrades': {
|
395
|
+
'marginMode': False,
|
396
|
+
'limit': 1000,
|
397
|
+
'daysBack': 30,
|
398
|
+
'untilDays': 30,
|
399
|
+
},
|
400
|
+
'fetchOrder': {
|
401
|
+
'marginMode': False,
|
402
|
+
'trigger': False,
|
403
|
+
'trailing': False,
|
404
|
+
},
|
405
|
+
'fetchOpenOrders': {
|
406
|
+
'marginMode': False,
|
407
|
+
'limit': 1000,
|
408
|
+
'trigger': False,
|
409
|
+
'trailing': False,
|
410
|
+
},
|
411
|
+
'fetchOrders': None,
|
412
|
+
'fetchClosedOrders': None, # todo
|
413
|
+
'fetchOHLCV': {
|
414
|
+
'limit': 1000,
|
415
|
+
},
|
416
|
+
},
|
417
|
+
'spot': {
|
418
|
+
'extends': 'default',
|
419
|
+
},
|
420
|
+
'forDerivatives': {
|
421
|
+
'extends': 'default',
|
422
|
+
'createOrder': {
|
423
|
+
'triggerPrice': True,
|
424
|
+
'selfTradePrevention': True,
|
425
|
+
},
|
426
|
+
'fetchOpenOrders': {
|
427
|
+
'trigger': True,
|
428
|
+
'limit': 500,
|
429
|
+
},
|
430
|
+
},
|
431
|
+
'swap': {
|
432
|
+
'linear': {
|
433
|
+
'extends': 'forDerivatives',
|
434
|
+
},
|
435
|
+
'inverse': None,
|
436
|
+
},
|
437
|
+
'future': {
|
438
|
+
'linear': None,
|
439
|
+
'inverse': None,
|
440
|
+
},
|
441
|
+
},
|
364
442
|
'commonCurrencies': {},
|
365
443
|
'exceptions': {
|
366
444
|
'exact': {
|
@@ -582,11 +660,7 @@ class hashkey(Exchange, ImplicitAPI):
|
|
582
660
|
:param str [params.symbol]: the id of the market to fetch
|
583
661
|
:returns dict[]: an array of objects representing market data
|
584
662
|
"""
|
585
|
-
symbol: Str = None
|
586
663
|
request: dict = {}
|
587
|
-
symbol, params = self.handle_option_and_params(params, 'fetchMarkets', 'symbol')
|
588
|
-
if symbol is not None:
|
589
|
-
request['symbol'] = symbol
|
590
664
|
response = await self.publicGetApiV1ExchangeInfo(self.extend(request, params))
|
591
665
|
#
|
592
666
|
# {
|
@@ -1254,10 +1328,6 @@ class hashkey(Exchange, ImplicitAPI):
|
|
1254
1328
|
if marketType == 'spot':
|
1255
1329
|
if market is not None:
|
1256
1330
|
request['symbol'] = market['id']
|
1257
|
-
clientOrderId: Str = None
|
1258
|
-
clientOrderId, params = self.handle_option_and_params(params, methodName, 'clientOrderId')
|
1259
|
-
if clientOrderId is not None:
|
1260
|
-
request['clientOrderId'] = clientOrderId
|
1261
1331
|
if accountId is not None:
|
1262
1332
|
request['accountId'] = accountId
|
1263
1333
|
response = await self.privateGetApiV1AccountTrades(self.extend(request, params))
|
@@ -1601,10 +1671,6 @@ class hashkey(Exchange, ImplicitAPI):
|
|
1601
1671
|
await self.load_markets()
|
1602
1672
|
symbols = self.market_symbols(symbols)
|
1603
1673
|
request: dict = {}
|
1604
|
-
symbol: Str = None
|
1605
|
-
symbol, params = self.handle_option_and_params(params, 'fetchLastPrices', 'symbol')
|
1606
|
-
if symbol is not None:
|
1607
|
-
request['symbol'] = symbol
|
1608
1674
|
response = await self.publicGetQuoteV1TickerPrice(self.extend(request, params))
|
1609
1675
|
#
|
1610
1676
|
# [
|
@@ -1662,10 +1728,6 @@ class hashkey(Exchange, ImplicitAPI):
|
|
1662
1728
|
balance = self.safe_dict(response, 0, {})
|
1663
1729
|
return self.parse_swap_balance(balance)
|
1664
1730
|
elif marketType == 'spot':
|
1665
|
-
accountId: Str = None
|
1666
|
-
accountId, params = self.handle_option_and_params(params, methodName, 'accountId')
|
1667
|
-
if accountId is not None:
|
1668
|
-
request['accountId'] = accountId
|
1669
1731
|
response = await self.privateGetApiV1Account(self.extend(request, params))
|
1670
1732
|
#
|
1671
1733
|
# {
|
@@ -1931,18 +1993,10 @@ class hashkey(Exchange, ImplicitAPI):
|
|
1931
1993
|
}
|
1932
1994
|
if tag is not None:
|
1933
1995
|
request['addressExt'] = tag
|
1934
|
-
clientOrderId: Str = None
|
1935
|
-
clientOrderId, params = self.handle_option_and_params(params, 'withdraw', 'clientOrderId')
|
1936
|
-
if clientOrderId is not None:
|
1937
|
-
request['clientOrderId'] = clientOrderId
|
1938
1996
|
networkCode: Str = None
|
1939
1997
|
networkCode, params = self.handle_network_code_and_params(params)
|
1940
1998
|
if networkCode is not None:
|
1941
1999
|
request['chainType'] = self.network_code_to_id(networkCode)
|
1942
|
-
platform: Str = None
|
1943
|
-
platform, params = self.handle_option_and_params(params, 'withdraw', 'platform')
|
1944
|
-
if platform is not None:
|
1945
|
-
request['platform'] = platform
|
1946
2000
|
response = await self.privatePostApiV1AccountWithdraw(self.extend(request, params))
|
1947
2001
|
#
|
1948
2002
|
# {
|
@@ -2081,14 +2135,6 @@ class hashkey(Exchange, ImplicitAPI):
|
|
2081
2135
|
'fromAccountId': fromAccount,
|
2082
2136
|
'toAccountId': toAccount,
|
2083
2137
|
}
|
2084
|
-
clientOrderId: Str = None
|
2085
|
-
clientOrderId, params = self.handle_option_and_params(params, 'transfer', 'clientOrderId')
|
2086
|
-
if clientOrderId is not None:
|
2087
|
-
request['clientOrderId'] = clientOrderId
|
2088
|
-
remark: Str = None
|
2089
|
-
remark, params = self.handle_option_and_params(params, 'transfer', 'remark')
|
2090
|
-
if remark is not None:
|
2091
|
-
request['remark'] = remark
|
2092
2138
|
response = await self.privatePostApiV1AccountAssetTransfer(self.extend(request, params))
|
2093
2139
|
#
|
2094
2140
|
# {
|
@@ -2926,10 +2972,6 @@ class hashkey(Exchange, ImplicitAPI):
|
|
2926
2972
|
if marketType == 'spot':
|
2927
2973
|
if clientOrderId is not None:
|
2928
2974
|
request['origClientOrderId'] = clientOrderId
|
2929
|
-
accountId: Str = None
|
2930
|
-
accountId, params = self.handle_option_and_params(params, methodName, 'accountId')
|
2931
|
-
if accountId is not None:
|
2932
|
-
request['accountId'] = accountId
|
2933
2975
|
response = await self.privateGetApiV1SpotOrder(self.extend(request, params))
|
2934
2976
|
#
|
2935
2977
|
# {
|
@@ -3065,14 +3107,6 @@ class hashkey(Exchange, ImplicitAPI):
|
|
3065
3107
|
request['symbol'] = market['id']
|
3066
3108
|
if limit is not None:
|
3067
3109
|
request['limit'] = limit
|
3068
|
-
orderId: Str = None
|
3069
|
-
orderId, params = self.handle_option_and_params(params, methodName, 'orderId')
|
3070
|
-
if orderId is not None:
|
3071
|
-
request['orderId'] = orderId
|
3072
|
-
side: Str = None
|
3073
|
-
side, params = self.handle_option_and_params(params, methodName, 'side')
|
3074
|
-
if side is not None:
|
3075
|
-
request['side'] = side.upper()
|
3076
3110
|
response = await self.privateGetApiV1SpotOpenOrders(self.extend(request, params))
|
3077
3111
|
#
|
3078
3112
|
# [
|
@@ -3138,10 +3172,6 @@ class hashkey(Exchange, ImplicitAPI):
|
|
3138
3172
|
request['type'] = 'LIMIT'
|
3139
3173
|
if limit is not None:
|
3140
3174
|
request['limit'] = limit
|
3141
|
-
fromOrderId: Str = None
|
3142
|
-
fromOrderId, params = self.handle_option_and_params(params, methodName, 'fromOrderId')
|
3143
|
-
if fromOrderId is not None:
|
3144
|
-
request['fromOrderId'] = fromOrderId
|
3145
3175
|
response = None
|
3146
3176
|
accountId: Str = None
|
3147
3177
|
accountId, params = self.handle_option_and_params(params, methodName, 'accountId')
|
@@ -3240,14 +3270,6 @@ class hashkey(Exchange, ImplicitAPI):
|
|
3240
3270
|
if marketType == 'spot':
|
3241
3271
|
if market is not None:
|
3242
3272
|
request['symbol'] = market['id']
|
3243
|
-
orderId: Str = None
|
3244
|
-
orderId, params = self.handle_option_and_params(params, methodName, 'orderId')
|
3245
|
-
if orderId is not None:
|
3246
|
-
request['orderId'] = orderId
|
3247
|
-
side: Str = None
|
3248
|
-
side, params = self.handle_option_and_params(params, methodName, 'side')
|
3249
|
-
if side is not None:
|
3250
|
-
request['side'] = side.upper()
|
3251
3273
|
if accountId is not None:
|
3252
3274
|
request['accountId'] = accountId
|
3253
3275
|
response = await self.privateGetApiV1SpotTradeOrders(self.extend(request, params))
|
@@ -3290,10 +3312,6 @@ class hashkey(Exchange, ImplicitAPI):
|
|
3290
3312
|
request['type'] = 'STOP'
|
3291
3313
|
else:
|
3292
3314
|
request['type'] = 'LIMIT'
|
3293
|
-
fromOrderId: Str = None
|
3294
|
-
fromOrderId, params = self.handle_option_and_params(params, methodName, 'fromOrderId')
|
3295
|
-
if fromOrderId is not None:
|
3296
|
-
request['fromOrderId'] = fromOrderId
|
3297
3315
|
if accountId is not None:
|
3298
3316
|
request['subAccountId'] = accountId
|
3299
3317
|
response = await self.privateGetApiV1FuturesSubAccountHistoryOrders(self.extend(request, params))
|
@@ -3477,7 +3495,6 @@ class hashkey(Exchange, ImplicitAPI):
|
|
3477
3495
|
feeCurrncyId = self.safe_string(order, 'feeCoin')
|
3478
3496
|
if feeCurrncyId == '':
|
3479
3497
|
feeCurrncyId = None
|
3480
|
-
triggerPrice = self.omit_zero(self.safe_string(order, 'stopPrice'))
|
3481
3498
|
return self.safe_order({
|
3482
3499
|
'id': self.safe_string(order, 'orderId'),
|
3483
3500
|
'clientOrderId': self.safe_string(order, 'clientOrderId'),
|
@@ -3495,8 +3512,7 @@ class hashkey(Exchange, ImplicitAPI):
|
|
3495
3512
|
'amount': self.omit_zero(self.safe_string(order, 'origQty')),
|
3496
3513
|
'filled': self.safe_string(order, 'executedQty'),
|
3497
3514
|
'remaining': None,
|
3498
|
-
'
|
3499
|
-
'triggerPrice': triggerPrice,
|
3515
|
+
'triggerPrice': self.omit_zero(self.safe_string(order, 'stopPrice')),
|
3500
3516
|
'takeProfitPrice': None,
|
3501
3517
|
'stopLossPrice': None,
|
3502
3518
|
'cost': self.omit_zero(self.safe_string_2(order, 'cumulativeQuoteQty', 'cummulativeQuoteQty')),
|
@@ -3730,10 +3746,6 @@ class hashkey(Exchange, ImplicitAPI):
|
|
3730
3746
|
request: dict = {
|
3731
3747
|
'symbol': market['id'],
|
3732
3748
|
}
|
3733
|
-
side: Str = None
|
3734
|
-
side, params = self.handle_option_and_params(params, methodName, 'side')
|
3735
|
-
if side is not None:
|
3736
|
-
request['side'] = side.upper()
|
3737
3749
|
response = await self.privateGetApiV1FuturesPositions(self.extend(request, params))
|
3738
3750
|
#
|
3739
3751
|
# [
|
ccxt/async_support/hitbtc.py
CHANGED
@@ -92,6 +92,7 @@ class hitbtc(Exchange, ImplicitAPI):
|
|
92
92
|
'fetchOHLCV': True,
|
93
93
|
'fetchOpenInterest': True,
|
94
94
|
'fetchOpenInterestHistory': False,
|
95
|
+
'fetchOpenInterests': True,
|
95
96
|
'fetchOpenOrder': True,
|
96
97
|
'fetchOpenOrders': True,
|
97
98
|
'fetchOrder': True,
|
@@ -2254,7 +2255,7 @@ class hitbtc(Exchange, ImplicitAPI):
|
|
2254
2255
|
elif type == 'market':
|
2255
2256
|
request['type'] = 'stopMarket'
|
2256
2257
|
elif (type == 'stopLimit') or (type == 'stopMarket') or (type == 'takeProfitLimit') or (type == 'takeProfitMarket'):
|
2257
|
-
raise ExchangeError(self.id + ' createOrder() requires a
|
2258
|
+
raise ExchangeError(self.id + ' createOrder() requires a triggerPrice parameter for stop-loss and take-profit orders')
|
2258
2259
|
params = self.omit(params, ['triggerPrice', 'timeInForce', 'stopPrice', 'stop_price', 'reduceOnly', 'postOnly'])
|
2259
2260
|
if marketType == 'swap':
|
2260
2261
|
# set default margin mode to cross
|
@@ -2363,7 +2364,6 @@ class hitbtc(Exchange, ImplicitAPI):
|
|
2363
2364
|
postOnly = self.safe_value(order, 'post_only')
|
2364
2365
|
timeInForce = self.safe_string(order, 'time_in_force')
|
2365
2366
|
rawTrades = self.safe_value(order, 'trades')
|
2366
|
-
stopPrice = self.safe_string(order, 'stop_price')
|
2367
2367
|
return self.safe_order({
|
2368
2368
|
'info': order,
|
2369
2369
|
'id': id,
|
@@ -2387,8 +2387,7 @@ class hitbtc(Exchange, ImplicitAPI):
|
|
2387
2387
|
'average': average,
|
2388
2388
|
'trades': rawTrades,
|
2389
2389
|
'fee': None,
|
2390
|
-
'
|
2391
|
-
'triggerPrice': stopPrice,
|
2390
|
+
'triggerPrice': self.safe_string(order, 'stop_price'),
|
2392
2391
|
'takeProfitPrice': None,
|
2393
2392
|
'stopLossPrice': None,
|
2394
2393
|
}, market)
|
@@ -2954,7 +2953,7 @@ class hitbtc(Exchange, ImplicitAPI):
|
|
2954
2953
|
datetime = self.safe_string(interest, 'timestamp')
|
2955
2954
|
value = self.safe_number(interest, 'open_interest')
|
2956
2955
|
return self.safe_open_interest({
|
2957
|
-
'symbol': market
|
2956
|
+
'symbol': self.safe_symbol(None, market),
|
2958
2957
|
'openInterestAmount': None,
|
2959
2958
|
'openInterestValue': value,
|
2960
2959
|
'timestamp': self.parse8601(datetime),
|
@@ -2962,6 +2961,49 @@ class hitbtc(Exchange, ImplicitAPI):
|
|
2962
2961
|
'info': interest,
|
2963
2962
|
}, market)
|
2964
2963
|
|
2964
|
+
async def fetch_open_interests(self, symbols: Strings = None, params={}):
|
2965
|
+
"""
|
2966
|
+
Retrieves the open interest for a list of symbols
|
2967
|
+
|
2968
|
+
https://api.hitbtc.com/#futures-info
|
2969
|
+
|
2970
|
+
:param str[] [symbols]: a list of unified CCXT market symbols
|
2971
|
+
:param dict [params]: exchange specific parameters
|
2972
|
+
:returns dict[]: a list of `open interest structures <https://docs.ccxt.com/#/?id=open-interest-structure>`
|
2973
|
+
"""
|
2974
|
+
await self.load_markets()
|
2975
|
+
request: dict = {}
|
2976
|
+
symbols = self.market_symbols(symbols)
|
2977
|
+
marketIds = None
|
2978
|
+
if symbols is not None:
|
2979
|
+
marketIds = self.market_ids(symbols)
|
2980
|
+
request['symbols'] = ','.join(marketIds)
|
2981
|
+
response = await self.publicGetPublicFuturesInfo(self.extend(request, params))
|
2982
|
+
#
|
2983
|
+
# {
|
2984
|
+
# "BTCUSDT_PERP": {
|
2985
|
+
# "contract_type": "perpetual",
|
2986
|
+
# "mark_price": "97291.83",
|
2987
|
+
# "index_price": "97298.61",
|
2988
|
+
# "funding_rate": "-0.000183473092423284",
|
2989
|
+
# "open_interest": "94.1503",
|
2990
|
+
# "next_funding_time": "2024-12-20T08:00:00.000Z",
|
2991
|
+
# "indicative_funding_rate": "-0.00027495203277752",
|
2992
|
+
# "premium_index": "-0.000789474900583786",
|
2993
|
+
# "avg_premium_index": "-0.000683473092423284",
|
2994
|
+
# "interest_rate": "0.0001",
|
2995
|
+
# "timestamp": "2024-12-20T04:57:33.693Z"
|
2996
|
+
# }
|
2997
|
+
# }
|
2998
|
+
#
|
2999
|
+
results = []
|
3000
|
+
markets = list(response.keys())
|
3001
|
+
for i in range(0, len(markets)):
|
3002
|
+
marketId = markets[i]
|
3003
|
+
marketInner = self.safe_market(marketId)
|
3004
|
+
results.append(self.parse_open_interest(response[marketId], marketInner))
|
3005
|
+
return self.filter_by_array(results, 'symbol', symbols)
|
3006
|
+
|
2965
3007
|
async def fetch_open_interest(self, symbol: str, params={}):
|
2966
3008
|
"""
|
2967
3009
|
Retrieves the open interest of a derivative trading pair
|
ccxt/async_support/hollaex.py
CHANGED
@@ -1098,7 +1098,6 @@ class hollaex(Exchange, ImplicitAPI):
|
|
1098
1098
|
type = self.safe_string(order, 'type')
|
1099
1099
|
side = self.safe_string(order, 'side')
|
1100
1100
|
price = self.safe_string(order, 'price')
|
1101
|
-
stopPrice = self.safe_string(order, 'stop')
|
1102
1101
|
amount = self.safe_string(order, 'size')
|
1103
1102
|
filled = self.safe_string(order, 'filled')
|
1104
1103
|
status = self.parse_order_status(self.safe_string(order, 'status'))
|
@@ -1117,8 +1116,7 @@ class hollaex(Exchange, ImplicitAPI):
|
|
1117
1116
|
'postOnly': postOnly,
|
1118
1117
|
'side': side,
|
1119
1118
|
'price': price,
|
1120
|
-
'
|
1121
|
-
'triggerPrice': stopPrice,
|
1119
|
+
'triggerPrice': self.safe_string(order, 'stop'),
|
1122
1120
|
'amount': amount,
|
1123
1121
|
'filled': filled,
|
1124
1122
|
'remaining': None,
|
@@ -1156,7 +1154,7 @@ class hollaex(Exchange, ImplicitAPI):
|
|
1156
1154
|
# 'stop': float(self.price_to_precision(symbol, stopPrice)),
|
1157
1155
|
# 'meta': {}, # other options such
|
1158
1156
|
}
|
1159
|
-
|
1157
|
+
triggerPrice = self.safe_number_n(params, ['triggerPrice', 'stopPrice', 'stop'])
|
1160
1158
|
meta = self.safe_value(params, 'meta', {})
|
1161
1159
|
exchangeSpecificParam = self.safe_bool(meta, 'post_only', False)
|
1162
1160
|
isMarketOrder = type == 'market'
|
@@ -1164,8 +1162,8 @@ class hollaex(Exchange, ImplicitAPI):
|
|
1164
1162
|
if not isMarketOrder:
|
1165
1163
|
convertedPrice = float(self.price_to_precision(symbol, price))
|
1166
1164
|
request['price'] = self.normalize_number_if_needed(convertedPrice)
|
1167
|
-
if
|
1168
|
-
request['stop'] = self.normalize_number_if_needed(float(self.price_to_precision(symbol,
|
1165
|
+
if triggerPrice is not None:
|
1166
|
+
request['stop'] = self.normalize_number_if_needed(float(self.price_to_precision(symbol, triggerPrice)))
|
1169
1167
|
if postOnly:
|
1170
1168
|
request['meta'] = {'post_only': True}
|
1171
1169
|
params = self.omit(params, ['postOnly', 'timeInForce', 'stopPrice', 'triggerPrice', 'stop'])
|
ccxt/async_support/htx.py
CHANGED
@@ -4970,7 +4970,6 @@ class htx(Exchange, ImplicitAPI):
|
|
4970
4970
|
'cost': feeCost,
|
4971
4971
|
'currency': feeCurrency,
|
4972
4972
|
}
|
4973
|
-
stopPrice = self.safe_string_2(order, 'stop-price', 'trigger_price')
|
4974
4973
|
average = self.safe_string(order, 'trade_avg_price')
|
4975
4974
|
trades = self.safe_value(order, 'trades')
|
4976
4975
|
reduceOnlyInteger = self.safe_integer(order, 'reduce_only')
|
@@ -4990,8 +4989,7 @@ class htx(Exchange, ImplicitAPI):
|
|
4990
4989
|
'postOnly': None,
|
4991
4990
|
'side': side,
|
4992
4991
|
'price': price,
|
4993
|
-
'
|
4994
|
-
'triggerPrice': stopPrice,
|
4992
|
+
'triggerPrice': self.safe_string_2(order, 'stop-price', 'trigger_price'),
|
4995
4993
|
'average': average,
|
4996
4994
|
'cost': cost,
|
4997
4995
|
'amount': amount,
|
@@ -8004,7 +8002,7 @@ class htx(Exchange, ImplicitAPI):
|
|
8004
8002
|
#
|
8005
8003
|
data = self.safe_value(response, 'data')
|
8006
8004
|
tick = self.safe_list(data, 'tick')
|
8007
|
-
return self.
|
8005
|
+
return self.parse_open_interests_history(tick, market, since, limit)
|
8008
8006
|
|
8009
8007
|
async def fetch_open_interest(self, symbol: str, params={}):
|
8010
8008
|
"""
|
ccxt/async_support/huobijp.py
CHANGED
@@ -95,8 +95,9 @@ class hyperliquid(Exchange, ImplicitAPI):
|
|
95
95
|
'fetchMyLiquidations': False,
|
96
96
|
'fetchMyTrades': True,
|
97
97
|
'fetchOHLCV': True,
|
98
|
-
'fetchOpenInterest':
|
98
|
+
'fetchOpenInterest': True,
|
99
99
|
'fetchOpenInterestHistory': False,
|
100
|
+
'fetchOpenInterests': True,
|
100
101
|
'fetchOpenOrders': True,
|
101
102
|
'fetchOrder': True,
|
102
103
|
'fetchOrderBook': True,
|
@@ -3132,6 +3133,64 @@ class hyperliquid(Exchange, ImplicitAPI):
|
|
3132
3133
|
withdrawals = self.filter_by_array(records, 'type', ['withdraw'], False)
|
3133
3134
|
return self.parse_transactions(withdrawals, None, since, limit)
|
3134
3135
|
|
3136
|
+
async def fetch_open_interests(self, symbols: Strings = None, params={}):
|
3137
|
+
"""
|
3138
|
+
Retrieves the open interest for a list of symbols
|
3139
|
+
:param str[] [symbols]: Unified CCXT market symbol
|
3140
|
+
:param dict [params]: exchange specific parameters
|
3141
|
+
:returns dict} an open interest structure{@link https://docs.ccxt.com/#/?id=open-interest-structure:
|
3142
|
+
"""
|
3143
|
+
await self.load_markets()
|
3144
|
+
symbols = self.market_symbols(symbols)
|
3145
|
+
swapMarkets = await self.fetch_swap_markets()
|
3146
|
+
result = self.parse_open_interests(swapMarkets)
|
3147
|
+
return self.filter_by_array(result, 'symbol', symbols)
|
3148
|
+
|
3149
|
+
async def fetch_open_interest(self, symbol: str, params={}):
|
3150
|
+
"""
|
3151
|
+
retrieves the open interest of a contract trading pair
|
3152
|
+
:param str symbol: unified CCXT market symbol
|
3153
|
+
:param dict [params]: exchange specific parameters
|
3154
|
+
:returns dict: an `open interest structure <https://docs.ccxt.com/#/?id=open-interest-structure>`
|
3155
|
+
"""
|
3156
|
+
symbol = self.symbol(symbol)
|
3157
|
+
await self.load_markets()
|
3158
|
+
ois = await self.fetch_open_interests([symbol], params)
|
3159
|
+
return ois[symbol]
|
3160
|
+
|
3161
|
+
def parse_open_interest(self, interest, market: Market = None):
|
3162
|
+
#
|
3163
|
+
# {
|
3164
|
+
# szDecimals: '2',
|
3165
|
+
# name: 'HYPE',
|
3166
|
+
# maxLeverage: '3',
|
3167
|
+
# funding: '0.00014735',
|
3168
|
+
# openInterest: '14677900.74',
|
3169
|
+
# prevDayPx: '26.145',
|
3170
|
+
# dayNtlVlm: '299643445.12560016',
|
3171
|
+
# premium: '0.00081613',
|
3172
|
+
# oraclePx: '27.569',
|
3173
|
+
# markPx: '27.63',
|
3174
|
+
# midPx: '27.599',
|
3175
|
+
# impactPxs: ['27.5915', '27.6319'],
|
3176
|
+
# dayBaseVlm: '10790652.83',
|
3177
|
+
# baseId: 159
|
3178
|
+
# }
|
3179
|
+
#
|
3180
|
+
interest = self.safe_dict(interest, 'info', {})
|
3181
|
+
coin = self.safe_string(interest, 'name')
|
3182
|
+
marketId = None
|
3183
|
+
if coin is not None:
|
3184
|
+
marketId = self.coin_to_market_id(coin)
|
3185
|
+
return self.safe_open_interest({
|
3186
|
+
'symbol': self.safe_symbol(marketId),
|
3187
|
+
'openInterestAmount': self.safe_number(interest, 'openInterest'),
|
3188
|
+
'openInterestValue': None,
|
3189
|
+
'timestamp': None,
|
3190
|
+
'datetime': None,
|
3191
|
+
'info': interest,
|
3192
|
+
}, market)
|
3193
|
+
|
3135
3194
|
def extract_type_from_delta(self, data=[]):
|
3136
3195
|
records = []
|
3137
3196
|
for i in range(0, len(data)):
|
ccxt/async_support/idex.py
CHANGED
@@ -1098,7 +1098,6 @@ class idex(Exchange, ImplicitAPI):
|
|
1098
1098
|
'postOnly': None,
|
1099
1099
|
'side': side,
|
1100
1100
|
'price': price,
|
1101
|
-
'stopPrice': None,
|
1102
1101
|
'triggerPrice': None,
|
1103
1102
|
'amount': amount,
|
1104
1103
|
'cost': None,
|
@@ -1163,11 +1162,12 @@ class idex(Exchange, ImplicitAPI):
|
|
1163
1162
|
'takeProfit': 5,
|
1164
1163
|
'takeProfitLimit': 6,
|
1165
1164
|
}
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1165
|
+
triggerPrice = self.safe_string(params, 'triggerPrice', 'stopPrice')
|
1166
|
+
triggerPriceString = None
|
1167
|
+
if (type == 'stopLossLimit') or (type == 'takeProfitLimit'):
|
1168
|
+
if triggerPrice is None:
|
1169
|
+
raise BadRequest(self.id + ' createOrder() triggerPrice is a required parameter for ' + type + 'orders')
|
1170
|
+
triggerPriceString = self.price_to_precision(symbol, triggerPrice)
|
1171
1171
|
limitTypeEnums: dict = {
|
1172
1172
|
'limit': 1,
|
1173
1173
|
'limitMaker': 2,
|
@@ -1245,7 +1245,7 @@ class idex(Exchange, ImplicitAPI):
|
|
1245
1245
|
encodedPrice = self.encode(priceString)
|
1246
1246
|
byteArray.append(encodedPrice)
|
1247
1247
|
if type in stopLossTypeEnums:
|
1248
|
-
encodedPrice = self.encode(
|
1248
|
+
encodedPrice = self.encode(triggerPriceString or priceString)
|
1249
1249
|
byteArray.append(encodedPrice)
|
1250
1250
|
clientOrderId = self.safe_string(params, 'clientOrderId')
|
1251
1251
|
if clientOrderId is not None:
|
@@ -1275,7 +1275,7 @@ class idex(Exchange, ImplicitAPI):
|
|
1275
1275
|
if limitOrder:
|
1276
1276
|
request['parameters']['price'] = priceString
|
1277
1277
|
if type in stopLossTypeEnums:
|
1278
|
-
request['parameters']['stopPrice'] =
|
1278
|
+
request['parameters']['stopPrice'] = triggerPriceString or priceString
|
1279
1279
|
if amountEnum == 0:
|
1280
1280
|
request['parameters']['quantity'] = amountString
|
1281
1281
|
else:
|
@@ -437,7 +437,6 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
437
437
|
'postOnly': None,
|
438
438
|
'side': side,
|
439
439
|
'price': self.safe_string(order, 'Price'),
|
440
|
-
'stopPrice': None,
|
441
440
|
'triggerPrice': None,
|
442
441
|
'cost': self.safe_string(order, 'Value'),
|
443
442
|
'average': self.safe_string(order, 'AvgPrice'),
|