OctoBot-Trading 2.4.95__tar.gz → 2.4.97__tar.gz

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 (477) hide show
  1. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/CHANGELOG.md +13 -0
  2. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/OctoBot_Trading.egg-info/SOURCES.txt +1 -0
  4. {OctoBot-Trading-2.4.95/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.97}/PKG-INFO +2 -2
  5. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/README.md +1 -1
  6. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/__init__.py +1 -1
  7. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/api/__init__.py +4 -0
  8. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/api/exchange.py +1 -1
  9. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/api/portfolio.py +4 -0
  10. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/api/symbol_data.py +26 -0
  11. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/constants.py +2 -1
  12. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/exchange_symbols_data.py +1 -1
  13. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/prices/prices_manager.py +7 -1
  14. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +6 -5
  15. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/ticker/ticker_manager.py +6 -1
  16. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/abstract_exchange.py +27 -12
  17. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/config/exchange_config_data.py +9 -0
  18. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +13 -0
  19. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +2 -1
  20. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/exchange_builder.py +4 -0
  21. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/exchange_websocket_factory.py +3 -1
  22. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/traders/trader.py +52 -0
  23. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/types/rest_exchange.py +10 -7
  24. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/abstract_trading_mode.py +19 -0
  25. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/channel/orders.py +2 -2
  26. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/value_converter.py +10 -2
  27. OctoBot-Trading-2.4.97/tests_additional/real_exchanges/test_bitmart.py +178 -0
  28. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/LICENSE +0 -0
  29. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/MANIFEST.in +0 -0
  30. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  31. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  32. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/OctoBot_Trading.egg-info/requires.txt +0 -0
  33. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  34. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/api/channels.py +0 -0
  35. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/api/contracts.py +0 -0
  36. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/api/modes.py +0 -0
  37. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/api/orders.py +0 -0
  38. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/api/positions.py +0 -0
  39. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/api/profitability.py +0 -0
  40. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/api/storage.py +0 -0
  41. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/api/trader.py +0 -0
  42. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/api/trades.py +0 -0
  43. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/enums.py +0 -0
  44. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/errors.py +0 -0
  45. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_channel.py +0 -0
  46. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/__init__.py +0 -0
  47. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  48. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  49. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  50. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  51. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  52. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  53. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  54. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  55. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  56. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  57. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  58. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  59. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  60. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  61. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  62. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  63. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  64. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  65. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  66. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  67. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  68. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  69. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  70. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  71. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  72. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  73. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  74. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  75. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  76. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  77. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  78. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  79. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  80. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  81. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  82. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  83. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  84. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  85. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  86. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  87. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  88. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  89. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  90. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  91. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  92. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  93. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  94. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/__init__.py +0 -0
  95. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  96. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  97. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  98. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/config/__init__.py +0 -0
  99. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  100. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  101. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  102. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
  103. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
  104. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  105. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  106. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  107. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  108. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  109. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  110. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  111. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/exchange_channels.py +0 -0
  112. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/exchange_details.py +0 -0
  113. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/exchange_factory.py +0 -0
  114. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/exchange_manager.py +0 -0
  115. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/exchanges.py +0 -0
  116. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  117. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  118. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  119. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  120. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/traders/__init__.py +0 -0
  121. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  122. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/types/__init__.py +0 -0
  123. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  124. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/util/__init__.py +0 -0
  125. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  126. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  127. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  128. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  129. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/__init__.py +0 -0
  130. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/channel/__init__.py +0 -0
  131. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  132. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  133. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/channel/mode.py +0 -0
  134. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/mode_activity.py +0 -0
  135. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/mode_config.py +0 -0
  136. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/modes_factory.py +0 -0
  137. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/modes_util.py +0 -0
  138. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  139. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  140. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  141. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  142. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  143. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  144. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  145. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  146. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  147. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  148. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  149. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  150. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  151. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  152. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  153. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  154. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/octobot_channel_consumer.py +0 -0
  155. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/__init__.py +0 -0
  156. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  157. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/__init__.py +0 -0
  158. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  159. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  160. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  161. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  162. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  163. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  164. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  165. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  166. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/order.py +0 -0
  167. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  168. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  169. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/order_group.py +0 -0
  170. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/order_state.py +0 -0
  171. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/order_util.py +0 -0
  172. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  173. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  174. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  175. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  176. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  177. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  178. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  179. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  180. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  181. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  182. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  183. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  184. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  185. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  186. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  187. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  188. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  189. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  190. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  191. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  192. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  193. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  194. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  195. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  196. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  197. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  198. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  199. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  200. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  201. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  202. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  203. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  204. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  205. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  206. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  207. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  208. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  209. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  210. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  211. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  212. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  213. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  214. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  215. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  216. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  217. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  218. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  219. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  220. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  221. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  222. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  223. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  224. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  225. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/__init__.py +0 -0
  226. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  227. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  228. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  229. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  230. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/position.py +0 -0
  231. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  232. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/position_state.py +0 -0
  233. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/position_util.py +0 -0
  234. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  235. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  236. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  237. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  238. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  239. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  240. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  241. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  242. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  243. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/state.py +0 -0
  244. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/trades/__init__.py +0 -0
  245. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  246. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  247. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  248. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/trades/trade.py +0 -0
  249. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  250. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  251. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  252. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  253. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  254. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  255. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  256. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  257. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  258. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  259. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  260. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  261. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  262. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/signals/__init__.py +0 -0
  263. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/signals/channel/__init__.py +0 -0
  264. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  265. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  266. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/signals/channel/signal_producer.py +0 -0
  267. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/signals/signal_creation.py +0 -0
  268. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  269. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/signals/util.py +0 -0
  270. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/storage/__init__.py +0 -0
  271. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/storage/abstract_storage.py +0 -0
  272. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/storage/candles_storage.py +0 -0
  273. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/storage/orders_storage.py +0 -0
  274. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/storage/portfolio_storage.py +0 -0
  275. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/storage/storage_manager.py +0 -0
  276. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/storage/trades_storage.py +0 -0
  277. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/storage/transactions_storage.py +0 -0
  278. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/storage/util.py +0 -0
  279. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/supervisors/__init__.py +0 -0
  280. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  281. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  282. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/util/__init__.py +0 -0
  283. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/util/config_util.py +0 -0
  284. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/util/initializable.py +0 -0
  285. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/util/initialization_util.py +0 -0
  286. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/util/simulator_updater_utils.py +0 -0
  287. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/util/test_tools/__init__.py +0 -0
  288. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  289. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  290. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  291. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  292. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/requirements.txt +0 -0
  293. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/setup.cfg +0 -0
  294. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/setup.py +0 -0
  295. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/api/__init__.py +0 -0
  296. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/api/test_channels.py +0 -0
  297. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/api/test_exchange.py +0 -0
  298. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/api/test_modes.py +0 -0
  299. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/api/test_orders.py +0 -0
  300. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/api/test_portfolio.py +0 -0
  301. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/api/test_profitability.py +0 -0
  302. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/api/test_symbol_data.py +0 -0
  303. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/api/test_trader.py +0 -0
  304. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/api/test_trades.py +0 -0
  305. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/cli/__init__.py +0 -0
  306. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/__init__.py +0 -0
  307. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/contracts/__init__.py +0 -0
  308. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  309. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  310. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/funding/__init__.py +0 -0
  311. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  312. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/kline/__init__.py +0 -0
  313. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  314. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/ohlcv/__init__.py +0 -0
  315. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  316. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  317. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/order_book/__init__.py +0 -0
  318. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  319. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/prices/__init__.py +0 -0
  320. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  321. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  322. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/recent_trades/__init__.py +0 -0
  323. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  324. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  325. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/ticker/__init__.py +0 -0
  326. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  327. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/__init__.py +0 -0
  328. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/connectors/__init__.py +0 -0
  329. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  330. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  331. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  332. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/implementations/__init__.py +0 -0
  333. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  334. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  335. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/test_abstract_exchange.py +0 -0
  336. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  337. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/test_exchange_builder.py +0 -0
  338. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/test_exchange_config_data.py +0 -0
  339. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/test_exchange_factory.py +0 -0
  340. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/test_exchange_manager.py +0 -0
  341. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/test_exchange_simulator.py +0 -0
  342. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/test_exchanges.py +0 -0
  343. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/traders/__init__.py +0 -0
  344. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/traders/test_trader.py +0 -0
  345. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/types/__init__.py +0 -0
  346. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  347. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/util/__init__.py +0 -0
  348. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  349. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/exchanges/util/test_exchange_util.py +0 -0
  350. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/modes/__init__.py +0 -0
  351. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/modes/script_keywords/__init__.py +0 -0
  352. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  353. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  354. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  355. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  356. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  357. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  358. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  359. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/modes/test_abstract_mode_consumer.py +0 -0
  360. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/modes/test_abstract_trading_mode.py +0 -0
  361. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/modes/test_modes_util.py +0 -0
  362. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/__init__.py +0 -0
  363. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/__init__.py +0 -0
  364. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/groups/__init__.py +0 -0
  365. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  366. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  367. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  368. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/states/__init__.py +0 -0
  369. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  370. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  371. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  372. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  373. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/states/test_order_state.py +0 -0
  374. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  375. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  376. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  377. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  378. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  379. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/test_order.py +0 -0
  380. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/test_order_adapter.py +0 -0
  381. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/test_order_factory.py +0 -0
  382. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/test_order_util.py +0 -0
  383. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/test_orders_manager.py +0 -0
  384. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  385. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/types/__init__.py +0 -0
  386. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  387. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  388. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  389. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  390. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  391. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  392. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  393. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  394. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/types/market/__init__.py +0 -0
  395. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  396. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  397. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  398. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  399. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  400. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  401. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/__init__.py +0 -0
  402. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  403. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  404. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  405. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  406. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/history/__init__.py +0 -0
  407. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  408. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  409. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/test_asset.py +0 -0
  410. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  411. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  412. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  413. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  414. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  415. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/types/__init__.py +0 -0
  416. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  417. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  418. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  419. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/positions/__init__.py +0 -0
  420. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/positions/channel/__init__.py +0 -0
  421. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/positions/states/__init__.py +0 -0
  422. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/positions/test_position.py +0 -0
  423. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/positions/test_position_factory.py +0 -0
  424. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/positions/test_positions_manager.py +0 -0
  425. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/positions/types/__init__.py +0 -0
  426. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  427. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  428. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/trades/__init__.py +0 -0
  429. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/trades/test_trade_factory.py +0 -0
  430. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/trades/test_trade_manager.py +0 -0
  431. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  432. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/trades/test_trade_util.py +0 -0
  433. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/transactions/__init__.py +0 -0
  434. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  435. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  436. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/signals/__init__.py +0 -0
  437. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  438. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/signals/test_util.py +0 -0
  439. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/test_utils/__init__.py +0 -0
  440. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/test_utils/order_util.py +0 -0
  441. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/test_utils/random_numbers.py +0 -0
  442. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/util/__init__.py +0 -0
  443. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests/util/test_config_util.py +0 -0
  444. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/__init__.py +0 -0
  445. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/__init__.py +0 -0
  446. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
  447. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  448. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  449. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_binance.py +0 -0
  450. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  451. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_bingx.py +0 -0
  452. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  453. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_bitget.py +0 -0
  454. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  455. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_bitso.py +0 -0
  456. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  457. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_bybit.py +0 -0
  458. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  459. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  460. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_coinex.py +0 -0
  461. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  462. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_gateio.py +0 -0
  463. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  464. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  465. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_htx.py +0 -0
  466. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_kraken.py +0 -0
  467. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  468. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  469. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_mexc.py +0 -0
  470. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_ndax.py +0 -0
  471. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  472. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_okx.py +0 -0
  473. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  474. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_phemex.py +0 -0
  475. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  476. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_upbit.py +0 -0
  477. {OctoBot-Trading-2.4.95 → OctoBot-Trading-2.4.97}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,19 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [2.4.97] - 2024-08-14
8
+ ### Added
9
+ - [Exchanges] cancel_all_orders
10
+ - [Exchanges] forced ticker setting
11
+ - [API] get_daily_base_and_quote_volume
12
+ ### Fixed
13
+ - [Exchanges] ticker volumes
14
+
15
+ ## [2.4.96] - 2024-08-13
16
+ ### Added
17
+ - [Exchanges] BitMart tests
18
+ - [API] get_usd_like_symbols_from_symbols
19
+
7
20
  ## [2.4.95] - 2024-08-03
8
21
  ### Fixed
9
22
  - [Exchanges] reduce market status cache time
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.95
3
+ Version: 2.4.97
4
4
  Summary: OctoBot project trading package
5
5
  Home-page: https://github.com/Drakkar-Software/OctoBot-Trading
6
6
  Author: Drakkar-Software
@@ -16,7 +16,7 @@ Classifier: Operating System :: POSIX
16
16
  Requires-Python: >=3.8
17
17
  License-File: LICENSE
18
18
 
19
- # OctoBot-Trading [2.4.95](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.97](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
20
20
  [![Codacy Badge](https://api.codacy.com/project/badge/Grade/903b6b22bceb4661b608a86fea655f69)](https://app.codacy.com/gh/Drakkar-Software/OctoBot-Trading?utm_source=github.com&utm_medium=referral&utm_content=Drakkar-Software/OctoBot-Trading&utm_campaign=Badge_Grade_Dashboard)
21
21
  [![PyPI](https://img.shields.io/pypi/v/OctoBot-Trading.svg)](https://pypi.python.org/pypi/OctoBot-Trading/)
22
22
  [![Coverage Status](https://coveralls.io/repos/github/Drakkar-Software/OctoBot-Trading/badge.svg?branch=master)](https://coveralls.io/github/Drakkar-Software/OctoBot-Trading?branch=master)
@@ -449,6 +449,7 @@ tests_additional/real_exchanges/test_bingx.py
449
449
  tests_additional/real_exchanges/test_bitfinex.py
450
450
  tests_additional/real_exchanges/test_bitget.py
451
451
  tests_additional/real_exchanges/test_bithumb.py
452
+ tests_additional/real_exchanges/test_bitmart.py
452
453
  tests_additional/real_exchanges/test_bitso.py
453
454
  tests_additional/real_exchanges/test_bitstamp.py
454
455
  tests_additional/real_exchanges/test_bybit.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.95
3
+ Version: 2.4.97
4
4
  Summary: OctoBot project trading package
5
5
  Home-page: https://github.com/Drakkar-Software/OctoBot-Trading
6
6
  Author: Drakkar-Software
@@ -16,7 +16,7 @@ Classifier: Operating System :: POSIX
16
16
  Requires-Python: >=3.8
17
17
  License-File: LICENSE
18
18
 
19
- # OctoBot-Trading [2.4.95](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.97](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
20
20
  [![Codacy Badge](https://api.codacy.com/project/badge/Grade/903b6b22bceb4661b608a86fea655f69)](https://app.codacy.com/gh/Drakkar-Software/OctoBot-Trading?utm_source=github.com&utm_medium=referral&utm_content=Drakkar-Software/OctoBot-Trading&utm_campaign=Badge_Grade_Dashboard)
21
21
  [![PyPI](https://img.shields.io/pypi/v/OctoBot-Trading.svg)](https://pypi.python.org/pypi/OctoBot-Trading/)
22
22
  [![Coverage Status](https://coveralls.io/repos/github/Drakkar-Software/OctoBot-Trading/badge.svg?branch=master)](https://coveralls.io/github/Drakkar-Software/OctoBot-Trading?branch=master)
@@ -1,4 +1,4 @@
1
- # OctoBot-Trading [2.4.95](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.97](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
2
2
  [![Codacy Badge](https://api.codacy.com/project/badge/Grade/903b6b22bceb4661b608a86fea655f69)](https://app.codacy.com/gh/Drakkar-Software/OctoBot-Trading?utm_source=github.com&utm_medium=referral&utm_content=Drakkar-Software/OctoBot-Trading&utm_campaign=Badge_Grade_Dashboard)
3
3
  [![PyPI](https://img.shields.io/pypi/v/OctoBot-Trading.svg)](https://pypi.python.org/pypi/OctoBot-Trading/)
4
4
  [![Coverage Status](https://coveralls.io/repos/github/Drakkar-Software/OctoBot-Trading/badge.svg?branch=master)](https://coveralls.io/github/Drakkar-Software/OctoBot-Trading?branch=master)
@@ -15,4 +15,4 @@
15
15
  # License along with this library.
16
16
 
17
17
  PROJECT_NAME = "OctoBot-Trading"
18
- VERSION = "2.4.95" # major.minor.revision
18
+ VERSION = "2.4.97" # major.minor.revision
@@ -42,6 +42,7 @@ from octobot_trading.api.symbol_data import (
42
42
  get_symbol_high_candles,
43
43
  get_symbol_low_candles,
44
44
  get_symbol_volume_candles,
45
+ get_daily_base_and_quote_volume,
45
46
  get_symbol_time_candles,
46
47
  create_new_candles_manager,
47
48
  force_set_mark_price,
@@ -163,6 +164,7 @@ from octobot_trading.api.portfolio import (
163
164
  get_draw_down,
164
165
  get_coefficient_of_determination,
165
166
  get_usd_like_symbol_from_symbols,
167
+ get_usd_like_symbols_from_symbols,
166
168
  can_convert_symbol_to_usd_like,
167
169
  is_usd_like_coin,
168
170
  get_global_portfolio_currencies_values,
@@ -231,6 +233,7 @@ __all__ = [
231
233
  "get_symbol_high_candles",
232
234
  "get_symbol_low_candles",
233
235
  "get_symbol_volume_candles",
236
+ "get_daily_base_and_quote_volume",
234
237
  "get_symbol_time_candles",
235
238
  "create_new_candles_manager",
236
239
  "force_set_mark_price",
@@ -338,6 +341,7 @@ __all__ = [
338
341
  "get_draw_down",
339
342
  "get_coefficient_of_determination",
340
343
  "get_usd_like_symbol_from_symbols",
344
+ "get_usd_like_symbols_from_symbols",
341
345
  "can_convert_symbol_to_usd_like",
342
346
  "is_usd_like_coin",
343
347
  "get_global_portfolio_currencies_values",
@@ -78,7 +78,7 @@ def get_exchange_configuration_from_exchange_id(exchange_id: str) -> exchanges.E
78
78
 
79
79
 
80
80
  # prefer get_exchange_manager_from_exchange_name_and_id when possible
81
- def get_exchange_manager_from_exchange_id(exchange_id: str) -> object:
81
+ def get_exchange_manager_from_exchange_id(exchange_id: str) -> exchanges.ExchangeManager:
82
82
  try:
83
83
  return get_exchange_configuration_from_exchange_id(exchange_id).exchange_manager
84
84
  except KeyError:
@@ -96,6 +96,10 @@ def get_usd_like_symbol_from_symbols(currency: str, symbols) -> str:
96
96
  return personal_data.ValueConverter.get_usd_like_symbol_from_symbols(currency, symbols)
97
97
 
98
98
 
99
+ def get_usd_like_symbols_from_symbols(currency: str, symbols) -> list:
100
+ return personal_data.ValueConverter.get_usd_like_symbols_from_symbols(currency, symbols)
101
+
102
+
99
103
  def can_convert_symbol_to_usd_like(symbol: str) -> bool:
100
104
  return personal_data.ValueConverter.can_convert_symbol_to_usd_like(symbol)
101
105
 
@@ -94,6 +94,32 @@ def get_symbol_volume_candles(symbol_data, time_frame, limit=-1, include_in_cons
94
94
  return exchange_data.get_symbol_volume_candles(symbol_data, time_frame, limit, include_in_construction)
95
95
 
96
96
 
97
+ def get_daily_base_and_quote_volume(symbol_data, reference_price: decimal.Decimal) -> (decimal.Decimal, decimal.Decimal):
98
+ base_volume = symbol_data.ticker_manager.ticker.get(
99
+ octobot_trading.enums.ExchangeConstantsTickersColumns.BASE_VOLUME.value,
100
+ "nan"
101
+ )
102
+ quote_volume = symbol_data.ticker_manager.ticker.get(
103
+ octobot_trading.enums.ExchangeConstantsTickersColumns.QUOTE_VOLUME.value,
104
+ "nan"
105
+ )
106
+ if base_volume:
107
+ base_volume = decimal.Decimal(str(base_volume))
108
+ if not quote_volume or decimal.Decimal(str(quote_volume)).is_nan():
109
+ # compute from the other if missing
110
+ quote_volume = base_volume * reference_price
111
+ if quote_volume:
112
+ quote_volume = decimal.Decimal(str(quote_volume))
113
+ if not base_volume or decimal.Decimal(str(base_volume)).is_nan():
114
+ # compute from the other if missing
115
+ base_volume = quote_volume / reference_price
116
+ if not (base_volume and quote_volume):
117
+ raise ValueError(
118
+ f"Missing volume {base_volume=} {quote_volume=}"
119
+ )
120
+ return base_volume, quote_volume
121
+
122
+
97
123
  def get_symbol_time_candles(symbol_data, time_frame, limit=-1, include_in_construction=False):
98
124
  return exchange_data.get_symbol_time_candles(symbol_data, time_frame, limit, include_in_construction)
99
125
 
@@ -99,6 +99,7 @@ FULL_CANDLE_HISTORY_EXCHANGES = [
99
99
  "mexc",
100
100
  "coinbase",
101
101
  "binanceus",
102
+ "bitmart",
102
103
  ]
103
104
 
104
105
  DEFAULT_FUTURE_EXCHANGES = ["binanceusdm", "bybit"]
@@ -124,7 +125,7 @@ TESTED_EXCHANGES = [
124
125
  DEFAULT_FUTURE_EXCHANGES = sorted(["bybit"])
125
126
  SIMULATOR_TESTED_EXCHANGES = sorted(["bitfinex2", "bithumb", "bitstamp", "bittrex",
126
127
  "hitbtc", "kraken", "poloniex", "bitso", "ndax", "upbit",
127
- "wavesexchange"])
128
+ "wavesexchange", "bitmart",])
128
129
 
129
130
  # text content of errors due to exchange compliancy rules
130
131
  # Warning: should never be a false positive
@@ -33,7 +33,7 @@ class ExchangeSymbolsData:
33
33
  exchange_symbol_data.stop()
34
34
  self.exchange_symbol_data = {}
35
35
 
36
- def get_exchange_symbol_data(self, symbol, allow_creation=True):
36
+ def get_exchange_symbol_data(self, symbol, allow_creation=True) -> ExchangeSymbolData:
37
37
  try:
38
38
  return self.exchange_symbol_data[symbol]
39
39
  except KeyError as e:
@@ -89,7 +89,13 @@ class PricesManager(util.Initializable):
89
89
  (mark_price, self.exchange_manager.exchange.get_exchange_current_time())
90
90
  return is_mark_price_updated
91
91
 
92
- async def get_mark_price(self, timeout=MARK_PRICE_FETCH_TIMEOUT):
92
+ def get_mark_price_no_wait(self) -> decimal.Decimal:
93
+ self._ensure_price_validity()
94
+ if not self.valid_price_received_event.is_set():
95
+ raise ValueError(f"No up to date mark price for {self.exchange_manager.exchange_name}")
96
+ return self.mark_price
97
+
98
+ async def get_mark_price(self, timeout=MARK_PRICE_FETCH_TIMEOUT) -> decimal.Decimal:
93
99
  """
94
100
  Return mark price if valid
95
101
  :param timeout: event wait timeout
@@ -95,11 +95,12 @@ class TickerUpdater(ticker_channel.TickerProducer):
95
95
  """
96
96
 
97
97
  def _should_use_future(self):
98
- return self.channel.exchange_manager.is_future and \
99
- (
100
- self.channel.exchange_manager.exchange.FUNDING_IN_TICKER
101
- or self.channel.exchange_manager.exchange.MARK_PRICE_IN_TICKER
102
- )
98
+ return (
99
+ self.channel.exchange_manager.is_future and (
100
+ self.channel.exchange_manager.exchange.FUNDING_IN_TICKER
101
+ or self.channel.exchange_manager.exchange.MARK_PRICE_IN_TICKER
102
+ )
103
+ )
103
104
 
104
105
  async def modify(self, added_pairs=None, removed_pairs=None):
105
106
  if added_pairs:
@@ -62,7 +62,12 @@ class TickerManager(util.Initializable):
62
62
  }
63
63
 
64
64
  def ticker_update(self, ticker):
65
- self.ticker.update(ticker)
65
+ ticker_update = {
66
+ key: val
67
+ for key, val in ticker.items()
68
+ if val
69
+ }
70
+ self.ticker.update(ticker_update)
66
71
 
67
72
  def mini_ticker_update(self, mini_ticker):
68
73
  self.mini_ticker.update(mini_ticker)
@@ -95,7 +95,7 @@ class AbstractExchange(tentacles_management.AbstractTentacle):
95
95
 
96
96
  self.is_unreachable = False
97
97
 
98
- self._creating_exchange_order_ids = set()
98
+ self._creating_exchange_order_descriptions = set()
99
99
 
100
100
  if self.exchange_manager.tentacles_setup_config is not None:
101
101
  self.load_user_inputs_from_class(self.exchange_manager.tentacles_setup_config, self.tentacle_config)
@@ -327,6 +327,13 @@ class AbstractExchange(tentacles_management.AbstractTentacle):
327
327
  """
328
328
  raise NotImplementedError("get_leverage_tiers is not implemented")
329
329
 
330
+ async def cancel_all_orders(self, symbol: str = None, **kwargs: dict) -> None:
331
+ """
332
+ Cancel all orders on the exchange
333
+ :param symbol: the orders symbol
334
+ """
335
+ raise NotImplementedError("cancel_all_orders is not implemented")
336
+
330
337
  async def cancel_order(
331
338
  self, exchange_order_id: str, symbol: str, order_type: enums.TraderOrderType, **kwargs: dict
332
339
  ) -> enums.OrderStatus:
@@ -720,17 +727,25 @@ class AbstractExchange(tentacles_management.AbstractTentacle):
720
727
  f"({error.__class__.__name__}: {error})")
721
728
 
722
729
  @contextlib.contextmanager
723
- def creating_order(self, creating_order: dict):
724
- exchange_order_id = creating_order.get(
725
- enums.ExchangeConstantsOrderColumns.EXCHANGE_ID.value
726
- ) if creating_order else None
730
+ def creating_order(
731
+ self, side: enums.TradeOrderSide, symbol: str, quantity: decimal.Decimal, price: decimal.Decimal
732
+ ):
733
+ desc = self._get_order_description(side, symbol, quantity, price)
727
734
  try:
728
- self._creating_exchange_order_ids.add(exchange_order_id)
735
+ self._creating_exchange_order_descriptions.add(desc)
729
736
  yield
730
737
  finally:
731
- self._creating_exchange_order_ids.remove(exchange_order_id)
732
-
733
- def is_creating_order(self, exchange_order_id):
734
- if exchange_order_id is None:
735
- return False
736
- return exchange_order_id in self._creating_exchange_order_ids
738
+ self._creating_exchange_order_descriptions.remove(desc)
739
+
740
+ def is_creating_order(
741
+ self, order: dict, symbol: str
742
+ ) -> bool:
743
+ quantity = decimal.Decimal(str(order[enums.ExchangeConstantsOrderColumns.AMOUNT.value]))
744
+ price = decimal.Decimal(str(order[enums.ExchangeConstantsOrderColumns.PRICE.value]))
745
+ side = enums.TradeOrderSide(str(order[enums.ExchangeConstantsOrderColumns.SIDE.value]))
746
+ return self._get_order_description(side, symbol, quantity, price) in self._creating_exchange_order_descriptions
747
+
748
+ def _get_order_description(
749
+ self, side: enums.TradeOrderSide, symbol: str, quantity: decimal.Decimal, price: decimal.Decimal
750
+ ) -> str:
751
+ return f"{side.value}-{symbol}-{float(quantity)}-{float(price)}"
@@ -65,6 +65,9 @@ class ExchangeConfig(util.Initializable):
65
65
  # number of required historical candles
66
66
  self.required_historical_candles_count = constants.DEFAULT_IGNORED_VALUE
67
67
 
68
+ # periodic updaters that should always be started for this configuration
69
+ self.forced_updater_channels = set()
70
+
68
71
  self.backtesting_exchange_config = None
69
72
 
70
73
  async def initialize_impl(self):
@@ -141,6 +144,12 @@ class ExchangeConfig(util.Initializable):
141
144
  # If required timeframes: use those. Use traded timeframes otherwise
142
145
  return self.available_required_time_frames or self.traded_time_frames
143
146
 
147
+ def has_forced_updater(self, channel: str) -> bool:
148
+ return channel in self.forced_updater_channels
149
+
150
+ def add_forced_updater_channels(self, channel: set[str]):
151
+ self.forced_updater_channels.update(channel)
152
+
144
153
  async def add_watched_symbols(self, symbols):
145
154
  new_valid_symbols = [
146
155
  symbol
@@ -571,6 +571,19 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
571
571
  symbol=symbol, quantity=quantity
572
572
  )
573
573
 
574
+ @ccxt_client_util.converted_ccxt_common_errors
575
+ async def cancel_all_orders(self, symbol: str = None, **kwargs: dict) -> None:
576
+ try:
577
+ with self.error_describer():
578
+ await self.client.cancel_all_orders(symbol=symbol, params=kwargs)
579
+ except (ccxt.NotSupported, octobot_trading.errors.NotSupported) as e:
580
+ raise octobot_trading.errors.NotSupported(e) from e
581
+ except Exception as e:
582
+ self.logger.exception(
583
+ e, True, f"Unexpected error when cancelling all {symbol} orders | {e} ({e.__class__.__name__})"
584
+ )
585
+ raise e
586
+
574
587
  @ccxt_client_util.converted_ccxt_common_errors
575
588
  async def cancel_order(
576
589
  self, exchange_order_id: str, symbol: str, order_type: enums.TraderOrderType, **kwargs: dict
@@ -926,7 +926,8 @@ class CCXTWebsocketConnector(abstract_websocket_exchange.AbstractWebsocketExchan
926
926
  Ectc.CLOSE.value: kline[commons_enums.PriceIndexes.IND_PRICE_CLOSE.value],
927
927
  Ectc.LAST.value: kline[commons_enums.PriceIndexes.IND_PRICE_CLOSE.value],
928
928
  Ectc.PREVIOUS_CLOSE.value: None,
929
- Ectc.BASE_VOLUME.value: kline[commons_enums.PriceIndexes.IND_PRICE_VOL.value],
929
+ # do not include volume as this is not the ticker volume but the current candle volume
930
+ Ectc.BASE_VOLUME.value: None,
930
931
  Ectc.TIMESTAMP.value: self.exchange.get_exchange_current_time(),
931
932
  }
932
933
  await self.push_to_channel(
@@ -106,6 +106,10 @@ class ExchangeBuilder:
106
106
  self.config[commons_constants.CONFIG_TENTACLES_REQUIRED_CANDLES_COUNT],
107
107
  modes.get_required_candles_count(trading_mode_class, tentacles_setup_config)
108
108
  )
109
+ # register forced updaters if any
110
+ self.exchange_manager.exchange_config.add_forced_updater_channels(
111
+ trading_mode_class.get_forced_updater_channels()
112
+ )
109
113
 
110
114
  async def _build_trading_modes_if_required(self, trading_mode_class):
111
115
  if self._is_using_trading_modes:
@@ -34,14 +34,16 @@ def is_channel_managed_by_websocket(exchange_manager, channel):
34
34
  def is_channel_fully_managed_by_websocket(exchange_manager, channel):
35
35
  return (
36
36
  not any([
37
+ # no associated feed is related to a time frame
37
38
  exchange_manager.exchange_web_socket.is_time_frame_related_feed(feed)
38
39
  for feed in octobot_trading.constants.WEBSOCKET_FEEDS_TO_TRADING_CHANNELS[channel]
39
40
  ])
40
41
  or all([
42
+ # all required time frames are supported
41
43
  exchange_manager.exchange_web_socket.is_time_frame_supported(time_frame)
42
44
  for time_frame in exchange_manager.exchange_config.available_time_frames
43
45
  ])
44
- )
46
+ ) and not exchange_manager.exchange_config.has_forced_updater(channel)
45
47
 
46
48
 
47
49
  def is_websocket_feed_requiring_init(exchange_manager, channel):
@@ -459,6 +459,58 @@ class Trader(util.Initializable):
459
459
  f"Can't cancel order and unknown post sync order state for order: {order}."
460
460
  ) from err
461
461
 
462
+ async def cancel_all_orders(
463
+ self,
464
+ symbol: str,
465
+ allow_single_order_cancel_fallback: bool,
466
+ wait_for_cancelling: bool = True,
467
+ cancelling_timeout: float = octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT
468
+ ) -> bool:
469
+ orders_to_cancel = self.exchange_manager.exchange_personal_data.orders_manager.get_all_orders(symbol)
470
+ success = True
471
+ if orders_to_cancel:
472
+ self.logger.info(f"Cancelling all {len(orders_to_cancel)} {symbol} orders")
473
+ else:
474
+ return success
475
+ try:
476
+ cancel_on_exchange = False
477
+ for order in orders_to_cancel:
478
+ await order.lock.acquire()
479
+ if self.simulate or order.is_self_managed():
480
+ order.status = octobot_trading.enums.OrderStatus.CANCELED
481
+ else:
482
+ cancel_on_exchange = True
483
+ if cancel_on_exchange:
484
+ try:
485
+ success = False
486
+ await self.exchange_manager.exchange.cancel_all_orders(symbol)
487
+ success = True
488
+ except errors.NotSupported:
489
+ if allow_single_order_cancel_fallback:
490
+ self.logger.debug(
491
+ f"cancel_all_orders is not supported on {self.exchange_manager.exchange_name}. Falling "
492
+ f"back to one by one cancel"
493
+ )
494
+ for order in orders_to_cancel:
495
+ if not await self.cancel_order(
496
+ order.symbol,
497
+ wait_for_cancelling=wait_for_cancelling,
498
+ cancelling_timeout=cancelling_timeout
499
+ ):
500
+ success = False
501
+ else:
502
+ # not supported and no fallback allowed: re-raise errors.NotSupported
503
+ raise
504
+ for order in orders_to_cancel:
505
+ await order.on_cancel(force_cancel=True, is_from_exchange_data=False)
506
+ if wait_for_cancelling and order.state is not None and order.state.is_pending():
507
+ await self._wait_for_order_cancel(order, cancelling_timeout)
508
+ finally:
509
+ for order in orders_to_cancel:
510
+ order.lock.release()
511
+ self.logger.info(f"Cancelling of all {len(orders_to_cancel)} {symbol} orders complete")
512
+ return success
513
+
462
514
  async def _wait_for_order_cancel(self, order, cancelling_timeout):
463
515
  self.logger.debug(f"Waiting for order cancelling, order: {order}")
464
516
  await order.state.wait_for_terminate(cancelling_timeout)
@@ -164,12 +164,12 @@ class RestExchange(abstract_exchange.AbstractExchange):
164
164
  side: enums.TradeOrderSide = None, current_price: decimal.Decimal = None,
165
165
  reduce_only: bool = False, params: dict = None) -> typing.Optional[dict]:
166
166
  async with self._order_operation(order_type, symbol, quantity, price, stop_price):
167
- created_order = await self._create_order_with_retry(
168
- order_type=order_type, symbol=symbol, quantity=quantity, price=price,
169
- stop_price=stop_price, side=side, current_price=current_price,
170
- reduce_only=reduce_only, params=params)
171
- self.logger.debug(f"Created order: {created_order}")
172
- with self.creating_order(created_order):
167
+ with self.creating_order(side, symbol, quantity, price):
168
+ created_order = await self._create_order_with_retry(
169
+ order_type=order_type, symbol=symbol, quantity=quantity, price=price,
170
+ stop_price=stop_price, side=side, current_price=current_price,
171
+ reduce_only=reduce_only, params=params)
172
+ self.logger.debug(f"Created order: {created_order}")
173
173
  return await self._verify_order(created_order, order_type, symbol, price, side)
174
174
  return None
175
175
 
@@ -620,8 +620,11 @@ class RestExchange(abstract_exchange.AbstractExchange):
620
620
  async def get_my_recent_trades(self, symbol: str = None, since: int = None, limit: int = None, **kwargs: dict) -> list:
621
621
  return await self.connector.get_my_recent_trades(symbol=symbol, since=since, limit=limit, **kwargs)
622
622
 
623
+ async def cancel_all_orders(self, symbol: str = None, **kwargs: dict) -> None:
624
+ return await self.connector.cancel_all_orders(symbol=symbol, **kwargs)
625
+
623
626
  async def cancel_order(
624
- self, exchange_order_id: str, symbol: str, order_type: enums.TraderOrderType, **kwargs: dict
627
+ self, exchange_order_id: str, symbol: str, order_type: enums.TraderOrderType, **kwargs: dict
625
628
  ) -> enums.OrderStatus:
626
629
  return await self.connector.cancel_order(exchange_order_id, symbol, order_type, **kwargs)
627
630
 
@@ -306,6 +306,10 @@ class AbstractTradingMode(abstract_tentacle.AbstractTentacle):
306
306
  # when self.trading_config is None, should not happen
307
307
  return False
308
308
 
309
+ @classmethod
310
+ def get_forced_updater_channels(cls) -> set[str]:
311
+ return set()
312
+
309
313
  def _health_check_interval_expired(self) -> bool:
310
314
  return self.exchange_manager.exchange.get_exchange_current_time() - self._last_health_check_time \
311
315
  > self.HEALTH_CHECK_INTERVAL
@@ -490,6 +494,21 @@ class AbstractTradingMode(abstract_tentacle.AbstractTentacle):
490
494
  ignored_order=ignored_order
491
495
  )
492
496
 
497
+ async def cancel_all_orders(
498
+ self,
499
+ symbol: str,
500
+ allow_single_order_cancel_fallback: bool,
501
+ wait_for_cancelling: bool = True,
502
+ cancelling_timeout: float = constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT
503
+ ) -> bool:
504
+ # todo send signals when implementation will be necessary
505
+ return await self.exchange_manager.trader.cancel_all_orders(
506
+ symbol,
507
+ allow_single_order_cancel_fallback,
508
+ wait_for_cancelling=wait_for_cancelling,
509
+ cancelling_timeout=cancelling_timeout
510
+ )
511
+
493
512
  async def edit_order(self, order,
494
513
  edited_quantity: decimal.Decimal = None,
495
514
  edited_price: decimal.Decimal = None,
@@ -29,7 +29,7 @@ class OrdersProducer(exchanges_channel.ExchangeChannelProducer):
29
29
 
30
30
  async def perform(self, orders, is_from_bot=False, are_closed=False):
31
31
  try:
32
- self.logger.debug(f"Received order update for {len(orders)} {'closed' if are_closed else ''} orders.")
32
+ self.logger.debug(f"Received order update for {len(orders)} {'closed' if are_closed else ''}orders.")
33
33
  has_new_order = False
34
34
  waiting_complete_init_orders = []
35
35
  symbols = set()
@@ -40,7 +40,7 @@ class OrdersProducer(exchanges_channel.ExchangeChannelProducer):
40
40
  symbol = self.channel.exchange_manager.get_exchange_symbol(
41
41
  self.channel.exchange_manager.exchange.parse_order_symbol(order)
42
42
  )
43
- if self.channel.exchange_manager.exchange.is_creating_order(exchange_order_id):
43
+ if self.channel.exchange_manager.exchange.is_creating_order(order, symbol):
44
44
  # ignore orders that are being created
45
45
  self.logger.debug(
46
46
  f"Ignored update from order channel for {symbol} order with exchange order id "
@@ -92,13 +92,21 @@ class ValueConverter:
92
92
 
93
93
  @staticmethod
94
94
  def get_usd_like_symbol_from_symbols(currency: str, symbols) -> str:
95
+ try:
96
+ return ValueConverter.get_usd_like_symbols_from_symbols(currency, symbols)[0]
97
+ except IndexError:
98
+ return None
99
+
100
+ @staticmethod
101
+ def get_usd_like_symbols_from_symbols(currency: str, symbols) -> list:
95
102
  # look for symbols using USD_LIKE_COINS priorities
103
+ usd_like_symbols = []
96
104
  for usd_like_coin in commons_constants.USD_LIKE_COINS:
97
105
  for symbol in symbols:
98
106
  base_and_quote = symbol_util.parse_symbol(symbol).base_and_quote()
99
107
  if currency in base_and_quote and usd_like_coin in base_and_quote:
100
- return symbol
101
- return None
108
+ usd_like_symbols.append(symbol)
109
+ return usd_like_symbols
102
110
 
103
111
  @staticmethod
104
112
  def can_convert_symbol_to_usd_like(symbol: str) -> bool: