ccxt 4.4.33__py2.py3-none-any.whl → 4.4.35__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 (100) hide show
  1. ccxt/__init__.py +3 -1
  2. ccxt/abstract/bingx.py +17 -0
  3. ccxt/abstract/bitbank.py +5 -0
  4. ccxt/abstract/bitfinex2.py +1 -0
  5. ccxt/abstract/bitpanda.py +0 -12
  6. ccxt/abstract/bitrue.py +3 -3
  7. ccxt/abstract/ellipx.py +25 -0
  8. ccxt/abstract/okx.py +1 -0
  9. ccxt/abstract/onetrading.py +0 -12
  10. ccxt/abstract/xt.py +5 -5
  11. ccxt/alpaca.py +2 -0
  12. ccxt/async_support/__init__.py +3 -1
  13. ccxt/async_support/alpaca.py +2 -0
  14. ccxt/async_support/base/exchange.py +1 -1
  15. ccxt/async_support/binance.py +19 -15
  16. ccxt/async_support/bingx.py +479 -146
  17. ccxt/async_support/bitbank.py +5 -0
  18. ccxt/async_support/bitbns.py +2 -0
  19. ccxt/async_support/bitfinex2.py +1 -0
  20. ccxt/async_support/bitget.py +174 -40
  21. ccxt/async_support/bitmex.py +3 -1
  22. ccxt/async_support/bitopro.py +3 -0
  23. ccxt/async_support/bitrue.py +3 -2
  24. ccxt/async_support/btcmarkets.py +5 -3
  25. ccxt/async_support/btcturk.py +19 -19
  26. ccxt/async_support/bybit.py +13 -10
  27. ccxt/async_support/cex.py +13 -4
  28. ccxt/async_support/coinbase.py +3 -2
  29. ccxt/async_support/coinex.py +1 -0
  30. ccxt/async_support/coinone.py +7 -7
  31. ccxt/async_support/coinsph.py +7 -7
  32. ccxt/async_support/coinspot.py +39 -39
  33. ccxt/async_support/cryptocom.py +36 -34
  34. ccxt/async_support/ellipx.py +1828 -0
  35. ccxt/async_support/gate.py +143 -39
  36. ccxt/async_support/hyperliquid.py +70 -11
  37. ccxt/async_support/idex.py +3 -4
  38. ccxt/async_support/kraken.py +58 -49
  39. ccxt/async_support/krakenfutures.py +3 -1
  40. ccxt/async_support/kucoin.py +1 -1
  41. ccxt/async_support/okcoin.py +2 -0
  42. ccxt/async_support/okx.py +15 -10
  43. ccxt/async_support/onetrading.py +67 -370
  44. ccxt/async_support/paradex.py +2 -0
  45. ccxt/async_support/phemex.py +16 -0
  46. ccxt/async_support/poloniex.py +3 -1
  47. ccxt/async_support/poloniexfutures.py +3 -1
  48. ccxt/async_support/vertex.py +2 -0
  49. ccxt/async_support/woo.py +69 -69
  50. ccxt/async_support/xt.py +10 -10
  51. ccxt/base/exchange.py +28 -7
  52. ccxt/binance.py +19 -15
  53. ccxt/bingx.py +479 -146
  54. ccxt/bitbank.py +5 -0
  55. ccxt/bitbns.py +2 -0
  56. ccxt/bitfinex2.py +1 -0
  57. ccxt/bitget.py +174 -40
  58. ccxt/bitmex.py +3 -1
  59. ccxt/bitopro.py +3 -0
  60. ccxt/bitrue.py +3 -2
  61. ccxt/btcmarkets.py +5 -3
  62. ccxt/btcturk.py +19 -19
  63. ccxt/bybit.py +13 -10
  64. ccxt/cex.py +13 -4
  65. ccxt/coinbase.py +3 -2
  66. ccxt/coinex.py +1 -0
  67. ccxt/coinone.py +7 -7
  68. ccxt/coinsph.py +7 -7
  69. ccxt/coinspot.py +39 -39
  70. ccxt/cryptocom.py +36 -34
  71. ccxt/ellipx.py +1828 -0
  72. ccxt/gate.py +143 -39
  73. ccxt/hyperliquid.py +70 -11
  74. ccxt/idex.py +3 -4
  75. ccxt/kraken.py +58 -49
  76. ccxt/krakenfutures.py +3 -1
  77. ccxt/kucoin.py +1 -1
  78. ccxt/okcoin.py +2 -0
  79. ccxt/okx.py +15 -10
  80. ccxt/onetrading.py +67 -370
  81. ccxt/paradex.py +2 -0
  82. ccxt/phemex.py +16 -0
  83. ccxt/poloniex.py +3 -1
  84. ccxt/poloniexfutures.py +3 -1
  85. ccxt/pro/__init__.py +1 -1
  86. ccxt/pro/bitrue.py +13 -11
  87. ccxt/pro/idex.py +15 -0
  88. ccxt/pro/probit.py +58 -68
  89. ccxt/pro/woo.py +15 -15
  90. ccxt/test/tests_async.py +29 -2
  91. ccxt/test/tests_helpers.py +0 -2
  92. ccxt/test/tests_sync.py +29 -2
  93. ccxt/vertex.py +2 -0
  94. ccxt/woo.py +69 -69
  95. ccxt/xt.py +10 -10
  96. {ccxt-4.4.33.dist-info → ccxt-4.4.35.dist-info}/METADATA +9 -8
  97. {ccxt-4.4.33.dist-info → ccxt-4.4.35.dist-info}/RECORD +100 -97
  98. {ccxt-4.4.33.dist-info → ccxt-4.4.35.dist-info}/LICENSE.txt +0 -0
  99. {ccxt-4.4.33.dist-info → ccxt-4.4.35.dist-info}/WHEEL +0 -0
  100. {ccxt-4.4.33.dist-info → ccxt-4.4.35.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.33'
25
+ __version__ = '4.4.35'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -138,6 +138,7 @@ from ccxt.currencycom import currencycom # noqa: F4
138
138
  from ccxt.delta import delta # noqa: F401
139
139
  from ccxt.deribit import deribit # noqa: F401
140
140
  from ccxt.digifinex import digifinex # noqa: F401
141
+ from ccxt.ellipx import ellipx # noqa: F401
141
142
  from ccxt.exmo import exmo # noqa: F401
142
143
  from ccxt.fmfwio import fmfwio # noqa: F401
143
144
  from ccxt.gate import gate # noqa: F401
@@ -249,6 +250,7 @@ exchanges = [
249
250
  'delta',
250
251
  'deribit',
251
252
  'digifinex',
253
+ 'ellipx',
252
254
  'exmo',
253
255
  'fmfwio',
254
256
  'gate',
ccxt/abstract/bingx.py CHANGED
@@ -32,14 +32,28 @@ class ImplicitAPI:
32
32
  spot_v3_private_post_post_asset_transfer = spotV3PrivatePostPostAssetTransfer = Entry('post/asset/transfer', ['spot', 'v3', 'private'], 'POST', {'cost': 5})
33
33
  swap_v1_public_get_ticker_price = swapV1PublicGetTickerPrice = Entry('ticker/price', ['swap', 'v1', 'public'], 'GET', {'cost': 1})
34
34
  swap_v1_public_get_market_historicaltrades = swapV1PublicGetMarketHistoricalTrades = Entry('market/historicalTrades', ['swap', 'v1', 'public'], 'GET', {'cost': 1})
35
+ swap_v1_public_get_market_markpriceklines = swapV1PublicGetMarketMarkPriceKlines = Entry('market/markPriceKlines', ['swap', 'v1', 'public'], 'GET', {'cost': 1})
36
+ swap_v1_public_get_trade_multiassetsrules = swapV1PublicGetTradeMultiAssetsRules = Entry('trade/multiAssetsRules', ['swap', 'v1', 'public'], 'GET', {'cost': 1})
35
37
  swap_v1_private_get_positionside_dual = swapV1PrivateGetPositionSideDual = Entry('positionSide/dual', ['swap', 'v1', 'private'], 'GET', {'cost': 5})
36
38
  swap_v1_private_get_market_markpriceklines = swapV1PrivateGetMarketMarkPriceKlines = Entry('market/markPriceKlines', ['swap', 'v1', 'private'], 'GET', {'cost': 1})
37
39
  swap_v1_private_get_trade_batchcancelreplace = swapV1PrivateGetTradeBatchCancelReplace = Entry('trade/batchCancelReplace', ['swap', 'v1', 'private'], 'GET', {'cost': 5})
38
40
  swap_v1_private_get_trade_fullorder = swapV1PrivateGetTradeFullOrder = Entry('trade/fullOrder', ['swap', 'v1', 'private'], 'GET', {'cost': 2})
41
+ swap_v1_private_get_maintmarginratio = swapV1PrivateGetMaintMarginRatio = Entry('maintMarginRatio', ['swap', 'v1', 'private'], 'GET', {'cost': 2})
42
+ swap_v1_private_get_trade_positionhistory = swapV1PrivateGetTradePositionHistory = Entry('trade/positionHistory', ['swap', 'v1', 'private'], 'GET', {'cost': 2})
39
43
  swap_v1_private_get_positionmargin_history = swapV1PrivateGetPositionMarginHistory = Entry('positionMargin/history', ['swap', 'v1', 'private'], 'GET', {'cost': 2})
44
+ swap_v1_private_get_twap_openorders = swapV1PrivateGetTwapOpenOrders = Entry('twap/openOrders', ['swap', 'v1', 'private'], 'GET', {'cost': 5})
45
+ swap_v1_private_get_twap_historyorders = swapV1PrivateGetTwapHistoryOrders = Entry('twap/historyOrders', ['swap', 'v1', 'private'], 'GET', {'cost': 5})
46
+ swap_v1_private_get_twap_orderdetail = swapV1PrivateGetTwapOrderDetail = Entry('twap/orderDetail', ['swap', 'v1', 'private'], 'GET', {'cost': 5})
47
+ swap_v1_private_get_trade_assetmode = swapV1PrivateGetTradeAssetMode = Entry('trade/assetMode', ['swap', 'v1', 'private'], 'GET', {'cost': 5})
48
+ swap_v1_private_get_user_marginassets = swapV1PrivateGetUserMarginAssets = Entry('user/marginAssets', ['swap', 'v1', 'private'], 'GET', {'cost': 5})
40
49
  swap_v1_private_post_trade_cancelreplace = swapV1PrivatePostTradeCancelReplace = Entry('trade/cancelReplace', ['swap', 'v1', 'private'], 'POST', {'cost': 2})
41
50
  swap_v1_private_post_positionside_dual = swapV1PrivatePostPositionSideDual = Entry('positionSide/dual', ['swap', 'v1', 'private'], 'POST', {'cost': 5})
51
+ swap_v1_private_post_trade_batchcancelreplace = swapV1PrivatePostTradeBatchCancelReplace = Entry('trade/batchCancelReplace', ['swap', 'v1', 'private'], 'POST', {'cost': 5})
42
52
  swap_v1_private_post_trade_closeposition = swapV1PrivatePostTradeClosePosition = Entry('trade/closePosition', ['swap', 'v1', 'private'], 'POST', {'cost': 2})
53
+ swap_v1_private_post_trade_getvst = swapV1PrivatePostTradeGetVst = Entry('trade/getVst', ['swap', 'v1', 'private'], 'POST', {'cost': 5})
54
+ swap_v1_private_post_twap_order = swapV1PrivatePostTwapOrder = Entry('twap/order', ['swap', 'v1', 'private'], 'POST', {'cost': 5})
55
+ swap_v1_private_post_twap_cancelorder = swapV1PrivatePostTwapCancelOrder = Entry('twap/cancelOrder', ['swap', 'v1', 'private'], 'POST', {'cost': 5})
56
+ swap_v1_private_post_trade_assetmode = swapV1PrivatePostTradeAssetMode = Entry('trade/assetMode', ['swap', 'v1', 'private'], 'POST', {'cost': 5})
43
57
  swap_v2_public_get_server_time = swapV2PublicGetServerTime = Entry('server/time', ['swap', 'v2', 'public'], 'GET', {'cost': 1})
44
58
  swap_v2_public_get_quote_contracts = swapV2PublicGetQuoteContracts = Entry('quote/contracts', ['swap', 'v2', 'public'], 'GET', {'cost': 1})
45
59
  swap_v2_public_get_quote_price = swapV2PublicGetQuotePrice = Entry('quote/price', ['swap', 'v2', 'public'], 'GET', {'cost': 1})
@@ -62,6 +76,7 @@ class ImplicitAPI:
62
76
  swap_v2_private_get_trade_forceorders = swapV2PrivateGetTradeForceOrders = Entry('trade/forceOrders', ['swap', 'v2', 'private'], 'GET', {'cost': 1})
63
77
  swap_v2_private_get_trade_allorders = swapV2PrivateGetTradeAllOrders = Entry('trade/allOrders', ['swap', 'v2', 'private'], 'GET', {'cost': 2})
64
78
  swap_v2_private_get_trade_allfillorders = swapV2PrivateGetTradeAllFillOrders = Entry('trade/allFillOrders', ['swap', 'v2', 'private'], 'GET', {'cost': 2})
79
+ swap_v2_private_get_trade_fillhistory = swapV2PrivateGetTradeFillHistory = Entry('trade/fillHistory', ['swap', 'v2', 'private'], 'GET', {'cost': 2})
65
80
  swap_v2_private_get_user_income_export = swapV2PrivateGetUserIncomeExport = Entry('user/income/export', ['swap', 'v2', 'private'], 'GET', {'cost': 2})
66
81
  swap_v2_private_get_user_commissionrate = swapV2PrivateGetUserCommissionRate = Entry('user/commissionRate', ['swap', 'v2', 'private'], 'GET', {'cost': 2})
67
82
  swap_v2_private_get_quote_bookticker = swapV2PrivateGetQuoteBookTicker = Entry('quote/bookTicker', ['swap', 'v2', 'private'], 'GET', {'cost': 1})
@@ -95,6 +110,7 @@ class ImplicitAPI:
95
110
  cswap_v1_private_get_user_balance = cswapV1PrivateGetUserBalance = Entry('user/balance', ['cswap', 'v1', 'private'], 'GET', {'cost': 2})
96
111
  cswap_v1_private_post_trade_order = cswapV1PrivatePostTradeOrder = Entry('trade/order', ['cswap', 'v1', 'private'], 'POST', {'cost': 2})
97
112
  cswap_v1_private_post_trade_leverage = cswapV1PrivatePostTradeLeverage = Entry('trade/leverage', ['cswap', 'v1', 'private'], 'POST', {'cost': 2})
113
+ cswap_v1_private_post_trade_allopenorders = cswapV1PrivatePostTradeAllOpenOrders = Entry('trade/allOpenOrders', ['cswap', 'v1', 'private'], 'POST', {'cost': 2})
98
114
  cswap_v1_private_post_trade_closeallpositions = cswapV1PrivatePostTradeCloseAllPositions = Entry('trade/closeAllPositions', ['cswap', 'v1', 'private'], 'POST', {'cost': 2})
99
115
  cswap_v1_private_post_trade_margintype = cswapV1PrivatePostTradeMarginType = Entry('trade/marginType', ['cswap', 'v1', 'private'], 'POST', {'cost': 2})
100
116
  cswap_v1_private_post_trade_positionmargin = cswapV1PrivatePostTradePositionMargin = Entry('trade/positionMargin', ['cswap', 'v1', 'private'], 'POST', {'cost': 2})
@@ -116,6 +132,7 @@ class ImplicitAPI:
116
132
  wallets_v1_private_post_capital_deposit_createsubaddress = walletsV1PrivatePostCapitalDepositCreateSubAddress = Entry('capital/deposit/createSubAddress', ['wallets', 'v1', 'private'], 'POST', {'cost': 2})
117
133
  subaccount_v1_private_get_list = subAccountV1PrivateGetList = Entry('list', ['subAccount', 'v1', 'private'], 'GET', {'cost': 10})
118
134
  subaccount_v1_private_get_assets = subAccountV1PrivateGetAssets = Entry('assets', ['subAccount', 'v1', 'private'], 'GET', {'cost': 2})
135
+ subaccount_v1_private_get_allaccountbalance = subAccountV1PrivateGetAllAccountBalance = Entry('allAccountBalance', ['subAccount', 'v1', 'private'], 'GET', {'cost': 2})
119
136
  subaccount_v1_private_post_create = subAccountV1PrivatePostCreate = Entry('create', ['subAccount', 'v1', 'private'], 'POST', {'cost': 10})
120
137
  subaccount_v1_private_post_apikey_create = subAccountV1PrivatePostApiKeyCreate = Entry('apiKey/create', ['subAccount', 'v1', 'private'], 'POST', {'cost': 2})
121
138
  subaccount_v1_private_post_apikey_edit = subAccountV1PrivatePostApiKeyEdit = Entry('apiKey/edit', ['subAccount', 'v1', 'private'], 'POST', {'cost': 2})
ccxt/abstract/bitbank.py CHANGED
@@ -13,8 +13,11 @@ class ImplicitAPI:
13
13
  private_get_user_assets = privateGetUserAssets = Entry('user/assets', 'private', 'GET', {})
14
14
  private_get_user_spot_order = privateGetUserSpotOrder = Entry('user/spot/order', 'private', 'GET', {})
15
15
  private_get_user_spot_active_orders = privateGetUserSpotActiveOrders = Entry('user/spot/active_orders', 'private', 'GET', {})
16
+ private_get_user_margin_positions = privateGetUserMarginPositions = Entry('user/margin/positions', 'private', 'GET', {})
16
17
  private_get_user_spot_trade_history = privateGetUserSpotTradeHistory = Entry('user/spot/trade_history', 'private', 'GET', {})
17
18
  private_get_user_deposit_history = privateGetUserDepositHistory = Entry('user/deposit_history', 'private', 'GET', {})
19
+ private_get_user_unconfirmed_deposits = privateGetUserUnconfirmedDeposits = Entry('user/unconfirmed_deposits', 'private', 'GET', {})
20
+ private_get_user_deposit_originators = privateGetUserDepositOriginators = Entry('user/deposit_originators', 'private', 'GET', {})
18
21
  private_get_user_withdrawal_account = privateGetUserWithdrawalAccount = Entry('user/withdrawal_account', 'private', 'GET', {})
19
22
  private_get_user_withdrawal_history = privateGetUserWithdrawalHistory = Entry('user/withdrawal_history', 'private', 'GET', {})
20
23
  private_get_spot_status = privateGetSpotStatus = Entry('spot/status', 'private', 'GET', {})
@@ -23,5 +26,7 @@ class ImplicitAPI:
23
26
  private_post_user_spot_cancel_order = privatePostUserSpotCancelOrder = Entry('user/spot/cancel_order', 'private', 'POST', {})
24
27
  private_post_user_spot_cancel_orders = privatePostUserSpotCancelOrders = Entry('user/spot/cancel_orders', 'private', 'POST', {})
25
28
  private_post_user_spot_orders_info = privatePostUserSpotOrdersInfo = Entry('user/spot/orders_info', 'private', 'POST', {})
29
+ private_post_user_confirm_deposits = privatePostUserConfirmDeposits = Entry('user/confirm_deposits', 'private', 'POST', {})
30
+ private_post_user_confirm_deposits_all = privatePostUserConfirmDepositsAll = Entry('user/confirm_deposits_all', 'private', 'POST', {})
26
31
  private_post_user_request_withdrawal = privatePostUserRequestWithdrawal = Entry('user/request_withdrawal', 'private', 'POST', {})
27
32
  markets_get_spot_pairs = marketsGetSpotPairs = Entry('spot/pairs', 'markets', 'GET', {})
@@ -63,6 +63,7 @@ class ImplicitAPI:
63
63
  public_get_pulse_hist = publicGetPulseHist = Entry('pulse/hist', 'public', 'GET', {'cost': 2.7})
64
64
  public_get_pulse_profile_nickname = publicGetPulseProfileNickname = Entry('pulse/profile/{nickname}', 'public', 'GET', {'cost': 2.7})
65
65
  public_get_funding_stats_symbol_hist = publicGetFundingStatsSymbolHist = Entry('funding/stats/{symbol}/hist', 'public', 'GET', {'cost': 10})
66
+ public_get_ext_vasps = publicGetExtVasps = Entry('ext/vasps', 'public', 'GET', {'cost': 1})
66
67
  public_post_calc_trade_avg = publicPostCalcTradeAvg = Entry('calc/trade/avg', 'public', 'POST', {'cost': 2.7})
67
68
  public_post_calc_fx = publicPostCalcFx = Entry('calc/fx', 'public', 'POST', {'cost': 2.7})
68
69
  private_post_auth_r_wallets = privatePostAuthRWallets = Entry('auth/r/wallets', 'private', 'POST', {'cost': 2.7})
ccxt/abstract/bitpanda.py CHANGED
@@ -9,26 +9,14 @@ class ImplicitAPI:
9
9
  public_get_order_book_instrument_code = publicGetOrderBookInstrumentCode = Entry('order-book/{instrument_code}', 'public', 'GET', {})
10
10
  public_get_market_ticker = publicGetMarketTicker = Entry('market-ticker', 'public', 'GET', {})
11
11
  public_get_market_ticker_instrument_code = publicGetMarketTickerInstrumentCode = Entry('market-ticker/{instrument_code}', 'public', 'GET', {})
12
- public_get_price_ticks_instrument_code = publicGetPriceTicksInstrumentCode = Entry('price-ticks/{instrument_code}', 'public', 'GET', {})
13
12
  public_get_time = publicGetTime = Entry('time', 'public', 'GET', {})
14
13
  private_get_account_balances = privateGetAccountBalances = Entry('account/balances', 'private', 'GET', {})
15
- private_get_account_deposit_crypto_currency_code = privateGetAccountDepositCryptoCurrencyCode = Entry('account/deposit/crypto/{currency_code}', 'private', 'GET', {})
16
- private_get_account_deposit_fiat_eur = privateGetAccountDepositFiatEUR = Entry('account/deposit/fiat/EUR', 'private', 'GET', {})
17
- private_get_account_deposits = privateGetAccountDeposits = Entry('account/deposits', 'private', 'GET', {})
18
- private_get_account_deposits_bitpanda = privateGetAccountDepositsBitpanda = Entry('account/deposits/bitpanda', 'private', 'GET', {})
19
- private_get_account_withdrawals = privateGetAccountWithdrawals = Entry('account/withdrawals', 'private', 'GET', {})
20
- private_get_account_withdrawals_bitpanda = privateGetAccountWithdrawalsBitpanda = Entry('account/withdrawals/bitpanda', 'private', 'GET', {})
21
14
  private_get_account_fees = privateGetAccountFees = Entry('account/fees', 'private', 'GET', {})
22
15
  private_get_account_orders = privateGetAccountOrders = Entry('account/orders', 'private', 'GET', {})
23
16
  private_get_account_orders_order_id = privateGetAccountOrdersOrderId = Entry('account/orders/{order_id}', 'private', 'GET', {})
24
17
  private_get_account_orders_order_id_trades = privateGetAccountOrdersOrderIdTrades = Entry('account/orders/{order_id}/trades', 'private', 'GET', {})
25
18
  private_get_account_trades = privateGetAccountTrades = Entry('account/trades', 'private', 'GET', {})
26
19
  private_get_account_trades_trade_id = privateGetAccountTradesTradeId = Entry('account/trades/{trade_id}', 'private', 'GET', {})
27
- private_get_account_trading_volume = privateGetAccountTradingVolume = Entry('account/trading-volume', 'private', 'GET', {})
28
- private_post_account_deposit_crypto = privatePostAccountDepositCrypto = Entry('account/deposit/crypto', 'private', 'POST', {})
29
- private_post_account_withdraw_crypto = privatePostAccountWithdrawCrypto = Entry('account/withdraw/crypto', 'private', 'POST', {})
30
- private_post_account_withdraw_fiat = privatePostAccountWithdrawFiat = Entry('account/withdraw/fiat', 'private', 'POST', {})
31
- private_post_account_fees = privatePostAccountFees = Entry('account/fees', 'private', 'POST', {})
32
20
  private_post_account_orders = privatePostAccountOrders = Entry('account/orders', 'private', 'POST', {})
33
21
  private_delete_account_orders = privateDeleteAccountOrders = Entry('account/orders', 'private', 'DELETE', {})
34
22
  private_delete_account_orders_order_id = privateDeleteAccountOrdersOrderId = Entry('account/orders/{order_id}', 'private', 'DELETE', {})
ccxt/abstract/bitrue.py CHANGED
@@ -67,6 +67,6 @@ class ImplicitAPI:
67
67
  dapi_v2_private_post_order = dapiV2PrivatePostOrder = Entry('order', ['dapi', 'v2', 'private'], 'POST', {'cost': 1})
68
68
  dapi_v2_private_post_allopenorders = dapiV2PrivatePostAllOpenOrders = Entry('allOpenOrders', ['dapi', 'v2', 'private'], 'POST', {'cost': 1})
69
69
  dapi_v2_private_post_futures_transfer = dapiV2PrivatePostFuturesTransfer = Entry('futures_transfer', ['dapi', 'v2', 'private'], 'POST', {'cost': 1})
70
- open_private_post_poseidon_api_v1_listenkey = openPrivatePostPoseidonApiV1ListenKey = Entry('poseidon/api/v1/listenKey', ['open', 'private'], 'POST', {'cost': 1})
71
- open_private_put_poseidon_api_v1_listenkey_listenkey = openPrivatePutPoseidonApiV1ListenKeyListenKey = Entry('poseidon/api/v1/listenKey/{listenKey}', ['open', 'private'], 'PUT', {'cost': 1})
72
- open_private_delete_poseidon_api_v1_listenkey_listenkey = openPrivateDeletePoseidonApiV1ListenKeyListenKey = Entry('poseidon/api/v1/listenKey/{listenKey}', ['open', 'private'], 'DELETE', {'cost': 1})
70
+ open_v1_private_post_poseidon_api_v1_listenkey = openV1PrivatePostPoseidonApiV1ListenKey = Entry('poseidon/api/v1/listenKey', ['open', 'v1', 'private'], 'POST', {'cost': 1})
71
+ open_v1_private_put_poseidon_api_v1_listenkey_listenkey = openV1PrivatePutPoseidonApiV1ListenKeyListenKey = Entry('poseidon/api/v1/listenKey/{listenKey}', ['open', 'v1', 'private'], 'PUT', {'cost': 1})
72
+ open_v1_private_delete_poseidon_api_v1_listenkey_listenkey = openV1PrivateDeletePoseidonApiV1ListenKeyListenKey = Entry('poseidon/api/v1/listenKey/{listenKey}', ['open', 'v1', 'private'], 'DELETE', {'cost': 1})
@@ -0,0 +1,25 @@
1
+ from ccxt.base.types import Entry
2
+
3
+
4
+ class ImplicitAPI:
5
+ _rest_get_market = _restGetMarket = Entry('Market', '_rest', 'GET', {'cost': 1})
6
+ _rest_get_market_currencypair = _restGetMarketCurrencyPair = Entry('Market/{currencyPair}', '_rest', 'GET', {'cost': 1})
7
+ _rest_get_crypto_token_info = _restGetCryptoTokenInfo = Entry('Crypto/Token/Info', '_rest', 'GET', {'cost': 1})
8
+ public_get_market_currencypair_getdepth = publicGetMarketCurrencyPairGetDepth = Entry('Market/{currencyPair}:getDepth', 'public', 'GET', {'cost': 1})
9
+ public_get_market_currencypair_ticker = publicGetMarketCurrencyPairTicker = Entry('Market/{currencyPair}:ticker', 'public', 'GET', {'cost': 1})
10
+ public_get_market_currencypair_gettrades = publicGetMarketCurrencyPairGetTrades = Entry('Market/{currencyPair}:getTrades', 'public', 'GET', {'cost': 1})
11
+ public_get_market_currencypair_getgraph = publicGetMarketCurrencyPairGetGraph = Entry('Market/{currencyPair}:getGraph', 'public', 'GET', {'cost': 1})
12
+ public_get_cmc_summary = publicGetCMCSummary = Entry('CMC:summary', 'public', 'GET', {'cost': 1})
13
+ public_get_cmc_currencypair_ticker = publicGetCMCCurrencyPairTicker = Entry('CMC/{currencyPair}:ticker', 'public', 'GET', {'cost': 1})
14
+ private_get_user_wallet = privateGetUserWallet = Entry('User/Wallet', 'private', 'GET', {'cost': 1})
15
+ private_get_market_currencypair_order = privateGetMarketCurrencyPairOrder = Entry('Market/{currencyPair}/Order', 'private', 'GET', {'cost': 1})
16
+ private_get_market_order_orderuuid = privateGetMarketOrderOrderUuid = Entry('Market/Order/{orderUuid}', 'private', 'GET', {'cost': 1})
17
+ private_get_market_currencypair_trade = privateGetMarketCurrencyPairTrade = Entry('Market/{currencyPair}/Trade', 'private', 'GET', {'cost': 1})
18
+ private_get_market_tradefee_query = privateGetMarketTradeFeeQuery = Entry('Market/TradeFee:query', 'private', 'GET', {'cost': 1})
19
+ private_get_unit_currency = privateGetUnitCurrency = Entry('Unit/{currency}', 'private', 'GET', {'cost': 1})
20
+ private_get_crypto_token_currency = privateGetCryptoTokenCurrency = Entry('Crypto/Token/{currency}', 'private', 'GET', {'cost': 1})
21
+ private_get_crypto_token_currency_chains = privateGetCryptoTokenCurrencyChains = Entry('Crypto/Token/{currency}:chains', 'private', 'GET', {'cost': 1})
22
+ private_post_market_currencypair_order = privatePostMarketCurrencyPairOrder = Entry('Market/{currencyPair}/Order', 'private', 'POST', {'cost': 1})
23
+ private_post_crypto_address_fetch = privatePostCryptoAddressFetch = Entry('Crypto/Address:fetch', 'private', 'POST', {'cost': 1})
24
+ private_post_crypto_disbursement_withdraw = privatePostCryptoDisbursementWithdraw = Entry('Crypto/Disbursement:withdraw', 'private', 'POST', {'cost': 1})
25
+ private_delete_market_order_orderuuid = privateDeleteMarketOrderOrderUuid = Entry('Market/Order/{orderUuid}', 'private', 'DELETE', {'cost': 1})
ccxt/abstract/okx.py CHANGED
@@ -123,6 +123,7 @@ class ImplicitAPI:
123
123
  private_get_asset_convert_currency_pair = privateGetAssetConvertCurrencyPair = Entry('asset/convert/currency-pair', 'private', 'GET', {'cost': 1.6666666666666667})
124
124
  private_get_asset_convert_history = privateGetAssetConvertHistory = Entry('asset/convert/history', 'private', 'GET', {'cost': 1.6666666666666667})
125
125
  private_get_asset_monthly_statement = privateGetAssetMonthlyStatement = Entry('asset/monthly-statement', 'private', 'GET', {'cost': 2})
126
+ private_get_account_instruments = privateGetAccountInstruments = Entry('account/instruments', 'private', 'GET', {'cost': 1})
126
127
  private_get_account_balance = privateGetAccountBalance = Entry('account/balance', 'private', 'GET', {'cost': 2})
127
128
  private_get_account_positions = privateGetAccountPositions = Entry('account/positions', 'private', 'GET', {'cost': 2})
128
129
  private_get_account_positions_history = privateGetAccountPositionsHistory = Entry('account/positions-history', 'private', 'GET', {'cost': 100})
@@ -9,26 +9,14 @@ class ImplicitAPI:
9
9
  public_get_order_book_instrument_code = publicGetOrderBookInstrumentCode = Entry('order-book/{instrument_code}', 'public', 'GET', {})
10
10
  public_get_market_ticker = publicGetMarketTicker = Entry('market-ticker', 'public', 'GET', {})
11
11
  public_get_market_ticker_instrument_code = publicGetMarketTickerInstrumentCode = Entry('market-ticker/{instrument_code}', 'public', 'GET', {})
12
- public_get_price_ticks_instrument_code = publicGetPriceTicksInstrumentCode = Entry('price-ticks/{instrument_code}', 'public', 'GET', {})
13
12
  public_get_time = publicGetTime = Entry('time', 'public', 'GET', {})
14
13
  private_get_account_balances = privateGetAccountBalances = Entry('account/balances', 'private', 'GET', {})
15
- private_get_account_deposit_crypto_currency_code = privateGetAccountDepositCryptoCurrencyCode = Entry('account/deposit/crypto/{currency_code}', 'private', 'GET', {})
16
- private_get_account_deposit_fiat_eur = privateGetAccountDepositFiatEUR = Entry('account/deposit/fiat/EUR', 'private', 'GET', {})
17
- private_get_account_deposits = privateGetAccountDeposits = Entry('account/deposits', 'private', 'GET', {})
18
- private_get_account_deposits_bitpanda = privateGetAccountDepositsBitpanda = Entry('account/deposits/bitpanda', 'private', 'GET', {})
19
- private_get_account_withdrawals = privateGetAccountWithdrawals = Entry('account/withdrawals', 'private', 'GET', {})
20
- private_get_account_withdrawals_bitpanda = privateGetAccountWithdrawalsBitpanda = Entry('account/withdrawals/bitpanda', 'private', 'GET', {})
21
14
  private_get_account_fees = privateGetAccountFees = Entry('account/fees', 'private', 'GET', {})
22
15
  private_get_account_orders = privateGetAccountOrders = Entry('account/orders', 'private', 'GET', {})
23
16
  private_get_account_orders_order_id = privateGetAccountOrdersOrderId = Entry('account/orders/{order_id}', 'private', 'GET', {})
24
17
  private_get_account_orders_order_id_trades = privateGetAccountOrdersOrderIdTrades = Entry('account/orders/{order_id}/trades', 'private', 'GET', {})
25
18
  private_get_account_trades = privateGetAccountTrades = Entry('account/trades', 'private', 'GET', {})
26
19
  private_get_account_trades_trade_id = privateGetAccountTradesTradeId = Entry('account/trades/{trade_id}', 'private', 'GET', {})
27
- private_get_account_trading_volume = privateGetAccountTradingVolume = Entry('account/trading-volume', 'private', 'GET', {})
28
- private_post_account_deposit_crypto = privatePostAccountDepositCrypto = Entry('account/deposit/crypto', 'private', 'POST', {})
29
- private_post_account_withdraw_crypto = privatePostAccountWithdrawCrypto = Entry('account/withdraw/crypto', 'private', 'POST', {})
30
- private_post_account_withdraw_fiat = privatePostAccountWithdrawFiat = Entry('account/withdraw/fiat', 'private', 'POST', {})
31
- private_post_account_fees = privatePostAccountFees = Entry('account/fees', 'private', 'POST', {})
32
20
  private_post_account_orders = privatePostAccountOrders = Entry('account/orders', 'private', 'POST', {})
33
21
  private_delete_account_orders = privateDeleteAccountOrders = Entry('account/orders', 'private', 'DELETE', {})
34
22
  private_delete_account_orders_order_id = privateDeleteAccountOrdersOrderId = Entry('account/orders/{order_id}', 'private', 'DELETE', {})
ccxt/abstract/xt.py CHANGED
@@ -3,16 +3,16 @@ from ccxt.base.types import Entry
3
3
 
4
4
  class ImplicitAPI:
5
5
  public_spot_get_currencies = publicSpotGetCurrencies = Entry('currencies', ['public', 'spot'], 'GET', {'cost': 1})
6
- public_spot_get_depth = publicSpotGetDepth = Entry('depth', ['public', 'spot'], 'GET', {'cost': 0.05})
7
- public_spot_get_kline = publicSpotGetKline = Entry('kline', ['public', 'spot'], 'GET', {'cost': 0.1})
6
+ public_spot_get_depth = publicSpotGetDepth = Entry('depth', ['public', 'spot'], 'GET', {'cost': 10})
7
+ public_spot_get_kline = publicSpotGetKline = Entry('kline', ['public', 'spot'], 'GET', {'cost': 1})
8
8
  public_spot_get_symbol = publicSpotGetSymbol = Entry('symbol', ['public', 'spot'], 'GET', {'cost': 1})
9
9
  public_spot_get_ticker = publicSpotGetTicker = Entry('ticker', ['public', 'spot'], 'GET', {'cost': 1})
10
10
  public_spot_get_ticker_book = publicSpotGetTickerBook = Entry('ticker/book', ['public', 'spot'], 'GET', {'cost': 1})
11
11
  public_spot_get_ticker_price = publicSpotGetTickerPrice = Entry('ticker/price', ['public', 'spot'], 'GET', {'cost': 1})
12
12
  public_spot_get_ticker_24h = publicSpotGetTicker24h = Entry('ticker/24h', ['public', 'spot'], 'GET', {'cost': 1})
13
13
  public_spot_get_time = publicSpotGetTime = Entry('time', ['public', 'spot'], 'GET', {'cost': 1})
14
- public_spot_get_trade_history = publicSpotGetTradeHistory = Entry('trade/history', ['public', 'spot'], 'GET', {'cost': 0.1})
15
- public_spot_get_trade_recent = publicSpotGetTradeRecent = Entry('trade/recent', ['public', 'spot'], 'GET', {'cost': 0.1})
14
+ public_spot_get_trade_history = publicSpotGetTradeHistory = Entry('trade/history', ['public', 'spot'], 'GET', {'cost': 1})
15
+ public_spot_get_trade_recent = publicSpotGetTradeRecent = Entry('trade/recent', ['public', 'spot'], 'GET', {'cost': 1})
16
16
  public_spot_get_wallet_support_currency = publicSpotGetWalletSupportCurrency = Entry('wallet/support/currency', ['public', 'spot'], 'GET', {'cost': 1})
17
17
  public_linear_get_future_market_v1_public_contract_risk_balance = publicLinearGetFutureMarketV1PublicContractRiskBalance = Entry('future/market/v1/public/contract/risk-balance', ['public', 'linear'], 'GET', {'cost': 1})
18
18
  public_linear_get_future_market_v1_public_contract_open_interest = publicLinearGetFutureMarketV1PublicContractOpenInterest = Entry('future/market/v1/public/contract/open-interest', ['public', 'linear'], 'GET', {'cost': 1})
@@ -66,7 +66,7 @@ class ImplicitAPI:
66
66
  private_spot_get_trade = privateSpotGetTrade = Entry('trade', ['private', 'spot'], 'GET', {'cost': 1})
67
67
  private_spot_get_withdraw_history = privateSpotGetWithdrawHistory = Entry('withdraw/history', ['private', 'spot'], 'GET', {'cost': 1})
68
68
  private_spot_post_order = privateSpotPostOrder = Entry('order', ['private', 'spot'], 'POST', {'cost': 0.2})
69
- private_spot_post_withdraw = privateSpotPostWithdraw = Entry('withdraw', ['private', 'spot'], 'POST', {'cost': 1})
69
+ private_spot_post_withdraw = privateSpotPostWithdraw = Entry('withdraw', ['private', 'spot'], 'POST', {'cost': 10})
70
70
  private_spot_post_balance_transfer = privateSpotPostBalanceTransfer = Entry('balance/transfer', ['private', 'spot'], 'POST', {'cost': 1})
71
71
  private_spot_post_balance_account_transfer = privateSpotPostBalanceAccountTransfer = Entry('balance/account/transfer', ['private', 'spot'], 'POST', {'cost': 1})
72
72
  private_spot_post_ws_token = privateSpotPostWsToken = Entry('ws-token', ['private', 'spot'], 'POST', {'cost': 1})
ccxt/alpaca.py CHANGED
@@ -61,6 +61,8 @@ class alpaca(Exchange, ImplicitAPI):
61
61
  'closeAllPositions': False,
62
62
  'closePosition': False,
63
63
  'createOrder': True,
64
+ 'createStopOrder': True,
65
+ 'createTriggerOrder': True,
64
66
  'editOrder': True,
65
67
  'fetchBalance': False,
66
68
  'fetchBidsAsks': False,
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.33'
7
+ __version__ = '4.4.35'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -118,6 +118,7 @@ from ccxt.async_support.currencycom import currencycom
118
118
  from ccxt.async_support.delta import delta # noqa: F401
119
119
  from ccxt.async_support.deribit import deribit # noqa: F401
120
120
  from ccxt.async_support.digifinex import digifinex # noqa: F401
121
+ from ccxt.async_support.ellipx import ellipx # noqa: F401
121
122
  from ccxt.async_support.exmo import exmo # noqa: F401
122
123
  from ccxt.async_support.fmfwio import fmfwio # noqa: F401
123
124
  from ccxt.async_support.gate import gate # noqa: F401
@@ -229,6 +230,7 @@ exchanges = [
229
230
  'delta',
230
231
  'deribit',
231
232
  'digifinex',
233
+ 'ellipx',
232
234
  'exmo',
233
235
  'fmfwio',
234
236
  'gate',
@@ -61,6 +61,8 @@ class alpaca(Exchange, ImplicitAPI):
61
61
  'closeAllPositions': False,
62
62
  'closePosition': False,
63
63
  'createOrder': True,
64
+ 'createStopOrder': True,
65
+ 'createTriggerOrder': True,
64
66
  'editOrder': True,
65
67
  'fetchBalance': False,
66
68
  'fetchBidsAsks': False,
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.4.33'
5
+ __version__ = '4.4.35'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -1584,13 +1584,13 @@ class binance(Exchange, ImplicitAPI):
1584
1584
  'spot': {
1585
1585
  'sandbox': True,
1586
1586
  'createOrder': {
1587
+ 'marginMode': True,
1587
1588
  'triggerPrice': True,
1588
1589
  'triggerPriceType': None,
1589
1590
  'triggerDirection': False,
1590
1591
  'stopLossPrice': True,
1591
1592
  'takeProfitPrice': True,
1592
1593
  'attachedStopLossTakeProfit': None, # not supported
1593
- 'marginMode': True,
1594
1594
  'timeInForce': {
1595
1595
  'GTC': True,
1596
1596
  'IOC': True,
@@ -1608,6 +1608,7 @@ class binance(Exchange, ImplicitAPI):
1608
1608
  },
1609
1609
  'createOrders': None,
1610
1610
  'fetchMyTrades': {
1611
+ 'marginMode': False,
1611
1612
  'limit': 1000,
1612
1613
  'daysBack': None,
1613
1614
  'untilDays': 1, # days between start-end
@@ -1618,25 +1619,25 @@ class binance(Exchange, ImplicitAPI):
1618
1619
  'trailing': False,
1619
1620
  },
1620
1621
  'fetchOpenOrders': {
1621
- 'limit': None,
1622
1622
  'marginMode': True,
1623
+ 'limit': None,
1623
1624
  'trigger': False,
1624
1625
  'trailing': False,
1625
1626
  },
1626
1627
  'fetchOrders': {
1628
+ 'marginMode': True,
1627
1629
  'limit': 1000,
1628
1630
  'daysBack': None,
1629
1631
  'untilDays': 10000,
1630
- 'marginMode': True,
1631
1632
  'trigger': False,
1632
1633
  'trailing': False,
1633
1634
  },
1634
1635
  'fetchClosedOrders': {
1636
+ 'marginMode': True,
1635
1637
  'limit': 1000,
1636
1638
  'daysBackClosed': None,
1637
1639
  'daysBackCanceled': None,
1638
1640
  'untilDays': 10000,
1639
- 'marginMode': True,
1640
1641
  'trigger': False,
1641
1642
  'trailing': False,
1642
1643
  },
@@ -1647,6 +1648,7 @@ class binance(Exchange, ImplicitAPI):
1647
1648
  'default': {
1648
1649
  'sandbox': True,
1649
1650
  'createOrder': {
1651
+ 'marginMode': False,
1650
1652
  'triggerPrice': True,
1651
1653
  'triggerPriceType': {
1652
1654
  'mark': True,
@@ -1656,7 +1658,6 @@ class binance(Exchange, ImplicitAPI):
1656
1658
  'stopLossPrice': True,
1657
1659
  'takeProfitPrice': True,
1658
1660
  'attachedStopLossTakeProfit': None, # not supported
1659
- 'marginMode': False,
1660
1661
  'timeInForce': {
1661
1662
  'GTC': True,
1662
1663
  'IOC': True,
@@ -1677,6 +1678,7 @@ class binance(Exchange, ImplicitAPI):
1677
1678
  'max': 5,
1678
1679
  },
1679
1680
  'fetchMyTrades': {
1681
+ 'marginMode': False,
1680
1682
  'daysBack': None,
1681
1683
  'limit': 1000,
1682
1684
  'untilDays': 7,
@@ -1687,25 +1689,25 @@ class binance(Exchange, ImplicitAPI):
1687
1689
  'trailing': False,
1688
1690
  },
1689
1691
  'fetchOpenOrders': {
1690
- 'limit': 500,
1691
1692
  'marginMode': True,
1693
+ 'limit': 500,
1692
1694
  'trigger': False,
1693
1695
  'trailing': False,
1694
1696
  },
1695
1697
  'fetchOrders': {
1698
+ 'marginMode': True,
1696
1699
  'limit': 1000,
1697
1700
  'daysBack': 90,
1698
1701
  'untilDays': 7,
1699
- 'marginMode': True,
1700
1702
  'trigger': False,
1701
1703
  'trailing': False,
1702
1704
  },
1703
1705
  'fetchClosedOrders': {
1706
+ 'marginMode': True,
1704
1707
  'limit': 1000,
1705
1708
  'daysBackClosed': 90,
1706
1709
  'daysBackCanceled': 3,
1707
1710
  'untilDays': 7,
1708
- 'marginMode': True,
1709
1711
  'trigger': False,
1710
1712
  'trailing': False,
1711
1713
  },
@@ -2132,7 +2134,8 @@ class binance(Exchange, ImplicitAPI):
2132
2134
  '-4140': BadRequest, # Invalid symbol status for opening position
2133
2135
  '-4141': OperationRejected, # Symbol is closed
2134
2136
  '-4144': BadSymbol, # Invalid pair
2135
- '-4164': InvalidOrder, # {"code":-4164,"msg":"Order's notional must be no smaller than 20(unless you choose reduce only)."}
2137
+ '-4164': InvalidOrder, # {"code":-4164,"msg":"Order's notional must be no smaller than 20(unless you choose reduce only)."},
2138
+ '-4136': InvalidOrder, # {"code":-4136,"msg":"Target strategy invalid for orderType TRAILING_STOP_MARKET,closePosition True"}
2136
2139
  '-4165': BadRequest, # Invalid time interval
2137
2140
  '-4167': BadRequest, # Unable to adjust to Multi-Assets mode with symbols of USDⓈ-M Futures under isolated-margin mode.
2138
2141
  '-4168': BadRequest, # Unable to adjust to isolated-margin mode under the Multi-Assets mode.
@@ -6111,6 +6114,7 @@ class binance(Exchange, ImplicitAPI):
6111
6114
  typeRequest = 'strategyType' if isPortfolioMarginConditional else 'type'
6112
6115
  request[typeRequest] = uppercaseType
6113
6116
  # additional required fields depending on the order type
6117
+ closePosition = self.safe_bool(params, 'closePosition', False)
6114
6118
  timeInForceIsRequired = False
6115
6119
  priceIsRequired = False
6116
6120
  stopPriceIsRequired = False
@@ -6176,12 +6180,12 @@ class binance(Exchange, ImplicitAPI):
6176
6180
  stopPriceIsRequired = True
6177
6181
  priceIsRequired = True
6178
6182
  elif (uppercaseType == 'STOP_MARKET') or (uppercaseType == 'TAKE_PROFIT_MARKET'):
6179
- closePosition = self.safe_bool(params, 'closePosition')
6180
- if closePosition is None:
6183
+ if not closePosition:
6181
6184
  quantityIsRequired = True
6182
6185
  stopPriceIsRequired = True
6183
6186
  elif uppercaseType == 'TRAILING_STOP_MARKET':
6184
- quantityIsRequired = True
6187
+ if not closePosition:
6188
+ quantityIsRequired = True
6185
6189
  if trailingPercent is None:
6186
6190
  raise InvalidOrder(self.id + ' createOrder() requires a trailingPercent param for a ' + type + ' order')
6187
6191
  if quantityIsRequired:
@@ -11130,11 +11134,11 @@ class binance(Exchange, ImplicitAPI):
11130
11134
  def get_exceptions_by_url(self, url: str, exactOrBroad: str):
11131
11135
  marketType = None
11132
11136
  hostname = self.hostname if (self.hostname is not None) else 'binance.com'
11133
- if url.startswith('https://api.' + hostname + '/'):
11137
+ if url.startswith('https://api.' + hostname + '/') or url.startswith('https://testnet.binance.vision'):
11134
11138
  marketType = 'spot'
11135
- elif url.startswith('https://dapi.' + hostname + '/'):
11139
+ elif url.startswith('https://dapi.' + hostname + '/') or url.startswith('https://testnet.binancefuture.com/dapi'):
11136
11140
  marketType = 'inverse'
11137
- elif url.startswith('https://fapi.' + hostname + '/'):
11141
+ elif url.startswith('https://fapi.' + hostname + '/') or url.startswith('https://testnet.binancefuture.com/fapi'):
11138
11142
  marketType = 'linear'
11139
11143
  elif url.startswith('https://eapi.' + hostname + '/'):
11140
11144
  marketType = 'option'