ccxt 4.3.68__py2.py3-none-any.whl → 4.3.70__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.
Potentially problematic release.
This version of ccxt might be problematic. Click here for more details.
- ccxt/__init__.py +1 -1
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/binance.py +2 -2
- ccxt/async_support/bingx.py +129 -73
- ccxt/async_support/bitget.py +2 -2
- ccxt/async_support/bitmart.py +2 -2
- ccxt/async_support/bitrue.py +2 -2
- ccxt/async_support/blofin.py +63 -6
- ccxt/async_support/btcbox.py +1 -1
- ccxt/async_support/bybit.py +3 -3
- ccxt/async_support/coinbaseinternational.py +227 -3
- ccxt/async_support/coinex.py +2 -2
- ccxt/async_support/coinlist.py +2 -2
- ccxt/async_support/cryptocom.py +12 -1
- ccxt/async_support/deribit.py +2 -2
- ccxt/async_support/digifinex.py +2 -2
- ccxt/async_support/hyperliquid.py +0 -2
- ccxt/async_support/kucoin.py +11 -5
- ccxt/async_support/latoken.py +2 -2
- ccxt/async_support/mexc.py +2 -2
- ccxt/async_support/okx.py +2 -2
- ccxt/async_support/oxfun.py +1 -1
- ccxt/async_support/phemex.py +2 -2
- ccxt/async_support/poloniex.py +34 -33
- ccxt/async_support/poloniexfutures.py +26 -26
- ccxt/async_support/woo.py +2 -2
- ccxt/base/exchange.py +334 -117
- ccxt/base/types.py +21 -3
- ccxt/binance.py +2 -2
- ccxt/bingx.py +129 -73
- ccxt/bitget.py +2 -2
- ccxt/bitmart.py +2 -2
- ccxt/bitrue.py +2 -2
- ccxt/blofin.py +63 -6
- ccxt/btcbox.py +1 -1
- ccxt/bybit.py +3 -3
- ccxt/coinbaseinternational.py +227 -3
- ccxt/coinex.py +2 -2
- ccxt/coinlist.py +2 -2
- ccxt/cryptocom.py +12 -1
- ccxt/deribit.py +2 -2
- ccxt/digifinex.py +2 -2
- ccxt/hyperliquid.py +0 -2
- ccxt/kucoin.py +11 -5
- ccxt/latoken.py +2 -2
- ccxt/mexc.py +2 -2
- ccxt/okx.py +2 -2
- ccxt/oxfun.py +1 -1
- ccxt/phemex.py +2 -2
- ccxt/poloniex.py +34 -33
- ccxt/poloniexfutures.py +26 -26
- ccxt/pro/__init__.py +3 -1
- ccxt/pro/blofin.py +608 -0
- ccxt/pro/coinbaseinternational.py +142 -11
- ccxt/pro/cryptocom.py +4 -1
- ccxt/pro/hitbtc.py +20 -8
- ccxt/pro/okx.py +6 -0
- ccxt/pro/poloniex.py +45 -23
- ccxt/pro/poloniexfutures.py +5 -5
- ccxt/pro/woo.py +5 -4
- ccxt/woo.py +2 -2
- {ccxt-4.3.68.dist-info → ccxt-4.3.70.dist-info}/METADATA +7 -7
- {ccxt-4.3.68.dist-info → ccxt-4.3.70.dist-info}/RECORD +68 -67
- {ccxt-4.3.68.dist-info → ccxt-4.3.70.dist-info}/LICENSE.txt +0 -0
- {ccxt-4.3.68.dist-info → ccxt-4.3.70.dist-info}/WHEEL +0 -0
- {ccxt-4.3.68.dist-info → ccxt-4.3.70.dist-info}/top_level.txt +0 -0
ccxt/__init__.py
CHANGED
@@ -9,7 +9,7 @@ class ImplicitAPI:
|
|
9
9
|
v1_public_get_instruments_instrument = v1PublicGetInstrumentsInstrument = Entry('instruments/{instrument}', ['v1', 'public'], 'GET', {})
|
10
10
|
v1_public_get_instruments_instrument_quote = v1PublicGetInstrumentsInstrumentQuote = Entry('instruments/{instrument}/quote', ['v1', 'public'], 'GET', {})
|
11
11
|
v1_public_get_instruments_instrument_funding = v1PublicGetInstrumentsInstrumentFunding = Entry('instruments/{instrument}/funding', ['v1', 'public'], 'GET', {})
|
12
|
-
|
12
|
+
v1_public_get_instruments_instrument_candles = v1PublicGetInstrumentsInstrumentCandles = Entry('instruments/{instrument}/candles', ['v1', 'public'], 'GET', {})
|
13
13
|
v1_private_get_orders = v1PrivateGetOrders = Entry('orders', ['v1', 'private'], 'GET', {})
|
14
14
|
v1_private_get_orders_id = v1PrivateGetOrdersId = Entry('orders/{id}', ['v1', 'private'], 'GET', {})
|
15
15
|
v1_private_get_portfolios = v1PrivateGetPortfolios = Entry('portfolios', ['v1', 'private'], 'GET', {})
|
ccxt/async_support/__init__.py
CHANGED
ccxt/async_support/binance.py
CHANGED
@@ -8,7 +8,7 @@ from ccxt.abstract.binance import ImplicitAPI
|
|
8
8
|
import asyncio
|
9
9
|
import hashlib
|
10
10
|
import json
|
11
|
-
from ccxt.base.types import Balances, Conversion, CrossBorrowRate, Currencies, Currency, Greeks, Int, IsolatedBorrowRate, IsolatedBorrowRates, Leverage, Leverages, LeverageTier, LeverageTiers, MarginMode, MarginModes, MarginModification, Market, MarketInterface, Num, Option, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
|
11
|
+
from ccxt.base.types import Balances, Conversion, CrossBorrowRate, Currencies, Currency, Greeks, Int, IsolatedBorrowRate, IsolatedBorrowRates, Leverage, Leverages, LeverageTier, LeverageTiers, MarginMode, MarginModes, MarginModification, Market, MarketInterface, Num, Option, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
|
12
12
|
from typing import List
|
13
13
|
from ccxt.base.errors import ExchangeError
|
14
14
|
from ccxt.base.errors import AuthenticationError
|
@@ -7801,7 +7801,7 @@ class binance(Exchange, ImplicitAPI):
|
|
7801
7801
|
#
|
7802
7802
|
return self.parse_transfer(response, currency)
|
7803
7803
|
|
7804
|
-
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) ->
|
7804
|
+
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[TransferEntry]:
|
7805
7805
|
"""
|
7806
7806
|
fetch a history of internal transfers made on an account
|
7807
7807
|
:see: https://developers.binance.com/docs/wallet/asset/query-user-universal-transfer
|
ccxt/async_support/bingx.py
CHANGED
@@ -8,7 +8,7 @@ from ccxt.abstract.bingx import ImplicitAPI
|
|
8
8
|
import asyncio
|
9
9
|
import hashlib
|
10
10
|
import numbers
|
11
|
-
from ccxt.base.types import Balances, Currencies, Currency, Int, Leverage, MarginMode, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction, TransferEntry
|
11
|
+
from ccxt.base.types import Balances, Currencies, Currency, Int, Leverage, MarginMode, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction, TransferEntry
|
12
12
|
from typing import List
|
13
13
|
from ccxt.base.errors import ExchangeError
|
14
14
|
from ccxt.base.errors import AuthenticationError
|
@@ -1111,7 +1111,27 @@ class bingx(Exchange, ImplicitAPI):
|
|
1111
1111
|
# "s": "BTC-USDT"
|
1112
1112
|
# }
|
1113
1113
|
#
|
1114
|
-
|
1114
|
+
# inverse swap fetchMyTrades
|
1115
|
+
#
|
1116
|
+
# {
|
1117
|
+
# "orderId": "1817441228670648320",
|
1118
|
+
# "symbol": "SOL-USD",
|
1119
|
+
# "type": "MARKET",
|
1120
|
+
# "side": "BUY",
|
1121
|
+
# "positionSide": "LONG",
|
1122
|
+
# "tradeId": "97244554",
|
1123
|
+
# "volume": "2",
|
1124
|
+
# "tradePrice": "182.652",
|
1125
|
+
# "amount": "20.00000000",
|
1126
|
+
# "realizedPnl": "0.00000000",
|
1127
|
+
# "commission": "-0.00005475",
|
1128
|
+
# "currency": "SOL",
|
1129
|
+
# "buyer": True,
|
1130
|
+
# "maker": False,
|
1131
|
+
# "tradeTime": 1722146730000
|
1132
|
+
# }
|
1133
|
+
#
|
1134
|
+
time = self.safe_integer_n(trade, ['time', 'filledTm', 'T', 'tradeTime'])
|
1115
1135
|
datetimeId = self.safe_string(trade, 'filledTm')
|
1116
1136
|
if datetimeId is not None:
|
1117
1137
|
time = self.parse8601(datetimeId)
|
@@ -1122,8 +1142,8 @@ class bingx(Exchange, ImplicitAPI):
|
|
1122
1142
|
currencyId = self.safe_string_n(trade, ['currency', 'N', 'commissionAsset'])
|
1123
1143
|
currencyCode = self.safe_currency_code(currencyId)
|
1124
1144
|
m = self.safe_bool(trade, 'm')
|
1125
|
-
marketId = self.
|
1126
|
-
isBuyerMaker = self.
|
1145
|
+
marketId = self.safe_string_2(trade, 's', 'symbol')
|
1146
|
+
isBuyerMaker = self.safe_bool_n(trade, ['buyerMaker', 'isBuyerMaker', 'maker'])
|
1127
1147
|
takeOrMaker = None
|
1128
1148
|
if (isBuyerMaker is not None) or (m is not None):
|
1129
1149
|
takeOrMaker = 'maker' if (isBuyerMaker or m) else 'taker'
|
@@ -1154,7 +1174,7 @@ class bingx(Exchange, ImplicitAPI):
|
|
1154
1174
|
'type': self.safe_string_lower(trade, 'o'),
|
1155
1175
|
'side': self.parse_order_side(side),
|
1156
1176
|
'takerOrMaker': takeOrMaker,
|
1157
|
-
'price': self.
|
1177
|
+
'price': self.safe_string_n(trade, ['price', 'p', 'tradePrice']),
|
1158
1178
|
'amount': amount,
|
1159
1179
|
'cost': cost,
|
1160
1180
|
'fee': {
|
@@ -3985,7 +4005,7 @@ class bingx(Exchange, ImplicitAPI):
|
|
3985
4005
|
'status': None,
|
3986
4006
|
}
|
3987
4007
|
|
3988
|
-
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) ->
|
4008
|
+
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[TransferEntry]:
|
3989
4009
|
"""
|
3990
4010
|
fetch a history of internal transfers made on an account
|
3991
4011
|
:see: https://bingx-api.github.io/docs/#/spot/account-api.html#Query%20User%20Universal%20Transfer%20History%20(USER_DATA)
|
@@ -4597,93 +4617,129 @@ class bingx(Exchange, ImplicitAPI):
|
|
4597
4617
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
4598
4618
|
"""
|
4599
4619
|
fetch all trades made by the user
|
4600
|
-
:see: https://bingx-api.github.io/docs/#/en-us/spot/trade-api.html#Query%
|
4601
|
-
:see: https://bingx-api.github.io/docs/#/swapV2/trade-api.html#Query%20historical%20transaction%20orders
|
4620
|
+
:see: https://bingx-api.github.io/docs/#/en-us/spot/trade-api.html#Query%20transaction%20details
|
4621
|
+
:see: https://bingx-api.github.io/docs/#/en-us/swapV2/trade-api.html#Query%20historical%20transaction%20orders
|
4622
|
+
:see: https://bingx-api.github.io/docs/#/en-us/cswap/trade-api.html#Query%20Order%20Trade%20Detail
|
4602
4623
|
:param str [symbol]: unified market symbol
|
4603
4624
|
:param int [since]: the earliest time in ms to fetch trades for
|
4604
4625
|
:param int [limit]: the maximum number of trades structures to retrieve
|
4605
4626
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
4606
4627
|
:param int [params.until]: timestamp in ms for the ending date filter, default is None
|
4607
4628
|
:param str params['trandingUnit']: COIN(directly represent assets such and ETH) or CONT(represents the number of contract sheets)
|
4629
|
+
:param str params['orderId']: the order id required for inverse swap
|
4608
4630
|
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
4609
4631
|
"""
|
4610
4632
|
if symbol is None:
|
4611
4633
|
raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
|
4612
4634
|
await self.load_markets()
|
4613
4635
|
market = self.market(symbol)
|
4614
|
-
|
4615
|
-
response = None
|
4616
|
-
request: dict = {
|
4617
|
-
'symbol': market['id'],
|
4618
|
-
}
|
4619
|
-
if since is not None:
|
4620
|
-
startTimeReq = 'startTime' if market['spot'] else 'startTs'
|
4621
|
-
request[startTimeReq] = since
|
4622
|
-
elif market['swap']:
|
4623
|
-
request['startTs'] = now - 7776000000 # 90 days
|
4624
|
-
until = self.safe_integer(params, 'until')
|
4625
|
-
params = self.omit(params, 'until')
|
4626
|
-
if until is not None:
|
4627
|
-
endTimeReq = 'endTime' if market['spot'] else 'endTs'
|
4628
|
-
request[endTimeReq] = until
|
4629
|
-
elif market['swap']:
|
4630
|
-
request['endTs'] = now
|
4636
|
+
request: dict = {}
|
4631
4637
|
fills = None
|
4632
|
-
|
4633
|
-
|
4634
|
-
|
4635
|
-
|
4638
|
+
response = None
|
4639
|
+
subType = None
|
4640
|
+
subType, params = self.handle_sub_type_and_params('fetchMyTrades', market, params)
|
4641
|
+
if subType == 'inverse':
|
4642
|
+
orderId = self.safe_string(params, 'orderId')
|
4643
|
+
if orderId is None:
|
4644
|
+
raise ArgumentsRequired(self.id + ' fetchMyTrades() requires an orderId argument for inverse swap trades')
|
4645
|
+
response = await self.cswapV1PrivateGetTradeAllFillOrders(self.extend(request, params))
|
4646
|
+
fills = self.safe_list(response, 'data', [])
|
4636
4647
|
#
|
4637
4648
|
# {
|
4638
4649
|
# "code": 0,
|
4639
4650
|
# "msg": "",
|
4640
|
-
# "
|
4641
|
-
# "data":
|
4642
|
-
#
|
4643
|
-
#
|
4644
|
-
#
|
4645
|
-
#
|
4646
|
-
#
|
4647
|
-
#
|
4648
|
-
#
|
4649
|
-
#
|
4650
|
-
#
|
4651
|
-
#
|
4652
|
-
#
|
4653
|
-
#
|
4654
|
-
#
|
4655
|
-
#
|
4656
|
-
#
|
4657
|
-
#
|
4651
|
+
# "timestamp": 1722147756019,
|
4652
|
+
# "data": [
|
4653
|
+
# {
|
4654
|
+
# "orderId": "1817441228670648320",
|
4655
|
+
# "symbol": "SOL-USD",
|
4656
|
+
# "type": "MARKET",
|
4657
|
+
# "side": "BUY",
|
4658
|
+
# "positionSide": "LONG",
|
4659
|
+
# "tradeId": "97244554",
|
4660
|
+
# "volume": "2",
|
4661
|
+
# "tradePrice": "182.652",
|
4662
|
+
# "amount": "20.00000000",
|
4663
|
+
# "realizedPnl": "0.00000000",
|
4664
|
+
# "commission": "-0.00005475",
|
4665
|
+
# "currency": "SOL",
|
4666
|
+
# "buyer": True,
|
4667
|
+
# "maker": False,
|
4668
|
+
# "tradeTime": 1722146730000
|
4669
|
+
# }
|
4670
|
+
# ]
|
4658
4671
|
# }
|
4659
4672
|
#
|
4660
4673
|
else:
|
4661
|
-
|
4662
|
-
|
4663
|
-
|
4664
|
-
|
4665
|
-
|
4666
|
-
|
4667
|
-
|
4668
|
-
|
4669
|
-
|
4670
|
-
|
4671
|
-
|
4672
|
-
|
4673
|
-
|
4674
|
-
|
4675
|
-
|
4676
|
-
|
4677
|
-
|
4678
|
-
|
4679
|
-
|
4680
|
-
|
4681
|
-
|
4682
|
-
|
4683
|
-
|
4684
|
-
|
4685
|
-
|
4686
|
-
|
4674
|
+
request['symbol'] = market['id']
|
4675
|
+
now = self.milliseconds()
|
4676
|
+
if since is not None:
|
4677
|
+
startTimeReq = 'startTime' if market['spot'] else 'startTs'
|
4678
|
+
request[startTimeReq] = since
|
4679
|
+
elif market['swap']:
|
4680
|
+
request['startTs'] = now - 7776000000 # 90 days
|
4681
|
+
until = self.safe_integer(params, 'until')
|
4682
|
+
params = self.omit(params, 'until')
|
4683
|
+
if until is not None:
|
4684
|
+
endTimeReq = 'endTime' if market['spot'] else 'endTs'
|
4685
|
+
request[endTimeReq] = until
|
4686
|
+
elif market['swap']:
|
4687
|
+
request['endTs'] = now
|
4688
|
+
if market['spot']:
|
4689
|
+
response = await self.spotV1PrivateGetTradeMyTrades(self.extend(request, params))
|
4690
|
+
data = self.safe_dict(response, 'data', {})
|
4691
|
+
fills = self.safe_list(data, 'fills', [])
|
4692
|
+
#
|
4693
|
+
# {
|
4694
|
+
# "code": 0,
|
4695
|
+
# "msg": "",
|
4696
|
+
# "debugMsg": "",
|
4697
|
+
# "data": {
|
4698
|
+
# "fills": [
|
4699
|
+
# {
|
4700
|
+
# "symbol": "LTC-USDT",
|
4701
|
+
# "id": 36237072,
|
4702
|
+
# "orderId": 1674069326895775744,
|
4703
|
+
# "price": "85.891",
|
4704
|
+
# "qty": "0.0582",
|
4705
|
+
# "quoteQty": "4.9988562000000005",
|
4706
|
+
# "commission": -0.00005820000000000001,
|
4707
|
+
# "commissionAsset": "LTC",
|
4708
|
+
# "time": 1687964205000,
|
4709
|
+
# "isBuyer": True,
|
4710
|
+
# "isMaker": False
|
4711
|
+
# }
|
4712
|
+
# ]
|
4713
|
+
# }
|
4714
|
+
# }
|
4715
|
+
#
|
4716
|
+
else:
|
4717
|
+
tradingUnit = self.safe_string_upper(params, 'tradingUnit', 'CONT')
|
4718
|
+
params = self.omit(params, 'tradingUnit')
|
4719
|
+
request['tradingUnit'] = tradingUnit
|
4720
|
+
response = await self.swapV2PrivateGetTradeAllFillOrders(self.extend(request, params))
|
4721
|
+
data = self.safe_dict(response, 'data', {})
|
4722
|
+
fills = self.safe_list(data, 'fill_orders', [])
|
4723
|
+
#
|
4724
|
+
# {
|
4725
|
+
# "code": "0",
|
4726
|
+
# "msg": '',
|
4727
|
+
# "data": {fill_orders: [
|
4728
|
+
# {
|
4729
|
+
# "volume": "0.1",
|
4730
|
+
# "price": "106.75",
|
4731
|
+
# "amount": "10.6750",
|
4732
|
+
# "commission": "-0.0053",
|
4733
|
+
# "currency": "USDT",
|
4734
|
+
# "orderId": "1676213270274379776",
|
4735
|
+
# "liquidatedPrice": "0.00",
|
4736
|
+
# "liquidatedMarginRatio": "0.00",
|
4737
|
+
# "filledTime": "2023-07-04T20:56:01.000+0800"
|
4738
|
+
# }
|
4739
|
+
# ]
|
4740
|
+
# }
|
4741
|
+
# }
|
4742
|
+
#
|
4687
4743
|
return self.parse_trades(fills, market, since, limit, params)
|
4688
4744
|
|
4689
4745
|
def parse_deposit_withdraw_fee(self, fee, currency: Currency = None):
|
ccxt/async_support/bitget.py
CHANGED
@@ -8,7 +8,7 @@ from ccxt.abstract.bitget import ImplicitAPI
|
|
8
8
|
import asyncio
|
9
9
|
import hashlib
|
10
10
|
import json
|
11
|
-
from ccxt.base.types import Balances, Conversion, CrossBorrowRate, Currencies, Currency, FundingHistory, Int, IsolatedBorrowRate, Leverage, LeverageTier, Liquidation, MarginMode, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
|
11
|
+
from ccxt.base.types import Balances, Conversion, CrossBorrowRate, Currencies, Currency, FundingHistory, Int, IsolatedBorrowRate, Leverage, LeverageTier, Liquidation, MarginMode, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
|
12
12
|
from typing import List
|
13
13
|
from ccxt.base.errors import ExchangeError
|
14
14
|
from ccxt.base.errors import AuthenticationError
|
@@ -6820,7 +6820,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
6820
6820
|
'info': interest,
|
6821
6821
|
}, market)
|
6822
6822
|
|
6823
|
-
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) ->
|
6823
|
+
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[TransferEntry]:
|
6824
6824
|
"""
|
6825
6825
|
fetch a history of internal transfers made on an account
|
6826
6826
|
:see: https://www.bitget.com/api-doc/spot/account/Get-Account-TransferRecords
|
ccxt/async_support/bitmart.py
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
from ccxt.async_support.base.exchange import Exchange
|
7
7
|
from ccxt.abstract.bitmart import ImplicitAPI
|
8
8
|
import hashlib
|
9
|
-
from ccxt.base.types import Balances, Currencies, Currency, Int, IsolatedBorrowRate, IsolatedBorrowRates, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction, TransferEntry
|
9
|
+
from ccxt.base.types import Balances, Currencies, Currency, Int, IsolatedBorrowRate, IsolatedBorrowRates, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction, TransferEntry
|
10
10
|
from typing import List
|
11
11
|
from ccxt.base.errors import ExchangeError
|
12
12
|
from ccxt.base.errors import AuthenticationError
|
@@ -3819,7 +3819,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
3819
3819
|
'status': self.parse_transfer_status(self.safe_string(transfer, 'state')),
|
3820
3820
|
}
|
3821
3821
|
|
3822
|
-
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) ->
|
3822
|
+
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[TransferEntry]:
|
3823
3823
|
"""
|
3824
3824
|
fetch a history of internal transfers made on an account, only transfers between spot and swap are supported
|
3825
3825
|
:see: https://developer-pro.bitmart.com/en/futures/#get-transfer-list-signed
|
ccxt/async_support/bitrue.py
CHANGED
@@ -8,7 +8,7 @@ from ccxt.abstract.bitrue import ImplicitAPI
|
|
8
8
|
import asyncio
|
9
9
|
import hashlib
|
10
10
|
import json
|
11
|
-
from ccxt.base.types import Balances, Currencies, Currency, Int, MarginModification, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
|
11
|
+
from ccxt.base.types import Balances, Currencies, Currency, Int, MarginModification, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
|
12
12
|
from typing import List
|
13
13
|
from ccxt.base.errors import ExchangeError
|
14
14
|
from ccxt.base.errors import AuthenticationError
|
@@ -2728,7 +2728,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
2728
2728
|
'status': 'ok',
|
2729
2729
|
}
|
2730
2730
|
|
2731
|
-
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) ->
|
2731
|
+
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[TransferEntry]:
|
2732
2732
|
"""
|
2733
2733
|
fetch a history of internal transfers made on an account
|
2734
2734
|
:see: https://www.bitrue.com/api-docs#get-future-account-transfer-history-list-user_data-hmac-sha256
|
ccxt/async_support/blofin.py
CHANGED
@@ -29,6 +29,7 @@ class blofin(Exchange, ImplicitAPI):
|
|
29
29
|
'countries': ['US'],
|
30
30
|
'version': 'v1',
|
31
31
|
'rateLimit': 100,
|
32
|
+
'pro': True,
|
32
33
|
'has': {
|
33
34
|
'CORS': None,
|
34
35
|
'spot': False,
|
@@ -103,7 +104,7 @@ class blofin(Exchange, ImplicitAPI):
|
|
103
104
|
'fetchOpenInterestHistory': False,
|
104
105
|
'fetchOpenOrder': None,
|
105
106
|
'fetchOpenOrders': True,
|
106
|
-
'fetchOrder':
|
107
|
+
'fetchOrder': None,
|
107
108
|
'fetchOrderBook': True,
|
108
109
|
'fetchOrderBooks': False,
|
109
110
|
'fetchOrders': False,
|
@@ -153,11 +154,12 @@ class blofin(Exchange, ImplicitAPI):
|
|
153
154
|
'2h': '2H',
|
154
155
|
'4h': '4H',
|
155
156
|
'6h': '6H',
|
157
|
+
'8h': '8H',
|
156
158
|
'12h': '12H',
|
157
159
|
'1d': '1D',
|
160
|
+
'3d': '3D',
|
158
161
|
'1w': '1W',
|
159
162
|
'1M': '1M',
|
160
|
-
'3M': '3M',
|
161
163
|
},
|
162
164
|
'hostname': 'www.blofin.com',
|
163
165
|
'urls': {
|
@@ -492,6 +494,25 @@ class blofin(Exchange, ImplicitAPI):
|
|
492
494
|
return self.parse_order_book(first, symbol, timestamp)
|
493
495
|
|
494
496
|
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
497
|
+
#
|
498
|
+
# response similar for REST & WS
|
499
|
+
#
|
500
|
+
# {
|
501
|
+
# instId: "ADA-USDT",
|
502
|
+
# ts: "1707736811486",
|
503
|
+
# last: "0.5315",
|
504
|
+
# lastSize: "4",
|
505
|
+
# askPrice: "0.5318",
|
506
|
+
# askSize: "248",
|
507
|
+
# bidPrice: "0.5315",
|
508
|
+
# bidSize: "63",
|
509
|
+
# open24h: "0.5555",
|
510
|
+
# high24h: "0.5563",
|
511
|
+
# low24h: "0.5315",
|
512
|
+
# volCurrency24h: "198560100",
|
513
|
+
# vol24h: "1985601",
|
514
|
+
# }
|
515
|
+
#
|
495
516
|
timestamp = self.safe_integer(ticker, 'ts')
|
496
517
|
marketId = self.safe_string(ticker, 'instId')
|
497
518
|
market = self.safe_market(marketId, market, '-')
|
@@ -560,7 +581,8 @@ class blofin(Exchange, ImplicitAPI):
|
|
560
581
|
|
561
582
|
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
562
583
|
#
|
563
|
-
# fetch trades
|
584
|
+
# fetch trades(response similar for REST & WS)
|
585
|
+
#
|
564
586
|
# {
|
565
587
|
# "tradeId": "3263934920",
|
566
588
|
# "instId": "LTC-USDT",
|
@@ -569,6 +591,7 @@ class blofin(Exchange, ImplicitAPI):
|
|
569
591
|
# "side": "buy",
|
570
592
|
# "ts": "1707232020854"
|
571
593
|
# }
|
594
|
+
#
|
572
595
|
# my trades
|
573
596
|
# {
|
574
597
|
# "instId": "LTC-USDT",
|
@@ -825,9 +848,11 @@ class blofin(Exchange, ImplicitAPI):
|
|
825
848
|
if type:
|
826
849
|
return self.parse_funding_balance(response)
|
827
850
|
else:
|
828
|
-
return self.
|
851
|
+
return self.parse_balance(response)
|
829
852
|
|
830
|
-
def
|
853
|
+
def parse_balance(self, response):
|
854
|
+
#
|
855
|
+
# "data" similar for REST & WS
|
831
856
|
#
|
832
857
|
# {
|
833
858
|
# "code": "0",
|
@@ -849,7 +874,8 @@ class blofin(Exchange, ImplicitAPI):
|
|
849
874
|
# "orderFrozen": "14920.994472632597427761",
|
850
875
|
# "equityUsd": "10011254.077985990315787910",
|
851
876
|
# "isolatedUnrealizedPnl": "-22.151999999999999999952",
|
852
|
-
# "bonus": "0"
|
877
|
+
# "bonus": "0" # present only in REST
|
878
|
+
# "unrealizedPnl": "0" # present only in WS
|
853
879
|
# }
|
854
880
|
# ]
|
855
881
|
# }
|
@@ -998,6 +1024,8 @@ class blofin(Exchange, ImplicitAPI):
|
|
998
1024
|
return self.safe_string(statuses, status, status)
|
999
1025
|
|
1000
1026
|
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1027
|
+
#
|
1028
|
+
# response similar for REST & WS
|
1001
1029
|
#
|
1002
1030
|
# {
|
1003
1031
|
# "orderId": "2075628533",
|
@@ -1026,6 +1054,9 @@ class blofin(Exchange, ImplicitAPI):
|
|
1026
1054
|
# "cancelSource": "not_canceled",
|
1027
1055
|
# "cancelSourceReason": null,
|
1028
1056
|
# "brokerId": "ec6dd3a7dd982d0b"
|
1057
|
+
# "filled_amount": "1.000000000000000000", # filledAmount in "ws" watchOrders
|
1058
|
+
# "cancelSource": "", # only in WS
|
1059
|
+
# "instType": "SWAP", # only in WS
|
1029
1060
|
# }
|
1030
1061
|
#
|
1031
1062
|
id = self.safe_string_2(order, 'tpslId', 'orderId')
|
@@ -1695,6 +1726,32 @@ class blofin(Exchange, ImplicitAPI):
|
|
1695
1726
|
return self.filter_by_array_positions(result, 'symbol', symbols, False)
|
1696
1727
|
|
1697
1728
|
def parse_position(self, position: dict, market: Market = None):
|
1729
|
+
#
|
1730
|
+
# response similar for REST & WS
|
1731
|
+
#
|
1732
|
+
# {
|
1733
|
+
# instType: 'SWAP',
|
1734
|
+
# instId: 'LTC-USDT',
|
1735
|
+
# marginMode: 'cross',
|
1736
|
+
# positionId: '644159',
|
1737
|
+
# positionSide: 'net',
|
1738
|
+
# positions: '1',
|
1739
|
+
# availablePositions: '1',
|
1740
|
+
# averagePrice: '68.16',
|
1741
|
+
# unrealizedPnl: '0.80631223',
|
1742
|
+
# unrealizedPnlRatio: '0.03548909463028169',
|
1743
|
+
# leverage: '3',
|
1744
|
+
# liquidationPrice: '10.116655172370356435',
|
1745
|
+
# markPrice: '68.96',
|
1746
|
+
# initialMargin: '22.988770743333333333',
|
1747
|
+
# margin: '', # self field might not exist in rest response
|
1748
|
+
# marginRatio: '152.523509620342499273',
|
1749
|
+
# maintenanceMargin: '0.34483156115',
|
1750
|
+
# adl: '4',
|
1751
|
+
# createTime: '1707235776528',
|
1752
|
+
# updateTime: '1707235776528'
|
1753
|
+
# }
|
1754
|
+
#
|
1698
1755
|
marketId = self.safe_string(position, 'instId')
|
1699
1756
|
market = self.safe_market(marketId, market)
|
1700
1757
|
symbol = market['symbol']
|
ccxt/async_support/btcbox.py
CHANGED
@@ -648,7 +648,7 @@ class btcbox(Exchange, ImplicitAPI):
|
|
648
648
|
'nonce': nonce,
|
649
649
|
}, params)
|
650
650
|
request = self.urlencode(query)
|
651
|
-
secret = self.hash(self.encode(self.secret), '
|
651
|
+
secret = self.hash(self.encode(self.secret), 'md5')
|
652
652
|
query['signature'] = self.hmac(self.encode(request), self.encode(secret), hashlib.sha256)
|
653
653
|
body = self.urlencode(query)
|
654
654
|
headers = {
|
ccxt/async_support/bybit.py
CHANGED
@@ -7,7 +7,7 @@ from ccxt.async_support.base.exchange import Exchange
|
|
7
7
|
from ccxt.abstract.bybit import ImplicitAPI
|
8
8
|
import asyncio
|
9
9
|
import hashlib
|
10
|
-
from ccxt.base.types import Balances, CrossBorrowRate, Currencies, Currency, Greeks, Int, Leverage, LeverageTier, LeverageTiers, Market, MarketInterface, Num, Option, OptionChain, Order, OrderBook, OrderRequest, CancellationRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
|
10
|
+
from ccxt.base.types import Balances, CrossBorrowRate, Currencies, Currency, Greeks, Int, Leverage, LeverageTier, LeverageTiers, Market, MarketInterface, Num, Option, OptionChain, Order, OrderBook, OrderRequest, CancellationRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
|
11
11
|
from typing import List
|
12
12
|
from ccxt.base.errors import ExchangeError
|
13
13
|
from ccxt.base.errors import AuthenticationError
|
@@ -6719,7 +6719,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
6719
6719
|
'status': status,
|
6720
6720
|
})
|
6721
6721
|
|
6722
|
-
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) ->
|
6722
|
+
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[TransferEntry]:
|
6723
6723
|
"""
|
6724
6724
|
fetch a history of internal transfers made on an account
|
6725
6725
|
:see: https://bybit-exchange.github.io/docs/v5/asset/inter-transfer-list
|
@@ -7625,7 +7625,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
7625
7625
|
quoteValueString = Precise.string_mul(baseValueString, priceString)
|
7626
7626
|
return self.safe_liquidation({
|
7627
7627
|
'info': liquidation,
|
7628
|
-
'symbol': self.safe_symbol(marketId, market),
|
7628
|
+
'symbol': self.safe_symbol(marketId, market, None, 'contract'),
|
7629
7629
|
'contracts': self.parse_number(contractsString),
|
7630
7630
|
'contractSize': self.parse_number(contractSizeString),
|
7631
7631
|
'price': self.parse_number(priceString),
|