ccxt 4.4.68__py2.py3-none-any.whl → 4.4.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.
Files changed (43) hide show
  1. ccxt/__init__.py +1 -1
  2. ccxt/abstract/bybit.py +4 -0
  3. ccxt/abstract/myokx.py +3 -0
  4. ccxt/abstract/okx.py +3 -0
  5. ccxt/abstract/paradex.py +23 -0
  6. ccxt/abstract/tradeogre.py +2 -1
  7. ccxt/async_support/__init__.py +1 -1
  8. ccxt/async_support/base/exchange.py +5 -1
  9. ccxt/async_support/binance.py +17 -3
  10. ccxt/async_support/bitget.py +47 -262
  11. ccxt/async_support/bitstamp.py +2 -3
  12. ccxt/async_support/bybit.py +7 -0
  13. ccxt/async_support/coinbase.py +24 -9
  14. ccxt/async_support/cryptomus.py +122 -6
  15. ccxt/async_support/hyperliquid.py +17 -8
  16. ccxt/async_support/okx.py +4 -0
  17. ccxt/async_support/paradex.py +173 -5
  18. ccxt/async_support/phemex.py +2 -2
  19. ccxt/async_support/tradeogre.py +31 -11
  20. ccxt/async_support/whitebit.py +210 -2
  21. ccxt/base/exchange.py +1 -2
  22. ccxt/binance.py +17 -3
  23. ccxt/bitget.py +47 -262
  24. ccxt/bitstamp.py +2 -3
  25. ccxt/bybit.py +7 -0
  26. ccxt/coinbase.py +24 -9
  27. ccxt/cryptomus.py +122 -6
  28. ccxt/hyperliquid.py +17 -8
  29. ccxt/okx.py +4 -0
  30. ccxt/paradex.py +173 -5
  31. ccxt/phemex.py +2 -2
  32. ccxt/pro/__init__.py +1 -1
  33. ccxt/pro/bitget.py +28 -3
  34. ccxt/pro/bybit.py +81 -37
  35. ccxt/test/tests_async.py +25 -3
  36. ccxt/test/tests_sync.py +25 -3
  37. ccxt/tradeogre.py +31 -11
  38. ccxt/whitebit.py +210 -2
  39. {ccxt-4.4.68.dist-info → ccxt-4.4.70.dist-info}/METADATA +4 -4
  40. {ccxt-4.4.68.dist-info → ccxt-4.4.70.dist-info}/RECORD +43 -43
  41. {ccxt-4.4.68.dist-info → ccxt-4.4.70.dist-info}/LICENSE.txt +0 -0
  42. {ccxt-4.4.68.dist-info → ccxt-4.4.70.dist-info}/WHEEL +0 -0
  43. {ccxt-4.4.68.dist-info → ccxt-4.4.70.dist-info}/top_level.txt +0 -0
ccxt/__init__.py CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.4.68'
25
+ __version__ = '4.4.70'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
ccxt/abstract/bybit.py CHANGED
@@ -56,6 +56,7 @@ class ImplicitAPI:
56
56
  public_get_v5_crypto_loan_loanable_data = publicGetV5CryptoLoanLoanableData = Entry('v5/crypto-loan/loanable-data', 'public', 'GET', {'cost': 5})
57
57
  public_get_v5_ins_loan_product_infos = publicGetV5InsLoanProductInfos = Entry('v5/ins-loan/product-infos', 'public', 'GET', {'cost': 5})
58
58
  public_get_v5_ins_loan_ensure_tokens_convert = publicGetV5InsLoanEnsureTokensConvert = Entry('v5/ins-loan/ensure-tokens-convert', 'public', 'GET', {'cost': 5})
59
+ public_get_v5_earn_product = publicGetV5EarnProduct = Entry('v5/earn/product', 'public', 'GET', {'cost': 5})
59
60
  private_get_v5_market_instruments_info = privateGetV5MarketInstrumentsInfo = Entry('v5/market/instruments-info', 'private', 'GET', {'cost': 5})
60
61
  private_get_v2_private_wallet_fund_records = privateGetV2PrivateWalletFundRecords = Entry('v2/private/wallet/fund/records', 'private', 'GET', {'cost': 25})
61
62
  private_get_spot_v3_private_order = privateGetSpotV3PrivateOrder = Entry('spot/v3/private/order', 'private', 'GET', {'cost': 2.5})
@@ -192,6 +193,8 @@ class ImplicitAPI:
192
193
  private_get_v5_broker_earnings_info = privateGetV5BrokerEarningsInfo = Entry('v5/broker/earnings-info', 'private', 'GET', {'cost': 5})
193
194
  private_get_v5_broker_account_info = privateGetV5BrokerAccountInfo = Entry('v5/broker/account-info', 'private', 'GET', {'cost': 5})
194
195
  private_get_v5_broker_asset_query_sub_member_deposit_record = privateGetV5BrokerAssetQuerySubMemberDepositRecord = Entry('v5/broker/asset/query-sub-member-deposit-record', 'private', 'GET', {'cost': 10})
196
+ private_get_v5_earn_order = privateGetV5EarnOrder = Entry('v5/earn/order', 'private', 'GET', {'cost': 5})
197
+ private_get_v5_earn_position = privateGetV5EarnPosition = Entry('v5/earn/position', 'private', 'GET', {'cost': 5})
195
198
  private_post_spot_v3_private_order = privatePostSpotV3PrivateOrder = Entry('spot/v3/private/order', 'private', 'POST', {'cost': 2.5})
196
199
  private_post_spot_v3_private_cancel_order = privatePostSpotV3PrivateCancelOrder = Entry('spot/v3/private/cancel-order', 'private', 'POST', {'cost': 2.5})
197
200
  private_post_spot_v3_private_cancel_orders = privatePostSpotV3PrivateCancelOrders = Entry('spot/v3/private/cancel-orders', 'private', 'POST', {'cost': 2.5})
@@ -307,3 +310,4 @@ class ImplicitAPI:
307
310
  private_post_v5_broker_award_info = privatePostV5BrokerAwardInfo = Entry('v5/broker/award/info', 'private', 'POST', {'cost': 5})
308
311
  private_post_v5_broker_award_distribute_award = privatePostV5BrokerAwardDistributeAward = Entry('v5/broker/award/distribute-award', 'private', 'POST', {'cost': 5})
309
312
  private_post_v5_broker_award_distribution_record = privatePostV5BrokerAwardDistributionRecord = Entry('v5/broker/award/distribution-record', 'private', 'POST', {'cost': 5})
313
+ private_post_v5_earn_place_order = privatePostV5EarnPlaceOrder = Entry('v5/earn/place-order', 'private', 'POST', {'cost': 5})
ccxt/abstract/myokx.py CHANGED
@@ -107,7 +107,9 @@ class ImplicitAPI:
107
107
  private_get_trade_easy_convert_currency_list = privateGetTradeEasyConvertCurrencyList = Entry('trade/easy-convert-currency-list', 'private', 'GET', {'cost': 20})
108
108
  private_get_trade_easy_convert_history = privateGetTradeEasyConvertHistory = Entry('trade/easy-convert-history', 'private', 'GET', {'cost': 20})
109
109
  private_get_trade_one_click_repay_currency_list = privateGetTradeOneClickRepayCurrencyList = Entry('trade/one-click-repay-currency-list', 'private', 'GET', {'cost': 20})
110
+ private_get_trade_one_click_repay_currency_list_v2 = privateGetTradeOneClickRepayCurrencyListV2 = Entry('trade/one-click-repay-currency-list-v2', 'private', 'GET', {'cost': 20})
110
111
  private_get_trade_one_click_repay_history = privateGetTradeOneClickRepayHistory = Entry('trade/one-click-repay-history', 'private', 'GET', {'cost': 20})
112
+ private_get_trade_one_click_repay_history_v2 = privateGetTradeOneClickRepayHistoryV2 = Entry('trade/one-click-repay-history-v2', 'private', 'GET', {'cost': 20})
111
113
  private_get_trade_account_rate_limit = privateGetTradeAccountRateLimit = Entry('trade/account-rate-limit', 'private', 'GET', {'cost': 1})
112
114
  private_get_asset_currencies = privateGetAssetCurrencies = Entry('asset/currencies', 'private', 'GET', {'cost': 1.6666666666666667})
113
115
  private_get_asset_balances = privateGetAssetBalances = Entry('asset/balances', 'private', 'GET', {'cost': 1.6666666666666667})
@@ -250,6 +252,7 @@ class ImplicitAPI:
250
252
  private_post_trade_cancel_advance_algos = privatePostTradeCancelAdvanceAlgos = Entry('trade/cancel-advance-algos', 'private', 'POST', {'cost': 1})
251
253
  private_post_trade_easy_convert = privatePostTradeEasyConvert = Entry('trade/easy-convert', 'private', 'POST', {'cost': 20})
252
254
  private_post_trade_one_click_repay = privatePostTradeOneClickRepay = Entry('trade/one-click-repay', 'private', 'POST', {'cost': 20})
255
+ private_post_trade_one_click_repay_v2 = privatePostTradeOneClickRepayV2 = Entry('trade/one-click-repay-v2', 'private', 'POST', {'cost': 20})
253
256
  private_post_trade_mass_cancel = privatePostTradeMassCancel = Entry('trade/mass-cancel', 'private', 'POST', {'cost': 4})
254
257
  private_post_trade_cancel_all_after = privatePostTradeCancelAllAfter = Entry('trade/cancel-all-after', 'private', 'POST', {'cost': 10})
255
258
  private_post_asset_transfer = privatePostAssetTransfer = Entry('asset/transfer', 'private', 'POST', {'cost': 10})
ccxt/abstract/okx.py CHANGED
@@ -107,7 +107,9 @@ class ImplicitAPI:
107
107
  private_get_trade_easy_convert_currency_list = privateGetTradeEasyConvertCurrencyList = Entry('trade/easy-convert-currency-list', 'private', 'GET', {'cost': 20})
108
108
  private_get_trade_easy_convert_history = privateGetTradeEasyConvertHistory = Entry('trade/easy-convert-history', 'private', 'GET', {'cost': 20})
109
109
  private_get_trade_one_click_repay_currency_list = privateGetTradeOneClickRepayCurrencyList = Entry('trade/one-click-repay-currency-list', 'private', 'GET', {'cost': 20})
110
+ private_get_trade_one_click_repay_currency_list_v2 = privateGetTradeOneClickRepayCurrencyListV2 = Entry('trade/one-click-repay-currency-list-v2', 'private', 'GET', {'cost': 20})
110
111
  private_get_trade_one_click_repay_history = privateGetTradeOneClickRepayHistory = Entry('trade/one-click-repay-history', 'private', 'GET', {'cost': 20})
112
+ private_get_trade_one_click_repay_history_v2 = privateGetTradeOneClickRepayHistoryV2 = Entry('trade/one-click-repay-history-v2', 'private', 'GET', {'cost': 20})
111
113
  private_get_trade_account_rate_limit = privateGetTradeAccountRateLimit = Entry('trade/account-rate-limit', 'private', 'GET', {'cost': 1})
112
114
  private_get_asset_currencies = privateGetAssetCurrencies = Entry('asset/currencies', 'private', 'GET', {'cost': 1.6666666666666667})
113
115
  private_get_asset_balances = privateGetAssetBalances = Entry('asset/balances', 'private', 'GET', {'cost': 1.6666666666666667})
@@ -250,6 +252,7 @@ class ImplicitAPI:
250
252
  private_post_trade_cancel_advance_algos = privatePostTradeCancelAdvanceAlgos = Entry('trade/cancel-advance-algos', 'private', 'POST', {'cost': 1})
251
253
  private_post_trade_easy_convert = privatePostTradeEasyConvert = Entry('trade/easy-convert', 'private', 'POST', {'cost': 20})
252
254
  private_post_trade_one_click_repay = privatePostTradeOneClickRepay = Entry('trade/one-click-repay', 'private', 'POST', {'cost': 20})
255
+ private_post_trade_one_click_repay_v2 = privatePostTradeOneClickRepayV2 = Entry('trade/one-click-repay-v2', 'private', 'POST', {'cost': 20})
253
256
  private_post_trade_mass_cancel = privatePostTradeMassCancel = Entry('trade/mass-cancel', 'private', 'POST', {'cost': 4})
254
257
  private_post_trade_cancel_all_after = privatePostTradeCancelAllAfter = Entry('trade/cancel-all-after', 'private', 'POST', {'cost': 10})
255
258
  private_post_asset_transfer = privatePostAssetTransfer = Entry('asset/transfer', 'private', 'POST', {'cost': 10})
ccxt/abstract/paradex.py CHANGED
@@ -14,8 +14,19 @@ class ImplicitAPI:
14
14
  public_get_system_state = publicGetSystemState = Entry('system/state', 'public', 'GET', {'cost': 1})
15
15
  public_get_system_time = publicGetSystemTime = Entry('system/time', 'public', 'GET', {'cost': 1})
16
16
  public_get_trades = publicGetTrades = Entry('trades', 'public', 'GET', {'cost': 1})
17
+ public_get_vaults = publicGetVaults = Entry('vaults', 'public', 'GET', {'cost': 1})
18
+ public_get_vaults_balance = publicGetVaultsBalance = Entry('vaults/balance', 'public', 'GET', {'cost': 1})
19
+ public_get_vaults_config = publicGetVaultsConfig = Entry('vaults/config', 'public', 'GET', {'cost': 1})
20
+ public_get_vaults_history = publicGetVaultsHistory = Entry('vaults/history', 'public', 'GET', {'cost': 1})
21
+ public_get_vaults_positions = publicGetVaultsPositions = Entry('vaults/positions', 'public', 'GET', {'cost': 1})
22
+ public_get_vaults_summary = publicGetVaultsSummary = Entry('vaults/summary', 'public', 'GET', {'cost': 1})
23
+ public_get_vaults_transfers = publicGetVaultsTransfers = Entry('vaults/transfers', 'public', 'GET', {'cost': 1})
17
24
  private_get_account = privateGetAccount = Entry('account', 'private', 'GET', {'cost': 1})
25
+ private_get_account_info = privateGetAccountInfo = Entry('account/info', 'private', 'GET', {'cost': 1})
26
+ private_get_account_history = privateGetAccountHistory = Entry('account/history', 'private', 'GET', {'cost': 1})
27
+ private_get_account_margin = privateGetAccountMargin = Entry('account/margin', 'private', 'GET', {'cost': 1})
18
28
  private_get_account_profile = privateGetAccountProfile = Entry('account/profile', 'private', 'GET', {'cost': 1})
29
+ private_get_account_subaccounts = privateGetAccountSubaccounts = Entry('account/subaccounts', 'private', 'GET', {'cost': 1})
19
30
  private_get_balance = privateGetBalance = Entry('balance', 'private', 'GET', {'cost': 1})
20
31
  private_get_fills = privateGetFills = Entry('fills', 'private', 'GET', {'cost': 1})
21
32
  private_get_funding_payments = privateGetFundingPayments = Entry('funding/payments', 'private', 'GET', {'cost': 1})
@@ -28,13 +39,25 @@ class ImplicitAPI:
28
39
  private_get_orders_by_client_id_client_id = privateGetOrdersByClientIdClientId = Entry('orders/by_client_id/{client_id}', 'private', 'GET', {'cost': 1})
29
40
  private_get_orders_order_id = privateGetOrdersOrderId = Entry('orders/{order_id}', 'private', 'GET', {'cost': 1})
30
41
  private_get_points_data_market_program = privateGetPointsDataMarketProgram = Entry('points_data/{market}/{program}', 'private', 'GET', {'cost': 1})
42
+ private_get_referrals_qr_code = privateGetReferralsQrCode = Entry('referrals/qr-code', 'private', 'GET', {'cost': 1})
31
43
  private_get_referrals_summary = privateGetReferralsSummary = Entry('referrals/summary', 'private', 'GET', {'cost': 1})
32
44
  private_get_transfers = privateGetTransfers = Entry('transfers', 'private', 'GET', {'cost': 1})
45
+ private_get_algo_orders = privateGetAlgoOrders = Entry('algo/orders', 'private', 'GET', {'cost': 1})
46
+ private_get_algo_orders_history = privateGetAlgoOrdersHistory = Entry('algo/orders-history', 'private', 'GET', {'cost': 1})
47
+ private_get_algo_orders_algo_id = privateGetAlgoOrdersAlgoId = Entry('algo/orders/{algo_id}', 'private', 'GET', {'cost': 1})
48
+ private_get_vaults_account_summary = privateGetVaultsAccountSummary = Entry('vaults/account-summary', 'private', 'GET', {'cost': 1})
49
+ private_post_account_margin_market = privatePostAccountMarginMarket = Entry('account/margin/{market}', 'private', 'POST', {'cost': 1})
50
+ private_post_account_profile_max_slippage = privatePostAccountProfileMaxSlippage = Entry('account/profile/max_slippage', 'private', 'POST', {'cost': 1})
33
51
  private_post_account_profile_referral_code = privatePostAccountProfileReferralCode = Entry('account/profile/referral_code', 'private', 'POST', {'cost': 1})
34
52
  private_post_account_profile_username = privatePostAccountProfileUsername = Entry('account/profile/username', 'private', 'POST', {'cost': 1})
35
53
  private_post_auth = privatePostAuth = Entry('auth', 'private', 'POST', {'cost': 1})
36
54
  private_post_onboarding = privatePostOnboarding = Entry('onboarding', 'private', 'POST', {'cost': 1})
37
55
  private_post_orders = privatePostOrders = Entry('orders', 'private', 'POST', {'cost': 1})
56
+ private_post_orders_batch = privatePostOrdersBatch = Entry('orders/batch', 'private', 'POST', {'cost': 1})
57
+ private_post_algo_orders = privatePostAlgoOrders = Entry('algo/orders', 'private', 'POST', {'cost': 1})
58
+ private_post_vaults = privatePostVaults = Entry('vaults', 'private', 'POST', {'cost': 1})
59
+ private_put_orders_order_id = privatePutOrdersOrderId = Entry('orders/{order_id}', 'private', 'PUT', {'cost': 1})
38
60
  private_delete_orders = privateDeleteOrders = Entry('orders', 'private', 'DELETE', {'cost': 1})
39
61
  private_delete_orders_by_client_id_client_id = privateDeleteOrdersByClientIdClientId = Entry('orders/by_client_id/{client_id}', 'private', 'DELETE', {'cost': 1})
40
62
  private_delete_orders_order_id = privateDeleteOrdersOrderId = Entry('orders/{order_id}', 'private', 'DELETE', {'cost': 1})
63
+ private_delete_algo_orders_algo_id = privateDeleteAlgoOrdersAlgoId = Entry('algo/orders/{algo_id}', 'private', 'DELETE', {'cost': 1})
@@ -6,8 +6,8 @@ class ImplicitAPI:
6
6
  public_get_orders_market = publicGetOrdersMarket = Entry('orders/{market}', 'public', 'GET', {'cost': 1})
7
7
  public_get_ticker_market = publicGetTickerMarket = Entry('ticker/{market}', 'public', 'GET', {'cost': 1})
8
8
  public_get_history_market = publicGetHistoryMarket = Entry('history/{market}', 'public', 'GET', {'cost': 1})
9
+ public_get_chart_interval_market_timestamp = publicGetChartIntervalMarketTimestamp = Entry('chart/{interval}/{market}/{timestamp}', 'public', 'GET', {'cost': 1})
9
10
  public_get_chart_interval_market = publicGetChartIntervalMarket = Entry('chart/{interval}/{market}', 'public', 'GET', {'cost': 1})
10
- private_get_account_balance = privateGetAccountBalance = Entry('account/balance', 'private', 'GET', {'cost': 1})
11
11
  private_get_account_balances = privateGetAccountBalances = Entry('account/balances', 'private', 'GET', {'cost': 1})
12
12
  private_get_account_order_uuid = privateGetAccountOrderUuid = Entry('account/order/{uuid}', 'private', 'GET', {'cost': 1})
13
13
  private_post_order_buy = privatePostOrderBuy = Entry('order/buy', 'private', 'POST', {'cost': 1})
@@ -15,3 +15,4 @@ class ImplicitAPI:
15
15
  private_post_order_cancel = privatePostOrderCancel = Entry('order/cancel', 'private', 'POST', {'cost': 1})
16
16
  private_post_orders = privatePostOrders = Entry('orders', 'private', 'POST', {'cost': 1})
17
17
  private_post_account_orders = privatePostAccountOrders = Entry('account/orders', 'private', 'POST', {'cost': 1})
18
+ private_post_account_balance = privatePostAccountBalance = Entry('account/balance', 'private', 'POST', {'cost': 1})
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.68'
7
+ __version__ = '4.4.70'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.4.68'
5
+ __version__ = '4.4.70'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -283,6 +283,10 @@ class Exchange(BaseExchange):
283
283
  self.markets_loading = asyncio.ensure_future(coroutine)
284
284
  try:
285
285
  result = await self.markets_loading
286
+ except asyncio.CancelledError as e: # CancelledError is a base exception so we need to catch it explicitly
287
+ self.reloading_markets = False
288
+ self.markets_loading = None
289
+ raise e
286
290
  except Exception as e:
287
291
  self.reloading_markets = False
288
292
  self.markets_loading = None
@@ -8276,7 +8276,7 @@ class binance(Exchange, ImplicitAPI):
8276
8276
  internalInteger = self.safe_integer(transaction, 'transferType')
8277
8277
  internal = None
8278
8278
  if internalInteger is not None:
8279
- internal = True if internalInteger else False
8279
+ internal = True if (internalInteger != 0) else False
8280
8280
  network = self.safe_string(transaction, 'network')
8281
8281
  return {
8282
8282
  'info': transaction,
@@ -11326,8 +11326,22 @@ class binance(Exchange, ImplicitAPI):
11326
11326
  query = None
11327
11327
  # handle batchOrders
11328
11328
  if (path == 'batchOrders') and ((method == 'POST') or (method == 'PUT')):
11329
- batchOrders = self.safe_value(params, 'batchOrders')
11330
- queryBatch = (self.json(batchOrders))
11329
+ batchOrders = self.safe_list(params, 'batchOrders')
11330
+ checkedBatchOrders = batchOrders
11331
+ if method == 'POST' and api == 'fapiPrivate':
11332
+ # check broker id if batchOrders are called with fapiPrivatePostBatchOrders
11333
+ checkedBatchOrders = []
11334
+ for i in range(0, len(batchOrders)):
11335
+ batchOrder = batchOrders[i]
11336
+ newClientOrderId = self.safe_string(batchOrder, 'newClientOrderId')
11337
+ if newClientOrderId is None:
11338
+ defaultId = 'x-xcKtGhcu' # batchOrders can not be spot or margin
11339
+ broker = self.safe_dict(self.options, 'broker', {})
11340
+ brokerId = self.safe_string(broker, 'future', defaultId)
11341
+ newClientOrderId = brokerId + self.uuid22()
11342
+ batchOrder['newClientOrderId'] = newClientOrderId
11343
+ checkedBatchOrders.append(batchOrder)
11344
+ queryBatch = (self.json(checkedBatchOrders))
11331
11345
  params['batchOrders'] = queryBatch
11332
11346
  defaultRecvWindow = self.safe_integer(self.options, 'recvWindow')
11333
11347
  extendedParams = self.extend({