OctoBot-Trading 2.4.147__tar.gz → 2.4.149__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.147 → OctoBot-Trading-2.4.149}/CHANGELOG.md +9 -0
  2. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.147/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.149}/PKG-INFO +2 -2
  4. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/README.md +1 -1
  5. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/__init__.py +1 -1
  6. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/__init__.py +2 -0
  7. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/contracts.py +6 -2
  8. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/errors.py +12 -0
  9. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/contracts/contract_factory.py +2 -2
  10. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/contracts/future_contract.py +10 -0
  11. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/contracts/margin_contract.py +3 -0
  12. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/config/exchange_config_data.py +2 -2
  13. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +1 -1
  14. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +49 -5
  15. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +1 -1
  16. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/implementations/exchange_simulator.py +2 -1
  17. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/types/rest_exchange.py +5 -1
  18. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/abstract_trading_mode.py +8 -0
  19. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/channel/abstract_mode_consumer.py +7 -1
  20. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/exchange_personal_data.py +17 -5
  21. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/orders_manager.py +4 -3
  22. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/position.py +4 -1
  23. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/trades_manager.py +1 -1
  24. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +4 -7
  25. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/LICENSE +0 -0
  26. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/MANIFEST.in +0 -0
  27. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
  28. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  29. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  30. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/OctoBot_Trading.egg-info/requires.txt +0 -0
  31. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  32. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/channels.py +0 -0
  33. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/exchange.py +0 -0
  34. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/modes.py +0 -0
  35. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/orders.py +0 -0
  36. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/portfolio.py +0 -0
  37. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/positions.py +0 -0
  38. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/profitability.py +0 -0
  39. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/storage.py +0 -0
  40. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/symbol_data.py +0 -0
  41. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/trader.py +0 -0
  42. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/trades.py +0 -0
  43. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/constants.py +0 -0
  44. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/enums.py +0 -0
  45. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_channel.py +0 -0
  46. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/__init__.py +0 -0
  47. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  48. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  49. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  50. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  51. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  52. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  53. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  54. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  55. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  56. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  57. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  58. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  59. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  60. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  61. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  62. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  63. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  64. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  65. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  66. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  67. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  68. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  69. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  70. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  71. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  72. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  73. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  74. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  75. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  76. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  77. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  78. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  79. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  80. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  81. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  82. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  83. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  84. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  85. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  86. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  87. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  88. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  89. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  90. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  91. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  92. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  93. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  94. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  95. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/__init__.py +0 -0
  96. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  97. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  98. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  99. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  100. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/config/__init__.py +0 -0
  101. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  102. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/config/proxy_config.py +0 -0
  103. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  104. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  105. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  106. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  107. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  108. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  109. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  110. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  111. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  112. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  113. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/exchange_builder.py +0 -0
  114. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/exchange_channels.py +0 -0
  115. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/exchange_details.py +0 -0
  116. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/exchange_factory.py +0 -0
  117. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/exchange_manager.py +0 -0
  118. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  119. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/exchanges.py +0 -0
  120. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  121. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  122. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  123. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/traders/__init__.py +0 -0
  124. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/traders/trader.py +0 -0
  125. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  126. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/types/__init__.py +0 -0
  127. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  128. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/util/__init__.py +0 -0
  129. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  130. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  131. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  132. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  133. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/__init__.py +0 -0
  134. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/channel/__init__.py +0 -0
  135. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  136. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/channel/mode.py +0 -0
  137. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/mode_activity.py +0 -0
  138. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/mode_config.py +0 -0
  139. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/modes_factory.py +0 -0
  140. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/modes_util.py +0 -0
  141. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  142. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  143. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  144. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  145. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  146. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  147. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  148. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  149. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  150. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  151. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  152. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  153. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  154. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  155. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  156. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  157. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/octobot_channel_consumer.py +0 -0
  158. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/__init__.py +0 -0
  159. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/__init__.py +0 -0
  160. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  161. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  162. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  163. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  164. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  165. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  166. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  167. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  168. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  169. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/order.py +0 -0
  170. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  171. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  172. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/order_group.py +0 -0
  173. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/order_state.py +0 -0
  174. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/order_util.py +0 -0
  175. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  176. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  177. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  178. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  179. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  180. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  181. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  182. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  183. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  184. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  185. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  186. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  187. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  188. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  189. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  190. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  191. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  192. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  193. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  194. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  195. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  196. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  197. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  198. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  199. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  200. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  201. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  202. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  203. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  204. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  205. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  206. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  207. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  208. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  209. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  210. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  211. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  212. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  213. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  214. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  215. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  216. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  217. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  218. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  219. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  220. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  221. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  222. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  223. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  224. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  225. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  226. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  227. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  228. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/__init__.py +0 -0
  229. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  230. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  231. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  232. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  233. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  234. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/position_state.py +0 -0
  235. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/position_util.py +0 -0
  236. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  237. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  238. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  239. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  240. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  241. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  242. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  243. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  244. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  245. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/state.py +0 -0
  246. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/__init__.py +0 -0
  247. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  248. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  249. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  250. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/trade.py +0 -0
  251. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  252. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  253. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  254. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  255. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  256. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  257. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  258. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  259. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  260. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  261. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  262. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  263. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/signals/__init__.py +0 -0
  264. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/signals/channel/__init__.py +0 -0
  265. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  266. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  267. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/signals/channel/signal_producer.py +0 -0
  268. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/signals/signal_creation.py +0 -0
  269. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  270. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/signals/util.py +0 -0
  271. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/__init__.py +0 -0
  272. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/abstract_storage.py +0 -0
  273. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/candles_storage.py +0 -0
  274. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/orders_storage.py +0 -0
  275. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/portfolio_storage.py +0 -0
  276. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/storage_manager.py +0 -0
  277. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/trades_storage.py +0 -0
  278. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/transactions_storage.py +0 -0
  279. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/util.py +0 -0
  280. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/supervisors/__init__.py +0 -0
  281. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  282. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  283. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/__init__.py +0 -0
  284. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/config_util.py +0 -0
  285. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/initializable.py +0 -0
  286. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/initialization_util.py +0 -0
  287. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/simulator_updater_utils.py +0 -0
  288. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/test_tools/__init__.py +0 -0
  289. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  290. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  291. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  292. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  293. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/requirements.txt +0 -0
  294. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/setup.cfg +0 -0
  295. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/setup.py +0 -0
  296. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/__init__.py +0 -0
  297. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_channels.py +0 -0
  298. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_exchange.py +0 -0
  299. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_modes.py +0 -0
  300. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_orders.py +0 -0
  301. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_portfolio.py +0 -0
  302. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_profitability.py +0 -0
  303. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_symbol_data.py +0 -0
  304. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_trader.py +0 -0
  305. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_trades.py +0 -0
  306. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/cli/__init__.py +0 -0
  307. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/__init__.py +0 -0
  308. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/contracts/__init__.py +0 -0
  309. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  310. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  311. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/funding/__init__.py +0 -0
  312. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  313. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/kline/__init__.py +0 -0
  314. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  315. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/ohlcv/__init__.py +0 -0
  316. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  317. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  318. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/order_book/__init__.py +0 -0
  319. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  320. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/prices/__init__.py +0 -0
  321. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  322. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  323. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/recent_trades/__init__.py +0 -0
  324. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  325. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  326. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/ticker/__init__.py +0 -0
  327. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  328. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/__init__.py +0 -0
  329. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/connectors/__init__.py +0 -0
  330. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  331. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  332. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/implementations/__init__.py +0 -0
  333. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  334. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  335. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/test_abstract_exchange.py +0 -0
  336. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  337. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/test_exchange_builder.py +0 -0
  338. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/test_exchange_config_data.py +0 -0
  339. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/test_exchange_factory.py +0 -0
  340. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/test_exchange_manager.py +0 -0
  341. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/test_exchange_simulator.py +0 -0
  342. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/test_exchanges.py +0 -0
  343. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/traders/__init__.py +0 -0
  344. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/traders/test_trader.py +0 -0
  345. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/types/__init__.py +0 -0
  346. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  347. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/util/__init__.py +0 -0
  348. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  349. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/util/test_exchange_util.py +0 -0
  350. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/__init__.py +0 -0
  351. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/script_keywords/__init__.py +0 -0
  352. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  353. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  354. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  355. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  356. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  357. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  358. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  359. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/test_abstract_mode_consumer.py +0 -0
  360. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/test_abstract_trading_mode.py +0 -0
  361. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/test_modes_util.py +0 -0
  362. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/__init__.py +0 -0
  363. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/__init__.py +0 -0
  364. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/groups/__init__.py +0 -0
  365. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  366. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  367. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  368. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/__init__.py +0 -0
  369. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  370. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  371. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  372. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  373. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/test_order_state.py +0 -0
  374. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  375. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  376. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  377. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  378. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  379. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/test_order.py +0 -0
  380. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/test_order_adapter.py +0 -0
  381. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/test_order_factory.py +0 -0
  382. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/test_order_util.py +0 -0
  383. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/test_orders_manager.py +0 -0
  384. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  385. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/__init__.py +0 -0
  386. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  387. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  388. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  389. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  390. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  391. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  392. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  393. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  394. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/market/__init__.py +0 -0
  395. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  396. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  397. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  398. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  399. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  400. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  401. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/__init__.py +0 -0
  402. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  403. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  404. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  405. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  406. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/history/__init__.py +0 -0
  407. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  408. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  409. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/test_asset.py +0 -0
  410. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  411. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  412. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  413. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  414. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  415. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/types/__init__.py +0 -0
  416. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  417. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  418. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  419. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/__init__.py +0 -0
  420. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/channel/__init__.py +0 -0
  421. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/states/__init__.py +0 -0
  422. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/test_position.py +0 -0
  423. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/test_position_factory.py +0 -0
  424. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/test_positions_manager.py +0 -0
  425. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/types/__init__.py +0 -0
  426. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  427. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  428. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/trades/__init__.py +0 -0
  429. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/trades/test_trade_factory.py +0 -0
  430. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/trades/test_trade_manager.py +0 -0
  431. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  432. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/trades/test_trade_util.py +0 -0
  433. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/transactions/__init__.py +0 -0
  434. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  435. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  436. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/signals/__init__.py +0 -0
  437. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  438. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/signals/test_util.py +0 -0
  439. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/test_utils/__init__.py +0 -0
  440. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/test_utils/order_util.py +0 -0
  441. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/test_utils/random_numbers.py +0 -0
  442. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/util/__init__.py +0 -0
  443. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/util/test_config_util.py +0 -0
  444. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/__init__.py +0 -0
  445. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/__init__.py +0 -0
  446. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
  447. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  448. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  449. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_binance.py +0 -0
  450. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  451. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bingx.py +0 -0
  452. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  453. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bitget.py +0 -0
  454. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  455. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bitmart.py +0 -0
  456. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bitmex.py +0 -0
  457. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bitso.py +0 -0
  458. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  459. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bybit.py +0 -0
  460. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  461. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  462. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_coinex.py +0 -0
  463. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  464. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_gateio.py +0 -0
  465. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  466. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  467. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_htx.py +0 -0
  468. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_kraken.py +0 -0
  469. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  470. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  471. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_mexc.py +0 -0
  472. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_ndax.py +0 -0
  473. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  474. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_okx.py +0 -0
  475. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  476. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_phemex.py +0 -0
  477. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  478. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_upbit.py +0 -0
  479. {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,15 @@ 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.149] - 2025-01-22
8
+ ### Added
9
+ [PersonalData] add get_trade_or_open_order and improve typing
10
+
11
+ ## [2.4.148] - 2025-01-20
12
+ ### Added
13
+ [Exchanges] support custom domains
14
+ [Exchanges] add INCLUDE_DISABLED_SYMBOLS_IN_AVAILABLE_SYMBOLS
15
+
7
16
  ## [2.4.147] - 2025-01-13
8
17
  ### Fixed
9
18
  [Exchange] properly propagate ExchangeOrderCancelError
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.147
3
+ Version: 2.4.149
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.147](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.149](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.147
3
+ Version: 2.4.149
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.147](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.149](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.147](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.149](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.147" # major.minor.revision
18
+ VERSION = "2.4.149" # major.minor.revision
@@ -209,6 +209,7 @@ from octobot_trading.api.contracts import (
209
209
  is_perpetual_future_contract,
210
210
  get_pair_contracts,
211
211
  is_handled_contract,
212
+ ensure_supported_contract_configuration,
212
213
  has_pair_future_contract,
213
214
  update_pair_contract,
214
215
  load_pair_contract,
@@ -386,6 +387,7 @@ __all__ = [
386
387
  "is_perpetual_future_contract",
387
388
  "get_pair_contracts",
388
389
  "is_handled_contract",
390
+ "ensure_supported_contract_configuration",
389
391
  "has_pair_future_contract",
390
392
  "update_pair_contract",
391
393
  "load_pair_contract",
@@ -34,6 +34,10 @@ def is_handled_contract(contract) -> bool:
34
34
  return contract.is_handled_contract()
35
35
 
36
36
 
37
+ def ensure_supported_contract_configuration(exchange_manager, pair: str):
38
+ get_pair_contracts(exchange_manager)[pair].ensure_supported_configuration()
39
+
40
+
37
41
  def has_pair_future_contract(exchange_manager, pair: str) -> bool:
38
42
  return exchange_manager.exchange.has_pair_future_contract(pair)
39
43
 
@@ -47,6 +51,6 @@ def load_pair_contract(exchange_manager, contract_dict: dict):
47
51
 
48
52
 
49
53
  def create_default_future_contract(
50
- pair: str, leverage: decimal.Decimal, contract_type: enums.FutureContractType
54
+ pair: str, leverage: decimal.Decimal, contract_type: enums.FutureContractType, position_mode: enums.PositionMode
51
55
  ) -> exchange_data.FutureContract:
52
- return exchange_data.create_default_future_contract(pair, leverage, contract_type)
56
+ return exchange_data.create_default_future_contract(pair, leverage, contract_type, position_mode)
@@ -224,6 +224,18 @@ class UnhandledContractError(Exception):
224
224
  """
225
225
 
226
226
 
227
+ class UnsupportedContractConfigurationError(Exception):
228
+ """
229
+ Raised when a contract configuration is not supported
230
+ """
231
+
232
+
233
+ class UnsupportedHedgeContractError(UnsupportedContractConfigurationError):
234
+ """
235
+ Raised when a hedge contract configuration is not supported
236
+ """
237
+
238
+
227
239
  class TooManyOpenPositionError(Exception):
228
240
  """
229
241
  Raised when changing future contract attributes without closing positions first
@@ -79,7 +79,7 @@ def update_future_contract_from_dict(exchange_manager, contract: dict) -> bool:
79
79
 
80
80
 
81
81
  def create_default_future_contract(
82
- pair: str, leverage: decimal.Decimal, contract_type: enums.FutureContractType
82
+ pair: str, leverage: decimal.Decimal, contract_type: enums.FutureContractType, position_mode: enums.PositionMode
83
83
  ) -> future_contract.FutureContract:
84
84
  return future_contract.FutureContract(
85
85
  pair=pair,
@@ -88,7 +88,7 @@ def create_default_future_contract(
88
88
  contract_type=contract_type,
89
89
  maximum_leverage=constants.DEFAULT_SYMBOL_MAX_LEVERAGE,
90
90
  current_leverage=leverage,
91
- position_mode=constants.DEFAULT_SYMBOL_POSITION_MODE,
91
+ position_mode=position_mode,
92
92
  maintenance_margin_rate=constants.DEFAULT_SYMBOL_MAINTENANCE_MARGIN_RATE
93
93
  )
94
94
 
@@ -17,6 +17,7 @@ import octobot_commons.logging as logging
17
17
 
18
18
  import octobot_trading.enums as enums
19
19
  import octobot_trading.constants as constants
20
+ import octobot_trading.errors as errors
20
21
 
21
22
  import octobot_trading.exchange_data.contracts.margin_contract as margin_contract
22
23
 
@@ -95,6 +96,15 @@ class FutureContract(margin_contract.MarginContract):
95
96
  # unhandled / unknown contracts have None in self.contract_type
96
97
  return self.contract_type is not None
97
98
 
99
+ def ensure_supported_configuration(self):
100
+ """
101
+ will raise on unsupported configuration
102
+ """
103
+ if not self.is_one_way_position_mode():
104
+ raise errors.UnsupportedHedgeContractError(
105
+ f"{self.position_mode.value} position mode ({self.pair}) is not supported"
106
+ )
107
+
98
108
  def update_from_position(self, raw_position) -> bool:
99
109
  changed = super().update_from_position(raw_position)
100
110
  leverage = raw_position.get(enums.ExchangeConstantsPositionColumns.LEVERAGE.value, None)
@@ -78,6 +78,9 @@ class MarginContract:
78
78
  """
79
79
  return True
80
80
 
81
+ def ensure_supported_configuration(self):
82
+ pass
83
+
81
84
  def update_from_position(self, raw_position) -> bool:
82
85
  changed = False
83
86
  margin_type = raw_position.get(enums.ExchangeConstantsPositionColumns.MARGIN_TYPE.value, None)
@@ -206,7 +206,7 @@ class ExchangeConfig(util.Initializable):
206
206
  # add to global traded pairs
207
207
  if is_enabled:
208
208
  if not self.traded_cryptocurrencies[cryptocurrency]:
209
- self._logger.error(
209
+ self._logger.warning(
210
210
  f"{self.exchange_manager.exchange_name} is not supporting any {cryptocurrency} trading pair"
211
211
  f" from the current configuration.")
212
212
  traded_symbol_pairs_set = traded_symbol_pairs_set.union(
@@ -249,7 +249,7 @@ class ExchangeConfig(util.Initializable):
249
249
  additional_details = f" Exchange sandbox is enabled, please make sure this pair is traded on " \
250
250
  f" the {self.exchange_manager.exchange_name} sandbox as sandboxes " \
251
251
  f"usually only support a subset of the real exchange's pairs."
252
- self._logger.error(f"{self.exchange_manager.exchange_name} is not supporting the "
252
+ self._logger.warning(f"{self.exchange_manager.exchange_name} is not supporting the "
253
253
  f"{symbol} trading pair.{additional_details}")
254
254
 
255
255
  @staticmethod
@@ -289,7 +289,7 @@ class CCXTAdapter(adapters.AbstractAdapter):
289
289
  if side == enums.PositionSide.LONG.value else enums.PositionSide.SHORT
290
290
  log_func = self.logger.debug
291
291
  if is_empty:
292
- log_func = self.logger.error
292
+ log_func = self.logger.warning
293
293
  log_func(f"Unhandled {symbol} position mode ({position_mode.value}). This position can't be traded.")
294
294
  else:
295
295
  # One way position use BOTH side as there is always only one position per symbol.
@@ -14,6 +14,7 @@
14
14
  # You should have received a copy of the GNU Lesser General Public
15
15
  # License along with this library.
16
16
  import asyncio
17
+ import os
17
18
  import aiohttp
18
19
  import copy
19
20
  import logging
@@ -66,7 +67,7 @@ def create_client(
66
67
  client = instantiate_exchange(
67
68
  exchange_class,
68
69
  _get_client_config(
69
- options, headers, additional_config,
70
+ exchange_class, options, headers, additional_config,
70
71
  api_key=key, secret=secret, password=password, uid=uid,
71
72
  auth_token=auth_token, auth_token_header_prefix=auth_token_header_prefix
72
73
  ),
@@ -80,7 +81,7 @@ def create_client(
80
81
  else:
81
82
  client = instantiate_exchange(
82
83
  exchange_class,
83
- _get_client_config(options, headers, additional_config),
84
+ _get_client_config(exchange_class, options, headers, additional_config),
84
85
  exchange_manager.exchange_name,
85
86
  exchange_manager.proxy_config,
86
87
  allow_request_counter=allow_request_counter
@@ -128,7 +129,10 @@ def get_unauthenticated_exchange(
128
129
  exchange_class, options, headers, additional_config, identifier: str, proxy_config: proxy_config_import.ProxyConfig
129
130
  ) -> async_ccxt.Exchange:
130
131
  return instantiate_exchange(
131
- exchange_class, _get_client_config(options, headers, additional_config), identifier, proxy_config
132
+ exchange_class,
133
+ _get_client_config(exchange_class, options, headers, additional_config),
134
+ identifier,
135
+ proxy_config
132
136
  )
133
137
 
134
138
 
@@ -303,7 +307,7 @@ def _use_proxy_if_necessary(client, proxy_config: proxy_config_import.ProxyConfi
303
307
 
304
308
 
305
309
  def _get_client_config(
306
- options, headers, additional_config,
310
+ exchange_class, options, headers, additional_config,
307
311
  api_key=None, secret=None, password=None, uid=None,
308
312
  auth_token=None, auth_token_header_prefix=None
309
313
  ):
@@ -324,10 +328,50 @@ def _get_client_config(
324
328
  config['password'] = password
325
329
  if uid is not None:
326
330
  config['uid'] = uid
327
- config.update(additional_config or {})
331
+ config.update({**_get_custom_domain_config(exchange_class), **(additional_config or {})})
328
332
  return config
329
333
 
330
334
 
335
+ def _get_custom_domain_config(exchange_class):
336
+ old, new = _get_replaced_custom_domains(exchange_class)
337
+ if not (old and new):
338
+ return {}
339
+ if url_config := exchange_class().describe()[ccxt_enums.ExchangeColumns.URLS.value]:
340
+ commons_logging.get_logger(__name__).info(
341
+ f"Using custom domain for {exchange_class.__name__}: {old} is replaced by {new}"
342
+ )
343
+ return {
344
+ ccxt_enums.ExchangeColumns.URLS.value: _get_patched_url_config(url_config, old, new)
345
+ }
346
+ return {}
347
+
348
+
349
+ def _get_replaced_custom_domains(exchange_class):
350
+ identifier = exchange_class.__name__.upper()
351
+ if custom_domain := os.getenv(f"{identifier}_CUSTOM_DOMAIN"):
352
+ split = custom_domain.split(":")
353
+ if len(split) == 2:
354
+ return split[0], split[1]
355
+ else:
356
+ commons_logging.get_logger(__name__).error(
357
+ f"Invalid {identifier} custom domain config. Expected syntax is to_replace_domain:updated_domain "
358
+ f"Example: MEXC_CUSTOM_DOMAIN=mexc.com:mexc.co"
359
+ )
360
+ return None, None
361
+
362
+
363
+ def _get_patched_url_config(url_config: dict, old: str, new: str):
364
+ updated_config = {}
365
+ for key, val in url_config.items():
366
+ if isinstance(val, dict):
367
+ updated_config[key] = _get_patched_url_config(val, old, new)
368
+ elif isinstance(val, str):
369
+ updated_config[key] = val.replace(old, new)
370
+ else:
371
+ updated_config[key] = val
372
+ return updated_config
373
+
374
+
331
375
  def _use_request_counter(identifier: str, ccxt_client: async_ccxt.Exchange):
332
376
  """
333
377
  Replaces the given exchange async session by an aiohttp_util.CounterClientSession
@@ -125,7 +125,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
125
125
  )
126
126
 
127
127
  # initialize symbols and timeframes
128
- self.symbols = self.get_client_symbols(active_only=True)
128
+ self.symbols = self.exchange_manager.exchange.get_all_available_symbols(active_only=True)
129
129
  self.time_frames = self.get_client_time_frames()
130
130
 
131
131
  except (ccxt.ExchangeNotAvailable, ccxt.RequestTimeout) as e:
@@ -161,7 +161,8 @@ class ExchangeSimulator(rest_exchange.RestExchange):
161
161
  contract = contract_factory.create_default_future_contract(
162
162
  pair,
163
163
  constants.DEFAULT_SYMBOL_LEVERAGE,
164
- self.exchange_manager.exchange_config.backtesting_exchange_config.future_contract_type
164
+ self.exchange_manager.exchange_config.backtesting_exchange_config.future_contract_type,
165
+ constants.DEFAULT_SYMBOL_POSITION_MODE
165
166
  )
166
167
  return self.create_pair_contract(
167
168
  contract.pair,
@@ -51,6 +51,8 @@ class RestExchange(abstract_exchange.AbstractExchange):
51
51
  # set True when get_fixed_market_status should adapt amounts for contract size
52
52
  # (amounts are in not kept as contract size with OctoBot)
53
53
  ADAPT_MARKET_STATUS_FOR_CONTRACT_SIZE = False
54
+ # set True when disabled symbols should still be considered (ex: mexc with its temporary api trading disabled symbols)
55
+ INCLUDE_DISABLED_SYMBOLS_IN_AVAILABLE_SYMBOLS = False
54
56
  REQUIRE_ORDER_FEES_FROM_TRADES = False # set True when get_order is not giving fees on closed orders and fees
55
57
  # should be fetched using recent trades.
56
58
  REQUIRE_CLOSED_ORDERS_FROM_RECENT_TRADES = False # set True when get_closed_orders is not supported
@@ -731,7 +733,9 @@ class RestExchange(abstract_exchange.AbstractExchange):
731
733
  """
732
734
  :return: the list of all symbols supported by the exchange
733
735
  """
734
- return self.connector.get_client_symbols(active_only=active_only)
736
+ return self.connector.get_client_symbols(
737
+ active_only=False if self.INCLUDE_DISABLED_SYMBOLS_IN_AVAILABLE_SYMBOLS else active_only
738
+ )
735
739
 
736
740
  async def get_all_tradable_symbols(self, active_only=True) -> set[str]:
737
741
  """
@@ -33,6 +33,7 @@ import octobot_tentacles_manager.configuration as tm_configuration
33
33
 
34
34
  import octobot_trading.constants as constants
35
35
  import octobot_trading.enums as enums
36
+ import octobot_trading.errors as errors
36
37
  import octobot_trading.exchange_channel as exchanges_channel
37
38
  import octobot_trading.modes.modes_factory as modes_factory
38
39
  import octobot_trading.modes.channel.abstract_mode_producer as abstract_mode_producer
@@ -535,6 +536,13 @@ class AbstractTradingMode(abstract_tentacle.AbstractTentacle):
535
536
  common_constants.DEFAULT_IGNORED_VALUE
536
537
  )
537
538
 
539
+ def ensure_supported(self, symbol):
540
+ if self.exchange_manager.is_future:
541
+ try:
542
+ self.exchange_manager.exchange.pair_contracts[symbol].ensure_supported_configuration()
543
+ except KeyError:
544
+ raise errors.ContractExistsError(f"Missing contract for {symbol}")
545
+
538
546
  @contextlib.asynccontextmanager
539
547
  async def remote_signal_publisher(self, symbol: str):
540
548
  async with signals.remote_signal_publisher(self.exchange_manager, symbol, self.should_emit_trading_signal()) \
@@ -63,6 +63,9 @@ class AbstractTradingModeConsumer(modes_channel.ModeChannelConsumer):
63
63
  f"Future contract symbols contain the settlement currency after ':'. "
64
64
  f"Example: use BTC/USDT:USDT for linear BTC/USDT contracts and "
65
65
  f"BTC/USD:BTC for inverse BTC/USD contracts.")
66
+ except (errors.InvalidPositionSide, errors.UnsupportedContractConfigurationError) as err:
67
+ self.previous_call_error_per_symbol[symbol] = err
68
+ self.logger.error(f"Impossible to create {symbol} order: {err}.")
66
69
  except errors.OrderCreationError as err:
67
70
  self.previous_call_error_per_symbol[symbol] = err
68
71
  self.logger.info(f"Failed {symbol} order creation on: {self.exchange_manager.exchange_name} "
@@ -114,7 +117,10 @@ class AbstractTradingModeConsumer(modes_channel.ModeChannelConsumer):
114
117
  if await self.can_create_order(symbol, state):
115
118
  try:
116
119
  return await self.create_new_orders(symbol, final_note, state, **kwargs)
117
- except (errors.MissingMinimalExchangeTradeVolume, errors.OrderCreationError):
120
+ except (
121
+ errors.MissingMinimalExchangeTradeVolume, errors.OrderCreationError,
122
+ errors.InvalidPositionSide, errors.UnsupportedContractConfigurationError
123
+ ):
118
124
  raise
119
125
  except errors.MissingFunds:
120
126
  try:
@@ -15,6 +15,7 @@
15
15
  # License along with this library.
16
16
  import asyncio
17
17
  import uuid
18
+ import typing
18
19
 
19
20
  import octobot_commons.logging as logging
20
21
 
@@ -28,6 +29,7 @@ import octobot_trading.personal_data.orders.orders_manager as orders_manager
28
29
  import octobot_trading.personal_data.orders.order as order_import
29
30
  import octobot_trading.personal_data.orders.orders_storage_operations as orders_storage_operations
30
31
  import octobot_trading.personal_data.trades.trades_manager as trades_manager
32
+ import octobot_trading.personal_data.trades.trade as trade_import
31
33
  import octobot_trading.personal_data.transactions.transactions_manager as transactions_manager
32
34
  import octobot_trading.personal_data.transactions.transaction_factory as transaction_factory
33
35
  import octobot_trading.util as util
@@ -44,11 +46,11 @@ class ExchangePersonalData(util.Initializable):
44
46
  self.trader = None
45
47
  self.exchange = None
46
48
 
47
- self.portfolio_manager = None
48
- self.trades_manager = None
49
- self.orders_manager = None
50
- self.positions_manager = None
51
- self.transactions_manager = None
49
+ self.portfolio_manager: portfolio_manager.PortfolioManager = None
50
+ self.trades_manager: trades_manager.TradesManager = None
51
+ self.orders_manager: orders_manager.OrdersManager = None
52
+ self.positions_manager: positions_manager.PositionsManager = None
53
+ self.transactions_manager: transactions_manager.TransactionsManager = None
52
54
 
53
55
  async def initialize_impl(self):
54
56
  self.trader = self.exchange_manager.trader
@@ -361,6 +363,16 @@ class ExchangePersonalData(util.Initializable):
361
363
  except ValueError as e:
362
364
  self.logger.error(f"Failed to send position update notification : {e}")
363
365
 
366
+ def get_trade_or_open_order(self, order_id: str) -> (
367
+ typing.Optional[trade_import.Trade], typing.Optional[order_import.Order]
368
+ ):
369
+ trade = self.trades_manager.get_trade_from_order_id(order_id)
370
+ try:
371
+ order = self.orders_manager.get_order(order_id)
372
+ except KeyError:
373
+ order = None
374
+ return trade, order
375
+
364
376
  async def stop(self):
365
377
  if self.portfolio_manager is not None:
366
378
  await self.portfolio_manager.stop()
@@ -27,6 +27,7 @@ import octobot_trading.errors as errors
27
27
  import octobot_trading.personal_data.orders.order as order_class
28
28
  import octobot_trading.personal_data.orders.order_factory as order_factory
29
29
  import octobot_trading.personal_data.orders.order_util as order_util
30
+ import octobot_trading.personal_data.orders.order_group as order_group_import
30
31
 
31
32
 
32
33
  class OrdersManager(util.Initializable):
@@ -38,10 +39,10 @@ class OrdersManager(util.Initializable):
38
39
  self.trader = trader
39
40
  self.orders_initialized = False
40
41
  self.enable_order_auto_synchronization = True
41
- self.orders = collections.OrderedDict()
42
- self.order_groups = {}
42
+ self.orders: collections.OrderedDict[str, order_class.Order] = collections.OrderedDict()
43
+ self.order_groups: dict[str, order_group_import.OrderGroup] = {}
43
44
  # orders that are expected from exchange but have not yet been fetched: will be removed when fetched
44
- self.pending_creation_orders = []
45
+ self.pending_creation_orders: list[order_class.Order] = []
45
46
  # if this the orders manager completed the initial exchange orders sync phase (only on real trader)
46
47
  self.are_exchange_orders_initialized = self.trader.simulate
47
48
 
@@ -746,6 +746,9 @@ class Position(util.Initializable):
746
746
  def update_from_raw(self, raw_position):
747
747
  symbol = str(raw_position.get(enums.ExchangeConstantsPositionColumns.SYMBOL.value, None))
748
748
  currency, market = self.exchange_manager.get_exchange_quote_and_base(symbol)
749
+ position_id = (
750
+ self.position_id or raw_position.get(enums.ExchangeConstantsPositionColumns.LOCAL_ID.value) or symbol
751
+ )
749
752
  # side is managed locally, do not parse it
750
753
  return self._update(
751
754
  symbol=symbol,
@@ -763,7 +766,7 @@ class Position(util.Initializable):
763
766
  auto_deposit_margin=raw_position.get(
764
767
  enums.ExchangeConstantsPositionColumns.AUTO_DEPOSIT_MARGIN.value, False
765
768
  ),
766
- position_id=self.position_id or symbol,
769
+ position_id=position_id,
767
770
  exchange_position_id=str(raw_position.get(enums.ExchangeConstantsPositionColumns.ID.value, None) or symbol),
768
771
  timestamp=raw_position.get(enums.ExchangeConstantsPositionColumns.TIMESTAMP.value, 0),
769
772
  unrealized_pnl=raw_position.get(enums.ExchangeConstantsPositionColumns.UNREALIZED_PNL.value,
@@ -36,7 +36,7 @@ class TradesManager(util.Initializable):
36
36
  self.logger = logging.get_logger(self.__class__.__name__)
37
37
  self.trader = trader
38
38
  self.trades_initialized = False
39
- self.trades = collections.OrderedDict()
39
+ self.trades: collections.OrderedDict[str, personal_data.Trade] = collections.OrderedDict()
40
40
 
41
41
  async def initialize_impl(self):
42
42
  await self.reload_history(False)
@@ -62,7 +62,7 @@ async def test_initialize_impl_with_none_symbols_and_timeframes(ccxt_connector):
62
62
  with patch.object(ccxt_connector, 'client', new=MockCCXT()) as mocked_ccxt, \
63
63
  patch.object(ccxt_connector, '_ensure_auth', new=mock.AsyncMock()) as _ensure_auth_mock:
64
64
  await ccxt_connector.initialize_impl()
65
- assert ccxt_connector.symbols == set()
65
+ assert len(ccxt_connector.symbols) == 171 # all enabled symbols
66
66
  assert ccxt_connector.time_frames == set()
67
67
  assert mocked_ccxt.set_markets_calls in ([[]], []) # depends on call order
68
68
  _ensure_auth_mock.assert_called_once()
@@ -90,7 +90,7 @@ async def test_initialize_impl_with_empty_symbols_and_timeframes(ccxt_connector)
90
90
  with patch.object(ccxt_connector, 'client', new=MockCCXT()) as mocked_ccxt, \
91
91
  patch.object(ccxt_connector, '_ensure_auth', new=mock.AsyncMock()) as _ensure_auth_mock:
92
92
  await ccxt_connector.initialize_impl()
93
- assert ccxt_connector.symbols == set()
93
+ assert len(ccxt_connector.symbols) == 171 # all enabled symbols
94
94
  assert ccxt_connector.time_frames == set()
95
95
  assert mocked_ccxt.set_markets_calls in ([[]], []) # depends on call order
96
96
  _ensure_auth_mock.assert_called_once()
@@ -127,12 +127,9 @@ async def test_initialize_impl(ccxt_connector):
127
127
 
128
128
  with patch.object(ccxt_connector, 'client', new=MockCCXT()) as mocked_ccxt, \
129
129
  patch.object(ccxt_connector, '_ensure_auth', new=mock.AsyncMock()) as _ensure_auth_mock:
130
+ ccxt_connector.exchange_manager.exchange.INCLUDE_DISABLED_SYMBOLS_IN_AVAILABLE_SYMBOLS = True
130
131
  await ccxt_connector.initialize_impl()
131
- assert ccxt_connector.symbols == {
132
- "BTC/USDT",
133
- "ETH/USDT",
134
- "ETH/BTC",
135
- }
132
+ assert len(ccxt_connector.symbols) == 541 # all enabled + diasabled symbols
136
133
  assert ccxt_connector.time_frames == {
137
134
  "1h",
138
135
  "2h",