ccxt 4.3.36__py2.py3-none-any.whl → 4.3.37__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/kraken.py +3 -3
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/bingx.py +61 -31
- ccxt/async_support/bitbank.py +46 -1
- ccxt/async_support/bitmart.py +2 -2
- ccxt/async_support/htx.py +64 -3
- ccxt/async_support/kraken.py +5 -5
- ccxt/async_support/woofipro.py +3 -1
- ccxt/base/exchange.py +1 -1
- ccxt/bingx.py +61 -31
- ccxt/bitbank.py +46 -1
- ccxt/bitmart.py +2 -2
- ccxt/htx.py +64 -3
- ccxt/kraken.py +5 -5
- ccxt/pro/__init__.py +1 -1
- ccxt/woofipro.py +3 -1
- {ccxt-4.3.36.dist-info → ccxt-4.3.37.dist-info}/METADATA +4 -4
- {ccxt-4.3.36.dist-info → ccxt-4.3.37.dist-info}/RECORD +22 -22
- {ccxt-4.3.36.dist-info → ccxt-4.3.37.dist-info}/WHEEL +0 -0
- {ccxt-4.3.36.dist-info → ccxt-4.3.37.dist-info}/top_level.txt +0 -0
ccxt/__init__.py
CHANGED
ccxt/abstract/kraken.py
CHANGED
@@ -6,13 +6,13 @@ class ImplicitAPI:
|
|
6
6
|
zendesk_get_201893608 = zendeskGet201893608 = Entry('201893608', 'zendesk', 'GET', {})
|
7
7
|
public_get_assets = publicGetAssets = Entry('Assets', 'public', 'GET', {'cost': 1})
|
8
8
|
public_get_assetpairs = publicGetAssetPairs = Entry('AssetPairs', 'public', 'GET', {'cost': 1})
|
9
|
-
public_get_depth = publicGetDepth = Entry('Depth', 'public', 'GET', {'cost': 1})
|
10
|
-
public_get_ohlc = publicGetOHLC = Entry('OHLC', 'public', 'GET', {'cost': 1})
|
9
|
+
public_get_depth = publicGetDepth = Entry('Depth', 'public', 'GET', {'cost': 1.2})
|
10
|
+
public_get_ohlc = publicGetOHLC = Entry('OHLC', 'public', 'GET', {'cost': 1.2})
|
11
11
|
public_get_spread = publicGetSpread = Entry('Spread', 'public', 'GET', {'cost': 1})
|
12
12
|
public_get_systemstatus = publicGetSystemStatus = Entry('SystemStatus', 'public', 'GET', {'cost': 1})
|
13
13
|
public_get_ticker = publicGetTicker = Entry('Ticker', 'public', 'GET', {'cost': 1})
|
14
14
|
public_get_time = publicGetTime = Entry('Time', 'public', 'GET', {'cost': 1})
|
15
|
-
public_get_trades = publicGetTrades = Entry('Trades', 'public', 'GET', {'cost': 1})
|
15
|
+
public_get_trades = publicGetTrades = Entry('Trades', 'public', 'GET', {'cost': 1.2})
|
16
16
|
private_post_addorder = privatePostAddOrder = Entry('AddOrder', 'private', 'POST', {'cost': 0})
|
17
17
|
private_post_addorderbatch = privatePostAddOrderBatch = Entry('AddOrderBatch', 'private', 'POST', {'cost': 0})
|
18
18
|
private_post_addexport = privatePostAddExport = Entry('AddExport', 'private', 'POST', {'cost': 3})
|
ccxt/async_support/__init__.py
CHANGED
ccxt/async_support/bingx.py
CHANGED
@@ -2570,7 +2570,9 @@ class bingx(Exchange, ImplicitAPI):
|
|
2570
2570
|
#
|
2571
2571
|
else:
|
2572
2572
|
raise BadRequest(self.id + ' cancelAllOrders is only supported for spot and swap markets.')
|
2573
|
-
|
2573
|
+
data = self.safe_dict(response, 'data', {})
|
2574
|
+
orders = self.safe_list_2(data, 'success', 'orders', [])
|
2575
|
+
return self.parse_orders(orders)
|
2574
2576
|
|
2575
2577
|
async def cancel_orders(self, ids: List[str], symbol: Str = None, params={}):
|
2576
2578
|
"""
|
@@ -2606,42 +2608,70 @@ class bingx(Exchange, ImplicitAPI):
|
|
2606
2608
|
spotReqKey = 'clientOrderIDs' if areClientOrderIds else 'orderIds'
|
2607
2609
|
request[spotReqKey] = ','.join(parsedIds)
|
2608
2610
|
response = await self.spotV1PrivatePostTradeCancelOrders(self.extend(request, params))
|
2611
|
+
#
|
2612
|
+
# {
|
2613
|
+
# "code": 0,
|
2614
|
+
# "msg": "",
|
2615
|
+
# "debugMsg": "",
|
2616
|
+
# "data": {
|
2617
|
+
# "orders": [
|
2618
|
+
# {
|
2619
|
+
# "symbol": "SOL-USDT",
|
2620
|
+
# "orderId": 1795970045910614016,
|
2621
|
+
# "transactTime": 1717027601111,
|
2622
|
+
# "price": "180.25",
|
2623
|
+
# "stopPrice": "0",
|
2624
|
+
# "origQty": "0.03",
|
2625
|
+
# "executedQty": "0",
|
2626
|
+
# "cummulativeQuoteQty": "0",
|
2627
|
+
# "status": "CANCELED",
|
2628
|
+
# "type": "LIMIT",
|
2629
|
+
# "side": "SELL",
|
2630
|
+
# "clientOrderID": ""
|
2631
|
+
# },
|
2632
|
+
# ...
|
2633
|
+
# ]
|
2634
|
+
# }
|
2635
|
+
# }
|
2636
|
+
#
|
2609
2637
|
else:
|
2610
2638
|
if areClientOrderIds:
|
2611
2639
|
request['clientOrderIDList'] = self.json(parsedIds)
|
2612
2640
|
else:
|
2613
2641
|
request['orderIdList'] = parsedIds
|
2614
2642
|
response = await self.swapV2PrivateDeleteTradeBatchOrders(self.extend(request, params))
|
2615
|
-
|
2616
|
-
|
2617
|
-
|
2618
|
-
|
2619
|
-
|
2620
|
-
|
2621
|
-
|
2622
|
-
|
2623
|
-
|
2624
|
-
|
2625
|
-
|
2626
|
-
|
2627
|
-
|
2628
|
-
|
2629
|
-
|
2630
|
-
|
2631
|
-
|
2632
|
-
|
2633
|
-
|
2634
|
-
|
2635
|
-
|
2636
|
-
|
2637
|
-
|
2638
|
-
|
2639
|
-
|
2640
|
-
|
2641
|
-
|
2642
|
-
|
2643
|
-
|
2644
|
-
|
2643
|
+
#
|
2644
|
+
# {
|
2645
|
+
# "code": 0,
|
2646
|
+
# "msg": "",
|
2647
|
+
# "data": {
|
2648
|
+
# "success": [
|
2649
|
+
# {
|
2650
|
+
# "symbol": "LINK-USDT",
|
2651
|
+
# "orderId": 1597783850786750464,
|
2652
|
+
# "side": "BUY",
|
2653
|
+
# "positionSide": "LONG",
|
2654
|
+
# "type": "TRIGGER_MARKET",
|
2655
|
+
# "origQty": "5.0",
|
2656
|
+
# "price": "5.5710",
|
2657
|
+
# "executedQty": "0.0",
|
2658
|
+
# "avgPrice": "0.0000",
|
2659
|
+
# "cumQuote": "0",
|
2660
|
+
# "stopPrice": "5.0000",
|
2661
|
+
# "profit": "0.0000",
|
2662
|
+
# "commission": "0.000000",
|
2663
|
+
# "status": "CANCELLED",
|
2664
|
+
# "time": 1669776330000,
|
2665
|
+
# "updateTime": 1672370837000
|
2666
|
+
# }
|
2667
|
+
# ],
|
2668
|
+
# "failed": null
|
2669
|
+
# }
|
2670
|
+
# }
|
2671
|
+
#
|
2672
|
+
data = self.safe_dict(response, 'data', {})
|
2673
|
+
success = self.safe_list_2(data, 'success', 'orders', [])
|
2674
|
+
return self.parse_orders(success)
|
2645
2675
|
|
2646
2676
|
async def cancel_all_orders_after(self, timeout: Int, params={}):
|
2647
2677
|
"""
|
ccxt/async_support/bitbank.py
CHANGED
@@ -669,8 +669,31 @@ class bitbank(Exchange, ImplicitAPI):
|
|
669
669
|
'pair': market['id'],
|
670
670
|
}
|
671
671
|
response = await self.privatePostUserSpotCancelOrder(self.extend(request, params))
|
672
|
+
#
|
673
|
+
# {
|
674
|
+
# "success": 1,
|
675
|
+
# "data": {
|
676
|
+
# "order_id": 0,
|
677
|
+
# "pair": "string",
|
678
|
+
# "side": "string",
|
679
|
+
# "type": "string",
|
680
|
+
# "start_amount": "string",
|
681
|
+
# "remaining_amount": "string",
|
682
|
+
# "executed_amount": "string",
|
683
|
+
# "price": "string",
|
684
|
+
# "post_only": False,
|
685
|
+
# "average_price": "string",
|
686
|
+
# "ordered_at": 0,
|
687
|
+
# "expire_at": 0,
|
688
|
+
# "canceled_at": 0,
|
689
|
+
# "triggered_at": 0,
|
690
|
+
# "trigger_price": "string",
|
691
|
+
# "status": "string"
|
692
|
+
# }
|
693
|
+
# }
|
694
|
+
#
|
672
695
|
data = self.safe_value(response, 'data')
|
673
|
-
return data
|
696
|
+
return self.parse_order(data)
|
674
697
|
|
675
698
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
676
699
|
"""
|
@@ -687,6 +710,28 @@ class bitbank(Exchange, ImplicitAPI):
|
|
687
710
|
'pair': market['id'],
|
688
711
|
}
|
689
712
|
response = await self.privateGetUserSpotOrder(self.extend(request, params))
|
713
|
+
#
|
714
|
+
# {
|
715
|
+
# "success": 1,
|
716
|
+
# "data": {
|
717
|
+
# "order_id": 0,
|
718
|
+
# "pair": "string",
|
719
|
+
# "side": "string",
|
720
|
+
# "type": "string",
|
721
|
+
# "start_amount": "string",
|
722
|
+
# "remaining_amount": "string",
|
723
|
+
# "executed_amount": "string",
|
724
|
+
# "price": "string",
|
725
|
+
# "post_only": False,
|
726
|
+
# "average_price": "string",
|
727
|
+
# "ordered_at": 0,
|
728
|
+
# "expire_at": 0,
|
729
|
+
# "triggered_at": 0,
|
730
|
+
# "triger_price": "string",
|
731
|
+
# "status": "string"
|
732
|
+
# }
|
733
|
+
# }
|
734
|
+
#
|
690
735
|
data = self.safe_dict(response, 'data')
|
691
736
|
return self.parse_order(data, market)
|
692
737
|
|
ccxt/async_support/bitmart.py
CHANGED
@@ -1180,9 +1180,9 @@ class bitmart(Exchange, ImplicitAPI):
|
|
1180
1180
|
market = self.safe_market(marketId, market)
|
1181
1181
|
symbol = market['symbol']
|
1182
1182
|
last = self.safe_string_2(ticker, 'close_24h', 'last_price')
|
1183
|
-
percentage =
|
1183
|
+
percentage = self.safe_string(ticker, 'price_change_percent_24h')
|
1184
1184
|
if percentage is None:
|
1185
|
-
percentage = Precise.
|
1185
|
+
percentage = Precise.string_mul(self.safe_string(ticker, 'fluctuation'), '100')
|
1186
1186
|
baseVolume = self.safe_string(ticker, 'base_volume_24h')
|
1187
1187
|
quoteVolume = self.safe_string(ticker, 'quote_volume_24h')
|
1188
1188
|
if quoteVolume is None:
|
ccxt/async_support/htx.py
CHANGED
@@ -57,6 +57,8 @@ class htx(Exchange, ImplicitAPI):
|
|
57
57
|
'cancelAllOrdersAfter': True,
|
58
58
|
'cancelOrder': True,
|
59
59
|
'cancelOrders': True,
|
60
|
+
'closeAllPositions': False,
|
61
|
+
'closePosition': True,
|
60
62
|
'createDepositAddress': None,
|
61
63
|
'createMarketBuyOrderWithCost': True,
|
62
64
|
'createMarketOrderWithCost': False,
|
@@ -5004,7 +5006,7 @@ class htx(Exchange, ImplicitAPI):
|
|
5004
5006
|
:param float [params.stopLossPrice]: *contract only* the price a stop-loss order is triggered at
|
5005
5007
|
:param float [params.takeProfitPrice]: *contract only* the price a take-profit order is triggered at
|
5006
5008
|
:param str [params.operator]: *spot and margin only* gte or lte, trigger price condition
|
5007
|
-
:param str [params.offset]: *contract only* '
|
5009
|
+
:param str [params.offset]: *contract only* 'both'(linear only), 'open', or 'close', required in hedge mode and for inverse markets
|
5008
5010
|
:param bool [params.postOnly]: *contract only* True or False
|
5009
5011
|
:param int [params.leverRate]: *contract only* required for all contract orders except tpsl, leverage greater than 20x requires prior approval of high-leverage agreement
|
5010
5012
|
:param str [params.timeInForce]: supports 'IOC' and 'FOK'
|
@@ -5054,6 +5056,9 @@ class htx(Exchange, ImplicitAPI):
|
|
5054
5056
|
else:
|
5055
5057
|
response = await self.contractPrivatePostLinearSwapApiV1SwapCrossOrder(contractRequest)
|
5056
5058
|
elif market['inverse']:
|
5059
|
+
offset = self.safe_string(params, 'offset')
|
5060
|
+
if offset is None:
|
5061
|
+
raise ArgumentsRequired(self.id + ' createOrder() requires an extra parameter params["offset"] to be set to "open" or "close" when placing orders in inverse markets')
|
5057
5062
|
if market['swap']:
|
5058
5063
|
if isStop:
|
5059
5064
|
response = await self.contractPrivatePostSwapApiV1SwapTriggerOrder(contractRequest)
|
@@ -6935,14 +6940,19 @@ class htx(Exchange, ImplicitAPI):
|
|
6935
6940
|
fetch all open positions
|
6936
6941
|
:param str[]|None symbols: list of unified market symbols
|
6937
6942
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
6943
|
+
:param str [params.subType]: 'linear' or 'inverse'
|
6944
|
+
:param str [params.type]: *inverse only* 'future', or 'swap'
|
6945
|
+
:param str [params.marginMode]: *linear only* 'cross' or 'isolated'
|
6938
6946
|
:returns dict[]: a list of `position structure <https://docs.ccxt.com/#/?id=position-structure>`
|
6939
6947
|
"""
|
6940
6948
|
await self.load_markets()
|
6941
6949
|
symbols = self.market_symbols(symbols)
|
6942
6950
|
market = None
|
6943
6951
|
if symbols is not None:
|
6944
|
-
|
6945
|
-
|
6952
|
+
symbolsLength = len(symbols)
|
6953
|
+
if symbolsLength > 0:
|
6954
|
+
first = self.safe_string(symbols, 0)
|
6955
|
+
market = self.market(first)
|
6946
6956
|
marginMode = None
|
6947
6957
|
marginMode, params = self.handle_margin_mode_and_params('fetchPositions', params, 'cross')
|
6948
6958
|
subType = None
|
@@ -8386,6 +8396,57 @@ class htx(Exchange, ImplicitAPI):
|
|
8386
8396
|
'datetime': self.iso8601(timestamp),
|
8387
8397
|
})
|
8388
8398
|
|
8399
|
+
async def close_position(self, symbol: str, side: OrderSide = None, params={}) -> Order:
|
8400
|
+
"""
|
8401
|
+
closes open positions for a contract market, requires 'amount' in params, unlike other exchanges
|
8402
|
+
:see: https://huobiapi.github.io/docs/usdt_swap/v1/en/#isolated-place-lightning-close-order # USDT-M(isolated)
|
8403
|
+
:see: https://huobiapi.github.io/docs/usdt_swap/v1/en/#cross-place-lightning-close-position # USDT-M(cross)
|
8404
|
+
:see: https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#place-lightning-close-order # Coin-M swap
|
8405
|
+
:see: https://huobiapi.github.io/docs/dm/v1/en/#place-flash-close-order # Coin-M futures
|
8406
|
+
:param str symbol: unified CCXT market symbol
|
8407
|
+
:param str side: 'buy' or 'sell', the side of the closing order, opposite side side
|
8408
|
+
:param dict [params]: extra parameters specific to the okx api endpoint
|
8409
|
+
:param str [params.clientOrderId]: client needs to provide unique API and have to maintain the API themselves afterwards. [1, 9223372036854775807]
|
8410
|
+
:param dict [params.marginMode]: 'cross' or 'isolated', required for linear markets
|
8411
|
+
*
|
8412
|
+
* EXCHANGE SPECIFIC PARAMETERS
|
8413
|
+
:param number [params.amount]: order quantity
|
8414
|
+
:param str [params.order_price_type]: 'lightning' by default, 'lightning_fok': lightning fok type, 'lightning_ioc': lightning ioc type 'market' by default, 'market': market order type, 'lightning_fok': lightning
|
8415
|
+
:returns dict: `an order structure <https://docs.ccxt.com/#/?id=position-structure>`
|
8416
|
+
"""
|
8417
|
+
await self.load_markets()
|
8418
|
+
market = self.market(symbol)
|
8419
|
+
clientOrderId = self.safe_string(params, 'clientOrderId')
|
8420
|
+
if not market['contract']:
|
8421
|
+
raise BadRequest(self.id + ' closePosition() symbol supports contract markets only')
|
8422
|
+
self.check_required_argument('closePosition', side, 'side')
|
8423
|
+
request: dict = {
|
8424
|
+
'contract_code': market['id'],
|
8425
|
+
'direction': side,
|
8426
|
+
}
|
8427
|
+
if clientOrderId is not None:
|
8428
|
+
request['client_order_id'] = clientOrderId
|
8429
|
+
if market['inverse']:
|
8430
|
+
amount = self.safe_string_2(params, 'volume', 'amount')
|
8431
|
+
if amount is None:
|
8432
|
+
raise ArgumentsRequired(self.id + ' closePosition() requires an extra argument params["amount"] for inverse markets')
|
8433
|
+
request['volume'] = self.amount_to_precision(symbol, amount)
|
8434
|
+
params = self.omit(params, ['clientOrderId', 'volume', 'amount'])
|
8435
|
+
response = None
|
8436
|
+
if market['inverse']: # Coin-M
|
8437
|
+
if market['swap']:
|
8438
|
+
response = await self.contractPrivatePostSwapApiV1SwapLightningClosePosition(self.extend(request, params))
|
8439
|
+
else: # future
|
8440
|
+
response = await self.contractPrivatePostApiV1LightningClosePosition(self.extend(request, params))
|
8441
|
+
else: # USDT-M
|
8442
|
+
marginMode = None
|
8443
|
+
marginMode, params = self.handle_margin_mode_and_params('closePosition', params, 'cross')
|
8444
|
+
if marginMode == 'cross':
|
8445
|
+
response = await self.contractPrivatePostLinearSwapApiV1SwapCrossLightningClosePosition(self.extend(request, params))
|
8446
|
+
else: # isolated
|
8447
|
+
response = await self.contractPrivatePostLinearSwapApiV1SwapLightningClosePosition(self.extend(request, params))
|
8448
|
+
return self.parse_order(response, market)
|
8449
|
+
|
8389
8450
|
async def set_position_mode(self, hedged: bool, symbol: Str = None, params={}):
|
8390
8451
|
"""
|
8391
8452
|
set hedged to True or False
|
ccxt/async_support/kraken.py
CHANGED
@@ -179,13 +179,13 @@ class kraken(Exchange, ImplicitAPI):
|
|
179
179
|
# rate-limits explained in comment in the top of self file
|
180
180
|
'Assets': 1,
|
181
181
|
'AssetPairs': 1,
|
182
|
-
'Depth': 1,
|
183
|
-
'OHLC': 1,
|
182
|
+
'Depth': 1.2,
|
183
|
+
'OHLC': 1.2, # 1.2 because 1 triggers too many requests immediately
|
184
184
|
'Spread': 1,
|
185
185
|
'SystemStatus': 1,
|
186
186
|
'Ticker': 1,
|
187
187
|
'Time': 1,
|
188
|
-
'Trades': 1,
|
188
|
+
'Trades': 1.2,
|
189
189
|
},
|
190
190
|
},
|
191
191
|
'private': {
|
@@ -761,8 +761,8 @@ class kraken(Exchange, ImplicitAPI):
|
|
761
761
|
return {
|
762
762
|
'info': response,
|
763
763
|
'symbol': market['symbol'],
|
764
|
-
'maker': self.
|
765
|
-
'taker': self.
|
764
|
+
'maker': self.parse_number(Precise.string_div(self.safe_string(symbolMakerFee, 'fee'), '100')),
|
765
|
+
'taker': self.parse_number(Precise.string_div(self.safe_string(symbolTakerFee, 'fee'), '100')),
|
766
766
|
'percentage': True,
|
767
767
|
'tierBased': True,
|
768
768
|
}
|
ccxt/async_support/woofipro.py
CHANGED
@@ -2138,8 +2138,10 @@ class woofipro(Exchange, ImplicitAPI):
|
|
2138
2138
|
|
2139
2139
|
def sign_hash(self, hash, privateKey):
|
2140
2140
|
signature = self.ecdsa(hash[-64:], privateKey[-64:], 'secp256k1', None)
|
2141
|
+
r = signature['r']
|
2142
|
+
s = signature['s']
|
2141
2143
|
v = self.int_to_base16(self.sum(27, signature['v']))
|
2142
|
-
return '0x' +
|
2144
|
+
return '0x' + r.rjust(64, '0') + s.rjust(64, '0') + v
|
2143
2145
|
|
2144
2146
|
def sign_message(self, message, privateKey):
|
2145
2147
|
return self.sign_hash(self.hash_message(message), privateKey[-64:])
|
ccxt/base/exchange.py
CHANGED
ccxt/bingx.py
CHANGED
@@ -2569,7 +2569,9 @@ class bingx(Exchange, ImplicitAPI):
|
|
2569
2569
|
#
|
2570
2570
|
else:
|
2571
2571
|
raise BadRequest(self.id + ' cancelAllOrders is only supported for spot and swap markets.')
|
2572
|
-
|
2572
|
+
data = self.safe_dict(response, 'data', {})
|
2573
|
+
orders = self.safe_list_2(data, 'success', 'orders', [])
|
2574
|
+
return self.parse_orders(orders)
|
2573
2575
|
|
2574
2576
|
def cancel_orders(self, ids: List[str], symbol: Str = None, params={}):
|
2575
2577
|
"""
|
@@ -2605,42 +2607,70 @@ class bingx(Exchange, ImplicitAPI):
|
|
2605
2607
|
spotReqKey = 'clientOrderIDs' if areClientOrderIds else 'orderIds'
|
2606
2608
|
request[spotReqKey] = ','.join(parsedIds)
|
2607
2609
|
response = self.spotV1PrivatePostTradeCancelOrders(self.extend(request, params))
|
2610
|
+
#
|
2611
|
+
# {
|
2612
|
+
# "code": 0,
|
2613
|
+
# "msg": "",
|
2614
|
+
# "debugMsg": "",
|
2615
|
+
# "data": {
|
2616
|
+
# "orders": [
|
2617
|
+
# {
|
2618
|
+
# "symbol": "SOL-USDT",
|
2619
|
+
# "orderId": 1795970045910614016,
|
2620
|
+
# "transactTime": 1717027601111,
|
2621
|
+
# "price": "180.25",
|
2622
|
+
# "stopPrice": "0",
|
2623
|
+
# "origQty": "0.03",
|
2624
|
+
# "executedQty": "0",
|
2625
|
+
# "cummulativeQuoteQty": "0",
|
2626
|
+
# "status": "CANCELED",
|
2627
|
+
# "type": "LIMIT",
|
2628
|
+
# "side": "SELL",
|
2629
|
+
# "clientOrderID": ""
|
2630
|
+
# },
|
2631
|
+
# ...
|
2632
|
+
# ]
|
2633
|
+
# }
|
2634
|
+
# }
|
2635
|
+
#
|
2608
2636
|
else:
|
2609
2637
|
if areClientOrderIds:
|
2610
2638
|
request['clientOrderIDList'] = self.json(parsedIds)
|
2611
2639
|
else:
|
2612
2640
|
request['orderIdList'] = parsedIds
|
2613
2641
|
response = self.swapV2PrivateDeleteTradeBatchOrders(self.extend(request, params))
|
2614
|
-
|
2615
|
-
|
2616
|
-
|
2617
|
-
|
2618
|
-
|
2619
|
-
|
2620
|
-
|
2621
|
-
|
2622
|
-
|
2623
|
-
|
2624
|
-
|
2625
|
-
|
2626
|
-
|
2627
|
-
|
2628
|
-
|
2629
|
-
|
2630
|
-
|
2631
|
-
|
2632
|
-
|
2633
|
-
|
2634
|
-
|
2635
|
-
|
2636
|
-
|
2637
|
-
|
2638
|
-
|
2639
|
-
|
2640
|
-
|
2641
|
-
|
2642
|
-
|
2643
|
-
|
2642
|
+
#
|
2643
|
+
# {
|
2644
|
+
# "code": 0,
|
2645
|
+
# "msg": "",
|
2646
|
+
# "data": {
|
2647
|
+
# "success": [
|
2648
|
+
# {
|
2649
|
+
# "symbol": "LINK-USDT",
|
2650
|
+
# "orderId": 1597783850786750464,
|
2651
|
+
# "side": "BUY",
|
2652
|
+
# "positionSide": "LONG",
|
2653
|
+
# "type": "TRIGGER_MARKET",
|
2654
|
+
# "origQty": "5.0",
|
2655
|
+
# "price": "5.5710",
|
2656
|
+
# "executedQty": "0.0",
|
2657
|
+
# "avgPrice": "0.0000",
|
2658
|
+
# "cumQuote": "0",
|
2659
|
+
# "stopPrice": "5.0000",
|
2660
|
+
# "profit": "0.0000",
|
2661
|
+
# "commission": "0.000000",
|
2662
|
+
# "status": "CANCELLED",
|
2663
|
+
# "time": 1669776330000,
|
2664
|
+
# "updateTime": 1672370837000
|
2665
|
+
# }
|
2666
|
+
# ],
|
2667
|
+
# "failed": null
|
2668
|
+
# }
|
2669
|
+
# }
|
2670
|
+
#
|
2671
|
+
data = self.safe_dict(response, 'data', {})
|
2672
|
+
success = self.safe_list_2(data, 'success', 'orders', [])
|
2673
|
+
return self.parse_orders(success)
|
2644
2674
|
|
2645
2675
|
def cancel_all_orders_after(self, timeout: Int, params={}):
|
2646
2676
|
"""
|
ccxt/bitbank.py
CHANGED
@@ -669,8 +669,31 @@ class bitbank(Exchange, ImplicitAPI):
|
|
669
669
|
'pair': market['id'],
|
670
670
|
}
|
671
671
|
response = self.privatePostUserSpotCancelOrder(self.extend(request, params))
|
672
|
+
#
|
673
|
+
# {
|
674
|
+
# "success": 1,
|
675
|
+
# "data": {
|
676
|
+
# "order_id": 0,
|
677
|
+
# "pair": "string",
|
678
|
+
# "side": "string",
|
679
|
+
# "type": "string",
|
680
|
+
# "start_amount": "string",
|
681
|
+
# "remaining_amount": "string",
|
682
|
+
# "executed_amount": "string",
|
683
|
+
# "price": "string",
|
684
|
+
# "post_only": False,
|
685
|
+
# "average_price": "string",
|
686
|
+
# "ordered_at": 0,
|
687
|
+
# "expire_at": 0,
|
688
|
+
# "canceled_at": 0,
|
689
|
+
# "triggered_at": 0,
|
690
|
+
# "trigger_price": "string",
|
691
|
+
# "status": "string"
|
692
|
+
# }
|
693
|
+
# }
|
694
|
+
#
|
672
695
|
data = self.safe_value(response, 'data')
|
673
|
-
return data
|
696
|
+
return self.parse_order(data)
|
674
697
|
|
675
698
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
676
699
|
"""
|
@@ -687,6 +710,28 @@ class bitbank(Exchange, ImplicitAPI):
|
|
687
710
|
'pair': market['id'],
|
688
711
|
}
|
689
712
|
response = self.privateGetUserSpotOrder(self.extend(request, params))
|
713
|
+
#
|
714
|
+
# {
|
715
|
+
# "success": 1,
|
716
|
+
# "data": {
|
717
|
+
# "order_id": 0,
|
718
|
+
# "pair": "string",
|
719
|
+
# "side": "string",
|
720
|
+
# "type": "string",
|
721
|
+
# "start_amount": "string",
|
722
|
+
# "remaining_amount": "string",
|
723
|
+
# "executed_amount": "string",
|
724
|
+
# "price": "string",
|
725
|
+
# "post_only": False,
|
726
|
+
# "average_price": "string",
|
727
|
+
# "ordered_at": 0,
|
728
|
+
# "expire_at": 0,
|
729
|
+
# "triggered_at": 0,
|
730
|
+
# "triger_price": "string",
|
731
|
+
# "status": "string"
|
732
|
+
# }
|
733
|
+
# }
|
734
|
+
#
|
690
735
|
data = self.safe_dict(response, 'data')
|
691
736
|
return self.parse_order(data, market)
|
692
737
|
|
ccxt/bitmart.py
CHANGED
@@ -1180,9 +1180,9 @@ class bitmart(Exchange, ImplicitAPI):
|
|
1180
1180
|
market = self.safe_market(marketId, market)
|
1181
1181
|
symbol = market['symbol']
|
1182
1182
|
last = self.safe_string_2(ticker, 'close_24h', 'last_price')
|
1183
|
-
percentage =
|
1183
|
+
percentage = self.safe_string(ticker, 'price_change_percent_24h')
|
1184
1184
|
if percentage is None:
|
1185
|
-
percentage = Precise.
|
1185
|
+
percentage = Precise.string_mul(self.safe_string(ticker, 'fluctuation'), '100')
|
1186
1186
|
baseVolume = self.safe_string(ticker, 'base_volume_24h')
|
1187
1187
|
quoteVolume = self.safe_string(ticker, 'quote_volume_24h')
|
1188
1188
|
if quoteVolume is None:
|
ccxt/htx.py
CHANGED
@@ -56,6 +56,8 @@ class htx(Exchange, ImplicitAPI):
|
|
56
56
|
'cancelAllOrdersAfter': True,
|
57
57
|
'cancelOrder': True,
|
58
58
|
'cancelOrders': True,
|
59
|
+
'closeAllPositions': False,
|
60
|
+
'closePosition': True,
|
59
61
|
'createDepositAddress': None,
|
60
62
|
'createMarketBuyOrderWithCost': True,
|
61
63
|
'createMarketOrderWithCost': False,
|
@@ -5003,7 +5005,7 @@ class htx(Exchange, ImplicitAPI):
|
|
5003
5005
|
:param float [params.stopLossPrice]: *contract only* the price a stop-loss order is triggered at
|
5004
5006
|
:param float [params.takeProfitPrice]: *contract only* the price a take-profit order is triggered at
|
5005
5007
|
:param str [params.operator]: *spot and margin only* gte or lte, trigger price condition
|
5006
|
-
:param str [params.offset]: *contract only* '
|
5008
|
+
:param str [params.offset]: *contract only* 'both'(linear only), 'open', or 'close', required in hedge mode and for inverse markets
|
5007
5009
|
:param bool [params.postOnly]: *contract only* True or False
|
5008
5010
|
:param int [params.leverRate]: *contract only* required for all contract orders except tpsl, leverage greater than 20x requires prior approval of high-leverage agreement
|
5009
5011
|
:param str [params.timeInForce]: supports 'IOC' and 'FOK'
|
@@ -5053,6 +5055,9 @@ class htx(Exchange, ImplicitAPI):
|
|
5053
5055
|
else:
|
5054
5056
|
response = self.contractPrivatePostLinearSwapApiV1SwapCrossOrder(contractRequest)
|
5055
5057
|
elif market['inverse']:
|
5058
|
+
offset = self.safe_string(params, 'offset')
|
5059
|
+
if offset is None:
|
5060
|
+
raise ArgumentsRequired(self.id + ' createOrder() requires an extra parameter params["offset"] to be set to "open" or "close" when placing orders in inverse markets')
|
5056
5061
|
if market['swap']:
|
5057
5062
|
if isStop:
|
5058
5063
|
response = self.contractPrivatePostSwapApiV1SwapTriggerOrder(contractRequest)
|
@@ -6934,14 +6939,19 @@ class htx(Exchange, ImplicitAPI):
|
|
6934
6939
|
fetch all open positions
|
6935
6940
|
:param str[]|None symbols: list of unified market symbols
|
6936
6941
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
6942
|
+
:param str [params.subType]: 'linear' or 'inverse'
|
6943
|
+
:param str [params.type]: *inverse only* 'future', or 'swap'
|
6944
|
+
:param str [params.marginMode]: *linear only* 'cross' or 'isolated'
|
6937
6945
|
:returns dict[]: a list of `position structure <https://docs.ccxt.com/#/?id=position-structure>`
|
6938
6946
|
"""
|
6939
6947
|
self.load_markets()
|
6940
6948
|
symbols = self.market_symbols(symbols)
|
6941
6949
|
market = None
|
6942
6950
|
if symbols is not None:
|
6943
|
-
|
6944
|
-
|
6951
|
+
symbolsLength = len(symbols)
|
6952
|
+
if symbolsLength > 0:
|
6953
|
+
first = self.safe_string(symbols, 0)
|
6954
|
+
market = self.market(first)
|
6945
6955
|
marginMode = None
|
6946
6956
|
marginMode, params = self.handle_margin_mode_and_params('fetchPositions', params, 'cross')
|
6947
6957
|
subType = None
|
@@ -8385,6 +8395,57 @@ class htx(Exchange, ImplicitAPI):
|
|
8385
8395
|
'datetime': self.iso8601(timestamp),
|
8386
8396
|
})
|
8387
8397
|
|
8398
|
+
def close_position(self, symbol: str, side: OrderSide = None, params={}) -> Order:
|
8399
|
+
"""
|
8400
|
+
closes open positions for a contract market, requires 'amount' in params, unlike other exchanges
|
8401
|
+
:see: https://huobiapi.github.io/docs/usdt_swap/v1/en/#isolated-place-lightning-close-order # USDT-M(isolated)
|
8402
|
+
:see: https://huobiapi.github.io/docs/usdt_swap/v1/en/#cross-place-lightning-close-position # USDT-M(cross)
|
8403
|
+
:see: https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#place-lightning-close-order # Coin-M swap
|
8404
|
+
:see: https://huobiapi.github.io/docs/dm/v1/en/#place-flash-close-order # Coin-M futures
|
8405
|
+
:param str symbol: unified CCXT market symbol
|
8406
|
+
:param str side: 'buy' or 'sell', the side of the closing order, opposite side side
|
8407
|
+
:param dict [params]: extra parameters specific to the okx api endpoint
|
8408
|
+
:param str [params.clientOrderId]: client needs to provide unique API and have to maintain the API themselves afterwards. [1, 9223372036854775807]
|
8409
|
+
:param dict [params.marginMode]: 'cross' or 'isolated', required for linear markets
|
8410
|
+
*
|
8411
|
+
* EXCHANGE SPECIFIC PARAMETERS
|
8412
|
+
:param number [params.amount]: order quantity
|
8413
|
+
:param str [params.order_price_type]: 'lightning' by default, 'lightning_fok': lightning fok type, 'lightning_ioc': lightning ioc type 'market' by default, 'market': market order type, 'lightning_fok': lightning
|
8414
|
+
:returns dict: `an order structure <https://docs.ccxt.com/#/?id=position-structure>`
|
8415
|
+
"""
|
8416
|
+
self.load_markets()
|
8417
|
+
market = self.market(symbol)
|
8418
|
+
clientOrderId = self.safe_string(params, 'clientOrderId')
|
8419
|
+
if not market['contract']:
|
8420
|
+
raise BadRequest(self.id + ' closePosition() symbol supports contract markets only')
|
8421
|
+
self.check_required_argument('closePosition', side, 'side')
|
8422
|
+
request: dict = {
|
8423
|
+
'contract_code': market['id'],
|
8424
|
+
'direction': side,
|
8425
|
+
}
|
8426
|
+
if clientOrderId is not None:
|
8427
|
+
request['client_order_id'] = clientOrderId
|
8428
|
+
if market['inverse']:
|
8429
|
+
amount = self.safe_string_2(params, 'volume', 'amount')
|
8430
|
+
if amount is None:
|
8431
|
+
raise ArgumentsRequired(self.id + ' closePosition() requires an extra argument params["amount"] for inverse markets')
|
8432
|
+
request['volume'] = self.amount_to_precision(symbol, amount)
|
8433
|
+
params = self.omit(params, ['clientOrderId', 'volume', 'amount'])
|
8434
|
+
response = None
|
8435
|
+
if market['inverse']: # Coin-M
|
8436
|
+
if market['swap']:
|
8437
|
+
response = self.contractPrivatePostSwapApiV1SwapLightningClosePosition(self.extend(request, params))
|
8438
|
+
else: # future
|
8439
|
+
response = self.contractPrivatePostApiV1LightningClosePosition(self.extend(request, params))
|
8440
|
+
else: # USDT-M
|
8441
|
+
marginMode = None
|
8442
|
+
marginMode, params = self.handle_margin_mode_and_params('closePosition', params, 'cross')
|
8443
|
+
if marginMode == 'cross':
|
8444
|
+
response = self.contractPrivatePostLinearSwapApiV1SwapCrossLightningClosePosition(self.extend(request, params))
|
8445
|
+
else: # isolated
|
8446
|
+
response = self.contractPrivatePostLinearSwapApiV1SwapLightningClosePosition(self.extend(request, params))
|
8447
|
+
return self.parse_order(response, market)
|
8448
|
+
|
8388
8449
|
def set_position_mode(self, hedged: bool, symbol: Str = None, params={}):
|
8389
8450
|
"""
|
8390
8451
|
set hedged to True or False
|
ccxt/kraken.py
CHANGED
@@ -179,13 +179,13 @@ class kraken(Exchange, ImplicitAPI):
|
|
179
179
|
# rate-limits explained in comment in the top of self file
|
180
180
|
'Assets': 1,
|
181
181
|
'AssetPairs': 1,
|
182
|
-
'Depth': 1,
|
183
|
-
'OHLC': 1,
|
182
|
+
'Depth': 1.2,
|
183
|
+
'OHLC': 1.2, # 1.2 because 1 triggers too many requests immediately
|
184
184
|
'Spread': 1,
|
185
185
|
'SystemStatus': 1,
|
186
186
|
'Ticker': 1,
|
187
187
|
'Time': 1,
|
188
|
-
'Trades': 1,
|
188
|
+
'Trades': 1.2,
|
189
189
|
},
|
190
190
|
},
|
191
191
|
'private': {
|
@@ -761,8 +761,8 @@ class kraken(Exchange, ImplicitAPI):
|
|
761
761
|
return {
|
762
762
|
'info': response,
|
763
763
|
'symbol': market['symbol'],
|
764
|
-
'maker': self.
|
765
|
-
'taker': self.
|
764
|
+
'maker': self.parse_number(Precise.string_div(self.safe_string(symbolMakerFee, 'fee'), '100')),
|
765
|
+
'taker': self.parse_number(Precise.string_div(self.safe_string(symbolTakerFee, 'fee'), '100')),
|
766
766
|
'percentage': True,
|
767
767
|
'tierBased': True,
|
768
768
|
}
|
ccxt/pro/__init__.py
CHANGED
ccxt/woofipro.py
CHANGED
@@ -2138,8 +2138,10 @@ class woofipro(Exchange, ImplicitAPI):
|
|
2138
2138
|
|
2139
2139
|
def sign_hash(self, hash, privateKey):
|
2140
2140
|
signature = self.ecdsa(hash[-64:], privateKey[-64:], 'secp256k1', None)
|
2141
|
+
r = signature['r']
|
2142
|
+
s = signature['s']
|
2141
2143
|
v = self.int_to_base16(self.sum(27, signature['v']))
|
2142
|
-
return '0x' +
|
2144
|
+
return '0x' + r.rjust(64, '0') + s.rjust(64, '0') + v
|
2143
2145
|
|
2144
2146
|
def sign_message(self, message, privateKey):
|
2145
2147
|
return self.sign_hash(self.hash_message(message), privateKey[-64:])
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 4.3.
|
3
|
+
Version: 4.3.37
|
4
4
|
Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
|
5
5
|
Home-page: https://ccxt.com
|
6
6
|
Author: Igor Kroitor
|
@@ -264,13 +264,13 @@ console.log(version, Object.keys(exchanges));
|
|
264
264
|
|
265
265
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
266
266
|
|
267
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.
|
268
|
-
* unpkg: https://unpkg.com/ccxt@4.3.
|
267
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.37/dist/ccxt.browser.min.js
|
268
|
+
* unpkg: https://unpkg.com/ccxt@4.3.37/dist/ccxt.browser.min.js
|
269
269
|
|
270
270
|
CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
|
271
271
|
|
272
272
|
```HTML
|
273
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.
|
273
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.37/dist/ccxt.browser.min.js"></script>
|
274
274
|
```
|
275
275
|
|
276
276
|
Creates a global `ccxt` object:
|
@@ -1,4 +1,4 @@
|
|
1
|
-
ccxt/__init__.py,sha256=
|
1
|
+
ccxt/__init__.py,sha256=EBsnoDGGwpC7aree5X4kq0cJ4jylAykAHCR9no7JrXc,15950
|
2
2
|
ccxt/ace.py,sha256=6x4vkcS2lGSkAQuzS-AAgYJLPDNNfNo9NMIdAoXzs18,41776
|
3
3
|
ccxt/alpaca.py,sha256=EZ7uF3XI8EXXIsCZ-UVpruBXS96Kps6WOOukmdcgCn0,47326
|
4
4
|
ccxt/ascendex.py,sha256=rUUU3n4j8QrMrJCk4pVwVastIYzS3eDTUAL9R2ePErk,151832
|
@@ -8,9 +8,9 @@ ccxt/binance.py,sha256=vCH6EpFYY1gtDHQrf7In-gYXehhFqWTSfoXShAGbUSE,618778
|
|
8
8
|
ccxt/binancecoinm.py,sha256=pncdw6Xw2X1Po-vEvAB4nL37scoS_axGAVxetPy1YQs,1645
|
9
9
|
ccxt/binanceus.py,sha256=hdcT4OnadcdFFFjF3GtM0nWv90jqojqwdVS3xWGuW40,9163
|
10
10
|
ccxt/binanceusdm.py,sha256=KPQGlCalQ0eGlPCs2tSanOxaP8O0zFRQjGntA16Yprw,2480
|
11
|
-
ccxt/bingx.py,sha256=
|
11
|
+
ccxt/bingx.py,sha256=5yMkh41wzmCEPyVbN1CcCDmZ-1lJmuqR9J_eXJ9Giw8,188325
|
12
12
|
ccxt/bit2c.py,sha256=un1ZuLNvEt7bkceNeue3UctEoFA-xpoKQlnq4bX5Slc,37062
|
13
|
-
ccxt/bitbank.py,sha256=
|
13
|
+
ccxt/bitbank.py,sha256=yxS-W5FeA2Kqp7VbdNt6960GjuMflKVqUlTbtKPgqUY,43535
|
14
14
|
ccxt/bitbay.py,sha256=xAIjzGRDVGwoy-Gygd99H0YN4wiaz_0lR0Z14oxaaxc,478
|
15
15
|
ccxt/bitbns.py,sha256=vob7RER0BJJcP2ten1UcO3sE8FihY5jNffN-emNtu6E,48270
|
16
16
|
ccxt/bitcoincom.py,sha256=PyWIl4nC4jp5Uba2lI1At0N_hhNyWD0DoZC_MSyL_s4,502
|
@@ -19,7 +19,7 @@ ccxt/bitfinex2.py,sha256=smVuwDShHy4m4s4i4xGzx04r197GKPL8MA3lT2End4E,160612
|
|
19
19
|
ccxt/bitflyer.py,sha256=rvykeLLkDYVMEwXs4rInQClYwdXIXmj_7mxDpGT216I,41565
|
20
20
|
ccxt/bitget.py,sha256=7ETvr_9MSWv0KlbdmVxBMd-K7z_2EAdTq1Xaj_Gi6nE,423496
|
21
21
|
ccxt/bithumb.py,sha256=0oRYEp30LykNchRZwqbsiZlrzY4koY6EFWubVYs5hU8,45684
|
22
|
-
ccxt/bitmart.py,sha256=
|
22
|
+
ccxt/bitmart.py,sha256=JEXZ_kAu12Io1Y6m9QDn0_98s1qqOdBvoqOyRFUnzoY,204427
|
23
23
|
ccxt/bitmex.py,sha256=koETQgb-yVZ3ZfP6qIHyTMLTDk8eXTHauhwhaP79ZBQ,126862
|
24
24
|
ccxt/bitopro.py,sha256=kjGn1UOy6toGyEbpV_al50eGCjqI75GN4LXpGbmL4Tw,68743
|
25
25
|
ccxt/bitpanda.py,sha256=aiwPkx9lKbVzt4ggoYdq_mIbMGtg5ZtGl2yRHO5xyz8,471
|
@@ -62,14 +62,14 @@ ccxt/gemini.py,sha256=5eIia9wC4amH1e2kuVZh69mQ8y43TRZu4JizH_w8ogc,80838
|
|
62
62
|
ccxt/hitbtc.py,sha256=rFfuwk_KY9OLy_GM4dVJmbMfLa0j_8Wfml5yJxS9UTM,153389
|
63
63
|
ccxt/hitbtc3.py,sha256=qRAr4Zvaju9IQWRZUohdoN7xRnzIMPq8AyYb3gPv-Is,455
|
64
64
|
ccxt/hollaex.py,sha256=e7irunlbzhM1BSvv9kyaccHdUF0cRjnJkIbMMQhe5PA,76141
|
65
|
-
ccxt/htx.py,sha256=
|
65
|
+
ccxt/htx.py,sha256=tsbkKP3Bvi8yN2PcmpGR3-G1W5nS3fzfP4H_znf4_UQ,425065
|
66
66
|
ccxt/huobi.py,sha256=4vaG7IRN7fyjaJ_ac6S-njlHOfSEN5de7aq0noznxYw,438
|
67
67
|
ccxt/huobijp.py,sha256=wWCz1hRTJP8KRqfhsfml8h4d3Zz1ChAgqdYDl0OiDAo,88183
|
68
68
|
ccxt/hyperliquid.py,sha256=535pxGdgEFjP03WtB3ck6Nz0PwD7HqsTOoW-6qwxAYM,101079
|
69
69
|
ccxt/idex.py,sha256=7f5GA9z-Mui7YOmSxPRbHIWATSU8DVXUNYPlgw34iMw,73231
|
70
70
|
ccxt/independentreserve.py,sha256=LPYeMLwcsUG9_91dpDtRVJZPOtCIe4uV7nv_T7plzss,32246
|
71
71
|
ccxt/indodax.py,sha256=Oo3elggqB0J7YWaE0o6fXo9SpJuseTQSnoJ3jYt-Buc,52074
|
72
|
-
ccxt/kraken.py,sha256=
|
72
|
+
ccxt/kraken.py,sha256=WjB-3YdDAnW-rdNTVumLK_2ok3NafWG9K6BTIUBWRWc,128473
|
73
73
|
ccxt/krakenfutures.py,sha256=1xUvIzuDUevPngvmaODrZZ4LDYoojY7pzM5GbeobJKI,117101
|
74
74
|
ccxt/kucoin.py,sha256=DLUGLWdfTjxH9gna_jnlncz_wg38MhtYr_0Y0TF6-fA,218298
|
75
75
|
ccxt/kucoinfutures.py,sha256=x9TacKIoBZ_WnA4nljaAH9TwMvTDkU_E-GtqbK5S8F4,124565
|
@@ -100,7 +100,7 @@ ccxt/wavesexchange.py,sha256=BgqApypcGzFw4rlKR4LW2YUW7CkK2h1ICmtsYIcgZqQ,113831
|
|
100
100
|
ccxt/wazirx.py,sha256=leNH1FwG_45Sim2Adx5bZc2u6zz8zqx5AUymiDxFJ54,51509
|
101
101
|
ccxt/whitebit.py,sha256=xENpt5u6txhUlLfc4IR_FHCAJMw3u1nj17voGoq0zus,118756
|
102
102
|
ccxt/woo.py,sha256=8oeJFt8SpBY1D-TH1qBJzt_vtR5Iq4KQ0v7LohMIxFY,139810
|
103
|
-
ccxt/woofipro.py,sha256
|
103
|
+
ccxt/woofipro.py,sha256=VdAKu5DnL5reBUUfj_HPy6USLw9Ti6pLwMBWP4oXQz0,115210
|
104
104
|
ccxt/yobit.py,sha256=MFrd_ZvzSPP0T8RWrC3aLNrQN2rDZz3m2cbCnOqXr6s,53372
|
105
105
|
ccxt/zaif.py,sha256=zq592UTcuXvzR2qVkSNhXwBPxJm5JE4sKbDyrImyuHU,28863
|
106
106
|
ccxt/zonda.py,sha256=mP8o4UQgLZq1-gak8BAn4hH17BCDeztHhe34Itlf7V0,81230
|
@@ -175,7 +175,7 @@ ccxt/abstract/hyperliquid.py,sha256=AtChoOQaaZLeXCAQBA_Lg77vqsZ4mQqNTqewcW_puWg,
|
|
175
175
|
ccxt/abstract/idex.py,sha256=kFcWa8PauxofzN_k2DyQ0aZxQ70VPNAWMcEUZrl7XqE,2129
|
176
176
|
ccxt/abstract/independentreserve.py,sha256=Cue0hud5acRs2Q6oSvQ7Rx-YWS_fuACs6uV3aIE20ZM,4165
|
177
177
|
ccxt/abstract/indodax.py,sha256=E16v8W6Ac9kmV9hFEqf_kwV6VQmK74lc1LEUEkuDpYg,2488
|
178
|
-
ccxt/abstract/kraken.py,sha256=
|
178
|
+
ccxt/abstract/kraken.py,sha256=AUpdQHWHZFXseHNx1-cuLqRutYwYEUVqQ7mjc0TQR_s,5883
|
179
179
|
ccxt/abstract/krakenfutures.py,sha256=SiQ5XgX8DXkJgaF6AaX6Gzyb8Ef8mV6j3LhZj0Q7qdo,3537
|
180
180
|
ccxt/abstract/kucoin.py,sha256=9A8YSxRjuBoBfWRZKwYsdP10GNptdorbnY8R1ae7Lvs,25491
|
181
181
|
ccxt/abstract/kucoinfutures.py,sha256=W6BLMw26kIxIPQJh77lrSHjvsf2wXCshvBCzxYGEpjo,28204
|
@@ -210,7 +210,7 @@ ccxt/abstract/woofipro.py,sha256=El50vWGAV-4QPIDhgSnd4egfvk246NB6vTC-8h722vs,160
|
|
210
210
|
ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
|
211
211
|
ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
|
212
212
|
ccxt/abstract/zonda.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
|
213
|
-
ccxt/async_support/__init__.py,sha256=
|
213
|
+
ccxt/async_support/__init__.py,sha256=w2wqy_8lIzziYMfJ9YUKh4AZq7x3sv_7sTPBv3gWzec,15723
|
214
214
|
ccxt/async_support/ace.py,sha256=tsRgs_o4Iq7q8IkD83FUdC-2ztylhgO4cp2hww3rlqQ,42000
|
215
215
|
ccxt/async_support/alpaca.py,sha256=3845DgojoA1p0pxrqnDIqHbbRcEwZhZIkE4aygD5ics,47538
|
216
216
|
ccxt/async_support/ascendex.py,sha256=7tZ4C7FfzmuB_ADYjl6IkyQQ5JG0Vt1AD_B3fTeY6V0,152620
|
@@ -220,9 +220,9 @@ ccxt/async_support/binance.py,sha256=dBRcoYqL2UcYNg_H4j6SdUgxUIEZdXMUhJX67afc2PI
|
|
220
220
|
ccxt/async_support/binancecoinm.py,sha256=IY3RLZptQA2nmZaUYRGfTa5ZY4VMWBpFYfwHc8zTHw0,1683
|
221
221
|
ccxt/async_support/binanceus.py,sha256=c-K3Tk7LaRJjmYdCx8vBOqsx01uXrtvt0PC2ekBiD0g,9177
|
222
222
|
ccxt/async_support/binanceusdm.py,sha256=-1r4A4tmV2pCiLGO80hzq7MIIj4MTzOD7buZGv6JauA,2518
|
223
|
-
ccxt/async_support/bingx.py,sha256=
|
223
|
+
ccxt/async_support/bingx.py,sha256=mL8PerdRTP78nwA03hGG0g028VwQPDxWnHmv3_3Fh94,189361
|
224
224
|
ccxt/async_support/bit2c.py,sha256=5div5D1LV3QHZUqL3CDdKaBDATQ3c2Phglx9JpAb7fY,37274
|
225
|
-
ccxt/async_support/bitbank.py,sha256=
|
225
|
+
ccxt/async_support/bitbank.py,sha256=47jVvH8--NkV11uL-1X22vEg0YMyLc--SVtVuTLrFCI,43795
|
226
226
|
ccxt/async_support/bitbay.py,sha256=jcaEXi2IhYTva8ezO_SfJhwxEZk7HST4J3NaxD16BQA,492
|
227
227
|
ccxt/async_support/bitbns.py,sha256=qiW_A43mb7CdKuHupPSzTiIn8gD0T_vuvdyu3qcX2p4,48524
|
228
228
|
ccxt/async_support/bitcoincom.py,sha256=RiqwhK3RfxQ_PXTa860fphDCvwA8dalL-_rXlK85-8A,516
|
@@ -231,7 +231,7 @@ ccxt/async_support/bitfinex2.py,sha256=QQstleJSkjDRMHGSFZQIUHJ5fx55Bgdytk35gMWke
|
|
231
231
|
ccxt/async_support/bitflyer.py,sha256=RWrRkrZJow4M5uwoqTCD0bcITItbC5WZ57Mcmv0_1nk,41873
|
232
232
|
ccxt/async_support/bitget.py,sha256=BLMe-ofDnsehCgJSJZkKK2JN7NbsBFZGop_cuM57cyU,425120
|
233
233
|
ccxt/async_support/bithumb.py,sha256=0_SehUTG-pqL8uBHE_IhwJ5BjNTFfbxwF0A_IufTNuA,45914
|
234
|
-
ccxt/async_support/bitmart.py,sha256=
|
234
|
+
ccxt/async_support/bitmart.py,sha256=BHFBmb26UjRza9c-NoOJbzCi5H3hoQfkjh0AOA7thQE,205383
|
235
235
|
ccxt/async_support/bitmex.py,sha256=JCRSgTWNwB97A1vwvEpajD8VQ4AE8Qs5ZU1yd8KaiYc,127440
|
236
236
|
ccxt/async_support/bitopro.py,sha256=OWWNB_6Vpe10JG0P7dpmgerPEtmuxbx5_DLBFWnsL7w,69147
|
237
237
|
ccxt/async_support/bitpanda.py,sha256=2k3URBWrpnh2xHa7JiYenI7_4MW5UeOPGzetlmRkR4U,485
|
@@ -274,14 +274,14 @@ ccxt/async_support/gemini.py,sha256=cJjRW_O2uIKhi6tsClWr9Td8AGet_sXM2Lkj-i3MjRA,
|
|
274
274
|
ccxt/async_support/hitbtc.py,sha256=mu0IpmPkynGU8MaXLi9nZyDLP9L6Vjqb_D104q5Dj9E,154435
|
275
275
|
ccxt/async_support/hitbtc3.py,sha256=dmSYoD2o4av_zzbZI8HNIoj8BWxA7QozsVpy8JaOXzU,469
|
276
276
|
ccxt/async_support/hollaex.py,sha256=b7nJAvL0dCfPwhjOCfoAn1Qd9msFvEIfYp-7EQ4QIwQ,76575
|
277
|
-
ccxt/async_support/htx.py,sha256=
|
277
|
+
ccxt/async_support/htx.py,sha256=wYAmakkCQfBs_6iFrB-P8pkrRSXV16RCm6xjg3zAWbQ,427457
|
278
278
|
ccxt/async_support/huobi.py,sha256=fup0j6wQ1khAtfbb1H4CSyJAOzhxuoHMmrM6sgTuhr8,452
|
279
279
|
ccxt/async_support/huobijp.py,sha256=C8r2aXJ5D8vyS9hEA2FKBTufDKircXN9D2ypm720HeU,88683
|
280
280
|
ccxt/async_support/hyperliquid.py,sha256=xy4GMllF4APqWrHjWmI7hUQRJtsMY-7k_2moNVPyuQY,101599
|
281
281
|
ccxt/async_support/idex.py,sha256=f5CvLsX4ECEr-spmDP2a26Ge2AmbWMip1o0usOmbvAE,73707
|
282
282
|
ccxt/async_support/independentreserve.py,sha256=i6gf1iPcwyBiL_65UoszpotGco-KgvTxcRkrq6AZsOY,32506
|
283
283
|
ccxt/async_support/indodax.py,sha256=yNHitrcyGRAUKLlEmLl6nKWjcJTuPPFW6BpizQp71oo,52382
|
284
|
-
ccxt/async_support/kraken.py,sha256=
|
284
|
+
ccxt/async_support/kraken.py,sha256=Wi-bG5ftU0DNDkT05mu-BylIdliwsLcDGQvLy0bPxbQ,129111
|
285
285
|
ccxt/async_support/krakenfutures.py,sha256=G5lWWvUyyl64laoN-i08k3S8fyOGKfx-2Vbkn42D6tE,117589
|
286
286
|
ccxt/async_support/kucoin.py,sha256=xcBYK19XTgiAWViYprAhJb8dHrgEKyOQcV2ODX2a5dw,219370
|
287
287
|
ccxt/async_support/kucoinfutures.py,sha256=19pp3iLxyGxqNvFLZ3W_Ov6gqUAwQE5oTvp9DezKmG8,125203
|
@@ -312,12 +312,12 @@ ccxt/async_support/wavesexchange.py,sha256=iLrg2z3npMfiUUcaqVgDJZsi2EVstwgTRThWT
|
|
312
312
|
ccxt/async_support/wazirx.py,sha256=FOv4rrTDhhuFVnCYS47EqgtyPEqCO0gJIJKcWA2FMTE,51811
|
313
313
|
ccxt/async_support/whitebit.py,sha256=mwoolQKWL_9ZpC-zU5Ti4rM7QsK3Fmmo_MRUgj_Nno8,119406
|
314
314
|
ccxt/async_support/woo.py,sha256=uMfhQF8Drm6tMo3SuyrTM3hq8Tb_4a6eJw4AKuE0bcE,140700
|
315
|
-
ccxt/async_support/woofipro.py,sha256=
|
315
|
+
ccxt/async_support/woofipro.py,sha256=gOVcSt5dCniYG9QVzSoszVpV_a3k8CBEcviex9Ivwy0,115890
|
316
316
|
ccxt/async_support/yobit.py,sha256=KQcu9nXJPDlAodZyxOXKIn6eTSLmlvUlgRFE6EBLfug,53656
|
317
317
|
ccxt/async_support/zaif.py,sha256=jTK5pLZSpKL1Pt0qAJTjN09TDS5AfhptGgGAqw7sNwE,29045
|
318
318
|
ccxt/async_support/zonda.py,sha256=e5sSXcFM7NZSyCGPoKmeyNe5wLIxJZJhDAetMknwAYo,81544
|
319
319
|
ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
|
320
|
-
ccxt/async_support/base/exchange.py,sha256=
|
320
|
+
ccxt/async_support/base/exchange.py,sha256=1Z_3-8VWvQ2SDUYI8EQWZ-n3EB8kcPlt3TVscwts_pQ,109872
|
321
321
|
ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
|
322
322
|
ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
|
323
323
|
ccxt/async_support/base/ws/aiohttp_client.py,sha256=5IEiT0elWI9a7Vr-KV0jgmlbpLJWBzIlrLaCkTKGaqY,5752
|
@@ -331,10 +331,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9produGjmB
|
|
331
331
|
ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
|
332
332
|
ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
|
333
333
|
ccxt/base/errors.py,sha256=FGdyULeNCNcl52gA_CNhe2dZmat9GJGkTdlIyDXAF_A,4213
|
334
|
-
ccxt/base/exchange.py,sha256=
|
334
|
+
ccxt/base/exchange.py,sha256=fVG8clDxRi4bieRJnwmqRkKwG5pVlC0eLOs6PTuqOtQ,280871
|
335
335
|
ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
|
336
336
|
ccxt/base/types.py,sha256=RGGcbz86cVtrmU602zoFO5gSWrv_J7IHxQkPnzmNirs,9247
|
337
|
-
ccxt/pro/__init__.py,sha256=
|
337
|
+
ccxt/pro/__init__.py,sha256=xcDuY_PDmzKunVljOsr9FhjqI9ZnBbYmIDTeLQdRbIc,7107
|
338
338
|
ccxt/pro/alpaca.py,sha256=81nFwDKyNlmUnhSyRyDLmLU6LGt3yqip1L_Ms2UyAmw,27215
|
339
339
|
ccxt/pro/ascendex.py,sha256=e4WZqmTkIz9sVAWtKAaV6BvanrM2ylRdzjxrclZYmOE,35456
|
340
340
|
ccxt/pro/bequant.py,sha256=5zbsP8BHQTUZ8ZNL6uaACxDbUClgkOV4SYfXT_LfQVg,1351
|
@@ -535,7 +535,7 @@ ccxt/test/base/test_ticker.py,sha256=cMTIMb1oySNORUCmqI5ZzMswlEyCF6gJMah3vfvo8wQ
|
|
535
535
|
ccxt/test/base/test_trade.py,sha256=PMtmB8V38dpaP-eb8h488xYMlR6D69yCOhsA1RuWrUA,2336
|
536
536
|
ccxt/test/base/test_trading_fee.py,sha256=2aDCNJtqBkTC_AieO0l1HYGq5hz5qkWlkWb9Nv_fcwk,1066
|
537
537
|
ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
|
538
|
-
ccxt-4.3.
|
539
|
-
ccxt-4.3.
|
540
|
-
ccxt-4.3.
|
541
|
-
ccxt-4.3.
|
538
|
+
ccxt-4.3.37.dist-info/METADATA,sha256=0_o7JJRmtB7ditlZk6ZVXEGDM0CAHNyVaqeSPLAYFd4,112807
|
539
|
+
ccxt-4.3.37.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
|
540
|
+
ccxt-4.3.37.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
|
541
|
+
ccxt-4.3.37.dist-info/RECORD,,
|
File without changes
|
File without changes
|