OctoBot-Trading 2.4.140__tar.gz → 2.4.142__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 (479) hide show
  1. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/CHANGELOG.md +8 -0
  2. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.140/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.142}/PKG-INFO +2 -2
  4. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/README.md +1 -1
  5. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/__init__.py +1 -1
  6. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/api/__init__.py +2 -0
  7. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/api/contracts.py +4 -0
  8. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/enums.py +14 -0
  9. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/errors.py +6 -0
  10. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/contracts/margin_contract.py +12 -5
  11. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/traders/trader.py +7 -5
  12. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/types/rest_exchange.py +6 -1
  13. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/abstract_trading_mode.py +8 -0
  14. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +1 -2
  15. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/order.py +1 -1
  16. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/signals/__init__.py +2 -0
  17. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/signals/signal_creation.py +14 -0
  18. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/signals/trading_signal_bundle_builder.py +103 -33
  19. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/signals/util.py +15 -0
  20. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/test_order.py +4 -5
  21. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/signals/test_trading_signal_bundle_builder.py +157 -20
  22. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/LICENSE +0 -0
  23. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/MANIFEST.in +0 -0
  24. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
  25. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  26. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  27. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/OctoBot_Trading.egg-info/requires.txt +0 -0
  28. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  29. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/api/channels.py +0 -0
  30. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/api/exchange.py +0 -0
  31. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/api/modes.py +0 -0
  32. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/api/orders.py +0 -0
  33. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/api/portfolio.py +0 -0
  34. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/api/positions.py +0 -0
  35. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/api/profitability.py +0 -0
  36. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/api/storage.py +0 -0
  37. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/api/symbol_data.py +0 -0
  38. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/api/trader.py +0 -0
  39. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/api/trades.py +0 -0
  40. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/constants.py +0 -0
  41. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_channel.py +0 -0
  42. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/__init__.py +0 -0
  43. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  44. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  45. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  46. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  47. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  48. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  49. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  50. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  51. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  52. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  53. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  54. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  55. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  56. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  57. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  58. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  59. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  60. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  61. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  62. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  63. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  64. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  65. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  66. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  67. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  68. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  69. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  70. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  71. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  72. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  73. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  74. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  75. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  76. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  77. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  78. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  79. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  80. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  81. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  82. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  83. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  84. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  85. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  86. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  87. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  88. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  89. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  90. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  91. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  92. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  93. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/__init__.py +0 -0
  94. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  95. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  96. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  97. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  98. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/config/__init__.py +0 -0
  99. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  100. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  101. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/config/proxy_config.py +0 -0
  102. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  103. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  104. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
  105. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
  106. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  107. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +0 -0
  108. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  109. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  110. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  111. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  112. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  113. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  114. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  115. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/exchange_builder.py +0 -0
  116. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/exchange_channels.py +0 -0
  117. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/exchange_details.py +0 -0
  118. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/exchange_factory.py +0 -0
  119. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/exchange_manager.py +0 -0
  120. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  121. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/exchanges.py +0 -0
  122. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  123. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  124. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  125. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  126. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/traders/__init__.py +0 -0
  127. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  128. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/types/__init__.py +0 -0
  129. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  130. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/util/__init__.py +0 -0
  131. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  132. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  133. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  134. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  135. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/__init__.py +0 -0
  136. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/channel/__init__.py +0 -0
  137. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  138. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  139. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/channel/mode.py +0 -0
  140. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/mode_activity.py +0 -0
  141. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/mode_config.py +0 -0
  142. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/modes_factory.py +0 -0
  143. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/modes_util.py +0 -0
  144. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  145. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  146. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  147. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  148. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  149. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  150. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  151. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  152. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  153. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  154. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  155. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  156. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  157. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  158. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  159. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/octobot_channel_consumer.py +0 -0
  160. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/__init__.py +0 -0
  161. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  162. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/__init__.py +0 -0
  163. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  164. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  165. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  166. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  167. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  168. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  169. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  170. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  171. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  172. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  173. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  174. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/order_group.py +0 -0
  175. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/order_state.py +0 -0
  176. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/order_util.py +0 -0
  177. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  178. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  179. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  180. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  181. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  182. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  183. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  184. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  185. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  186. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  187. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  188. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  189. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  190. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  191. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  192. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  193. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  194. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  195. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  196. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  197. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  198. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  199. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  200. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  201. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  202. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  203. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  204. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  205. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  206. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  207. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  208. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  209. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  210. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  211. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  212. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  213. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  214. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  215. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  216. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  217. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  218. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  219. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  220. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  221. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  222. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  223. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  224. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  225. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  226. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  227. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  228. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  229. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  230. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  231. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/__init__.py +0 -0
  232. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  233. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  234. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  235. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  236. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/position.py +0 -0
  237. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  238. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/position_state.py +0 -0
  239. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/position_util.py +0 -0
  240. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  241. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  242. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  243. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  244. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  245. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  246. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  247. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  248. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  249. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/state.py +0 -0
  250. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/trades/__init__.py +0 -0
  251. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  252. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  253. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  254. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/trades/trade.py +0 -0
  255. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  256. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  257. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  258. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  259. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  260. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  261. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  262. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  263. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  264. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  265. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  266. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  267. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  268. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/signals/channel/__init__.py +0 -0
  269. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  270. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  271. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/signals/channel/signal_producer.py +0 -0
  272. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/storage/__init__.py +0 -0
  273. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/storage/abstract_storage.py +0 -0
  274. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/storage/candles_storage.py +0 -0
  275. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/storage/orders_storage.py +0 -0
  276. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/storage/portfolio_storage.py +0 -0
  277. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/storage/storage_manager.py +0 -0
  278. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/storage/trades_storage.py +0 -0
  279. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/storage/transactions_storage.py +0 -0
  280. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/storage/util.py +0 -0
  281. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/supervisors/__init__.py +0 -0
  282. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  283. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  284. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/util/__init__.py +0 -0
  285. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/util/config_util.py +0 -0
  286. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/util/initializable.py +0 -0
  287. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/util/initialization_util.py +0 -0
  288. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/util/simulator_updater_utils.py +0 -0
  289. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/util/test_tools/__init__.py +0 -0
  290. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  291. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  292. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  293. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  294. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/requirements.txt +0 -0
  295. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/setup.cfg +0 -0
  296. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/setup.py +0 -0
  297. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/api/__init__.py +0 -0
  298. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/api/test_channels.py +0 -0
  299. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/api/test_exchange.py +0 -0
  300. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/api/test_modes.py +0 -0
  301. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/api/test_orders.py +0 -0
  302. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/api/test_portfolio.py +0 -0
  303. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/api/test_profitability.py +0 -0
  304. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/api/test_symbol_data.py +0 -0
  305. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/api/test_trader.py +0 -0
  306. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/api/test_trades.py +0 -0
  307. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/cli/__init__.py +0 -0
  308. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/__init__.py +0 -0
  309. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/contracts/__init__.py +0 -0
  310. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  311. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  312. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/funding/__init__.py +0 -0
  313. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  314. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/kline/__init__.py +0 -0
  315. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  316. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/ohlcv/__init__.py +0 -0
  317. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  318. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  319. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/order_book/__init__.py +0 -0
  320. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  321. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/prices/__init__.py +0 -0
  322. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  323. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  324. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/recent_trades/__init__.py +0 -0
  325. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  326. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  327. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/ticker/__init__.py +0 -0
  328. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  329. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/__init__.py +0 -0
  330. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/connectors/__init__.py +0 -0
  331. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  332. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  333. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  334. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/implementations/__init__.py +0 -0
  335. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  336. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  337. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/test_abstract_exchange.py +0 -0
  338. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  339. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/test_exchange_builder.py +0 -0
  340. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/test_exchange_config_data.py +0 -0
  341. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/test_exchange_factory.py +0 -0
  342. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/test_exchange_manager.py +0 -0
  343. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/test_exchange_simulator.py +0 -0
  344. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/test_exchanges.py +0 -0
  345. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/traders/__init__.py +0 -0
  346. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/traders/test_trader.py +0 -0
  347. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/types/__init__.py +0 -0
  348. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  349. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/util/__init__.py +0 -0
  350. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  351. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/exchanges/util/test_exchange_util.py +0 -0
  352. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/modes/__init__.py +0 -0
  353. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/modes/script_keywords/__init__.py +0 -0
  354. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  355. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  356. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  357. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  358. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  359. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  360. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  361. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/modes/test_abstract_mode_consumer.py +0 -0
  362. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/modes/test_abstract_trading_mode.py +0 -0
  363. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/modes/test_modes_util.py +0 -0
  364. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/__init__.py +0 -0
  365. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/__init__.py +0 -0
  366. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/groups/__init__.py +0 -0
  367. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  368. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  369. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  370. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/states/__init__.py +0 -0
  371. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  372. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  373. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  374. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  375. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/states/test_order_state.py +0 -0
  376. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  377. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  378. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  379. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  380. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  381. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/test_order_adapter.py +0 -0
  382. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/test_order_factory.py +0 -0
  383. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/test_order_util.py +0 -0
  384. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/test_orders_manager.py +0 -0
  385. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  386. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/types/__init__.py +0 -0
  387. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  388. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  389. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  390. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  391. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  392. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  393. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  394. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  395. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/types/market/__init__.py +0 -0
  396. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  397. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  398. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  399. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  400. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  401. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  402. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/__init__.py +0 -0
  403. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  404. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  405. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  406. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  407. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/history/__init__.py +0 -0
  408. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  409. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  410. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/test_asset.py +0 -0
  411. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  412. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  413. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  414. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  415. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  416. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/types/__init__.py +0 -0
  417. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  418. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  419. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  420. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/positions/__init__.py +0 -0
  421. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/positions/channel/__init__.py +0 -0
  422. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/positions/states/__init__.py +0 -0
  423. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/positions/test_position.py +0 -0
  424. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/positions/test_position_factory.py +0 -0
  425. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/positions/test_positions_manager.py +0 -0
  426. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/positions/types/__init__.py +0 -0
  427. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  428. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  429. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/trades/__init__.py +0 -0
  430. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/trades/test_trade_factory.py +0 -0
  431. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/trades/test_trade_manager.py +0 -0
  432. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  433. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/trades/test_trade_util.py +0 -0
  434. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/transactions/__init__.py +0 -0
  435. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  436. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  437. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/signals/__init__.py +0 -0
  438. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/signals/test_util.py +0 -0
  439. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/test_utils/__init__.py +0 -0
  440. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/test_utils/order_util.py +0 -0
  441. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/test_utils/random_numbers.py +0 -0
  442. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/util/__init__.py +0 -0
  443. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests/util/test_config_util.py +0 -0
  444. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/__init__.py +0 -0
  445. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/__init__.py +0 -0
  446. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
  447. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  448. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  449. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_binance.py +0 -0
  450. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  451. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_bingx.py +0 -0
  452. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  453. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_bitget.py +0 -0
  454. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  455. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_bitmart.py +0 -0
  456. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_bitmex.py +0 -0
  457. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_bitso.py +0 -0
  458. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  459. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_bybit.py +0 -0
  460. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  461. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  462. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_coinex.py +0 -0
  463. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  464. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_gateio.py +0 -0
  465. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  466. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  467. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_htx.py +0 -0
  468. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_kraken.py +0 -0
  469. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  470. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  471. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_mexc.py +0 -0
  472. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_ndax.py +0 -0
  473. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  474. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_okx.py +0 -0
  475. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  476. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_phemex.py +0 -0
  477. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  478. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_upbit.py +0 -0
  479. {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.142}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [2.4.142] - 2025-01-07
8
+ ### Fixed
9
+ [Order] fix _create_triggered_chained_order
10
+
11
+ ## [2.4.141] - 2025-01-05
12
+ ### Added
13
+ [TradingSignals] add positions and leverage update
14
+
7
15
  ## [2.4.140] - 2025-01-03
8
16
  ### Updated
9
17
  [Positions] properly clear closed positions
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.140
3
+ Version: 2.4.142
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.140](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.142](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
20
20
  [![Codacy Badge](https://api.codacy.com/project/badge/Grade/903b6b22bceb4661b608a86fea655f69)](https://app.codacy.com/gh/Drakkar-Software/OctoBot-Trading?utm_source=github.com&utm_medium=referral&utm_content=Drakkar-Software/OctoBot-Trading&utm_campaign=Badge_Grade_Dashboard)
21
21
  [![PyPI](https://img.shields.io/pypi/v/OctoBot-Trading.svg)](https://pypi.python.org/pypi/OctoBot-Trading/)
22
22
  [![Coverage Status](https://coveralls.io/repos/github/Drakkar-Software/OctoBot-Trading/badge.svg?branch=master)](https://coveralls.io/github/Drakkar-Software/OctoBot-Trading?branch=master)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.140
3
+ Version: 2.4.142
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.140](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.142](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.140](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.142](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.140" # major.minor.revision
18
+ VERSION = "2.4.142" # major.minor.revision
@@ -210,6 +210,7 @@ from octobot_trading.api.contracts import (
210
210
  get_pair_contracts,
211
211
  is_handled_contract,
212
212
  has_pair_future_contract,
213
+ update_pair_contract,
213
214
  load_pair_contract,
214
215
  create_default_future_contract,
215
216
  )
@@ -386,6 +387,7 @@ __all__ = [
386
387
  "get_pair_contracts",
387
388
  "is_handled_contract",
388
389
  "has_pair_future_contract",
390
+ "update_pair_contract",
389
391
  "load_pair_contract",
390
392
  "create_default_future_contract",
391
393
  "set_is_exclusively_using_exchange_position_details",
@@ -38,6 +38,10 @@ def has_pair_future_contract(exchange_manager, pair: str) -> bool:
38
38
  return exchange_manager.exchange.has_pair_future_contract(pair)
39
39
 
40
40
 
41
+ def update_pair_contract(exchange_manager, pair: str, leverage: decimal.Decimal):
42
+ get_pair_contracts(exchange_manager)[pair].current_leverage = leverage
43
+
44
+
41
45
  def load_pair_contract(exchange_manager, contract_dict: dict):
42
46
  exchange_data.update_future_contract_from_dict(exchange_manager, contract_dict)
43
47
 
@@ -521,6 +521,7 @@ class TradingSignalAttrs(enum.Enum):
521
521
 
522
522
  class TradingSignalTopics(enum.Enum):
523
523
  ORDERS = "orders"
524
+ POSITIONS = "positions"
524
525
  PORTFOLIO = "portfolio"
525
526
 
526
527
 
@@ -559,6 +560,15 @@ class TradingSignalOrdersAttrs(enum.Enum):
559
560
  UPDATE_WITH_TRIGGERING_ORDER_FEES = "update_with_triggering_order_fees"
560
561
 
561
562
 
563
+ class TradingSignalPositionsAttrs(enum.Enum):
564
+ EXCHANGE = "exchange"
565
+ EXCHANGE_TYPE = "exchange_type"
566
+ STRATEGY = "strategy"
567
+ SYMBOL = "symbol"
568
+ SIDE = "side"
569
+ LEVERAGE = "leverage"
570
+
571
+
562
572
  class TradingSignalOrdersActions(enum.Enum):
563
573
  CREATE = "create"
564
574
  ADD_TO_GROUP = "add_to_group"
@@ -566,6 +576,10 @@ class TradingSignalOrdersActions(enum.Enum):
566
576
  CANCEL = "cancel"
567
577
 
568
578
 
579
+ class TradingSignalPositionsActions(enum.Enum):
580
+ EDIT = "edit"
581
+
582
+
569
583
  class StoredOrdersAttr(enum.Enum):
570
584
  GROUP = "gr"
571
585
  GROUP_ID = "gi"
@@ -272,6 +272,12 @@ class OrderDescriptionNotFoundError(Exception):
272
272
  """
273
273
 
274
274
 
275
+ class PositionDescriptionNotFoundError(Exception):
276
+ """
277
+ Raised when a position description is not found
278
+ """
279
+
280
+
275
281
  class AdapterError(Exception):
276
282
  """
277
283
  Raised when an error occurs in an adapter
@@ -13,6 +13,8 @@
13
13
  #
14
14
  # You should have received a copy of the GNU Lesser General Public
15
15
  # License along with this library.
16
+ import decimal
17
+
16
18
  import octobot_commons.logging as logging
17
19
 
18
20
  import octobot_trading.enums as enums
@@ -24,12 +26,12 @@ class MarginContract:
24
26
  contract_size=constants.ONE,
25
27
  maximum_leverage=constants.ONE,
26
28
  current_leverage=constants.ONE):
27
- self.pair = pair
29
+ self.pair: str = pair
28
30
  self.margin_type = margin_type
29
31
 
30
- self.contract_size = contract_size
31
- self.maximum_leverage = maximum_leverage
32
- self.current_leverage = current_leverage
32
+ self.contract_size: decimal.Decimal = contract_size
33
+ self.maximum_leverage: decimal.Decimal = maximum_leverage
34
+ self.current_leverage: decimal.Decimal = current_leverage
33
35
 
34
36
  self.risk_limit = {}
35
37
 
@@ -47,7 +49,12 @@ class MarginContract:
47
49
  :param new_leverage: the leverage value to check
48
50
  :return: True if valid
49
51
  """
50
- return 0 < new_leverage if self.maximum_leverage is None else 0 < new_leverage <= self.maximum_leverage
52
+ dec_leverage = decimal.Decimal(str(new_leverage))
53
+ return (
54
+ constants.ZERO < dec_leverage
55
+ if self.maximum_leverage is None
56
+ else constants.ZERO < dec_leverage <= self.maximum_leverage
57
+ )
51
58
 
52
59
  def set_current_leverage(self, new_leverage):
53
60
  """
@@ -779,13 +779,16 @@ class Trader(util.Initializable):
779
779
  async with self.exchange_manager.exchange_personal_data.portfolio_manager.portfolio.lock:
780
780
  await self.exchange_manager.exchange_personal_data.handle_portfolio_update_from_withdrawal(amount, currency)
781
781
 
782
- async def set_leverage(self, symbol, side, leverage):
782
+ async def set_leverage(
783
+ self, symbol: str, side: typing.Optional[enums.PositionSide], leverage: decimal.Decimal
784
+ ) -> bool:
783
785
  """
784
786
  Updates the symbol contract leverage
785
787
  Can raise InvalidLeverageValue if leverage value is not matching requirements
786
788
  :param symbol: the symbol to update
787
789
  :param side: the side to update (TODO)
788
790
  :param leverage: the new leverage value
791
+ :return True if leverage changed
789
792
  """
790
793
  contract = self.exchange_manager.exchange.get_pair_future_contract(symbol)
791
794
  if not contract.check_leverage_update(leverage):
@@ -793,12 +796,11 @@ class Trader(util.Initializable):
793
796
  f"but maximal value is {contract.maximum_leverage}")
794
797
  if contract.current_leverage != leverage:
795
798
  if not self.simulate:
796
- await self.exchange_manager.exchange.set_symbol_leverage(
797
- symbol=symbol,
798
- leverage=leverage
799
- )
799
+ await self.exchange_manager.exchange.set_symbol_leverage(symbol, float(leverage))
800
800
  self.logger.info(f"Switching {symbol} leverage from {contract.current_leverage} to {leverage}")
801
801
  contract.set_current_leverage(leverage)
802
+ return True
803
+ return False
802
804
 
803
805
  async def set_symbol_take_profit_stop_loss_mode(self, symbol, new_mode: enums.TakeProfitStopLossMode):
804
806
  """
@@ -102,6 +102,8 @@ class RestExchange(abstract_exchange.AbstractExchange):
102
102
  CAN_HAVE_DELAYED_CANCELLED_ORDERS = False
103
103
  # Set True when the "limit" param when fetching order books is taken into account
104
104
  SUPPORTS_CUSTOM_LIMIT_ORDER_BOOK_FETCH = False
105
+ # Set False when the leverage value is set via something else that a set_leverage api (from orders for example)
106
+ UPDATE_LEVERAGE_FROM_API = True
105
107
 
106
108
  # text content of errors due to orders not found errors
107
109
  EXCHANGE_ORDER_NOT_FOUND_ERRORS: typing.List[typing.Iterable[str]] = []
@@ -934,7 +936,10 @@ class RestExchange(abstract_exchange.AbstractExchange):
934
936
  :param leverage: the leverage
935
937
  :return: the update result
936
938
  """
937
- return await self.connector.set_symbol_leverage(leverage=leverage, symbol=symbol, **kwargs)
939
+ if self.UPDATE_LEVERAGE_FROM_API:
940
+ return await self.connector.set_symbol_leverage(leverage=leverage, symbol=symbol, **kwargs)
941
+ # nothing to do when UPDATE_LEVERAGE_FROM_API is False
942
+ return None
938
943
 
939
944
  async def set_symbol_margin_type(self, symbol: str, isolated: bool, **kwargs: dict):
940
945
  """
@@ -17,6 +17,7 @@ import abc
17
17
  import contextlib
18
18
  import decimal
19
19
  import copy
20
+ import typing
20
21
 
21
22
  import octobot_commons.constants as common_constants
22
23
  import octobot_commons.enums as common_enums
@@ -585,6 +586,13 @@ class AbstractTradingMode(abstract_tentacle.AbstractTentacle):
585
586
  params=params
586
587
  )
587
588
 
589
+ async def set_leverage(
590
+ self, symbol: str, side: typing.Optional[enums.PositionSide], leverage: decimal.Decimal
591
+ ) -> bool:
592
+ return await signals.set_leverage(
593
+ self.exchange_manager, self.should_emit_trading_signal(), symbol, side, leverage
594
+ )
595
+
588
596
  async def get_additional_metadata(self, is_backtesting):
589
597
  """
590
598
  Override if necessary
@@ -42,9 +42,8 @@ async def user_select_emit_trading_signals(ctx, identifier, def_val=False) -> bo
42
42
  return is_emitting_signals
43
43
 
44
44
 
45
- async def set_leverage(ctx, leverage):
45
+ async def set_leverage(ctx, leverage, side=None):
46
46
  if ctx.exchange_manager.is_future:
47
- side = None
48
47
  try:
49
48
  await ctx.exchange_manager.trader.set_leverage(ctx.symbol, side, decimal.Decimal(str(leverage)))
50
49
  except errors.ContractExistsError as e:
@@ -532,7 +532,7 @@ class Order(util.Initializable):
532
532
  except errors.ExchangeClosedPositionError as err:
533
533
  message = (
534
534
  f"chained order is cancelled as it can't be created: position is closed "
535
- f"on exchange ({err}) order: {order.id}"
535
+ f"on exchange ({err}) order: {order.order_id}"
536
536
  )
537
537
  if order.reduce_only:
538
538
  # can happen on reduce only orders
@@ -40,6 +40,7 @@ from octobot_trading.signals.signal_creation import (
40
40
  create_order,
41
41
  cancel_order,
42
42
  edit_order,
43
+ set_leverage,
43
44
  )
44
45
 
45
46
 
@@ -57,4 +58,5 @@ __all__ = [
57
58
  "create_order",
58
59
  "cancel_order",
59
60
  "edit_order",
61
+ "set_leverage",
60
62
  ]
@@ -15,10 +15,12 @@
15
15
  # License along with this library.
16
16
  import decimal
17
17
  import contextlib
18
+ import typing
18
19
 
19
20
  import octobot_trading.modes.script_keywords as script_keywords
20
21
  import octobot_trading.personal_data.orders as orders
21
22
  import octobot_trading.constants as constants
23
+ import octobot_trading.enums as enums
22
24
  import octobot_trading.signals.trading_signal_bundle_builder as trading_signal_bundle_builder
23
25
 
24
26
  import octobot_commons.logging as logging
@@ -141,3 +143,15 @@ async def edit_order(
141
143
  updated_current_price=edited_current_price,
142
144
  )
143
145
  return changed
146
+
147
+
148
+ async def set_leverage(
149
+ exchange_manager, should_emit_signal, symbol: str, side: typing.Optional[enums.PositionSide],
150
+ leverage: decimal.Decimal
151
+ ) -> bool:
152
+ changed = await exchange_manager.trader.set_leverage(symbol, side, leverage)
153
+ if should_emit_signal and changed:
154
+ signals.SignalPublisher.instance().get_signal_bundle_builder(symbol).add_leverage_update(
155
+ symbol, side, leverage, exchange_manager
156
+ )
157
+ return changed
@@ -13,6 +13,9 @@
13
13
  #
14
14
  # You should have received a copy of the GNU Lesser General Public
15
15
  # License along with this library.
16
+ import decimal
17
+ import typing
18
+
16
19
  import octobot_commons.signals as signals
17
20
  import octobot_trading.signals.util as signal_util
18
21
  import octobot_trading.enums as trading_enums
@@ -34,10 +37,20 @@ class TradingSignalBundleBuilder(signals.SignalBundleBuilder):
34
37
 
35
38
  def sort_signals(self):
36
39
  # https://docs.python.org/3/howto/sorting.html#sort-stability-and-complex-sorts
37
- # move cancelled order signals at the beginning of the list, leave others as is while keeping initial order
38
- def _sort_key(signal):
39
- return 0 if signal.content[trading_enums.TradingSignalCommonsAttrs.ACTION.value] == \
40
- trading_enums.TradingSignalOrdersActions.CANCEL.value else 1
40
+ # sorting rules:
41
+ # 1. cancelled order signals at the beginning of the list
42
+ # 2. positions edit (such as changing leverage)
43
+ # 3. others as is while keeping initial order
44
+ def _sort_key(signal: signals.Signal):
45
+ return (
46
+ 0 if (
47
+ signal.content[trading_enums.TradingSignalCommonsAttrs.ACTION.value] ==
48
+ trading_enums.TradingSignalOrdersActions.CANCEL.value
49
+ ) else (
50
+ 1 if signal.topic == trading_enums.TradingSignalTopics.POSITIONS.value
51
+ else 2
52
+ )
53
+ )
41
54
 
42
55
  self.signals = sorted(self.signals, key=_sort_key)
43
56
  return self
@@ -122,6 +135,25 @@ class TradingSignalBundleBuilder(signals.SignalBundleBuilder):
122
135
  )
123
136
  )
124
137
 
138
+ def add_leverage_update(
139
+ self, symbol: str, side: typing.Optional[trading_enums.PositionSide],
140
+ leverage: decimal.Decimal, exchange_manager
141
+ ):
142
+ if not self._update_pending_positions(
143
+ symbol, side, exchange_manager, trading_enums.TradingSignalPositionsActions.EDIT, leverage=leverage
144
+ ):
145
+ self.register_signal(
146
+ trading_enums.TradingSignalTopics.POSITIONS.value,
147
+ signal_util.create_position_signal_content(
148
+ trading_enums.TradingSignalPositionsActions.EDIT,
149
+ self.strategy,
150
+ exchange_manager,
151
+ symbol,
152
+ side,
153
+ leverage
154
+ )
155
+ )
156
+
125
157
  def _update_pending_orders(
126
158
  self, order, exchange_manager,
127
159
  action,
@@ -189,47 +221,85 @@ class TradingSignalBundleBuilder(signals.SignalBundleBuilder):
189
221
  pass
190
222
  return False
191
223
 
224
+ def _update_pending_positions(self, symbol, side, exchange_manager, action, leverage):
225
+ try:
226
+ _, position_description = self._get_position_description_from_local_positions(
227
+ symbol, side, exchange_manager.exchange_name
228
+ )
229
+ if action is trading_enums.TradingSignalPositionsActions.EDIT:
230
+ # update position edit content
231
+ position_description[trading_enums.TradingSignalPositionsAttrs.LEVERAGE.value] = float(leverage)
232
+ return True
233
+ except trading_errors.PositionDescriptionNotFoundError:
234
+ pass
235
+ return False
236
+
192
237
  def _pack_referenced_orders_together(self):
193
238
  filtered_signals = []
194
239
  order_description_by_seen_group_ids = {}
195
240
  for signal in self.signals:
196
241
  include_signal = True
197
- try:
198
- # bundled orders must be sent at the same time as the original order, add them both to the same signal
199
- if add_to_order_id := signal.content[trading_enums.TradingSignalOrdersAttrs.BUNDLED_WITH.value]:
200
- _, order_description = self._get_order_description_from_local_orders(add_to_order_id)
201
- order_description[trading_enums.TradingSignalOrdersAttrs.ADDITIONAL_ORDERS.value]\
202
- .append(signal.content)
203
- include_signal = False
204
- # chained orders must be sent at the same time as the original order, add them both to the same signal
205
- elif add_to_order_id := signal.content[trading_enums.TradingSignalOrdersAttrs.CHAINED_TO.value]:
206
- _, order_description = self._get_order_description_from_local_orders(add_to_order_id)
207
- order_description[trading_enums.TradingSignalOrdersAttrs.ADDITIONAL_ORDERS.value]\
208
- .append(signal.content)
209
- include_signal = False
210
- except trading_errors.OrderDescriptionNotFoundError:
211
- # Failed to find the triggering order's associated signal that this order signal should be associated to
212
- # in ADDITIONAL_ORDERS.
213
- # This can happen when the triggering order has already been sent in a different signal
214
- self.logger.debug(f"Skip signal packing for {signal}: triggering order not found in associated signals")
215
- # grouped orders must be created before the group is enabled, add them both to the same signal
216
- # groups. They might also need to be updated together
217
- if (add_to_group_ids := signal.content[trading_enums.TradingSignalOrdersAttrs.GROUP_ID.value]) \
218
- and include_signal:
219
- if add_to_group_ids in order_description_by_seen_group_ids:
220
- order_description_by_seen_group_ids[add_to_group_ids][
221
- trading_enums.TradingSignalOrdersAttrs.ADDITIONAL_ORDERS.value].append(signal.content)
222
- include_signal = False
223
- else:
224
- order_description_by_seen_group_ids[add_to_group_ids] = signal.content
242
+ if signal.topic == trading_enums.TradingSignalTopics.ORDERS.value:
243
+ try:
244
+ # bundled orders must be sent at the same time as the original order, add them both to the same signal
245
+ if add_to_order_id := signal.content[trading_enums.TradingSignalOrdersAttrs.BUNDLED_WITH.value]:
246
+ _, order_description = self._get_order_description_from_local_orders(add_to_order_id)
247
+ order_description[trading_enums.TradingSignalOrdersAttrs.ADDITIONAL_ORDERS.value]\
248
+ .append(signal.content)
249
+ include_signal = False
250
+ # chained orders must be sent at the same time as the original order, add them both to the same signal
251
+ elif add_to_order_id := signal.content[trading_enums.TradingSignalOrdersAttrs.CHAINED_TO.value]:
252
+ _, order_description = self._get_order_description_from_local_orders(add_to_order_id)
253
+ order_description[trading_enums.TradingSignalOrdersAttrs.ADDITIONAL_ORDERS.value]\
254
+ .append(signal.content)
255
+ include_signal = False
256
+ except trading_errors.OrderDescriptionNotFoundError:
257
+ # Failed to find the triggering order's associated signal that this order signal should be associated to
258
+ # in ADDITIONAL_ORDERS.
259
+ # This can happen when the triggering order has already been sent in a different signal
260
+ self.logger.debug(f"Skip signal packing for {signal}: triggering order not found in associated signals")
261
+ # grouped orders must be created before the group is enabled, add them both to the same signal
262
+ # groups. They might also need to be updated together
263
+ if (add_to_group_ids := signal.content[trading_enums.TradingSignalOrdersAttrs.GROUP_ID.value]) \
264
+ and include_signal:
265
+ if add_to_group_ids in order_description_by_seen_group_ids:
266
+ order_description_by_seen_group_ids[add_to_group_ids][
267
+ trading_enums.TradingSignalOrdersAttrs.ADDITIONAL_ORDERS.value].append(signal.content)
268
+ include_signal = False
269
+ else:
270
+ order_description_by_seen_group_ids[add_to_group_ids] = signal.content
271
+ elif signal.topic == trading_enums.TradingSignalTopics.POSITIONS.value:
272
+ # nothing to do, signals can be added as is
273
+ pass
274
+ else:
275
+ include_signal = False
276
+ self.logger.debug(f"Skip signal packing for {signal} ({signal.topic=})")
225
277
  if include_signal:
226
278
  filtered_signals.append(signal)
227
279
  self.signals = filtered_signals
228
280
 
229
281
  def _get_order_description_from_local_orders(self, order_id):
230
282
  for index, signal in enumerate(self.signals):
231
- if signal.content[trading_enums.TradingSignalOrdersAttrs.ORDER_ID.value] == order_id:
283
+ if (
284
+ signal.topic == trading_enums.TradingSignalTopics.ORDERS.value and
285
+ signal.content[trading_enums.TradingSignalOrdersAttrs.ORDER_ID.value] == order_id
286
+ ):
232
287
  return index, signal.content
233
288
  raise trading_errors.OrderDescriptionNotFoundError(
234
289
  f"order not found (order_id: {order_id})"
235
290
  )
291
+
292
+ def _get_position_description_from_local_positions(self, symbol, side, exchange_name):
293
+ for index, signal in enumerate(self.signals):
294
+ side_value = side.value if side else side
295
+ if (
296
+ signal.topic == trading_enums.TradingSignalTopics.POSITIONS.value and
297
+ signal.content[trading_enums.TradingSignalPositionsAttrs.SYMBOL.value] == symbol and
298
+ signal.content[trading_enums.TradingSignalPositionsAttrs.SIDE.value] == side_value and
299
+ signal.content[trading_enums.TradingSignalPositionsAttrs.EXCHANGE.value] == exchange_name
300
+ ):
301
+ return index, signal.content
302
+ raise trading_errors.PositionDescriptionNotFoundError(
303
+ f"position not found ({symbol, side, exchange_name})"
304
+ )
305
+
@@ -71,3 +71,18 @@ def create_order_signal_content(
71
71
  None if order.triggered_by is None else order.triggered_by.order_id,
72
72
  trading_enums.TradingSignalOrdersAttrs.ADDITIONAL_ORDERS.value: [],
73
73
  }
74
+
75
+
76
+ def create_position_signal_content(
77
+ action, strategy, exchange_manager, symbol, side, leverage
78
+ ) -> dict:
79
+ # only use order.order_id to identify orders in signals (exchange_order_id is local and never shared)
80
+ return {
81
+ trading_enums.TradingSignalCommonsAttrs.ACTION.value: action.value,
82
+ trading_enums.TradingSignalPositionsAttrs.STRATEGY.value: strategy,
83
+ trading_enums.TradingSignalPositionsAttrs.EXCHANGE.value: exchange_manager.exchange_name,
84
+ trading_enums.TradingSignalPositionsAttrs.EXCHANGE_TYPE.value: exchanges.get_exchange_type(exchange_manager).value,
85
+ trading_enums.TradingSignalPositionsAttrs.SYMBOL.value: symbol,
86
+ trading_enums.TradingSignalPositionsAttrs.SIDE.value: side.value if side else side,
87
+ trading_enums.TradingSignalPositionsAttrs.LEVERAGE.value: float(leverage),
88
+ }
@@ -398,9 +398,8 @@ async def test_create_triggered_chained_order_mock(trader_simulator):
398
398
 
399
399
  base_order = personal_data.Order(trader_inst)
400
400
  eq_chained_order_1 = mock.Mock(get_name=mock.Mock(return_value="plop"))
401
- chained_order_1 = mock.Mock(
402
- create_triggered_equivalent_order=mock.AsyncMock(return_value=eq_chained_order_1),
403
- )
401
+ chained_order_1 = personal_data.Order(trader_inst)
402
+ chained_order_1.create_triggered_equivalent_order=mock.AsyncMock(return_value=eq_chained_order_1)
404
403
 
405
404
  # normal call
406
405
  with mock.patch.object(order_util, "create_as_chained_order", mock.AsyncMock()) as create_as_chained_order_mock:
@@ -419,7 +418,7 @@ async def test_create_triggered_chained_order_mock(trader_simulator):
419
418
 
420
419
  # ExchangeClosedPositionError
421
420
  chained_order_1.status = None
422
- chained_order_1.state = 1
421
+ chained_order_1.state = mock.Mock()
423
422
  with mock.patch.object(
424
423
  order_util, "create_as_chained_order", mock.AsyncMock(side_effect=errors.ExchangeClosedPositionError)
425
424
  ) as create_as_chained_order_mock:
@@ -440,7 +439,7 @@ async def test_create_triggered_chained_order_mock(trader_simulator):
440
439
  return
441
440
 
442
441
  chained_order_1.status = 1
443
- chained_order_1.state = 1
442
+ chained_order_1.state = mock.Mock()
444
443
  with mock.patch.object(
445
444
  order_util, "create_as_chained_order", mock.AsyncMock(side_effect=_create_as_chained_order)
446
445
  ) as create_as_chained_order_mock, mock.patch.object(