OctoBot-Trading 2.4.210__tar.gz → 2.4.211__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 (513) hide show
  1. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/CHANGELOG.md +4 -0
  2. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/OctoBot_Trading.egg-info/requires.txt +1 -1
  4. {OctoBot-Trading-2.4.210/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.211}/PKG-INFO +2 -2
  5. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/README.md +1 -1
  6. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/__init__.py +1 -1
  7. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/api/orders.py +16 -7
  8. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/enums.py +5 -0
  9. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/traders/trader.py +68 -42
  10. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/abstract_trading_mode.py +30 -17
  11. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/channel/abstract_mode_consumer.py +12 -2
  12. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/channel/abstract_mode_producer.py +21 -8
  13. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/channel/mode.py +7 -2
  14. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/modes_util.py +15 -6
  15. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +4 -4
  16. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +2 -1
  17. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/signals/__init__.py +8 -0
  18. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/signals/signal_creation.py +24 -16
  19. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/signals/trading_signal_bundle_builder.py +40 -19
  20. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/signals/util.py +66 -0
  21. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/requirements.txt +1 -1
  22. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/traders/test_trader.py +4 -2
  23. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/modes/test_abstract_mode_consumer.py +10 -5
  24. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/modes/test_abstract_trading_mode.py +3 -3
  25. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/modes/test_modes_util.py +30 -8
  26. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/signals/test_util.py +143 -0
  27. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/LICENSE +0 -0
  28. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/MANIFEST.in +0 -0
  29. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
  30. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  31. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  32. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  33. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/api/__init__.py +0 -0
  34. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/api/channels.py +0 -0
  35. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/api/contracts.py +0 -0
  36. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/api/exchange.py +0 -0
  37. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/api/modes.py +0 -0
  38. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/api/portfolio.py +0 -0
  39. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/api/positions.py +0 -0
  40. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/api/profitability.py +0 -0
  41. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/api/storage.py +0 -0
  42. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/api/symbol_data.py +0 -0
  43. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/api/trader.py +0 -0
  44. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/api/trades.py +0 -0
  45. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/constants.py +0 -0
  46. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/errors.py +0 -0
  47. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_channel.py +0 -0
  48. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/__init__.py +0 -0
  49. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  50. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  51. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  52. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  53. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  54. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  55. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  56. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  57. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  58. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  59. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  60. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  61. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  62. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  63. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  64. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  65. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  66. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  67. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  68. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  69. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  70. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  71. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  72. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  73. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  74. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  75. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  76. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  77. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  78. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  79. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  80. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  81. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  82. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  83. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  84. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  85. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  86. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  87. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  88. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  89. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  90. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  91. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  92. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  93. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  94. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  95. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  96. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  97. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  98. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  99. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  100. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/__init__.py +0 -0
  101. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  102. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  103. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  104. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  105. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/config/__init__.py +0 -0
  106. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  107. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  108. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/config/exchange_credentials_data.py +0 -0
  109. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/config/proxy_config.py +0 -0
  110. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  111. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  112. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
  113. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
  114. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  115. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +0 -0
  116. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  117. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  118. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  119. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  120. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  121. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  122. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  123. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/util.py +0 -0
  124. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/exchange_builder.py +0 -0
  125. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/exchange_channels.py +0 -0
  126. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/exchange_details.py +0 -0
  127. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/exchange_factory.py +0 -0
  128. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/exchange_manager.py +0 -0
  129. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  130. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/exchanges.py +0 -0
  131. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  132. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  133. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  134. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  135. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/traders/__init__.py +0 -0
  136. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  137. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/types/__init__.py +0 -0
  138. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
  139. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  140. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/util/__init__.py +0 -0
  141. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  142. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  143. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  144. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  145. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/__init__.py +0 -0
  146. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/channel/__init__.py +0 -0
  147. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/mode_activity.py +0 -0
  148. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/mode_config.py +0 -0
  149. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/modes_factory.py +0 -0
  150. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  151. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  152. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  153. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  154. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  155. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  156. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  157. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  158. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  159. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  160. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  161. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  162. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  163. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  164. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  165. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  166. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/octobot_channel_consumer.py +0 -0
  167. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/__init__.py +0 -0
  168. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  169. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/__init__.py +0 -0
  170. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/active_order_swap_strategies/__init__.py +0 -0
  171. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/active_order_swap_strategies/active_order_swap_strategy.py +0 -0
  172. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/active_order_swap_strategies/stop_first_active_order_swap_strategy.py +0 -0
  173. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/active_order_swap_strategies/take_profit_first_active_order_swap_strategy.py +0 -0
  174. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  175. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  176. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  177. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  178. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  179. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  180. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  181. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/groups/trailing_on_filled_tp_balanced_order_group.py +0 -0
  182. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/order.py +0 -0
  183. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  184. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  185. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/order_group.py +0 -0
  186. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/order_state.py +0 -0
  187. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/order_util.py +0 -0
  188. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  189. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  190. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  191. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  192. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  193. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  194. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  195. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  196. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  197. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  198. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/trailing_profiles/__init__.py +0 -0
  199. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/trailing_profiles/filled_take_profit_trailing_profile.py +0 -0
  200. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/trailing_profiles/trailing_price_step.py +0 -0
  201. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile.py +0 -0
  202. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile_factory.py +0 -0
  203. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile_types.py +0 -0
  204. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/triggers/__init__.py +0 -0
  205. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/triggers/base_trigger.py +0 -0
  206. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/triggers/price_trigger.py +0 -0
  207. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  208. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  209. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  210. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  211. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  212. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  213. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  214. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  215. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  216. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  217. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  218. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  219. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  220. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  221. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  222. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  223. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  224. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  225. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  226. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  227. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  228. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  229. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  230. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  231. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  232. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  233. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  234. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  235. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  236. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  237. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  238. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  239. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  240. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  241. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  242. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  243. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  244. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  245. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/resolved_orders_portfolio_delta.py +0 -0
  246. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  247. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/sub_portfolio_data.py +0 -0
  248. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  249. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  250. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  251. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  252. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  253. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/__init__.py +0 -0
  254. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  255. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  256. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  257. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  258. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/position.py +0 -0
  259. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  260. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/position_state.py +0 -0
  261. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/position_util.py +0 -0
  262. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  263. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  264. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  265. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  266. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  267. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  268. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  269. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  270. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  271. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/state.py +0 -0
  272. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/__init__.py +0 -0
  273. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  274. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  275. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  276. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/trade.py +0 -0
  277. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  278. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  279. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  280. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  281. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  282. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  283. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  284. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  285. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  286. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  287. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  288. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  289. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  290. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/signals/channel/__init__.py +0 -0
  291. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  292. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  293. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/signals/channel/signal_producer.py +0 -0
  294. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/storage/__init__.py +0 -0
  295. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/storage/abstract_storage.py +0 -0
  296. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/storage/candles_storage.py +0 -0
  297. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/storage/orders_storage.py +0 -0
  298. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/storage/portfolio_storage.py +0 -0
  299. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/storage/storage_manager.py +0 -0
  300. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/storage/trades_storage.py +0 -0
  301. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/storage/transactions_storage.py +0 -0
  302. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/storage/util.py +0 -0
  303. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/supervisors/__init__.py +0 -0
  304. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  305. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  306. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/util/__init__.py +0 -0
  307. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/util/config_util.py +0 -0
  308. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/util/initializable.py +0 -0
  309. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/util/initialization_util.py +0 -0
  310. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/util/simulator_updater_utils.py +0 -0
  311. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/util/test_tools/__init__.py +0 -0
  312. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  313. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  314. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  315. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  316. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/setup.cfg +0 -0
  317. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/setup.py +0 -0
  318. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/api/__init__.py +0 -0
  319. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/api/test_channels.py +0 -0
  320. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/api/test_exchange.py +0 -0
  321. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/api/test_modes.py +0 -0
  322. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/api/test_orders.py +0 -0
  323. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/api/test_portfolio.py +0 -0
  324. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/api/test_profitability.py +0 -0
  325. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/api/test_symbol_data.py +0 -0
  326. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/api/test_trader.py +0 -0
  327. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/api/test_trades.py +0 -0
  328. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/cli/__init__.py +0 -0
  329. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/__init__.py +0 -0
  330. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/contracts/__init__.py +0 -0
  331. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  332. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  333. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/funding/__init__.py +0 -0
  334. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  335. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/kline/__init__.py +0 -0
  336. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  337. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/ohlcv/__init__.py +0 -0
  338. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  339. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  340. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/order_book/__init__.py +0 -0
  341. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  342. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/prices/__init__.py +0 -0
  343. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  344. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  345. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/recent_trades/__init__.py +0 -0
  346. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  347. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  348. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/ticker/__init__.py +0 -0
  349. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  350. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/__init__.py +0 -0
  351. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/connectors/__init__.py +0 -0
  352. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  353. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  354. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/connectors/ccxt/test_ccxt_client_util.py +0 -0
  355. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  356. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/connectors/test_util.py +0 -0
  357. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/implementations/__init__.py +0 -0
  358. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  359. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  360. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/test_abstract_exchange.py +0 -0
  361. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  362. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/test_exchange_builder.py +0 -0
  363. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/test_exchange_config_data.py +0 -0
  364. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/test_exchange_factory.py +0 -0
  365. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/test_exchange_manager.py +0 -0
  366. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/test_exchange_simulator.py +0 -0
  367. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/test_exchanges.py +0 -0
  368. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/traders/__init__.py +0 -0
  369. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/types/__init__.py +0 -0
  370. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  371. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/util/__init__.py +0 -0
  372. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  373. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/exchanges/util/test_exchange_util.py +0 -0
  374. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/modes/__init__.py +0 -0
  375. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/modes/script_keywords/__init__.py +0 -0
  376. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  377. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  378. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  379. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  380. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  381. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  382. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  383. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/__init__.py +0 -0
  384. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/__init__.py +0 -0
  385. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/active_order_swap_strategies/__init__.py +0 -0
  386. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/active_order_swap_strategies/test_active_order_swap_strategy.py +0 -0
  387. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/active_order_swap_strategies/test_stop_first_active_order_swap_strategy.py +0 -0
  388. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/active_order_swap_strategies/test_take_profit_first_active_order_swap_strategy.py +0 -0
  389. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/groups/__init__.py +0 -0
  390. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  391. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  392. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  393. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/groups/test_trailing_on_filled_tp_balanced_order_group.py +0 -0
  394. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/__init__.py +0 -0
  395. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  396. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  397. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  398. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  399. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/test_order_state.py +0 -0
  400. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  401. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  402. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  403. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  404. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  405. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/test_order.py +0 -0
  406. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/test_order_adapter.py +0 -0
  407. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/test_order_factory.py +0 -0
  408. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/test_order_util.py +0 -0
  409. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/test_orders_manager.py +0 -0
  410. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  411. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/trailing_profiles/__init__.py +0 -0
  412. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/trailing_profiles/test_filled_take_profit_trailing_profile.py +0 -0
  413. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/trailing_profiles/test_trailing_profile_factory.py +0 -0
  414. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/triggers/__init__.py +0 -0
  415. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/triggers/test_base_trigger.py +0 -0
  416. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/triggers/test_price_trigger.py +0 -0
  417. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/__init__.py +0 -0
  418. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  419. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  420. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  421. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  422. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  423. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  424. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  425. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  426. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/market/__init__.py +0 -0
  427. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  428. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  429. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  430. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  431. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  432. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  433. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/__init__.py +0 -0
  434. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  435. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  436. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  437. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  438. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/history/__init__.py +0 -0
  439. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  440. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  441. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/test_asset.py +0 -0
  442. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  443. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  444. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  445. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/test_portfolio_util.py +0 -0
  446. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  447. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/test_sub_portfolio_data.py +0 -0
  448. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  449. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/types/__init__.py +0 -0
  450. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  451. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  452. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  453. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/__init__.py +0 -0
  454. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/channel/__init__.py +0 -0
  455. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/states/__init__.py +0 -0
  456. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/test_position.py +0 -0
  457. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/test_position_factory.py +0 -0
  458. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/test_positions_manager.py +0 -0
  459. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/types/__init__.py +0 -0
  460. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  461. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  462. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/trades/__init__.py +0 -0
  463. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/trades/test_trade_factory.py +0 -0
  464. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/trades/test_trade_manager.py +0 -0
  465. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  466. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/trades/test_trade_util.py +0 -0
  467. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/transactions/__init__.py +0 -0
  468. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  469. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  470. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/signals/__init__.py +0 -0
  471. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  472. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/test_utils/__init__.py +0 -0
  473. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/test_utils/order_util.py +0 -0
  474. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/test_utils/random_numbers.py +0 -0
  475. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/util/__init__.py +0 -0
  476. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests/util/test_config_util.py +0 -0
  477. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/__init__.py +0 -0
  478. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/__init__.py +0 -0
  479. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
  480. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  481. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  482. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_binance.py +0 -0
  483. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  484. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bingx.py +0 -0
  485. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  486. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bitget.py +0 -0
  487. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  488. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bitmart.py +0 -0
  489. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bitmex.py +0 -0
  490. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bitso.py +0 -0
  491. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  492. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bybit.py +0 -0
  493. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  494. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  495. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_coinex.py +0 -0
  496. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  497. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_gateio.py +0 -0
  498. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  499. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  500. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_htx.py +0 -0
  501. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_hyperliquid.py +0 -0
  502. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_kraken.py +0 -0
  503. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  504. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  505. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_mexc.py +0 -0
  506. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_ndax.py +0 -0
  507. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  508. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_okx.py +0 -0
  509. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  510. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_phemex.py +0 -0
  511. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  512. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_upbit.py +0 -0
  513. {OctoBot-Trading-2.4.210 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,10 @@ 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.211] - 2025-08-24
8
+ ### Added
9
+ [Signals] add dependencies
10
+
7
11
  ## [2.4.210] - 2025-08-22
8
12
  ### Added
9
13
  [TradingModes] add get_trading_modes_of_this_type_on_this_matrix
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.210
3
+ Version: 2.4.211
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.210](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.211](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,7 +1,7 @@
1
1
  numpy==1.26.3
2
2
  OctoBot-Backtesting<1.10,>=1.9
3
3
  Async-Channel<2.3,>=2.2
4
- OctoBot-Commons<1.10,>=1.9.64
4
+ OctoBot-Commons<1.10,>=1.9.82
5
5
  OctoBot-Tentacles-Manager<2.10,>=2.9
6
6
  trading-backend>=1.2.35
7
7
  ccxt==4.5.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.210
3
+ Version: 2.4.211
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.210](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.211](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.210](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.211](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.210" # major.minor.revision
18
+ VERSION = "2.4.211" # major.minor.revision
@@ -14,8 +14,10 @@
14
14
  # You should have received a copy of the GNU Lesser General Public
15
15
  # License along with this library.
16
16
  import decimal
17
+ import typing
17
18
 
18
19
  import octobot_commons.logging as logging
20
+ import octobot_commons.signals as signals
19
21
 
20
22
  import octobot_trading.personal_data as personal_data
21
23
  import octobot_trading.enums
@@ -32,7 +34,7 @@ async def create_order(exchange_manager,
32
34
  quantity: float,
33
35
  price: float,
34
36
  wait_for_creation=True,
35
- creation_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT) -> personal_data.Order:
37
+ creation_timeout=constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT) -> personal_data.Order:
36
38
  return await exchange_manager.trader.create_order(
37
39
  exchange_manager.trader.create_order_instance(order_type=order_type,
38
40
  symbol=symbol,
@@ -56,17 +58,24 @@ def get_pending_creation_orders(exchange_manager) -> list:
56
58
  return exchange_manager.exchange_personal_data.orders_manager.pending_creation_orders
57
59
 
58
60
 
59
- async def cancel_all_open_orders(exchange_manager, emit_trading_signals=True) -> bool:
61
+ async def cancel_all_open_orders(exchange_manager, emit_trading_signals=True) -> tuple[bool, list]:
60
62
  return await exchange_manager.trader.cancel_all_open_orders(emit_trading_signals=emit_trading_signals)
61
63
 
62
64
 
63
- async def cancel_all_open_orders_with_currency(exchange_manager, currency, emit_trading_signals=True) -> bool:
64
- return await exchange_manager.trader.cancel_all_open_orders_with_currency(currency, emit_trading_signals=emit_trading_signals)
65
+ async def cancel_all_open_orders_with_currency(
66
+ exchange_manager, currency, emit_trading_signals=True, dependencies=None
67
+ ) -> tuple[bool, signals.SignalDependencies]:
68
+ return await exchange_manager.trader.cancel_all_open_orders_with_currency(
69
+ currency, emit_trading_signals=emit_trading_signals, dependencies=dependencies
70
+ )
65
71
 
66
72
 
67
- async def cancel_order_with_id(exchange_manager, order_id, emit_trading_signals=True, wait_for_cancelling=True) -> bool:
68
- return await exchange_manager.trader.cancel_order_with_id(order_id, emit_trading_signals=emit_trading_signals,
69
- wait_for_cancelling=wait_for_cancelling)
73
+ async def cancel_order_with_id(
74
+ exchange_manager, order_id, emit_trading_signals=True, wait_for_cancelling=True, dependencies=None
75
+ ) -> tuple[bool, typing.Optional[signals.SignalDependencies]]:
76
+ return await exchange_manager.trader.cancel_order_with_id(
77
+ order_id, emit_trading_signals=emit_trading_signals, wait_for_cancelling=wait_for_cancelling, dependencies=dependencies
78
+ )
70
79
 
71
80
 
72
81
  def get_order_exchange_name(order) -> str:
@@ -593,6 +593,11 @@ class TradingSignalOrdersActions(enum.Enum):
593
593
  CANCEL = "cancel"
594
594
 
595
595
 
596
+ class TradingSignalDependencies(enum.Enum):
597
+ ORDER_ID = "order_id"
598
+ POSITION_SYMBOL = "position_symbol"
599
+
600
+
596
601
  class TradingSignalPositionsActions(enum.Enum):
597
602
  EDIT = "edit"
598
603
 
@@ -20,6 +20,7 @@ import typing
20
20
 
21
21
  import octobot_commons.logging as logging
22
22
  import octobot_commons.html_util as html_util
23
+ import octobot_commons.signals as commons_signals
23
24
  import octobot_commons.constants
24
25
 
25
26
  import octobot_trading.personal_data.orders.order_factory as order_factory
@@ -142,7 +143,8 @@ class Trader(util.Initializable):
142
143
  async def create_artificial_order(
143
144
  self, order_type, symbol, current_price, quantity, price, reduce_only, close_position,
144
145
  emit_trading_signals=False, wait_for_creation=True,
145
- creation_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT
146
+ creation_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT,
147
+ dependencies: typing.Optional[commons_signals.SignalDependencies] = None
146
148
  ):
147
149
  """
148
150
  Creates an OctoBot managed order (managed orders example: stop loss that is not published on the exchange and
@@ -164,7 +166,8 @@ class Trader(util.Initializable):
164
166
  emit_trading_signals and signals.should_emit_trading_signal(self.exchange_manager),
165
167
  order,
166
168
  wait_for_creation=wait_for_creation,
167
- creation_timeout=creation_timeout
169
+ creation_timeout=creation_timeout,
170
+ dependencies=dependencies
168
171
  )
169
172
 
170
173
  async def edit_order(self, order,
@@ -435,7 +438,7 @@ class Trader(util.Initializable):
435
438
 
436
439
  async def update_order_as_active(
437
440
  self, order, params: dict = None, wait_for_creation=True, raise_all_creation_error=False,
438
- creation_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT
441
+ creation_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT,
439
442
  ):
440
443
  if not self.enable_inactive_orders:
441
444
  self.logger.error(f"Can't update order as active when {self.enable_inactive_orders=}.")
@@ -512,17 +515,17 @@ class Trader(util.Initializable):
512
515
  return False
513
516
  is_order_refreshing = order.is_refreshing()
514
517
  if order_status is enums.OrderStatus.CANCELED:
515
- order.status = octobot_trading.enums.OrderStatus.CANCELED
518
+ order.status = enums.OrderStatus.CANCELED
516
519
  self.logger.debug(f"Successfully cancelled order {order}")
517
520
  elif order_status is enums.OrderStatus.PENDING_CANCEL:
518
- order.status = octobot_trading.enums.OrderStatus.PENDING_CANCEL
521
+ order.status = enums.OrderStatus.PENDING_CANCEL
519
522
  self.logger.debug(f"Order cancel in progress for {order}")
520
523
  else:
521
- order.status = octobot_trading.enums.OrderStatus.CANCELED
524
+ order.status = enums.OrderStatus.CANCELED
522
525
 
523
526
  if not is_order_refreshing:
524
527
  # don't override state if order is already refreshing (most likely from open orders updater)
525
- await order.on_cancel(force_cancel=order.status is octobot_trading.enums.OrderStatus.CANCELED,
528
+ await order.on_cancel(force_cancel=order.status is enums.OrderStatus.CANCELED,
526
529
  is_from_exchange_data=False,
527
530
  ignored_order=ignored_order)
528
531
  if wait_for_cancelling and (order.is_refreshing() or order.is_pending()):
@@ -618,7 +621,7 @@ class Trader(util.Initializable):
618
621
  for order in orders_to_cancel:
619
622
  await order.lock.acquire()
620
623
  if self.simulate or order.is_self_managed():
621
- order.status = octobot_trading.enums.OrderStatus.CANCELED
624
+ order.status = enums.OrderStatus.CANCELED
622
625
  else:
623
626
  cancel_on_exchange = True
624
627
  if cancel_on_exchange:
@@ -657,16 +660,19 @@ class Trader(util.Initializable):
657
660
  await order.state.wait_for_terminate(cancelling_timeout)
658
661
  self.logger.debug(f"Completed order cancelling, order: {order}")
659
662
 
660
- async def cancel_order_with_id(self, exchange_order_id, emit_trading_signals=False,
661
- wait_for_cancelling=True,
662
- cancelling_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT):
663
+ async def cancel_order_with_id(
664
+ self, exchange_order_id, emit_trading_signals=False,
665
+ wait_for_cancelling=True,
666
+ cancelling_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT,
667
+ dependencies: typing.Optional[commons_signals.SignalDependencies] = None
668
+ ) -> tuple[bool, typing.Optional[commons_signals.SignalDependencies]]:
663
669
  """
664
670
  Gets order matching order_id from the OrderManager and calls self.cancel_order() on it
665
671
  :param exchange_order_id: Exchange id of the order to cancel
666
672
  :param emit_trading_signals: when true, trading signals will be emitted
667
673
  :param wait_for_cancelling: when True, always make sure the order is completely cancelled before returning.
668
674
  :param cancelling_timeout: time before raising a timeout error when waiting for an order cancel
669
- :return: True if cancel is successful, False if order is not found or cancellation failed
675
+ :return: (True if cancel is successful, False if order is not found or cancellation failed, dependency_id)
670
676
  """
671
677
  try:
672
678
  order = self.exchange_manager.exchange_personal_data.orders_manager.get_order(exchange_order_id)
@@ -677,17 +683,20 @@ class Trader(util.Initializable):
677
683
  order,
678
684
  wait_for_cancelling=wait_for_cancelling,
679
685
  cancelling_timeout=cancelling_timeout,
686
+ dependencies=dependencies
680
687
  )
681
688
  except KeyError:
682
- return False
689
+ return False, None
683
690
 
684
- async def cancel_open_orders(self, symbol, cancel_loaded_orders=True, side=None,
685
- emit_trading_signals=False,
686
- wait_for_cancelling=True,
687
- cancelling_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT,
688
- since: typing.Union[int, float] = octobot_trading.constants.NO_DATA_LIMIT,
689
- until: typing.Union[int, float] = octobot_trading.constants.NO_DATA_LIMIT
690
- ) -> (bool, list):
691
+ async def cancel_open_orders(
692
+ self, symbol, cancel_loaded_orders=True, side=None,
693
+ emit_trading_signals=False,
694
+ wait_for_cancelling=True,
695
+ cancelling_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT,
696
+ since: typing.Union[int, float] = octobot_trading.constants.NO_DATA_LIMIT,
697
+ until: typing.Union[int, float] = octobot_trading.constants.NO_DATA_LIMIT,
698
+ dependencies: typing.Optional[commons_signals.SignalDependencies] = None
699
+ ) -> tuple[bool, list]:
691
700
  """
692
701
  Should be called only if the goal is to cancel all open orders for a given symbol
693
702
  :param symbol: The symbol to cancel all orders on
@@ -708,12 +717,14 @@ class Trader(util.Initializable):
708
717
  (cancel_loaded_orders or order.is_from_this_octobot):
709
718
  try:
710
719
  async with signals.remote_signal_publisher(self.exchange_manager, order.symbol, emit_trading_signals):
711
- cancelled = await signals.cancel_order(
720
+ cancelled, _ = await signals.cancel_order(
712
721
  self.exchange_manager,
713
722
  emit_trading_signals and signals.should_emit_trading_signal(self.exchange_manager),
714
723
  order,
715
724
  wait_for_cancelling=wait_for_cancelling,
716
- cancelling_timeout=cancelling_timeout, )
725
+ cancelling_timeout=cancelling_timeout,
726
+ dependencies=dependencies
727
+ )
717
728
  if cancelled:
718
729
  cancelled_orders.append(order)
719
730
  all_cancelled = cancelled and all_cancelled
@@ -725,7 +736,7 @@ class Trader(util.Initializable):
725
736
  self, currency, emit_trading_signals=False,
726
737
  wait_for_cancelling=True,
727
738
  cancelling_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT
728
- ) -> bool:
739
+ ) -> tuple[bool, commons_signals.SignalDependencies]:
729
740
  """
730
741
  Should be called only if the goal is to cancel all open orders for each traded symbol containing the
731
742
  given currency.
@@ -737,48 +748,59 @@ class Trader(util.Initializable):
737
748
  """
738
749
  all_cancelled = True
739
750
  symbols = util.get_pairs(self.config, currency, enabled_only=True)
751
+ cancelled_dependencies = commons_signals.SignalDependencies()
740
752
  if symbols:
741
753
  for symbol in symbols:
742
- all_cancelled = (await self.cancel_open_orders(symbol, emit_trading_signals=emit_trading_signals,
743
- wait_for_cancelling=wait_for_cancelling,
744
- cancelling_timeout=cancelling_timeout))[0] \
745
- and all_cancelled
746
- return all_cancelled
754
+ new_all_cancelled, cancelled_orders = await self.cancel_open_orders(
755
+ symbol, emit_trading_signals=emit_trading_signals,
756
+ wait_for_cancelling=wait_for_cancelling,
757
+ cancelling_timeout=cancelling_timeout
758
+ )
759
+ all_cancelled = new_all_cancelled and all_cancelled
760
+ cancelled_dependencies.extend(signals.get_orders_dependencies(cancelled_orders))
761
+ return all_cancelled, cancelled_dependencies
747
762
 
748
763
  async def cancel_all_open_orders(
749
- self, emit_trading_signals=False,
750
- wait_for_cancelling=True,
751
- cancelling_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT
752
- ) -> bool:
764
+ self, emit_trading_signals=False,
765
+ wait_for_cancelling=True,
766
+ cancelling_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT,
767
+ dependencies: typing.Optional[commons_signals.SignalDependencies] = None
768
+ ) -> tuple[bool, commons_signals.SignalDependencies]:
753
769
  """
754
770
  Cancel all open orders registered on this bot.
755
771
  :param emit_trading_signals: when true, trading signals will be emitted
756
772
  :param wait_for_cancelling: when True, always make sure the order is completely cancelled before returning.
757
773
  :param cancelling_timeout: time before raising a timeout error when waiting for an order cancel
758
- :return: True if all orders got cancelled, False if an error occurred
774
+ :return: (True if all orders got cancelled, False if an error occurred and dependencies)
759
775
  """
760
776
  all_cancelled = True
777
+ dependencies = commons_signals.SignalDependencies()
761
778
  for order in self.exchange_manager.exchange_personal_data.orders_manager.get_open_orders():
762
779
  if not order.is_cancelled():
763
780
  try:
764
781
  async with signals.remote_signal_publisher(
765
782
  self.exchange_manager, order.symbol, emit_trading_signals
766
783
  ):
767
- all_cancelled = await signals.cancel_order(
784
+ cancelled, new_dependencies = await signals.cancel_order(
768
785
  self.exchange_manager,
769
786
  emit_trading_signals and signals.should_emit_trading_signal(self.exchange_manager),
770
787
  order,
771
788
  wait_for_cancelling=wait_for_cancelling,
772
- cancelling_timeout=cancelling_timeout, ) and all_cancelled
789
+ cancelling_timeout=cancelling_timeout,
790
+ dependencies=dependencies
791
+ )
792
+ if cancelled:
793
+ dependencies.extend(new_dependencies)
794
+ all_cancelled = cancelled and all_cancelled
773
795
  except (errors.OrderCancelError, errors.UnexpectedExchangeSideOrderStateError) as err:
774
796
  self.logger.warning(f"Skipping order cancel: {err} ({err.__class__.__name__})")
775
797
  all_cancelled = False
776
- return all_cancelled
798
+ return all_cancelled, dependencies
777
799
 
778
800
  async def _sell_everything(self, symbol, inverted, timeout=None):
779
801
  created_orders = []
780
- order_type = octobot_trading.enums.TraderOrderType.BUY_MARKET \
781
- if inverted else octobot_trading.enums.TraderOrderType.SELL_MARKET
802
+ order_type = enums.TraderOrderType.BUY_MARKET \
803
+ if inverted else enums.TraderOrderType.SELL_MARKET
782
804
  async with self.exchange_manager.exchange_personal_data.portfolio_manager.portfolio.lock:
783
805
  current_symbol_holding, current_market_quantity, _, price, symbol_market = \
784
806
  await order_util.get_pre_order_data(self.exchange_manager, symbol, timeout=timeout)
@@ -839,9 +861,12 @@ class Trader(util.Initializable):
839
861
  Positions
840
862
  """
841
863
 
842
- async def close_position(self, position, limit_price=None, timeout=1, emit_trading_signals=False,
843
- wait_for_creation=True,
844
- creation_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT):
864
+ async def close_position(
865
+ self, position, limit_price=None, timeout=1, emit_trading_signals=False,
866
+ wait_for_creation=True,
867
+ creation_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT,
868
+ dependencies: typing.Optional[commons_signals.SignalDependencies] = None
869
+ ):
845
870
  """
846
871
  Creates a close position order
847
872
  :param position: the position to close
@@ -885,7 +910,8 @@ class Trader(util.Initializable):
885
910
  emit_trading_signals and signals.should_emit_trading_signal(self.exchange_manager),
886
911
  current_order,
887
912
  wait_for_creation=wait_for_creation,
888
- creation_timeout=creation_timeout
913
+ creation_timeout=creation_timeout,
914
+ dependencies=dependencies
889
915
  )
890
916
  created_orders.append(order)
891
917
  return created_orders
@@ -24,6 +24,7 @@ import octobot_commons.enums as common_enums
24
24
  import octobot_commons.logging as logging
25
25
  import octobot_commons.tentacles_management as abstract_tentacle
26
26
  import octobot_commons.configuration
27
+ import octobot_commons.signals as commons_signals
27
28
 
28
29
  import async_channel.constants as channel_constants
29
30
  import async_channel.channels as channels
@@ -563,20 +564,27 @@ class AbstractTradingMode(abstract_tentacle.AbstractTentacle):
563
564
  as signal_builder:
564
565
  yield signal_builder
565
566
 
566
- async def create_order(self, order, loaded: bool = False, params: dict = None,
567
- wait_for_creation=True,
568
- creation_timeout=constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT):
567
+ async def create_order(
568
+ self, order, loaded: bool = False, params: dict = None,
569
+ wait_for_creation=True, creation_timeout=constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT,
570
+ dependencies: typing.Optional[commons_signals.SignalDependencies] = None
571
+ ):
569
572
  return await signals.create_order(
570
573
  self.exchange_manager, self.should_emit_trading_signal(), order,
571
574
  loaded=loaded, params=params,
572
- wait_for_creation=wait_for_creation, creation_timeout=creation_timeout
575
+ wait_for_creation=wait_for_creation, creation_timeout=creation_timeout,
576
+ dependencies=dependencies
573
577
  )
574
578
 
575
- async def cancel_order(self, order, ignored_order: object = None, wait_for_cancelling: bool = True) -> bool:
579
+ async def cancel_order(
580
+ self, order, ignored_order: object = None, wait_for_cancelling: bool = True,
581
+ dependencies: typing.Optional[commons_signals.SignalDependencies] = None
582
+ ) -> tuple[bool, commons_signals.SignalDependencies]:
576
583
  return await signals.cancel_order(
577
584
  self.exchange_manager, self.should_emit_trading_signal(), order,
578
585
  ignored_order=ignored_order,
579
- wait_for_cancelling=wait_for_cancelling
586
+ wait_for_cancelling=wait_for_cancelling,
587
+ dependencies=dependencies
580
588
  )
581
589
 
582
590
  async def cancel_all_orders(
@@ -584,36 +592,41 @@ class AbstractTradingMode(abstract_tentacle.AbstractTentacle):
584
592
  symbol: str,
585
593
  allow_single_order_cancel_fallback: bool,
586
594
  wait_for_cancelling: bool = True,
587
- cancelling_timeout: float = constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT
595
+ cancelling_timeout: float = constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT,
588
596
  ) -> bool:
589
597
  # todo send signals when implementation will be necessary
590
598
  return await self.exchange_manager.trader.cancel_all_orders(
591
599
  symbol,
592
600
  allow_single_order_cancel_fallback,
593
601
  wait_for_cancelling=wait_for_cancelling,
594
- cancelling_timeout=cancelling_timeout
602
+ cancelling_timeout=cancelling_timeout,
595
603
  )
596
604
 
597
- async def edit_order(self, order,
598
- edited_quantity: decimal.Decimal = None,
599
- edited_price: decimal.Decimal = None,
600
- edited_stop_price: decimal.Decimal = None,
601
- edited_current_price: decimal.Decimal = None,
602
- params: dict = None) -> bool:
605
+ async def edit_order(
606
+ self, order,
607
+ edited_quantity: decimal.Decimal = None,
608
+ edited_price: decimal.Decimal = None,
609
+ edited_stop_price: decimal.Decimal = None,
610
+ edited_current_price: decimal.Decimal = None,
611
+ params: dict = None,
612
+ dependencies: typing.Optional[commons_signals.SignalDependencies] = None
613
+ ) -> bool:
603
614
  return await signals.edit_order(
604
615
  self.exchange_manager, self.should_emit_trading_signal(), order,
605
616
  edited_quantity=edited_quantity,
606
617
  edited_price=edited_price,
607
618
  edited_stop_price=edited_stop_price,
608
619
  edited_current_price=edited_current_price,
609
- params=params
620
+ params=params,
621
+ dependencies=dependencies
610
622
  )
611
623
 
612
624
  async def set_leverage(
613
- self, symbol: str, side: typing.Optional[enums.PositionSide], leverage: decimal.Decimal
625
+ self, symbol: str, side: typing.Optional[enums.PositionSide], leverage: decimal.Decimal,
626
+ dependencies: typing.Optional[commons_signals.SignalDependencies] = None
614
627
  ) -> bool:
615
628
  return await signals.set_leverage(
616
- self.exchange_manager, self.should_emit_trading_signal(), symbol, side, leverage
629
+ self.exchange_manager, self.should_emit_trading_signal(), symbol, side, leverage, dependencies=dependencies
617
630
  )
618
631
 
619
632
  async def get_additional_metadata(self, is_backtesting):
@@ -15,7 +15,9 @@
15
15
  # You should have received a copy of the GNU Lesser General Public
16
16
  # License along with this library.
17
17
  import asyncio
18
+ import typing
18
19
 
20
+ import octobot_commons.signals as commons_signals
19
21
  import octobot_commons.symbols as symbol_util
20
22
  import octobot_commons.constants as commons_constants
21
23
 
@@ -30,6 +32,9 @@ from octobot_trading.enums import ExchangeConstantsMarketStatusColumns as Ecmsc
30
32
 
31
33
 
32
34
  class AbstractTradingModeConsumer(modes_channel.ModeChannelConsumer):
35
+ CREATE_ORDER_DATA_PARAM = "data"
36
+ CREATE_ORDER_DEPENDENCIES_PARAM = "dependencies"
37
+
33
38
  def __init__(self, trading_mode):
34
39
  super().__init__()
35
40
  self.trading_mode = trading_mode
@@ -56,10 +61,15 @@ class AbstractTradingModeConsumer(modes_channel.ModeChannelConsumer):
56
61
  self.exchange_manager = None
57
62
  self.previous_call_error_per_symbol = None
58
63
 
59
- async def internal_callback(self, trading_mode_name, cryptocurrency, symbol, time_frame, final_note, state, data):
64
+ async def internal_callback(
65
+ self, trading_mode_name, cryptocurrency, symbol, time_frame, final_note, state,
66
+ data, dependencies: typing.Optional[commons_signals.SignalDependencies] = None
67
+ ):
60
68
  # creates a new order (or multiple split orders), always check self.can_create_order() first.
61
69
  try:
62
- await self.create_order_if_possible(symbol, final_note, state, data=data)
70
+ await self.create_order_if_possible(
71
+ symbol, final_note, state, data=data, dependencies=dependencies
72
+ )
63
73
  self.previous_call_error_per_symbol[symbol] = None
64
74
  except errors.MissingMinimalExchangeTradeVolume as err:
65
75
  self.previous_call_error_per_symbol[symbol] = err
@@ -27,6 +27,7 @@ import octobot_commons.logging as logging
27
27
  import octobot_commons.databases as databases
28
28
  import octobot_commons.configuration as commons_configuration
29
29
  import octobot_commons.asyncio_tools as asyncio_tools
30
+ import octobot_commons.signals as commons_signals
30
31
 
31
32
  import octobot_trading.enums as enums
32
33
  import octobot_trading.constants as constants
@@ -400,17 +401,21 @@ class AbstractTradingModeProducer(modes_channel.ModeChannelProducer):
400
401
  """
401
402
  raise NotImplementedError("set_final_eval not implemented")
402
403
 
403
- async def submit_trading_evaluation(self, cryptocurrency, symbol, time_frame,
404
- final_note=constants.ZERO,
405
- state=enums.EvaluatorStates.NEUTRAL,
406
- data=None) -> None:
404
+ async def submit_trading_evaluation(
405
+ self, cryptocurrency, symbol, time_frame,
406
+ final_note=constants.ZERO,
407
+ state=enums.EvaluatorStates.NEUTRAL,
408
+ data=None,
409
+ dependencies: typing.Optional[commons_signals.SignalDependencies] = None
410
+ ) -> None:
407
411
  await self.send(trading_mode_name=self.trading_mode.get_name(),
408
412
  cryptocurrency=cryptocurrency,
409
413
  symbol=symbol,
410
414
  time_frame=time_frame,
411
415
  final_note=final_note,
412
416
  state=state.value,
413
- data=data if data is not None else {})
417
+ data=data if data is not None else {},
418
+ dependencies=dependencies)
414
419
 
415
420
  @classmethod
416
421
  def get_should_cancel_loaded_orders(cls) -> bool:
@@ -420,13 +425,17 @@ class AbstractTradingModeProducer(modes_channel.ModeChannelProducer):
420
425
  """
421
426
  raise NotImplementedError("get_should_cancel_loaded_orders not implemented")
422
427
 
423
- async def cancel_symbol_open_orders(self, symbol, side=None, tag=None, exchange_order_ids=None) -> bool:
428
+ async def cancel_symbol_open_orders(
429
+ self, symbol, side=None, tag=None, exchange_order_ids=None,
430
+ dependencies: typing.Optional[commons_signals.SignalDependencies] = None
431
+ ) -> tuple[bool, commons_signals.SignalDependencies]:
424
432
  """
425
433
  Cancel all symbol open orders
426
434
  """
427
435
  cancel_loaded_orders = self.get_should_cancel_loaded_orders()
428
436
  cancelled = False
429
437
  failed_to_cancel = False
438
+ cancelled_dependencies = commons_signals.SignalDependencies()
430
439
  if self.exchange_manager.trader.is_enabled:
431
440
  for order in self.exchange_manager.exchange_personal_data.orders_manager.get_open_orders(
432
441
  symbol=symbol, tag=tag
@@ -438,15 +447,19 @@ class AbstractTradingModeProducer(modes_channel.ModeChannelProducer):
438
447
  and (exchange_order_ids is None or (order.exchange_order_id in exchange_order_ids))
439
448
  ):
440
449
  try:
441
- if await self.trading_mode.cancel_order(order):
450
+ is_cancelled, new_dependencies = await self.trading_mode.cancel_order(
451
+ order, dependencies=dependencies
452
+ )
453
+ if is_cancelled:
442
454
  cancelled = True
455
+ cancelled_dependencies.extend(new_dependencies)
443
456
  else:
444
457
  failed_to_cancel = True
445
458
  except errors.OctoBotExchangeError as err:
446
459
  # do not propagate exchange error when canceling order
447
460
  self.logger.exception(err, True, f"Error when cancelling order [{order}]: {err}")
448
461
  failed_to_cancel = True
449
- return cancelled and not failed_to_cancel
462
+ return (cancelled and not failed_to_cancel), cancelled_dependencies or None
450
463
 
451
464
  def all_databases(self):
452
465
  provider = databases.RunDatabasesProvider.instance()
@@ -14,8 +14,11 @@
14
14
  #
15
15
  # You should have received a copy of the GNU Lesser General Public
16
16
  # License along with this library.
17
+ import typing
18
+
17
19
  import async_channel.constants as channel_constants
18
20
  import async_channel.enums as channel_enums
21
+ import octobot_commons.signals as commons_signals
19
22
 
20
23
  import octobot_trading.exchange_channel as exchanges_channel
21
24
  import octobot_trading.constants as constants
@@ -33,7 +36,8 @@ class ModeChannelProducer(exchanges_channel.ExchangeChannelProducer):
33
36
  cryptocurrency=channel_constants.CHANNEL_WILDCARD,
34
37
  symbol=channel_constants.CHANNEL_WILDCARD,
35
38
  time_frame=None,
36
- data=None):
39
+ data=None,
40
+ dependencies: typing.Optional[commons_signals.SignalDependencies] = None):
37
41
  for consumer in self.channel.get_filtered_consumers(trading_mode_name=trading_mode_name,
38
42
  state=state,
39
43
  cryptocurrency=cryptocurrency,
@@ -46,7 +50,8 @@ class ModeChannelProducer(exchanges_channel.ExchangeChannelProducer):
46
50
  "cryptocurrency": cryptocurrency,
47
51
  "symbol": symbol,
48
52
  "time_frame": time_frame,
49
- "data": data
53
+ "data": data,
54
+ "dependencies": dependencies
50
55
  })
51
56
 
52
57