ccxt 4.4.40__py2.py3-none-any.whl → 4.4.42__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. ccxt/__init__.py +1 -1
  2. ccxt/abstract/binance.py +3 -0
  3. ccxt/abstract/binancecoinm.py +3 -0
  4. ccxt/abstract/binanceus.py +3 -0
  5. ccxt/abstract/binanceusdm.py +3 -0
  6. ccxt/abstract/bitmart.py +2 -0
  7. ccxt/abstract/okx.py +5 -0
  8. ccxt/ace.py +1 -1
  9. ccxt/alpaca.py +0 -1
  10. ccxt/ascendex.py +0 -1
  11. ccxt/async_support/__init__.py +1 -1
  12. ccxt/async_support/ace.py +1 -1
  13. ccxt/async_support/alpaca.py +0 -1
  14. ccxt/async_support/ascendex.py +0 -1
  15. ccxt/async_support/base/exchange.py +24 -17
  16. ccxt/async_support/bigone.py +0 -1
  17. ccxt/async_support/binance.py +27 -24
  18. ccxt/async_support/bingx.py +5 -1
  19. ccxt/async_support/bitfinex.py +123 -1
  20. ccxt/async_support/bitget.py +1 -0
  21. ccxt/async_support/bitmart.py +243 -2
  22. ccxt/async_support/blofin.py +16 -7
  23. ccxt/async_support/bybit.py +8 -8
  24. ccxt/async_support/cex.py +1 -1
  25. ccxt/async_support/coinbase.py +8 -9
  26. ccxt/async_support/coinbaseexchange.py +5 -6
  27. ccxt/async_support/coinbaseinternational.py +7 -8
  28. ccxt/async_support/coincatch.py +0 -1
  29. ccxt/async_support/coincheck.py +0 -1
  30. ccxt/async_support/coinex.py +91 -6
  31. ccxt/async_support/coinlist.py +3 -4
  32. ccxt/async_support/coinmate.py +1 -3
  33. ccxt/async_support/coinmetro.py +4 -5
  34. ccxt/async_support/coinone.py +0 -1
  35. ccxt/async_support/coinsph.py +7 -8
  36. ccxt/async_support/cryptocom.py +3 -0
  37. ccxt/async_support/currencycom.py +3 -4
  38. ccxt/async_support/defx.py +6 -7
  39. ccxt/async_support/deribit.py +1 -3
  40. ccxt/async_support/digifinex.py +0 -1
  41. ccxt/async_support/ellipx.py +0 -2
  42. ccxt/async_support/exmo.py +61 -6
  43. ccxt/async_support/gate.py +2 -3
  44. ccxt/async_support/gemini.py +4 -5
  45. ccxt/async_support/hashkey.py +79 -67
  46. ccxt/async_support/hitbtc.py +47 -5
  47. ccxt/async_support/hollaex.py +4 -6
  48. ccxt/async_support/htx.py +2 -4
  49. ccxt/async_support/huobijp.py +0 -1
  50. ccxt/async_support/hyperliquid.py +60 -1
  51. ccxt/async_support/idex.py +8 -8
  52. ccxt/async_support/independentreserve.py +0 -1
  53. ccxt/async_support/indodax.py +0 -1
  54. ccxt/async_support/kraken.py +186 -28
  55. ccxt/async_support/krakenfutures.py +75 -3
  56. ccxt/async_support/kucoin.py +6 -4
  57. ccxt/async_support/kucoinfutures.py +10 -9
  58. ccxt/async_support/kuna.py +1 -3
  59. ccxt/async_support/latoken.py +1 -3
  60. ccxt/async_support/lbank.py +0 -1
  61. ccxt/async_support/luno.py +0 -1
  62. ccxt/async_support/lykke.py +0 -1
  63. ccxt/async_support/mercado.py +0 -1
  64. ccxt/async_support/mexc.py +6 -7
  65. ccxt/async_support/ndax.py +1 -1
  66. ccxt/async_support/novadax.py +4 -6
  67. ccxt/async_support/oceanex.py +0 -1
  68. ccxt/async_support/okcoin.py +1 -3
  69. ccxt/async_support/okx.py +7 -4
  70. ccxt/async_support/onetrading.py +1 -3
  71. ccxt/async_support/p2b.py +1 -1
  72. ccxt/async_support/paradex.py +5 -7
  73. ccxt/async_support/phemex.py +8 -10
  74. ccxt/async_support/poloniex.py +1 -3
  75. ccxt/async_support/poloniexfutures.py +6 -6
  76. ccxt/async_support/probit.py +0 -1
  77. ccxt/async_support/timex.py +0 -1
  78. ccxt/async_support/tokocrypto.py +11 -14
  79. ccxt/async_support/tradeogre.py +1 -1
  80. ccxt/async_support/upbit.py +0 -1
  81. ccxt/async_support/wavesexchange.py +4 -5
  82. ccxt/async_support/whitebit.py +8 -9
  83. ccxt/async_support/woo.py +98 -12
  84. ccxt/async_support/woofipro.py +96 -15
  85. ccxt/async_support/xt.py +6 -3
  86. ccxt/async_support/yobit.py +0 -1
  87. ccxt/async_support/zaif.py +0 -1
  88. ccxt/async_support/zonda.py +1 -2
  89. ccxt/base/exchange.py +39 -20
  90. ccxt/base/types.py +10 -0
  91. ccxt/bigone.py +0 -1
  92. ccxt/binance.py +27 -24
  93. ccxt/bingx.py +5 -1
  94. ccxt/bitfinex.py +123 -1
  95. ccxt/bitget.py +1 -0
  96. ccxt/bitmart.py +243 -2
  97. ccxt/blofin.py +16 -7
  98. ccxt/bybit.py +8 -8
  99. ccxt/cex.py +1 -1
  100. ccxt/coinbase.py +8 -9
  101. ccxt/coinbaseexchange.py +5 -6
  102. ccxt/coinbaseinternational.py +7 -8
  103. ccxt/coincatch.py +0 -1
  104. ccxt/coincheck.py +0 -1
  105. ccxt/coinex.py +91 -6
  106. ccxt/coinlist.py +3 -4
  107. ccxt/coinmate.py +1 -3
  108. ccxt/coinmetro.py +4 -5
  109. ccxt/coinone.py +0 -1
  110. ccxt/coinsph.py +7 -8
  111. ccxt/cryptocom.py +3 -0
  112. ccxt/currencycom.py +3 -4
  113. ccxt/defx.py +6 -7
  114. ccxt/deribit.py +1 -3
  115. ccxt/digifinex.py +0 -1
  116. ccxt/ellipx.py +0 -2
  117. ccxt/exmo.py +61 -6
  118. ccxt/gate.py +2 -3
  119. ccxt/gemini.py +4 -5
  120. ccxt/hashkey.py +79 -67
  121. ccxt/hitbtc.py +47 -5
  122. ccxt/hollaex.py +4 -6
  123. ccxt/htx.py +2 -4
  124. ccxt/huobijp.py +0 -1
  125. ccxt/hyperliquid.py +60 -1
  126. ccxt/idex.py +8 -8
  127. ccxt/independentreserve.py +0 -1
  128. ccxt/indodax.py +0 -1
  129. ccxt/kraken.py +186 -28
  130. ccxt/krakenfutures.py +75 -3
  131. ccxt/kucoin.py +6 -4
  132. ccxt/kucoinfutures.py +10 -9
  133. ccxt/kuna.py +1 -3
  134. ccxt/latoken.py +1 -3
  135. ccxt/lbank.py +0 -1
  136. ccxt/luno.py +0 -1
  137. ccxt/lykke.py +0 -1
  138. ccxt/mercado.py +0 -1
  139. ccxt/mexc.py +6 -7
  140. ccxt/ndax.py +1 -1
  141. ccxt/novadax.py +4 -6
  142. ccxt/oceanex.py +0 -1
  143. ccxt/okcoin.py +1 -3
  144. ccxt/okx.py +7 -4
  145. ccxt/onetrading.py +1 -3
  146. ccxt/p2b.py +1 -1
  147. ccxt/paradex.py +5 -7
  148. ccxt/phemex.py +8 -10
  149. ccxt/poloniex.py +1 -3
  150. ccxt/poloniexfutures.py +6 -6
  151. ccxt/pro/__init__.py +1 -1
  152. ccxt/probit.py +0 -1
  153. ccxt/timex.py +0 -1
  154. ccxt/tokocrypto.py +11 -14
  155. ccxt/tradeogre.py +1 -1
  156. ccxt/upbit.py +0 -1
  157. ccxt/wavesexchange.py +4 -5
  158. ccxt/whitebit.py +8 -9
  159. ccxt/woo.py +98 -12
  160. ccxt/woofipro.py +96 -15
  161. ccxt/xt.py +6 -3
  162. ccxt/yobit.py +0 -1
  163. ccxt/zaif.py +0 -1
  164. ccxt/zonda.py +1 -2
  165. {ccxt-4.4.40.dist-info → ccxt-4.4.42.dist-info}/METADATA +5 -5
  166. {ccxt-4.4.40.dist-info → ccxt-4.4.42.dist-info}/RECORD +169 -173
  167. ccxt/bitbay.py +0 -17
  168. ccxt/bitfinex2.py +0 -3624
  169. ccxt/hitbtc3.py +0 -16
  170. ccxt/pro/bitfinex2.py +0 -1086
  171. {ccxt-4.4.40.dist-info → ccxt-4.4.42.dist-info}/LICENSE.txt +0 -0
  172. {ccxt-4.4.40.dist-info → ccxt-4.4.42.dist-info}/WHEEL +0 -0
  173. {ccxt-4.4.40.dist-info → ccxt-4.4.42.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.40'
25
+ __version__ = '4.4.42'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
ccxt/abstract/binance.py CHANGED
@@ -360,6 +360,8 @@ class ImplicitAPI:
360
360
  sapi_post_portfolio_bnb_transfer = sapiPostPortfolioBnbTransfer = Entry('portfolio/bnb-transfer', 'sapi', 'POST', {'cost': 150})
361
361
  sapi_post_portfolio_repay_futures_switch = sapiPostPortfolioRepayFuturesSwitch = Entry('portfolio/repay-futures-switch', 'sapi', 'POST', {'cost': 150})
362
362
  sapi_post_portfolio_repay_futures_negative_balance = sapiPostPortfolioRepayFuturesNegativeBalance = Entry('portfolio/repay-futures-negative-balance', 'sapi', 'POST', {'cost': 150})
363
+ sapi_post_portfolio_mint = sapiPostPortfolioMint = Entry('portfolio/mint', 'sapi', 'POST', {'cost': 20})
364
+ sapi_post_portfolio_redeem = sapiPostPortfolioRedeem = Entry('portfolio/redeem', 'sapi', 'POST', {'cost': 20})
363
365
  sapi_post_lending_auto_invest_plan_add = sapiPostLendingAutoInvestPlanAdd = Entry('lending/auto-invest/plan/add', 'sapi', 'POST', {'cost': 0.1})
364
366
  sapi_post_lending_auto_invest_plan_edit = sapiPostLendingAutoInvestPlanEdit = Entry('lending/auto-invest/plan/edit', 'sapi', 'POST', {'cost': 0.1})
365
367
  sapi_post_lending_auto_invest_plan_edit_status = sapiPostLendingAutoInvestPlanEditStatus = Entry('lending/auto-invest/plan/edit-status', 'sapi', 'POST', {'cost': 0.1})
@@ -599,6 +601,7 @@ class ImplicitAPI:
599
601
  eapiprivate_get_block_order_orders = eapiPrivateGetBlockOrderOrders = Entry('block/order/orders', 'eapiPrivate', 'GET', {'cost': 5})
600
602
  eapiprivate_get_block_order_execute = eapiPrivateGetBlockOrderExecute = Entry('block/order/execute', 'eapiPrivate', 'GET', {'cost': 5})
601
603
  eapiprivate_get_block_user_trades = eapiPrivateGetBlockUserTrades = Entry('block/user-trades', 'eapiPrivate', 'GET', {'cost': 5})
604
+ eapiprivate_get_blocktrades = eapiPrivateGetBlockTrades = Entry('blockTrades', 'eapiPrivate', 'GET', {'cost': 5})
602
605
  eapiprivate_post_order = eapiPrivatePostOrder = Entry('order', 'eapiPrivate', 'POST', {'cost': 1})
603
606
  eapiprivate_post_batchorders = eapiPrivatePostBatchOrders = Entry('batchOrders', 'eapiPrivate', 'POST', {'cost': 5})
604
607
  eapiprivate_post_listenkey = eapiPrivatePostListenKey = Entry('listenKey', 'eapiPrivate', 'POST', {'cost': 1})
@@ -360,6 +360,8 @@ class ImplicitAPI:
360
360
  sapi_post_portfolio_bnb_transfer = sapiPostPortfolioBnbTransfer = Entry('portfolio/bnb-transfer', 'sapi', 'POST', {'cost': 150})
361
361
  sapi_post_portfolio_repay_futures_switch = sapiPostPortfolioRepayFuturesSwitch = Entry('portfolio/repay-futures-switch', 'sapi', 'POST', {'cost': 150})
362
362
  sapi_post_portfolio_repay_futures_negative_balance = sapiPostPortfolioRepayFuturesNegativeBalance = Entry('portfolio/repay-futures-negative-balance', 'sapi', 'POST', {'cost': 150})
363
+ sapi_post_portfolio_mint = sapiPostPortfolioMint = Entry('portfolio/mint', 'sapi', 'POST', {'cost': 20})
364
+ sapi_post_portfolio_redeem = sapiPostPortfolioRedeem = Entry('portfolio/redeem', 'sapi', 'POST', {'cost': 20})
363
365
  sapi_post_lending_auto_invest_plan_add = sapiPostLendingAutoInvestPlanAdd = Entry('lending/auto-invest/plan/add', 'sapi', 'POST', {'cost': 0.1})
364
366
  sapi_post_lending_auto_invest_plan_edit = sapiPostLendingAutoInvestPlanEdit = Entry('lending/auto-invest/plan/edit', 'sapi', 'POST', {'cost': 0.1})
365
367
  sapi_post_lending_auto_invest_plan_edit_status = sapiPostLendingAutoInvestPlanEditStatus = Entry('lending/auto-invest/plan/edit-status', 'sapi', 'POST', {'cost': 0.1})
@@ -599,6 +601,7 @@ class ImplicitAPI:
599
601
  eapiprivate_get_block_order_orders = eapiPrivateGetBlockOrderOrders = Entry('block/order/orders', 'eapiPrivate', 'GET', {'cost': 5})
600
602
  eapiprivate_get_block_order_execute = eapiPrivateGetBlockOrderExecute = Entry('block/order/execute', 'eapiPrivate', 'GET', {'cost': 5})
601
603
  eapiprivate_get_block_user_trades = eapiPrivateGetBlockUserTrades = Entry('block/user-trades', 'eapiPrivate', 'GET', {'cost': 5})
604
+ eapiprivate_get_blocktrades = eapiPrivateGetBlockTrades = Entry('blockTrades', 'eapiPrivate', 'GET', {'cost': 5})
602
605
  eapiprivate_post_order = eapiPrivatePostOrder = Entry('order', 'eapiPrivate', 'POST', {'cost': 1})
603
606
  eapiprivate_post_batchorders = eapiPrivatePostBatchOrders = Entry('batchOrders', 'eapiPrivate', 'POST', {'cost': 5})
604
607
  eapiprivate_post_listenkey = eapiPrivatePostListenKey = Entry('listenKey', 'eapiPrivate', 'POST', {'cost': 1})
@@ -391,6 +391,8 @@ class ImplicitAPI:
391
391
  sapi_post_portfolio_bnb_transfer = sapiPostPortfolioBnbTransfer = Entry('portfolio/bnb-transfer', 'sapi', 'POST', {'cost': 150})
392
392
  sapi_post_portfolio_repay_futures_switch = sapiPostPortfolioRepayFuturesSwitch = Entry('portfolio/repay-futures-switch', 'sapi', 'POST', {'cost': 150})
393
393
  sapi_post_portfolio_repay_futures_negative_balance = sapiPostPortfolioRepayFuturesNegativeBalance = Entry('portfolio/repay-futures-negative-balance', 'sapi', 'POST', {'cost': 150})
394
+ sapi_post_portfolio_mint = sapiPostPortfolioMint = Entry('portfolio/mint', 'sapi', 'POST', {'cost': 20})
395
+ sapi_post_portfolio_redeem = sapiPostPortfolioRedeem = Entry('portfolio/redeem', 'sapi', 'POST', {'cost': 20})
394
396
  sapi_post_lending_auto_invest_plan_add = sapiPostLendingAutoInvestPlanAdd = Entry('lending/auto-invest/plan/add', 'sapi', 'POST', {'cost': 0.1})
395
397
  sapi_post_lending_auto_invest_plan_edit = sapiPostLendingAutoInvestPlanEdit = Entry('lending/auto-invest/plan/edit', 'sapi', 'POST', {'cost': 0.1})
396
398
  sapi_post_lending_auto_invest_plan_edit_status = sapiPostLendingAutoInvestPlanEditStatus = Entry('lending/auto-invest/plan/edit-status', 'sapi', 'POST', {'cost': 0.1})
@@ -651,6 +653,7 @@ class ImplicitAPI:
651
653
  eapiprivate_get_block_order_orders = eapiPrivateGetBlockOrderOrders = Entry('block/order/orders', 'eapiPrivate', 'GET', {'cost': 5})
652
654
  eapiprivate_get_block_order_execute = eapiPrivateGetBlockOrderExecute = Entry('block/order/execute', 'eapiPrivate', 'GET', {'cost': 5})
653
655
  eapiprivate_get_block_user_trades = eapiPrivateGetBlockUserTrades = Entry('block/user-trades', 'eapiPrivate', 'GET', {'cost': 5})
656
+ eapiprivate_get_blocktrades = eapiPrivateGetBlockTrades = Entry('blockTrades', 'eapiPrivate', 'GET', {'cost': 5})
654
657
  eapiprivate_post_order = eapiPrivatePostOrder = Entry('order', 'eapiPrivate', 'POST', {'cost': 1})
655
658
  eapiprivate_post_batchorders = eapiPrivatePostBatchOrders = Entry('batchOrders', 'eapiPrivate', 'POST', {'cost': 5})
656
659
  eapiprivate_post_listenkey = eapiPrivatePostListenKey = Entry('listenKey', 'eapiPrivate', 'POST', {'cost': 1})
@@ -360,6 +360,8 @@ class ImplicitAPI:
360
360
  sapi_post_portfolio_bnb_transfer = sapiPostPortfolioBnbTransfer = Entry('portfolio/bnb-transfer', 'sapi', 'POST', {'cost': 150})
361
361
  sapi_post_portfolio_repay_futures_switch = sapiPostPortfolioRepayFuturesSwitch = Entry('portfolio/repay-futures-switch', 'sapi', 'POST', {'cost': 150})
362
362
  sapi_post_portfolio_repay_futures_negative_balance = sapiPostPortfolioRepayFuturesNegativeBalance = Entry('portfolio/repay-futures-negative-balance', 'sapi', 'POST', {'cost': 150})
363
+ sapi_post_portfolio_mint = sapiPostPortfolioMint = Entry('portfolio/mint', 'sapi', 'POST', {'cost': 20})
364
+ sapi_post_portfolio_redeem = sapiPostPortfolioRedeem = Entry('portfolio/redeem', 'sapi', 'POST', {'cost': 20})
363
365
  sapi_post_lending_auto_invest_plan_add = sapiPostLendingAutoInvestPlanAdd = Entry('lending/auto-invest/plan/add', 'sapi', 'POST', {'cost': 0.1})
364
366
  sapi_post_lending_auto_invest_plan_edit = sapiPostLendingAutoInvestPlanEdit = Entry('lending/auto-invest/plan/edit', 'sapi', 'POST', {'cost': 0.1})
365
367
  sapi_post_lending_auto_invest_plan_edit_status = sapiPostLendingAutoInvestPlanEditStatus = Entry('lending/auto-invest/plan/edit-status', 'sapi', 'POST', {'cost': 0.1})
@@ -599,6 +601,7 @@ class ImplicitAPI:
599
601
  eapiprivate_get_block_order_orders = eapiPrivateGetBlockOrderOrders = Entry('block/order/orders', 'eapiPrivate', 'GET', {'cost': 5})
600
602
  eapiprivate_get_block_order_execute = eapiPrivateGetBlockOrderExecute = Entry('block/order/execute', 'eapiPrivate', 'GET', {'cost': 5})
601
603
  eapiprivate_get_block_user_trades = eapiPrivateGetBlockUserTrades = Entry('block/user-trades', 'eapiPrivate', 'GET', {'cost': 5})
604
+ eapiprivate_get_blocktrades = eapiPrivateGetBlockTrades = Entry('blockTrades', 'eapiPrivate', 'GET', {'cost': 5})
602
605
  eapiprivate_post_order = eapiPrivatePostOrder = Entry('order', 'eapiPrivate', 'POST', {'cost': 1})
603
606
  eapiprivate_post_batchorders = eapiPrivatePostBatchOrders = Entry('batchOrders', 'eapiPrivate', 'POST', {'cost': 5})
604
607
  eapiprivate_post_listenkey = eapiPrivatePostListenKey = Entry('listenKey', 'eapiPrivate', 'POST', {'cost': 1})
ccxt/abstract/bitmart.py CHANGED
@@ -25,6 +25,7 @@ class ImplicitAPI:
25
25
  public_get_contract_public_depth = publicGetContractPublicDepth = Entry('contract/public/depth', 'public', 'GET', {'cost': 5})
26
26
  public_get_contract_public_open_interest = publicGetContractPublicOpenInterest = Entry('contract/public/open-interest', 'public', 'GET', {'cost': 30})
27
27
  public_get_contract_public_funding_rate = publicGetContractPublicFundingRate = Entry('contract/public/funding-rate', 'public', 'GET', {'cost': 30})
28
+ public_get_contract_public_funding_rate_history = publicGetContractPublicFundingRateHistory = Entry('contract/public/funding-rate-history', 'public', 'GET', {'cost': 30})
28
29
  public_get_contract_public_kline = publicGetContractPublicKline = Entry('contract/public/kline', 'public', 'GET', {'cost': 6})
29
30
  public_get_account_v1_currencies = publicGetAccountV1Currencies = Entry('account/v1/currencies', 'public', 'GET', {'cost': 30})
30
31
  private_get_account_sub_account_v1_transfer_list = privateGetAccountSubAccountV1TransferList = Entry('account/sub-account/v1/transfer-list', 'private', 'GET', {'cost': 7.5})
@@ -64,6 +65,7 @@ class ImplicitAPI:
64
65
  private_get_contract_private_position_risk = privateGetContractPrivatePositionRisk = Entry('contract/private/position-risk', 'private', 'GET', {'cost': 10})
65
66
  private_get_contract_private_affilate_rebate_list = privateGetContractPrivateAffilateRebateList = Entry('contract/private/affilate/rebate-list', 'private', 'GET', {'cost': 10})
66
67
  private_get_contract_private_affilate_trade_list = privateGetContractPrivateAffilateTradeList = Entry('contract/private/affilate/trade-list', 'private', 'GET', {'cost': 10})
68
+ private_get_contract_private_transaction_history = privateGetContractPrivateTransactionHistory = Entry('contract/private/transaction-history', 'private', 'GET', {'cost': 10})
67
69
  private_post_account_sub_account_main_v1_sub_to_main = privatePostAccountSubAccountMainV1SubToMain = Entry('account/sub-account/main/v1/sub-to-main', 'private', 'POST', {'cost': 30})
68
70
  private_post_account_sub_account_sub_v1_sub_to_main = privatePostAccountSubAccountSubV1SubToMain = Entry('account/sub-account/sub/v1/sub-to-main', 'private', 'POST', {'cost': 30})
69
71
  private_post_account_sub_account_main_v1_main_to_sub = privatePostAccountSubAccountMainV1MainToSub = Entry('account/sub-account/main/v1/main-to-sub', 'private', 'POST', {'cost': 30})
ccxt/abstract/okx.py CHANGED
@@ -68,6 +68,7 @@ class ImplicitAPI:
68
68
  public_get_tradingbot_public_rsi_back_testing = publicGetTradingBotPublicRsiBackTesting = Entry('tradingBot/public/rsi-back-testing', 'public', 'GET', {'cost': 1})
69
69
  public_get_asset_exchange_list = publicGetAssetExchangeList = Entry('asset/exchange-list', 'public', 'GET', {'cost': 1.6666666666666667})
70
70
  public_get_finance_staking_defi_eth_apy_history = publicGetFinanceStakingDefiEthApyHistory = Entry('finance/staking-defi/eth/apy-history', 'public', 'GET', {'cost': 1.6666666666666667})
71
+ public_get_finance_staking_defi_sol_apy_history = publicGetFinanceStakingDefiSolApyHistory = Entry('finance/staking-defi/sol/apy-history', 'public', 'GET', {'cost': 1.6666666666666667})
71
72
  public_get_finance_savings_lending_rate_summary = publicGetFinanceSavingsLendingRateSummary = Entry('finance/savings/lending-rate-summary', 'public', 'GET', {'cost': 1.6666666666666667})
72
73
  public_get_finance_savings_lending_rate_history = publicGetFinanceSavingsLendingRateHistory = Entry('finance/savings/lending-rate-history', 'public', 'GET', {'cost': 1.6666666666666667})
73
74
  public_get_finance_fixed_loan_lending_offers = publicGetFinanceFixedLoanLendingOffers = Entry('finance/fixed-loan/lending-offers', 'public', 'GET', {'cost': 3.3333333333333335})
@@ -191,6 +192,8 @@ class ImplicitAPI:
191
192
  private_get_finance_staking_defi_eth_balance = privateGetFinanceStakingDefiEthBalance = Entry('finance/staking-defi/eth/balance', 'private', 'GET', {'cost': 1.6666666666666667})
192
193
  private_get_finance_staking_defi_eth_purchase_redeem_history = privateGetFinanceStakingDefiEthPurchaseRedeemHistory = Entry('finance/staking-defi/eth/purchase-redeem-history', 'private', 'GET', {'cost': 1.6666666666666667})
193
194
  private_get_finance_staking_defi_eth_product_info = privateGetFinanceStakingDefiEthProductInfo = Entry('finance/staking-defi/eth/product-info', 'private', 'GET', {'cost': 3})
195
+ private_get_finance_staking_defi_sol_balance = privateGetFinanceStakingDefiSolBalance = Entry('finance/staking-defi/sol/balance', 'private', 'GET', {'cost': 1.6666666666666667})
196
+ private_get_finance_staking_defi_sol_purchase_redeem_history = privateGetFinanceStakingDefiSolPurchaseRedeemHistory = Entry('finance/staking-defi/sol/purchase-redeem-history', 'private', 'GET', {'cost': 1.6666666666666667})
194
197
  private_get_copytrading_current_subpositions = privateGetCopytradingCurrentSubpositions = Entry('copytrading/current-subpositions', 'private', 'GET', {'cost': 1})
195
198
  private_get_copytrading_subpositions_history = privateGetCopytradingSubpositionsHistory = Entry('copytrading/subpositions-history', 'private', 'GET', {'cost': 1})
196
199
  private_get_copytrading_instruments = privateGetCopytradingInstruments = Entry('copytrading/instruments', 'private', 'GET', {'cost': 4})
@@ -311,6 +314,8 @@ class ImplicitAPI:
311
314
  private_post_finance_staking_defi_cancel = privatePostFinanceStakingDefiCancel = Entry('finance/staking-defi/cancel', 'private', 'POST', {'cost': 3})
312
315
  private_post_finance_staking_defi_eth_purchase = privatePostFinanceStakingDefiEthPurchase = Entry('finance/staking-defi/eth/purchase', 'private', 'POST', {'cost': 5})
313
316
  private_post_finance_staking_defi_eth_redeem = privatePostFinanceStakingDefiEthRedeem = Entry('finance/staking-defi/eth/redeem', 'private', 'POST', {'cost': 5})
317
+ private_post_finance_staking_defi_sol_purchase = privatePostFinanceStakingDefiSolPurchase = Entry('finance/staking-defi/sol/purchase', 'private', 'POST', {'cost': 5})
318
+ private_post_finance_staking_defi_sol_redeem = privatePostFinanceStakingDefiSolRedeem = Entry('finance/staking-defi/sol/redeem', 'private', 'POST', {'cost': 5})
314
319
  private_post_copytrading_algo_order = privatePostCopytradingAlgoOrder = Entry('copytrading/algo-order', 'private', 'POST', {'cost': 1})
315
320
  private_post_copytrading_close_subposition = privatePostCopytradingCloseSubposition = Entry('copytrading/close-subposition', 'private', 'POST', {'cost': 1})
316
321
  private_post_copytrading_set_instruments = privatePostCopytradingSetInstruments = Entry('copytrading/set-instruments', 'private', 'POST', {'cost': 4})
ccxt/ace.py CHANGED
@@ -584,7 +584,7 @@ class ace(Exchange, ImplicitAPI):
584
584
  'postOnly': None,
585
585
  'side': side,
586
586
  'price': price,
587
- 'stopPrice': None,
587
+ 'triggerPrice': None,
588
588
  'amount': amount,
589
589
  'cost': None,
590
590
  'average': average,
ccxt/alpaca.py CHANGED
@@ -1189,7 +1189,6 @@ class alpaca(Exchange, ImplicitAPI):
1189
1189
  'postOnly': None,
1190
1190
  'side': self.safe_string(order, 'side'),
1191
1191
  'price': self.safe_number(order, 'limit_price'),
1192
- 'stopPrice': self.safe_number(order, 'stop_price'),
1193
1192
  'triggerPrice': self.safe_number(order, 'stop_price'),
1194
1193
  'cost': None,
1195
1194
  'average': self.safe_number(order, 'filled_avg_price'),
ccxt/ascendex.py CHANGED
@@ -1381,7 +1381,6 @@ class ascendex(Exchange, ImplicitAPI):
1381
1381
  'reduceOnly': reduceOnly,
1382
1382
  'side': side,
1383
1383
  'price': price,
1384
- 'stopPrice': triggerPrice,
1385
1384
  'triggerPrice': triggerPrice,
1386
1385
  'amount': amount,
1387
1386
  'cost': None,
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.40'
7
+ __version__ = '4.4.42'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
ccxt/async_support/ace.py CHANGED
@@ -584,7 +584,7 @@ class ace(Exchange, ImplicitAPI):
584
584
  'postOnly': None,
585
585
  'side': side,
586
586
  'price': price,
587
- 'stopPrice': None,
587
+ 'triggerPrice': None,
588
588
  'amount': amount,
589
589
  'cost': None,
590
590
  'average': average,
@@ -1189,7 +1189,6 @@ class alpaca(Exchange, ImplicitAPI):
1189
1189
  'postOnly': None,
1190
1190
  'side': self.safe_string(order, 'side'),
1191
1191
  'price': self.safe_number(order, 'limit_price'),
1192
- 'stopPrice': self.safe_number(order, 'stop_price'),
1193
1192
  'triggerPrice': self.safe_number(order, 'stop_price'),
1194
1193
  'cost': None,
1195
1194
  'average': self.safe_number(order, 'filled_avg_price'),
@@ -1382,7 +1382,6 @@ class ascendex(Exchange, ImplicitAPI):
1382
1382
  'reduceOnly': reduceOnly,
1383
1383
  'side': side,
1384
1384
  'price': price,
1385
- 'stopPrice': triggerPrice,
1386
1385
  'triggerPrice': triggerPrice,
1387
1386
  'amount': amount,
1388
1387
  'cost': None,
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.4.40'
5
+ __version__ = '4.4.42'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -755,6 +755,9 @@ class Exchange(BaseExchange):
755
755
  async def fetch_open_interest(self, symbol: str, params={}):
756
756
  raise NotSupported(self.id + ' fetchOpenInterest() is not supported yet')
757
757
 
758
+ async def fetch_open_interests(self, symbols: Strings = None, params={}):
759
+ raise NotSupported(self.id + ' fetchOpenInterests() is not supported yet')
760
+
758
761
  async def sign_in(self, params={}):
759
762
  raise NotSupported(self.id + ' signIn() is not supported yet')
760
763
 
@@ -1650,44 +1653,44 @@ class Exchange(BaseExchange):
1650
1653
  query = self.extend(params, {'reduceOnly': True})
1651
1654
  return await self.create_order_ws(symbol, type, side, amount, price, query)
1652
1655
 
1653
- async def create_stop_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, stopPrice: Num = None, params={}):
1656
+ async def create_stop_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, triggerPrice: Num = None, params={}):
1654
1657
  if not self.has['createStopOrder']:
1655
1658
  raise NotSupported(self.id + ' createStopOrder() is not supported yet')
1656
- if stopPrice is None:
1659
+ if triggerPrice is None:
1657
1660
  raise ArgumentsRequired(self.id + ' create_stop_order() requires a stopPrice argument')
1658
- query = self.extend(params, {'stopPrice': stopPrice})
1661
+ query = self.extend(params, {'stopPrice': triggerPrice})
1659
1662
  return await self.create_order(symbol, type, side, amount, price, query)
1660
1663
 
1661
- async def create_stop_order_ws(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, stopPrice: Num = None, params={}):
1664
+ async def create_stop_order_ws(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, triggerPrice: Num = None, params={}):
1662
1665
  if not self.has['createStopOrderWs']:
1663
1666
  raise NotSupported(self.id + ' createStopOrderWs() is not supported yet')
1664
- if stopPrice is None:
1667
+ if triggerPrice is None:
1665
1668
  raise ArgumentsRequired(self.id + ' createStopOrderWs() requires a stopPrice argument')
1666
- query = self.extend(params, {'stopPrice': stopPrice})
1669
+ query = self.extend(params, {'stopPrice': triggerPrice})
1667
1670
  return await self.create_order_ws(symbol, type, side, amount, price, query)
1668
1671
 
1669
- async def create_stop_limit_order(self, symbol: str, side: OrderSide, amount: float, price: float, stopPrice: float, params={}):
1672
+ async def create_stop_limit_order(self, symbol: str, side: OrderSide, amount: float, price: float, triggerPrice: float, params={}):
1670
1673
  if not self.has['createStopLimitOrder']:
1671
1674
  raise NotSupported(self.id + ' createStopLimitOrder() is not supported yet')
1672
- query = self.extend(params, {'stopPrice': stopPrice})
1675
+ query = self.extend(params, {'stopPrice': triggerPrice})
1673
1676
  return await self.create_order(symbol, 'limit', side, amount, price, query)
1674
1677
 
1675
- async def create_stop_limit_order_ws(self, symbol: str, side: OrderSide, amount: float, price: float, stopPrice: float, params={}):
1678
+ async def create_stop_limit_order_ws(self, symbol: str, side: OrderSide, amount: float, price: float, triggerPrice: float, params={}):
1676
1679
  if not self.has['createStopLimitOrderWs']:
1677
1680
  raise NotSupported(self.id + ' createStopLimitOrderWs() is not supported yet')
1678
- query = self.extend(params, {'stopPrice': stopPrice})
1681
+ query = self.extend(params, {'stopPrice': triggerPrice})
1679
1682
  return await self.create_order_ws(symbol, 'limit', side, amount, price, query)
1680
1683
 
1681
- async def create_stop_market_order(self, symbol: str, side: OrderSide, amount: float, stopPrice: float, params={}):
1684
+ async def create_stop_market_order(self, symbol: str, side: OrderSide, amount: float, triggerPrice: float, params={}):
1682
1685
  if not self.has['createStopMarketOrder']:
1683
1686
  raise NotSupported(self.id + ' createStopMarketOrder() is not supported yet')
1684
- query = self.extend(params, {'stopPrice': stopPrice})
1687
+ query = self.extend(params, {'stopPrice': triggerPrice})
1685
1688
  return await self.create_order(symbol, 'market', side, amount, None, query)
1686
1689
 
1687
- async def create_stop_market_order_ws(self, symbol: str, side: OrderSide, amount: float, stopPrice: float, params={}):
1690
+ async def create_stop_market_order_ws(self, symbol: str, side: OrderSide, amount: float, triggerPrice: float, params={}):
1688
1691
  if not self.has['createStopMarketOrderWs']:
1689
1692
  raise NotSupported(self.id + ' createStopMarketOrderWs() is not supported yet')
1690
- query = self.extend(params, {'stopPrice': stopPrice})
1693
+ query = self.extend(params, {'stopPrice': triggerPrice})
1691
1694
  return await self.create_order_ws(symbol, 'market', side, amount, None, query)
1692
1695
 
1693
1696
  async def fetch_last_prices(self, symbols: Strings = None, params={}):
@@ -1809,7 +1812,7 @@ class Exchange(BaseExchange):
1809
1812
  else:
1810
1813
  raise NotSupported(self.id + ' fetchTransactions() is not supported yet')
1811
1814
 
1812
- async def fetch_paginated_call_dynamic(self, method: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}, maxEntriesPerRequest: Int = None):
1815
+ async def fetch_paginated_call_dynamic(self, method: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}, maxEntriesPerRequest: Int = None, removeRepeated=True):
1813
1816
  maxCalls = None
1814
1817
  maxCalls, params = self.handle_option_and_params(params, method, 'paginationCalls', 10)
1815
1818
  maxRetries = None
@@ -1817,6 +1820,8 @@ class Exchange(BaseExchange):
1817
1820
  paginationDirection = None
1818
1821
  paginationDirection, params = self.handle_option_and_params(params, method, 'paginationDirection', 'backward')
1819
1822
  paginationTimestamp = None
1823
+ removeRepeatedOption = removeRepeated
1824
+ removeRepeatedOption, params = self.handle_option_and_params(params, method, 'removeRepeated', removeRepeated)
1820
1825
  calls = 0
1821
1826
  result = []
1822
1827
  errors = 0
@@ -1870,7 +1875,9 @@ class Exchange(BaseExchange):
1870
1875
  errors += 1
1871
1876
  if errors > maxRetries:
1872
1877
  raise e
1873
- uniqueResults = self.remove_repeated_elements_from_array(result)
1878
+ uniqueResults = result
1879
+ if removeRepeatedOption:
1880
+ uniqueResults = self.remove_repeated_elements_from_array(result)
1874
1881
  key = 0 if (method == 'fetchOHLCV') else 'timestamp'
1875
1882
  return self.filter_by_since_limit(uniqueResults, since, limit, key)
1876
1883
 
@@ -1334,7 +1334,6 @@ class bigone(Exchange, ImplicitAPI):
1334
1334
  'postOnly': self.safe_bool(order, 'post_only'),
1335
1335
  'side': side,
1336
1336
  'price': price,
1337
- 'stopPrice': triggerPrice,
1338
1337
  'triggerPrice': triggerPrice,
1339
1338
  'amount': amount,
1340
1339
  'cost': cost,
@@ -658,6 +658,8 @@ class binance(Exchange, ImplicitAPI):
658
658
  'portfolio/bnb-transfer': 150, # Weight(IP): 1500 => cost = 0.1 * 1500 = 150
659
659
  'portfolio/repay-futures-switch': 150, # Weight(IP): 1500 => cost = 0.1 * 1500 = 150
660
660
  'portfolio/repay-futures-negative-balance': 150, # Weight(IP): 1500 => cost = 0.1 * 1500 = 150
661
+ 'portfolio/mint': 20,
662
+ 'portfolio/redeem': 20,
661
663
  'lending/auto-invest/plan/add': 0.1, # Weight(IP): 1 => cost = 0.1 * 1 = 0.1
662
664
  'lending/auto-invest/plan/edit': 0.1, # Weight(IP): 1 => cost = 0.1 * 1 = 0.1
663
665
  'lending/auto-invest/plan/edit-status': 0.1, # Weight(IP): 1 => cost = 0.1 * 1 = 0.1
@@ -986,6 +988,7 @@ class binance(Exchange, ImplicitAPI):
986
988
  'block/order/orders': 5,
987
989
  'block/order/execute': 5,
988
990
  'block/user-trades': 5,
991
+ 'blockTrades': 5,
989
992
  },
990
993
  'post': {
991
994
  'order': 1,
@@ -5063,8 +5066,8 @@ class binance(Exchange, ImplicitAPI):
5063
5066
  if postOnly:
5064
5067
  uppercaseType = 'LIMIT_MAKER'
5065
5068
  request['type'] = uppercaseType
5066
- stopPrice = self.safe_number_2(params, 'stopPrice', 'triggerPrice')
5067
- if stopPrice is not None:
5069
+ triggerPrice = self.safe_number_2(params, 'stopPrice', 'triggerPrice')
5070
+ if triggerPrice is not None:
5068
5071
  if uppercaseType == 'MARKET':
5069
5072
  uppercaseType = 'STOP_LOSS'
5070
5073
  elif uppercaseType == 'LIMIT':
@@ -5072,7 +5075,7 @@ class binance(Exchange, ImplicitAPI):
5072
5075
  validOrderTypes = self.safe_list(market['info'], 'orderTypes')
5073
5076
  if not self.in_array(uppercaseType, validOrderTypes):
5074
5077
  if initialUppercaseType != uppercaseType:
5075
- raise InvalidOrder(self.id + ' stopPrice parameter is not allowed for ' + symbol + ' ' + type + ' orders')
5078
+ raise InvalidOrder(self.id + ' triggerPrice parameter is not allowed for ' + symbol + ' ' + type + ' orders')
5076
5079
  else:
5077
5080
  raise InvalidOrder(self.id + ' ' + type + ' is not a valid order type for the ' + symbol + ' market')
5078
5081
  if clientOrderId is None:
@@ -5086,7 +5089,7 @@ class binance(Exchange, ImplicitAPI):
5086
5089
  request['newOrderRespType'] = self.safe_value(self.options['newOrderRespType'], type, 'RESULT') # 'ACK' for order id, 'RESULT' for full order or 'FULL' for order with fills
5087
5090
  timeInForceIsRequired = False
5088
5091
  priceIsRequired = False
5089
- stopPriceIsRequired = False
5092
+ triggerPriceIsRequired = False
5090
5093
  quantityIsRequired = False
5091
5094
  if uppercaseType == 'MARKET':
5092
5095
  quoteOrderQty = self.safe_bool(self.options, 'quoteOrderQty', True)
@@ -5109,11 +5112,11 @@ class binance(Exchange, ImplicitAPI):
5109
5112
  timeInForceIsRequired = True
5110
5113
  quantityIsRequired = True
5111
5114
  elif (uppercaseType == 'STOP_LOSS') or (uppercaseType == 'TAKE_PROFIT'):
5112
- stopPriceIsRequired = True
5115
+ triggerPriceIsRequired = True
5113
5116
  quantityIsRequired = True
5114
5117
  elif (uppercaseType == 'STOP_LOSS_LIMIT') or (uppercaseType == 'TAKE_PROFIT_LIMIT'):
5115
5118
  quantityIsRequired = True
5116
- stopPriceIsRequired = True
5119
+ triggerPriceIsRequired = True
5117
5120
  priceIsRequired = True
5118
5121
  timeInForceIsRequired = True
5119
5122
  elif uppercaseType == 'LIMIT_MAKER':
@@ -5127,11 +5130,11 @@ class binance(Exchange, ImplicitAPI):
5127
5130
  request['price'] = self.price_to_precision(symbol, price)
5128
5131
  if timeInForceIsRequired and (self.safe_string(params, 'timeInForce') is None):
5129
5132
  request['timeInForce'] = self.options['defaultTimeInForce'] # 'GTC' = Good To Cancel(default), 'IOC' = Immediate Or Cancel
5130
- if stopPriceIsRequired:
5131
- if stopPrice is None:
5132
- raise InvalidOrder(self.id + ' editOrder() requires a stopPrice extra param for a ' + type + ' order')
5133
+ if triggerPriceIsRequired:
5134
+ if triggerPrice is None:
5135
+ raise InvalidOrder(self.id + ' editOrder() requires a triggerPrice extra param for a ' + type + ' order')
5133
5136
  else:
5134
- request['stopPrice'] = self.price_to_precision(symbol, stopPrice)
5137
+ request['stopPrice'] = self.price_to_precision(symbol, triggerPrice)
5135
5138
  request['cancelReplaceMode'] = 'STOP_ON_FAILURE' # If the cancel request fails, the new order placement will not be attempted.
5136
5139
  cancelId = self.safe_string_2(params, 'cancelNewClientOrderId', 'cancelOrigClientOrderId')
5137
5140
  if cancelId is None:
@@ -5776,7 +5779,7 @@ class binance(Exchange, ImplicitAPI):
5776
5779
  if type == 'limit_maker':
5777
5780
  type = 'limit'
5778
5781
  stopPriceString = self.safe_string(order, 'stopPrice')
5779
- stopPrice = self.parse_number(self.omit_zero(stopPriceString))
5782
+ triggerPrice = self.parse_number(self.omit_zero(stopPriceString))
5780
5783
  feeCost = self.safe_number(order, 'fee')
5781
5784
  fee = None
5782
5785
  if feeCost is not None:
@@ -5800,7 +5803,7 @@ class binance(Exchange, ImplicitAPI):
5800
5803
  'reduceOnly': self.safe_bool(order, 'reduceOnly'),
5801
5804
  'side': side,
5802
5805
  'price': price,
5803
- 'triggerPrice': stopPrice,
5806
+ 'triggerPrice': triggerPrice,
5804
5807
  'amount': amount,
5805
5808
  'cost': cost,
5806
5809
  'average': average,
@@ -6072,7 +6075,7 @@ class binance(Exchange, ImplicitAPI):
6072
6075
  validOrderTypes = self.safe_list(market['info'], 'orderTypes')
6073
6076
  if not self.in_array(uppercaseType, validOrderTypes):
6074
6077
  if initialUppercaseType != uppercaseType:
6075
- raise InvalidOrder(self.id + ' stopPrice parameter is not allowed for ' + symbol + ' ' + type + ' orders')
6078
+ raise InvalidOrder(self.id + ' triggerPrice parameter is not allowed for ' + symbol + ' ' + type + ' orders')
6076
6079
  else:
6077
6080
  raise InvalidOrder(self.id + ' ' + type + ' is not a valid order type for the ' + symbol + ' market')
6078
6081
  clientOrderIdRequest = 'newClientStrategyId' if isPortfolioMarginConditional else 'newClientOrderId'
@@ -6111,7 +6114,7 @@ class binance(Exchange, ImplicitAPI):
6111
6114
  closePosition = self.safe_bool(params, 'closePosition', False)
6112
6115
  timeInForceIsRequired = False
6113
6116
  priceIsRequired = False
6114
- stopPriceIsRequired = False
6117
+ triggerPriceIsRequired = False
6115
6118
  quantityIsRequired = False
6116
6119
  #
6117
6120
  # spot/margin
@@ -6157,13 +6160,13 @@ class binance(Exchange, ImplicitAPI):
6157
6160
  timeInForceIsRequired = True
6158
6161
  quantityIsRequired = True
6159
6162
  elif (uppercaseType == 'STOP_LOSS') or (uppercaseType == 'TAKE_PROFIT'):
6160
- stopPriceIsRequired = True
6163
+ triggerPriceIsRequired = True
6161
6164
  quantityIsRequired = True
6162
6165
  if market['linear'] or market['inverse']:
6163
6166
  priceIsRequired = True
6164
6167
  elif (uppercaseType == 'STOP_LOSS_LIMIT') or (uppercaseType == 'TAKE_PROFIT_LIMIT'):
6165
6168
  quantityIsRequired = True
6166
- stopPriceIsRequired = True
6169
+ triggerPriceIsRequired = True
6167
6170
  priceIsRequired = True
6168
6171
  timeInForceIsRequired = True
6169
6172
  elif uppercaseType == 'LIMIT_MAKER':
@@ -6171,12 +6174,12 @@ class binance(Exchange, ImplicitAPI):
6171
6174
  quantityIsRequired = True
6172
6175
  elif uppercaseType == 'STOP':
6173
6176
  quantityIsRequired = True
6174
- stopPriceIsRequired = True
6177
+ triggerPriceIsRequired = True
6175
6178
  priceIsRequired = True
6176
6179
  elif (uppercaseType == 'STOP_MARKET') or (uppercaseType == 'TAKE_PROFIT_MARKET'):
6177
6180
  if not closePosition:
6178
6181
  quantityIsRequired = True
6179
- stopPriceIsRequired = True
6182
+ triggerPriceIsRequired = True
6180
6183
  elif uppercaseType == 'TRAILING_STOP_MARKET':
6181
6184
  if not closePosition:
6182
6185
  quantityIsRequired = True
@@ -6202,14 +6205,14 @@ class binance(Exchange, ImplicitAPI):
6202
6205
  request['price'] = self.price_to_precision(symbol, price)
6203
6206
  else:
6204
6207
  request['price'] = self.parse_to_numeric(price) # some options don't have the precision available
6205
- if stopPriceIsRequired:
6208
+ if triggerPriceIsRequired:
6206
6209
  if market['contract']:
6207
6210
  if stopPrice is None:
6208
- raise InvalidOrder(self.id + ' createOrder() requires a stopPrice extra param for a ' + type + ' order')
6211
+ raise InvalidOrder(self.id + ' createOrder() requires a triggerPrice extra param for a ' + type + ' order')
6209
6212
  else:
6210
6213
  # check for delta price
6211
6214
  if trailingDelta is None and stopPrice is None and trailingPercent is None:
6212
- raise InvalidOrder(self.id + ' createOrder() requires a stopPrice, trailingDelta or trailingPercent param for a ' + type + ' order')
6215
+ raise InvalidOrder(self.id + ' createOrder() requires a triggerPrice, trailingDelta or trailingPercent param for a ' + type + ' order')
6213
6216
  if stopPrice is not None:
6214
6217
  request['stopPrice'] = self.price_to_precision(symbol, stopPrice)
6215
6218
  if timeInForceIsRequired and (self.safe_string(params, 'timeInForce') is None) and (self.safe_string(request, 'timeInForce') is None):
@@ -10888,7 +10891,7 @@ class binance(Exchange, ImplicitAPI):
10888
10891
  paginate = False
10889
10892
  paginate, params = self.handle_option_and_params(params, 'fetchLedger', 'paginate')
10890
10893
  if paginate:
10891
- return await self.fetch_paginated_call_dynamic('fetchLedger', code, since, limit, params)
10894
+ return await self.fetch_paginated_call_dynamic('fetchLedger', code, since, limit, params, None, False)
10892
10895
  type = None
10893
10896
  subType = None
10894
10897
  currency = None
@@ -11963,7 +11966,7 @@ class binance(Exchange, ImplicitAPI):
11963
11966
  # ...
11964
11967
  # ]
11965
11968
  #
11966
- return self.parse_open_interests(response, market, since, limit)
11969
+ return self.parse_open_interests_history(response, market, since, limit)
11967
11970
 
11968
11971
  async def fetch_open_interest(self, symbol: str, params={}):
11969
11972
  """
@@ -12026,7 +12029,7 @@ class binance(Exchange, ImplicitAPI):
12026
12029
  #
12027
12030
  if market['option']:
12028
12031
  symbol = market['symbol']
12029
- result = self.parse_open_interests(response, market)
12032
+ result = self.parse_open_interests_history(response, market)
12030
12033
  for i in range(0, len(result)):
12031
12034
  item = result[i]
12032
12035
  if item['symbol'] == symbol:
@@ -64,6 +64,7 @@ class bingx(Exchange, ImplicitAPI):
64
64
  'createTrailingAmountOrder': True,
65
65
  'createTrailingPercentOrder': True,
66
66
  'createTriggerOrder': True,
67
+ 'editOrder': True,
67
68
  'fetchBalance': True,
68
69
  'fetchCanceledOrders': True,
69
70
  'fetchClosedOrders': True,
@@ -86,6 +87,7 @@ class bingx(Exchange, ImplicitAPI):
86
87
  'fetchMarkPrice': True,
87
88
  'fetchMarkPrices': True,
88
89
  'fetchMyLiquidations': True,
90
+ 'fetchMyTrades': True,
89
91
  'fetchOHLCV': True,
90
92
  'fetchOpenInterest': True,
91
93
  'fetchOpenOrders': True,
@@ -1037,7 +1039,7 @@ class bingx(Exchange, ImplicitAPI):
1037
1039
  }
1038
1040
  request['interval'] = self.safe_string(self.timeframes, timeframe, timeframe)
1039
1041
  if since is not None:
1040
- request['startTime'] = since
1042
+ request['startTime'] = max(since - 1, 0)
1041
1043
  if limit is not None:
1042
1044
  request['limit'] = limit
1043
1045
  until = self.safe_integer_2(params, 'until', 'endTime')
@@ -5343,6 +5345,8 @@ class bingx(Exchange, ImplicitAPI):
5343
5345
  elif market['swap']:
5344
5346
  request['endTs'] = now
5345
5347
  if market['spot']:
5348
+ if limit is not None:
5349
+ request['limit'] = limit # default 500, maximum 1000
5346
5350
  response = await self.spotV1PrivateGetTradeMyTrades(self.extend(request, params))
5347
5351
  data = self.safe_dict(response, 'data', {})
5348
5352
  fills = self.safe_list(data, 'fills', [])