OctoBot-Trading 2.4.182__tar.gz → 2.4.184__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 (509) hide show
  1. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/CHANGELOG.md +8 -0
  2. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.182/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.184}/PKG-INFO +2 -2
  4. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/README.md +1 -1
  5. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/__init__.py +1 -1
  6. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +2 -1
  7. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/adapters/abstract_adapter.py +3 -2
  8. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +84 -42
  9. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/connectors/ccxt/enums.py +23 -0
  10. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/traders/trader.py +28 -15
  11. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/types/rest_exchange.py +13 -2
  12. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/channel/orders.py +1 -1
  13. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/channel/orders_updater.py +1 -1
  14. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/order.py +9 -0
  15. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/modes/test_abstract_mode_consumer.py +149 -2
  16. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/LICENSE +0 -0
  17. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/MANIFEST.in +0 -0
  18. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
  19. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  20. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  21. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/OctoBot_Trading.egg-info/requires.txt +0 -0
  22. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  23. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/api/__init__.py +0 -0
  24. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/api/channels.py +0 -0
  25. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/api/contracts.py +0 -0
  26. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/api/exchange.py +0 -0
  27. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/api/modes.py +0 -0
  28. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/api/orders.py +0 -0
  29. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/api/portfolio.py +0 -0
  30. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/api/positions.py +0 -0
  31. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/api/profitability.py +0 -0
  32. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/api/storage.py +0 -0
  33. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/api/symbol_data.py +0 -0
  34. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/api/trader.py +0 -0
  35. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/api/trades.py +0 -0
  36. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/constants.py +0 -0
  37. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/enums.py +0 -0
  38. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/errors.py +0 -0
  39. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_channel.py +0 -0
  40. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/__init__.py +0 -0
  41. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  42. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  43. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  44. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  45. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  46. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  47. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  48. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  49. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  50. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  51. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  52. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  53. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  54. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  55. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  56. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  57. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  58. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  59. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  60. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  61. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  62. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  63. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  64. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  65. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  66. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  67. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  68. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  69. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  70. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  71. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  72. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  73. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  74. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  75. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  76. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  77. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  78. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  79. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  80. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  81. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  82. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  83. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  84. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  85. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  86. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  87. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  88. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  89. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  90. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  91. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/__init__.py +0 -0
  92. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  93. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  94. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  95. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/config/__init__.py +0 -0
  96. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  97. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  98. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/config/exchange_credentials_data.py +0 -0
  99. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/config/proxy_config.py +0 -0
  100. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  101. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  102. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
  103. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
  104. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  105. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  106. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  107. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  108. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  109. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  110. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  111. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/exchange_builder.py +0 -0
  112. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/exchange_channels.py +0 -0
  113. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/exchange_details.py +0 -0
  114. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/exchange_factory.py +0 -0
  115. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/exchange_manager.py +0 -0
  116. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  117. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/exchanges.py +0 -0
  118. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  119. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  120. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  121. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  122. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/traders/__init__.py +0 -0
  123. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  124. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/types/__init__.py +0 -0
  125. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  126. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/util/__init__.py +0 -0
  127. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  128. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  129. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  130. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  131. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/__init__.py +0 -0
  132. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/abstract_trading_mode.py +0 -0
  133. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/channel/__init__.py +0 -0
  134. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  135. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  136. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/channel/mode.py +0 -0
  137. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/mode_activity.py +0 -0
  138. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/mode_config.py +0 -0
  139. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/modes_factory.py +0 -0
  140. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/modes_util.py +0 -0
  141. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  142. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  143. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  144. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  145. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  146. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  147. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  148. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  149. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  150. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  151. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  152. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  153. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  154. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  155. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  156. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  157. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/octobot_channel_consumer.py +0 -0
  158. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/__init__.py +0 -0
  159. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  160. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/__init__.py +0 -0
  161. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/active_order_swap_strategies/__init__.py +0 -0
  162. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/active_order_swap_strategies/active_order_swap_strategy.py +0 -0
  163. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/active_order_swap_strategies/stop_first_active_order_swap_strategy.py +0 -0
  164. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/active_order_swap_strategies/take_profit_first_active_order_swap_strategy.py +0 -0
  165. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  166. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  167. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  168. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  169. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  170. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  171. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  172. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/groups/trailing_on_filled_tp_balanced_order_group.py +0 -0
  173. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  174. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  175. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/order_group.py +0 -0
  176. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/order_state.py +0 -0
  177. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/order_util.py +0 -0
  178. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  179. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  180. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  181. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  182. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  183. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  184. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  185. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  186. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  187. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  188. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/trailing_profiles/__init__.py +0 -0
  189. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/trailing_profiles/filled_take_profit_trailing_profile.py +0 -0
  190. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/trailing_profiles/trailing_price_step.py +0 -0
  191. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile.py +0 -0
  192. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile_factory.py +0 -0
  193. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile_types.py +0 -0
  194. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/triggers/__init__.py +0 -0
  195. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/triggers/base_trigger.py +0 -0
  196. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/triggers/price_trigger.py +0 -0
  197. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  198. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  199. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  200. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  201. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  202. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  203. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  204. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  205. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  206. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  207. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  208. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  209. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  210. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  211. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  212. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  213. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  214. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  215. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  216. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  217. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  218. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  219. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  220. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  221. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  222. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  223. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  224. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  225. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  226. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  227. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  228. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  229. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  230. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  231. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  232. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  233. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  234. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  235. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  236. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/sub_portfolio_data.py +0 -0
  237. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  238. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  239. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  240. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  241. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  242. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/__init__.py +0 -0
  243. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  244. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  245. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  246. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  247. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/position.py +0 -0
  248. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  249. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/position_state.py +0 -0
  250. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/position_util.py +0 -0
  251. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  252. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  253. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  254. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  255. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  256. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  257. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  258. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  259. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  260. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/state.py +0 -0
  261. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/trades/__init__.py +0 -0
  262. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  263. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  264. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  265. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/trades/trade.py +0 -0
  266. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  267. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  268. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  269. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  270. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  271. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  272. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  273. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  274. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  275. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  276. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  277. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  278. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  279. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/signals/__init__.py +0 -0
  280. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/signals/channel/__init__.py +0 -0
  281. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  282. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  283. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/signals/channel/signal_producer.py +0 -0
  284. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/signals/signal_creation.py +0 -0
  285. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  286. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/signals/util.py +0 -0
  287. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/storage/__init__.py +0 -0
  288. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/storage/abstract_storage.py +0 -0
  289. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/storage/candles_storage.py +0 -0
  290. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/storage/orders_storage.py +0 -0
  291. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/storage/portfolio_storage.py +0 -0
  292. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/storage/storage_manager.py +0 -0
  293. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/storage/trades_storage.py +0 -0
  294. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/storage/transactions_storage.py +0 -0
  295. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/storage/util.py +0 -0
  296. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/supervisors/__init__.py +0 -0
  297. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  298. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  299. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/util/__init__.py +0 -0
  300. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/util/config_util.py +0 -0
  301. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/util/initializable.py +0 -0
  302. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/util/initialization_util.py +0 -0
  303. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/util/simulator_updater_utils.py +0 -0
  304. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/util/test_tools/__init__.py +0 -0
  305. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  306. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  307. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  308. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  309. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/requirements.txt +0 -0
  310. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/setup.cfg +0 -0
  311. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/setup.py +0 -0
  312. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/api/__init__.py +0 -0
  313. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/api/test_channels.py +0 -0
  314. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/api/test_exchange.py +0 -0
  315. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/api/test_modes.py +0 -0
  316. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/api/test_orders.py +0 -0
  317. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/api/test_portfolio.py +0 -0
  318. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/api/test_profitability.py +0 -0
  319. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/api/test_symbol_data.py +0 -0
  320. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/api/test_trader.py +0 -0
  321. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/api/test_trades.py +0 -0
  322. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/cli/__init__.py +0 -0
  323. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/__init__.py +0 -0
  324. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/contracts/__init__.py +0 -0
  325. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  326. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  327. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/funding/__init__.py +0 -0
  328. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  329. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/kline/__init__.py +0 -0
  330. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  331. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/ohlcv/__init__.py +0 -0
  332. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  333. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  334. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/order_book/__init__.py +0 -0
  335. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  336. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/prices/__init__.py +0 -0
  337. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  338. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  339. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/recent_trades/__init__.py +0 -0
  340. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  341. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  342. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/ticker/__init__.py +0 -0
  343. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  344. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/__init__.py +0 -0
  345. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/connectors/__init__.py +0 -0
  346. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  347. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  348. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  349. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/implementations/__init__.py +0 -0
  350. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  351. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  352. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/test_abstract_exchange.py +0 -0
  353. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  354. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/test_exchange_builder.py +0 -0
  355. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/test_exchange_config_data.py +0 -0
  356. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/test_exchange_factory.py +0 -0
  357. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/test_exchange_manager.py +0 -0
  358. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/test_exchange_simulator.py +0 -0
  359. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/test_exchanges.py +0 -0
  360. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/traders/__init__.py +0 -0
  361. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/traders/test_trader.py +0 -0
  362. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/types/__init__.py +0 -0
  363. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  364. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/util/__init__.py +0 -0
  365. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  366. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/exchanges/util/test_exchange_util.py +0 -0
  367. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/modes/__init__.py +0 -0
  368. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/modes/script_keywords/__init__.py +0 -0
  369. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  370. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  371. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  372. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  373. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  374. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  375. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  376. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/modes/test_abstract_trading_mode.py +0 -0
  377. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/modes/test_modes_util.py +0 -0
  378. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/__init__.py +0 -0
  379. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/__init__.py +0 -0
  380. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/active_order_swap_strategies/__init__.py +0 -0
  381. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/active_order_swap_strategies/test_active_order_swap_strategy.py +0 -0
  382. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/active_order_swap_strategies/test_stop_first_active_order_swap_strategy.py +0 -0
  383. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/active_order_swap_strategies/test_take_profit_first_active_order_swap_strategy.py +0 -0
  384. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/groups/__init__.py +0 -0
  385. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  386. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  387. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  388. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/groups/test_trailing_on_filled_tp_balanced_order_group.py +0 -0
  389. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/states/__init__.py +0 -0
  390. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  391. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  392. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  393. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  394. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/states/test_order_state.py +0 -0
  395. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  396. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  397. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  398. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  399. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  400. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/test_order.py +0 -0
  401. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/test_order_adapter.py +0 -0
  402. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/test_order_factory.py +0 -0
  403. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/test_order_util.py +0 -0
  404. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/test_orders_manager.py +0 -0
  405. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  406. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/trailing_profiles/__init__.py +0 -0
  407. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/trailing_profiles/test_filled_take_profit_trailing_profile.py +0 -0
  408. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/trailing_profiles/test_trailing_profile_factory.py +0 -0
  409. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/triggers/__init__.py +0 -0
  410. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/triggers/test_base_trigger.py +0 -0
  411. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/triggers/test_price_trigger.py +0 -0
  412. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/types/__init__.py +0 -0
  413. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  414. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  415. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  416. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  417. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  418. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  419. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  420. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  421. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/types/market/__init__.py +0 -0
  422. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  423. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  424. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  425. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  426. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  427. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  428. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/__init__.py +0 -0
  429. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  430. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  431. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  432. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  433. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/history/__init__.py +0 -0
  434. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  435. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  436. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/test_asset.py +0 -0
  437. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  438. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  439. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  440. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/test_portfolio_util.py +0 -0
  441. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  442. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/test_sub_portfolio_data.py +0 -0
  443. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  444. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/types/__init__.py +0 -0
  445. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  446. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  447. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  448. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/positions/__init__.py +0 -0
  449. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/positions/channel/__init__.py +0 -0
  450. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/positions/states/__init__.py +0 -0
  451. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/positions/test_position.py +0 -0
  452. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/positions/test_position_factory.py +0 -0
  453. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/positions/test_positions_manager.py +0 -0
  454. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/positions/types/__init__.py +0 -0
  455. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  456. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  457. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/trades/__init__.py +0 -0
  458. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/trades/test_trade_factory.py +0 -0
  459. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/trades/test_trade_manager.py +0 -0
  460. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  461. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/trades/test_trade_util.py +0 -0
  462. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/transactions/__init__.py +0 -0
  463. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  464. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  465. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/signals/__init__.py +0 -0
  466. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  467. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/signals/test_util.py +0 -0
  468. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/test_utils/__init__.py +0 -0
  469. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/test_utils/order_util.py +0 -0
  470. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/test_utils/random_numbers.py +0 -0
  471. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/util/__init__.py +0 -0
  472. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests/util/test_config_util.py +0 -0
  473. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/__init__.py +0 -0
  474. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/__init__.py +0 -0
  475. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
  476. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  477. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  478. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_binance.py +0 -0
  479. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  480. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_bingx.py +0 -0
  481. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  482. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_bitget.py +0 -0
  483. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  484. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_bitmart.py +0 -0
  485. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_bitmex.py +0 -0
  486. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_bitso.py +0 -0
  487. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  488. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_bybit.py +0 -0
  489. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  490. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  491. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_coinex.py +0 -0
  492. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  493. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_gateio.py +0 -0
  494. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  495. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  496. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_htx.py +0 -0
  497. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_hyperliquid.py +0 -0
  498. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_kraken.py +0 -0
  499. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  500. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  501. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_mexc.py +0 -0
  502. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_ndax.py +0 -0
  503. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  504. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_okx.py +0 -0
  505. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  506. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_phemex.py +0 -0
  507. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  508. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_upbit.py +0 -0
  509. {OctoBot-Trading-2.4.182 → OctoBot-Trading-2.4.184}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,14 @@ 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.184] - 2025-06-04
8
+ ### Fixed
9
+ [Order Cancel] fix deadlock
10
+
11
+ ## [2.4.183] - 2025-06-01
12
+ ### Fixed
13
+ [Exchanges] fix edit_order
14
+
7
15
  ## [2.4.182] - 2025-05-31
8
16
  ### Updated
9
17
  [Exchanges] set hostname on custom domain
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.182
3
+ Version: 2.4.184
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.182](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.184](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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.182
3
+ Version: 2.4.184
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.182](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.184](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.182](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.184](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.182" # major.minor.revision
18
+ VERSION = "2.4.184" # major.minor.revision
@@ -34,6 +34,7 @@ class RecentTradeUpdater(recent_trade_channel.RecentTradeProducer):
34
34
  self.refresh_time = RecentTradeUpdater.RECENT_TRADE_REFRESH_TIME
35
35
 
36
36
  async def init_recent_trades(self):
37
+ pair = None
37
38
  try:
38
39
  for pair in self.channel.exchange_manager.exchange_config.traded_symbol_pairs:
39
40
  recent_trades = await self.channel.exchange_manager.exchange.\
@@ -45,7 +46,7 @@ class RecentTradeUpdater(recent_trade_channel.RecentTradeProducer):
45
46
  self.logger.exception(
46
47
  e,
47
48
  True,
48
- f"Fail to initialize recent trades : {html_util.get_html_summary_if_relevant(e)}"
49
+ f"Fail to initialize {pair} recent trades : {html_util.get_html_summary_if_relevant(e)}"
49
50
  )
50
51
 
51
52
  async def start(self):
@@ -148,8 +148,9 @@ class AbstractAdapter:
148
148
 
149
149
  def fix_order(self, raw, **kwargs):
150
150
  # id is reserved for octobot managed id. store exchange id in EXCHANGE_ID
151
- raw[enums.ExchangeConstantsOrderColumns.EXCHANGE_ID.value] = \
152
- raw.pop(enums.ExchangeConstantsOrderColumns.ID.value, None)
151
+ if enums.ExchangeConstantsOrderColumns.ID.value in raw:
152
+ raw[enums.ExchangeConstantsOrderColumns.EXCHANGE_ID.value] = \
153
+ raw.pop(enums.ExchangeConstantsOrderColumns.ID.value, None)
153
154
  # add generic logic if necessary
154
155
  return raw
155
156
 
@@ -22,6 +22,7 @@ import aiohttp_socks
22
22
  import typing
23
23
  import inspect
24
24
  import binascii
25
+ import copy
25
26
 
26
27
  import octobot_commons.enums
27
28
  import octobot_commons.logging
@@ -596,52 +597,67 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
596
597
  symbol=symbol, quantity=quantity
597
598
  )
598
599
 
600
+ def _add_stop_loss_price_param(self, params: dict, price: float):
601
+ params = params or {}
602
+ if ccxt_enums.ExchangeOrderCCXTUnifiedParams.STOP_LOSS_PRICE.value not in params:
603
+ params[ccxt_enums.ExchangeOrderCCXTUnifiedParams.STOP_LOSS_PRICE.value] = price
604
+ return params
605
+
606
+ def _add_edit_stop_loss_price_param(self, params: dict, price: float):
607
+ params = params or {}
608
+ if self.exchange_manager.exchange.STOP_LOSS_EDIT_PRICE_PARAM not in params:
609
+ params[self.exchange_manager.exchange.STOP_LOSS_EDIT_PRICE_PARAM] = price
610
+ return params
611
+
599
612
  @ccxt_client_util.converted_ccxt_common_errors
600
613
  async def create_market_stop_loss_order(self, symbol, quantity, price, side, current_price, params=None) -> dict:
601
- if self.client.has.get("createStopMarketOrder"):
602
- try:
603
- return self.adapter.adapt_order(
604
- await self.client.createStopMarketOrder(
605
- symbol,
606
- side=side,
607
- amount=quantity,
608
- stopPrice=price,
609
- params=params,
610
- ),
611
- symbol=symbol, quantity=quantity
612
- )
613
- except ccxt.OrderImmediatelyFillable:
614
- # make sure stop always stops
615
- created_order = await self.exchange_manager.exchange.create_order(
616
- order_type=(enums.TraderOrderType.BUY_MARKET
617
- if side == enums.TradeOrderSide.BUY.value
618
- else enums.TraderOrderType.SELL_MARKET),
619
- symbol=symbol,
620
- quantity=decimal.Decimal(str(quantity)),
621
- price=decimal.Decimal(str(price)),
622
- current_price=decimal.Decimal(str(current_price))
614
+ try:
615
+ params = self._add_stop_loss_price_param(params, price)
616
+ return self.adapter.adapt_order(
617
+ await self.client.create_order(
618
+ symbol,
619
+ enums.TradeOrderType.MARKET.value,
620
+ side,
621
+ quantity,
622
+ params=params,
623
+ ),
624
+ symbol=symbol, quantity=quantity
625
+ )
626
+ except ccxt.NotSupported as err:
627
+ raise NotImplementedError(f"create_market_stop_loss_order is not supported {err}")
628
+ except ccxt.OrderImmediatelyFillable:
629
+ # make sure stop always stops
630
+ created_order = await self.exchange_manager.exchange.create_order(
631
+ order_type=(enums.TraderOrderType.BUY_MARKET
632
+ if side == enums.TradeOrderSide.BUY.value
633
+ else enums.TraderOrderType.SELL_MARKET),
634
+ symbol=symbol,
635
+ quantity=decimal.Decimal(str(quantity)),
636
+ price=decimal.Decimal(str(price)),
637
+ current_price=decimal.Decimal(str(current_price))
638
+ )
639
+ created_order[enums.ExchangeConstantsOrderColumns.TYPE.value] = (
640
+ enums.TraderOrderType.STOP_LOSS.value
623
641
  )
624
- created_order[enums.ExchangeConstantsOrderColumns.TYPE.value] = (
625
- enums.TraderOrderType.STOP_LOSS.value
626
- )
627
- return created_order
628
- raise NotImplementedError("create_market_stop_loss_order is not implemented")
642
+ return created_order
629
643
 
630
644
  @ccxt_client_util.converted_ccxt_common_errors
631
645
  async def create_limit_stop_loss_order(self, symbol, quantity, price, stop_price, side, params=None) -> dict:
632
- if self.client.has.get("createStopLimitOrder"):
646
+ try:
647
+ params = self._add_stop_loss_price_param(params, stop_price)
633
648
  return self.adapter.adapt_order(
634
- await self.client.create_stop_limit_order(
649
+ await self.client.create_order(
635
650
  symbol,
636
- side=side,
637
- amount=quantity,
651
+ enums.TradeOrderType.LIMIT.value,
652
+ side,
653
+ quantity,
638
654
  price=price,
639
- stopPrice=stop_price,
640
655
  params=params,
641
656
  ),
642
657
  symbol=symbol, quantity=quantity
643
658
  )
644
- raise NotImplementedError("create_limit_stop_loss_order is not implemented")
659
+ except ccxt.NotSupported as err:
660
+ raise NotImplementedError(f"create_limit_stop_loss_order is not supported {err}")
645
661
 
646
662
  @ccxt_client_util.converted_ccxt_common_errors
647
663
  async def create_market_take_profit_order(self, symbol, quantity, price=None, side=None, params=None) -> dict:
@@ -664,21 +680,47 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
664
680
  quantity: float, price: float, stop_price: float = None, side: str = None,
665
681
  current_price: float = None, params: dict = None):
666
682
  ccxt_order_type = self.get_ccxt_order_type(order_type)
667
- price_to_use = price
668
- if ccxt_order_type == enums.TradeOrderType.MARKET.value:
669
- # can't set price in market orders
670
- price_to_use = None
671
- # do not use keyword arguments here as default ccxt edit order is passing *args (and not **kwargs)
672
- if self.exchange_manager.exchange.SUPPORTS_NATIVE_EDIT_ORDER:
683
+ local_params = copy.copy(params)
684
+ if order_type == enums.TraderOrderType.STOP_LOSS:
685
+ local_params = self._add_edit_stop_loss_price_param(local_params, stop_price or price)
686
+ elif order_type == enums.TraderOrderType.STOP_LOSS_LIMIT:
687
+ local_params = self._add_edit_stop_loss_price_param(local_params, stop_price)
688
+ if self.exchange_manager.exchange.supports_native_edit_order(order_type):
689
+ price_to_use = price
690
+ if ccxt_order_type == enums.TradeOrderType.MARKET.value:
691
+ # can't set price in market orders
692
+ price_to_use = None
673
693
  edited_order = await self.client.edit_order(
674
- exchange_order_id, symbol, ccxt_order_type, side, quantity, price_to_use, params
694
+ exchange_order_id, symbol, ccxt_order_type, side, quantity, price_to_use, local_params
675
695
  )
696
+ if edited_order is not None:
697
+ # sometimes exchanges don't return the edited order details (ex: coinbase)
698
+ # => fill it with what we know and verify_order will fetch the rest
699
+ if not edited_order.get(ecoc.ID.value):
700
+ edited_order[ecoc.ID.value] = exchange_order_id
701
+ if not edited_order.get(ecoc.SYMBOL.value):
702
+ edited_order[ecoc.SYMBOL.value] = symbol
676
703
  else:
677
704
  # ccxt exchange edit order is disabled: force ccxt.exchange default edit order behavior
678
- await self.client.cancel_order(exchange_order_id, symbol)
679
- edited_order = await self.client.create_order(symbol, ccxt_order_type, side, quantity, price_to_use, params)
705
+ edited_order = await self._edit_order_by_cancel_and_create(
706
+ exchange_order_id, symbol, order_type, side, quantity, price, params
707
+ )
680
708
  return self.adapter.adapt_order(edited_order, symbol=symbol, quantity=quantity)
681
709
 
710
+ async def _edit_order_by_cancel_and_create(
711
+ self, exchange_order_id: str, symbol: str, order_type: enums.TraderOrderType,
712
+ side: str, quantity: float, price: float, params: dict
713
+ ) -> dict:
714
+ await self.client.cancel_order(exchange_order_id, symbol)
715
+ price_to_use = price
716
+ local_params = copy.copy(params)
717
+ ccxt_order_type = self.get_ccxt_order_type(order_type)
718
+ if ccxt_order_type == enums.TradeOrderType.MARKET.value:
719
+ # can't set price in market orders
720
+ price_to_use = None
721
+ local_params = self._add_stop_loss_price_param(local_params, price)
722
+ return await self.client.create_order(symbol, ccxt_order_type, side, quantity, price_to_use, local_params)
723
+
682
724
  @ccxt_client_util.converted_ccxt_common_errors
683
725
  async def cancel_all_orders(self, symbol: str = None, **kwargs: dict) -> None:
684
726
  try:
@@ -112,6 +112,29 @@ class ExchangeOrderCCXTColumns(enum.Enum):
112
112
  MARGIN_MODE = "marginMode"
113
113
 
114
114
 
115
+ class ExchangeOrderCCXTUnifiedParams(enum.Enum):
116
+ # see https://docs.ccxt.com/ for details
117
+ REDUCE_ONLY = "reduceOnly" # bool
118
+
119
+ # when creating orders
120
+ STOP_LOSS_PRICE = "stopLossPrice" # float
121
+ TAKE_PROFIT_PRICE = "takeProfitPrice" # float
122
+
123
+ # when editing orders
124
+ STOP_PRICE = "stopPrice" # float
125
+
126
+ # for trigger orders
127
+ TRIGGER_DIRECTION = "triggerDirection" # ascending/descending
128
+ TRIGGER_PRICE = "triggerPrice" # float
129
+ STOP_LOSS = "stopLoss" # dict with price and triggerPrice
130
+ TAKE_PROFIT = "takeProfit" # dict with price and triggerPrice
131
+
132
+ # for trailing orders
133
+ TRAILING_PERCENT = "trailingPercent" # float [0:100]
134
+ TRAILING_AMOUNT = "trailingAmount" # float
135
+ TRAILING_TRIGGER_PRICE = "trailingTriggerPrice" # float
136
+
137
+
115
138
  class ExchangeWrapperLibs(enum.Enum):
116
139
  ASYNC_CCXT = "async_ccxt"
117
140
  CCXT = "ccxt"
@@ -465,6 +465,7 @@ class Trader(util.Initializable):
465
465
  order.is_waiting_for_chained_trigger = False
466
466
  return success
467
467
  order_status = None
468
+ is_order_refreshing = False
468
469
  # if real order: cancel on exchange
469
470
  if not self.simulate and order.is_active and not order.is_self_managed():
470
471
  try:
@@ -496,6 +497,7 @@ class Trader(util.Initializable):
496
497
  except Exception as err:
497
498
  self.logger.exception(err, True, f"Failed to cancel order {order}")
498
499
  return False
500
+ is_order_refreshing = order.is_refreshing()
499
501
  if order_status is enums.OrderStatus.CANCELED:
500
502
  order.status = octobot_trading.enums.OrderStatus.CANCELED
501
503
  self.logger.debug(f"Successfully cancelled order {order}")
@@ -505,11 +507,14 @@ class Trader(util.Initializable):
505
507
  else:
506
508
  order.status = octobot_trading.enums.OrderStatus.CANCELED
507
509
 
508
- await order.on_cancel(force_cancel=order.status is octobot_trading.enums.OrderStatus.CANCELED,
509
- is_from_exchange_data=False,
510
- ignored_order=ignored_order)
511
- if wait_for_cancelling and order.state is not None and order.state.is_pending():
512
- await self._wait_for_order_cancel(order, cancelling_timeout)
510
+ if not is_order_refreshing:
511
+ # don't override state if order is already refreshing (most likely from open orders updater)
512
+ await order.on_cancel(force_cancel=order.status is octobot_trading.enums.OrderStatus.CANCELED,
513
+ is_from_exchange_data=False,
514
+ ignored_order=ignored_order)
515
+ if wait_for_cancelling and (order.is_refreshing() or order.is_pending()):
516
+ # Don't wait for new state to avoid potential deadlock. Will raise if cancel is not in process
517
+ self._ensure_probably_canceled_order(order, None)
513
518
  return True
514
519
 
515
520
  async def _handle_order_cancel_error(self, order, err, wait_for_cancelling, cancelling_timeout):
@@ -531,10 +536,7 @@ class Trader(util.Initializable):
531
536
  # can't wait for the order state to fully refresh as it will require a portfolio lock which might
532
537
  # be locked by this ask already (and create a deadlock)
533
538
  # => be optimistic and consider refreshing state as end state
534
- if order.is_refreshing_filling_state():
535
- raise errors.FilledOrderError(f"Order is filled, it can't be cancelled. Order: {order}") from err
536
- if order.is_refreshing_canceling_state():
537
- self.logger.debug(f"Tried to cancel an already cancelled order. Order: {order}")
539
+ if self._ensure_probably_canceled_order(order, err):
538
540
  return True
539
541
  else:
540
542
  # trigger forced refresh to get an update of the order
@@ -542,17 +544,14 @@ class Trader(util.Initializable):
542
544
  await order.state.synchronize(force_synchronization=True)
543
545
  if previous_status != order.status:
544
546
  # don't wait for new state to avoid potential deadlock
545
- if order.is_refreshing_filling_state():
546
- raise errors.FilledOrderError(f"Order is filled, it can't be cancelled. Order: {order}") from err
547
- if order.is_refreshing_canceling_state():
548
- self.logger.debug(f"Tried to cancel an already cancelled order. Order: {order}")
547
+ if self._ensure_probably_canceled_order(order, err):
549
548
  return True
550
549
  if order.is_cancelled():
551
550
  self.logger.debug(f"Tried to cancel an already cancelled order. Order: {order}")
552
551
  return True
553
552
  if order.is_cancelling():
554
- if wait_for_cancelling:
555
- await self._wait_for_order_cancel(order, cancelling_timeout)
553
+ # don't wait for new state to avoid potential deadlock, just check that order is not filling
554
+ self._ensure_probably_canceled_order(order, err)
556
555
  return True
557
556
  elif order.is_open():
558
557
  if isinstance(err, errors.OrderNotFoundOnCancelError):
@@ -574,6 +573,20 @@ class Trader(util.Initializable):
574
573
  f"Can't cancel order and unknown post sync order state for order: {order}."
575
574
  ) from err
576
575
 
576
+ def _ensure_probably_canceled_order(self, order, err: typing.Optional[Exception]) -> bool:
577
+ if order.is_refreshing_filling_state():
578
+ filled_err = errors.FilledOrderError(f"Order is filled, it can't be cancelled. Order: {order}")
579
+ if err is None:
580
+ raise filled_err
581
+ raise filled_err from err
582
+ if order.is_refreshing_canceling_state():
583
+ self.logger.debug(f"Tried to cancel an already cancelled order. Order: {order}")
584
+ return True
585
+ if order.is_pending_cancel_state():
586
+ self.logger.debug(f"Tried to cancel a pending cancel order. Order: {order}")
587
+ return True
588
+ return False
589
+
577
590
  async def cancel_all_orders(
578
591
  self,
579
592
  symbol: str,
@@ -34,6 +34,7 @@ import octobot_trading.constants as constants
34
34
  import octobot_trading.errors as errors
35
35
  import octobot_trading.exchanges.util as exchanges_util
36
36
  import octobot_trading.exchanges.connectors.ccxt.ccxt_connector as ccxt_connector
37
+ import octobot_trading.exchanges.connectors.ccxt.enums as ccxt_enums
37
38
  from octobot_trading.enums import ExchangeConstantsOrderColumns as ecoc
38
39
  import octobot_trading.exchanges.abstract_exchange as abstract_exchange
39
40
  import octobot_trading.exchange_data.contracts as contracts
@@ -69,8 +70,6 @@ class RestExchange(abstract_exchange.AbstractExchange):
69
70
  SUPPORTS_SET_MARGIN_TYPE = True # set False when there is no API to switch between cross and isolated margin types
70
71
  # set False when the exchange refuses to change margin type when an associated position is open
71
72
  SUPPORTS_SET_MARGIN_TYPE_ON_OPEN_POSITIONS = True
72
- # set False when default edit_order can't be used and order should always be canceled and recreated instead
73
- SUPPORTS_NATIVE_EDIT_ORDER = True
74
73
  EXPECT_POSSIBLE_ORDER_NOT_FOUND_DURING_ORDER_CREATION = False # set True when get_order() can return None
75
74
  # (order not found) when orders are being created on exchange and are not fully processed on the exchange side.
76
75
  REQUIRES_AUTHENTICATION = False # set True when even normally public apis require authentication
@@ -81,6 +80,8 @@ class RestExchange(abstract_exchange.AbstractExchange):
81
80
  IS_SKIPPING_EMPTY_CANDLES_IN_OHLCV_FETCH = False # set True when the exchange is known for not returning any
82
81
  # candle when no traded happened during a candle time frame. In this case, a missing candle in backtesting won't
83
82
  # trigger an error
83
+ # Name of the price param to give ccxt to edit a stop loss
84
+ STOP_LOSS_EDIT_PRICE_PARAM = ccxt_enums.ExchangeOrderCCXTUnifiedParams.STOP_LOSS_PRICE.value
84
85
  """
85
86
  RestExchange is using its exchange connector to interact with the exchange.
86
87
  It should be used regardless of the exchange or the exchange library (ccxt or other)
@@ -201,6 +202,9 @@ class RestExchange(abstract_exchange.AbstractExchange):
201
202
  price: decimal.Decimal = None, stop_price: decimal.Decimal = None,
202
203
  side: enums.TradeOrderSide = None, current_price: decimal.Decimal = None,
203
204
  reduce_only: bool = False, params: dict = None) -> typing.Optional[dict]:
205
+ if self.exchange_manager.is_future:
206
+ # on futures exchange expects, quantity in contracts: convert quantity into contracts
207
+ quantity = quantity / self.get_contract_size(symbol)
204
208
  async with self._order_operation(order_type, symbol, quantity, price, stop_price):
205
209
  with self.creating_order(side, symbol, quantity, price):
206
210
  created_order = await self._create_order_with_retry(
@@ -218,6 +222,9 @@ class RestExchange(abstract_exchange.AbstractExchange):
218
222
  params: dict = None):
219
223
  # Note: on most exchange, this implementation will just replace the order by cancelling the one
220
224
  # which id is given and create a new one
225
+ if self.exchange_manager.is_future:
226
+ # on futures exchange expects, quantity in contracts: convert quantity into contracts
227
+ quantity = quantity / self.get_contract_size(symbol)
221
228
  async with self._order_operation(order_type, symbol, quantity, price, stop_price):
222
229
  float_quantity = float(quantity)
223
230
  float_price = float(price)
@@ -1026,6 +1033,10 @@ class RestExchange(abstract_exchange.AbstractExchange):
1026
1033
  def supports_trading_type(self, symbol, trading_type: enums.FutureContractType):
1027
1034
  return self.connector.supports_trading_type(symbol, trading_type)
1028
1035
 
1036
+ def supports_native_edit_order(self, order_type: enums.TraderOrderType) -> bool:
1037
+ # return False when default edit_order can't be used and order should always be canceled and recreated instead
1038
+ return True
1039
+
1029
1040
  def is_linear_symbol(self, symbol):
1030
1041
  """
1031
1042
  :param symbol: the symbol
@@ -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()
@@ -200,10 +200,10 @@ class OrdersUpdater(orders_channel.OrdersProducer):
200
200
 
201
201
  if raw_order is not None:
202
202
  self.logger.info(f"Received update for {order} on {exchange_name}: {raw_order}")
203
-
204
203
  await self.channel.exchange_manager.exchange_personal_data.handle_order_update_from_raw(
205
204
  order.exchange_order_id, raw_order, should_notify=should_notify
206
205
  )
206
+ self.logger.info(f"Completed update for {order} on {exchange_name}")
207
207
  else:
208
208
  self.logger.info(f"Can't received update for {order} on {exchange_name}: received order is None")
209
209
 
@@ -405,15 +405,24 @@ class Order(util.Initializable):
405
405
  def is_refreshing(self) -> bool:
406
406
  return self.state is not None and self.state.is_refreshing()
407
407
 
408
+ def is_pending(self) -> bool:
409
+ return self.state is not None and self.state.is_pending()
410
+
408
411
  def is_refreshing_filling_state(self) -> bool:
409
412
  return self._is_refreshing_state(orders_states.FillOrderState)
410
413
 
411
414
  def is_refreshing_canceling_state(self) -> bool:
412
415
  return self._is_refreshing_state(orders_states.CancelOrderState)
413
416
 
417
+ def is_pending_cancel_state(self) -> bool:
418
+ return self._is_pending_state(orders_states.CancelOrderState)
419
+
414
420
  def _is_refreshing_state(self, state_type) -> bool:
415
421
  return self.is_refreshing() and isinstance(self.state, state_type)
416
422
 
423
+ def _is_pending_state(self, state_type) -> bool:
424
+ return self.is_pending() and isinstance(self.state, state_type)
425
+
417
426
  def can_be_edited(self) -> bool:
418
427
  # orders that are not yet open or already open can be edited
419
428
  return self.state is None or (self.state.is_open() and not self.is_refreshing())