OctoBot-Trading 2.4.148__tar.gz → 2.4.150__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.148 → OctoBot-Trading-2.4.150}/CHANGELOG.md +8 -0
  2. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.148/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.150}/PKG-INFO +2 -2
  4. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/README.md +1 -1
  5. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/__init__.py +1 -1
  6. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/__init__.py +2 -0
  7. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/contracts.py +6 -2
  8. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/errors.py +18 -0
  9. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/contracts/contract_factory.py +2 -2
  10. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/contracts/future_contract.py +10 -0
  11. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/contracts/margin_contract.py +3 -0
  12. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/config/exchange_config_data.py +2 -2
  13. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/config/proxy_config.py +2 -0
  14. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +1 -1
  15. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +30 -0
  16. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +31 -10
  17. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/implementations/exchange_simulator.py +2 -1
  18. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/abstract_trading_mode.py +8 -0
  19. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/channel/abstract_mode_consumer.py +7 -1
  20. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/exchange_personal_data.py +17 -5
  21. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/orders_manager.py +4 -3
  22. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/position.py +4 -1
  23. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/trades_manager.py +1 -1
  24. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/test_tools/exchanges_test_tools.py +35 -17
  25. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +76 -0
  26. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/LICENSE +0 -0
  27. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/MANIFEST.in +0 -0
  28. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
  29. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  30. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  31. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/OctoBot_Trading.egg-info/requires.txt +0 -0
  32. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  33. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/channels.py +0 -0
  34. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/exchange.py +0 -0
  35. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/modes.py +0 -0
  36. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/orders.py +0 -0
  37. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/portfolio.py +0 -0
  38. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/positions.py +0 -0
  39. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/profitability.py +0 -0
  40. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/storage.py +0 -0
  41. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/symbol_data.py +0 -0
  42. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/trader.py +0 -0
  43. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/trades.py +0 -0
  44. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/constants.py +0 -0
  45. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/enums.py +0 -0
  46. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_channel.py +0 -0
  47. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/__init__.py +0 -0
  48. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  49. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  50. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  51. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  52. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  53. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  54. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  55. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  56. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  57. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  58. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  59. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  60. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  61. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  62. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  63. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  64. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  65. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  66. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  67. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  68. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  69. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  70. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  71. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  72. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  73. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  74. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  75. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  76. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  77. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  78. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  79. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  80. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  81. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  82. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  83. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  84. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  85. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  86. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  87. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  88. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  89. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  90. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  91. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  92. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  93. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  94. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  95. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  96. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/__init__.py +0 -0
  97. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  98. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  99. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  100. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  101. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/config/__init__.py +0 -0
  102. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  103. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  104. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  105. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  106. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  107. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  108. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  109. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  110. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  111. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  112. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  113. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/exchange_builder.py +0 -0
  114. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/exchange_channels.py +0 -0
  115. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/exchange_details.py +0 -0
  116. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/exchange_factory.py +0 -0
  117. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/exchange_manager.py +0 -0
  118. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  119. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/exchanges.py +0 -0
  120. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  121. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  122. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  123. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/traders/__init__.py +0 -0
  124. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/traders/trader.py +0 -0
  125. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  126. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/types/__init__.py +0 -0
  127. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
  128. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  129. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/util/__init__.py +0 -0
  130. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  131. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  132. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  133. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  134. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/__init__.py +0 -0
  135. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/channel/__init__.py +0 -0
  136. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  137. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/channel/mode.py +0 -0
  138. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/mode_activity.py +0 -0
  139. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/mode_config.py +0 -0
  140. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/modes_factory.py +0 -0
  141. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/modes_util.py +0 -0
  142. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  143. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  144. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  145. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  146. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  147. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  148. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  149. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  150. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  151. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  152. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  153. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  154. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  155. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  156. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  157. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  158. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/octobot_channel_consumer.py +0 -0
  159. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/__init__.py +0 -0
  160. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/__init__.py +0 -0
  161. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  162. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  163. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  164. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  165. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  166. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  167. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  168. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  169. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  170. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/order.py +0 -0
  171. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  172. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  173. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/order_group.py +0 -0
  174. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/order_state.py +0 -0
  175. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/order_util.py +0 -0
  176. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  177. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  178. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  179. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  180. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  181. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  182. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  183. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  184. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  185. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  186. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  187. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  188. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  189. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  190. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  191. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  192. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  193. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  194. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  195. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  196. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  197. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  198. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  199. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  200. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  201. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  202. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  203. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  204. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  205. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  206. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  207. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  208. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  209. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  210. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  211. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  212. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  213. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  214. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  215. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  216. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  217. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  218. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  219. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  220. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  221. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  222. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  223. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  224. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  225. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  226. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  227. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  228. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  229. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/__init__.py +0 -0
  230. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  231. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  232. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  233. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  234. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  235. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/position_state.py +0 -0
  236. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/position_util.py +0 -0
  237. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  238. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  239. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  240. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  241. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  242. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  243. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  244. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  245. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  246. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/state.py +0 -0
  247. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/__init__.py +0 -0
  248. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  249. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  250. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  251. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/trade.py +0 -0
  252. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  253. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  254. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  255. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  256. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  257. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  258. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  259. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  260. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  261. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  262. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  263. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  264. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/signals/__init__.py +0 -0
  265. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/signals/channel/__init__.py +0 -0
  266. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  267. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  268. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/signals/channel/signal_producer.py +0 -0
  269. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/signals/signal_creation.py +0 -0
  270. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  271. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/signals/util.py +0 -0
  272. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/__init__.py +0 -0
  273. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/abstract_storage.py +0 -0
  274. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/candles_storage.py +0 -0
  275. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/orders_storage.py +0 -0
  276. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/portfolio_storage.py +0 -0
  277. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/storage_manager.py +0 -0
  278. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/trades_storage.py +0 -0
  279. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/transactions_storage.py +0 -0
  280. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/util.py +0 -0
  281. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/supervisors/__init__.py +0 -0
  282. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  283. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  284. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/__init__.py +0 -0
  285. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/config_util.py +0 -0
  286. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/initializable.py +0 -0
  287. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/initialization_util.py +0 -0
  288. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/simulator_updater_utils.py +0 -0
  289. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/test_tools/__init__.py +0 -0
  290. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  291. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  292. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  293. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/requirements.txt +0 -0
  294. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/setup.cfg +0 -0
  295. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/setup.py +0 -0
  296. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/__init__.py +0 -0
  297. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_channels.py +0 -0
  298. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_exchange.py +0 -0
  299. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_modes.py +0 -0
  300. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_orders.py +0 -0
  301. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_portfolio.py +0 -0
  302. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_profitability.py +0 -0
  303. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_symbol_data.py +0 -0
  304. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_trader.py +0 -0
  305. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_trades.py +0 -0
  306. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/cli/__init__.py +0 -0
  307. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/__init__.py +0 -0
  308. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/contracts/__init__.py +0 -0
  309. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  310. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  311. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/funding/__init__.py +0 -0
  312. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  313. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/kline/__init__.py +0 -0
  314. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  315. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/ohlcv/__init__.py +0 -0
  316. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  317. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  318. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/order_book/__init__.py +0 -0
  319. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  320. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/prices/__init__.py +0 -0
  321. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  322. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  323. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/recent_trades/__init__.py +0 -0
  324. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  325. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  326. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/ticker/__init__.py +0 -0
  327. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  328. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/__init__.py +0 -0
  329. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/connectors/__init__.py +0 -0
  330. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  331. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  332. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/implementations/__init__.py +0 -0
  333. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  334. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  335. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/test_abstract_exchange.py +0 -0
  336. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  337. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/test_exchange_builder.py +0 -0
  338. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/test_exchange_config_data.py +0 -0
  339. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/test_exchange_factory.py +0 -0
  340. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/test_exchange_manager.py +0 -0
  341. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/test_exchange_simulator.py +0 -0
  342. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/test_exchanges.py +0 -0
  343. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/traders/__init__.py +0 -0
  344. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/traders/test_trader.py +0 -0
  345. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/types/__init__.py +0 -0
  346. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  347. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/util/__init__.py +0 -0
  348. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  349. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/util/test_exchange_util.py +0 -0
  350. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/__init__.py +0 -0
  351. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/script_keywords/__init__.py +0 -0
  352. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  353. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  354. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  355. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  356. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  357. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  358. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  359. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/test_abstract_mode_consumer.py +0 -0
  360. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/test_abstract_trading_mode.py +0 -0
  361. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/test_modes_util.py +0 -0
  362. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/__init__.py +0 -0
  363. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/__init__.py +0 -0
  364. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/groups/__init__.py +0 -0
  365. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  366. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  367. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  368. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/__init__.py +0 -0
  369. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  370. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  371. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  372. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  373. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/test_order_state.py +0 -0
  374. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  375. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  376. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  377. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  378. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  379. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/test_order.py +0 -0
  380. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/test_order_adapter.py +0 -0
  381. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/test_order_factory.py +0 -0
  382. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/test_order_util.py +0 -0
  383. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/test_orders_manager.py +0 -0
  384. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  385. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/__init__.py +0 -0
  386. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  387. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  388. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  389. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  390. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  391. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  392. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  393. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  394. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/market/__init__.py +0 -0
  395. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  396. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  397. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  398. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  399. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  400. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  401. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/__init__.py +0 -0
  402. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  403. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  404. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  405. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  406. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/history/__init__.py +0 -0
  407. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  408. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  409. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/test_asset.py +0 -0
  410. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  411. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  412. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  413. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  414. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  415. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/types/__init__.py +0 -0
  416. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  417. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  418. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  419. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/__init__.py +0 -0
  420. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/channel/__init__.py +0 -0
  421. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/states/__init__.py +0 -0
  422. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/test_position.py +0 -0
  423. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/test_position_factory.py +0 -0
  424. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/test_positions_manager.py +0 -0
  425. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/types/__init__.py +0 -0
  426. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  427. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  428. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/trades/__init__.py +0 -0
  429. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/trades/test_trade_factory.py +0 -0
  430. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/trades/test_trade_manager.py +0 -0
  431. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  432. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/trades/test_trade_util.py +0 -0
  433. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/transactions/__init__.py +0 -0
  434. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  435. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  436. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/signals/__init__.py +0 -0
  437. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  438. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/signals/test_util.py +0 -0
  439. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/test_utils/__init__.py +0 -0
  440. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/test_utils/order_util.py +0 -0
  441. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/test_utils/random_numbers.py +0 -0
  442. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/util/__init__.py +0 -0
  443. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/util/test_config_util.py +0 -0
  444. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/__init__.py +0 -0
  445. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/__init__.py +0 -0
  446. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
  447. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  448. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  449. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_binance.py +0 -0
  450. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  451. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bingx.py +0 -0
  452. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  453. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bitget.py +0 -0
  454. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  455. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bitmart.py +0 -0
  456. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bitmex.py +0 -0
  457. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bitso.py +0 -0
  458. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  459. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bybit.py +0 -0
  460. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  461. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  462. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_coinex.py +0 -0
  463. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  464. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_gateio.py +0 -0
  465. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  466. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  467. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_htx.py +0 -0
  468. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_kraken.py +0 -0
  469. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  470. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  471. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_mexc.py +0 -0
  472. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_ndax.py +0 -0
  473. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  474. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_okx.py +0 -0
  475. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  476. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_phemex.py +0 -0
  477. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  478. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_upbit.py +0 -0
  479. {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/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.150] - 2025-01-27
8
+ ### Added
9
+ [Proxy] Proxy related errors and prefixes
10
+
11
+ ## [2.4.149] - 2025-01-22
12
+ ### Added
13
+ [PersonalData] add get_trade_or_open_order and improve typing
14
+
7
15
  ## [2.4.148] - 2025-01-20
8
16
  ### Added
9
17
  [Exchanges] support custom domains
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.148
3
+ Version: 2.4.150
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.148](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.150](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.148
3
+ Version: 2.4.150
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.148](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.150](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.148](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.150](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.148" # major.minor.revision
18
+ VERSION = "2.4.150" # 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)
@@ -33,6 +33,12 @@ class MissingMinimalExchangeTradeVolume(OctoBotExchangeError):
33
33
  """
34
34
 
35
35
 
36
+ class ExchangeProxyError(OctoBotExchangeError):
37
+ """
38
+ Raised when an issue related to an exchange proxy is encountered
39
+ """
40
+
41
+
36
42
  class TradingModeIncompatibility(Exception):
37
43
  """
38
44
  Raised when a trading mode is incompatible with the current situation
@@ -224,6 +230,18 @@ class UnhandledContractError(Exception):
224
230
  """
225
231
 
226
232
 
233
+ class UnsupportedContractConfigurationError(Exception):
234
+ """
235
+ Raised when a contract configuration is not supported
236
+ """
237
+
238
+
239
+ class UnsupportedHedgeContractError(UnsupportedContractConfigurationError):
240
+ """
241
+ Raised when a hedge contract configuration is not supported
242
+ """
243
+
244
+
227
245
  class TooManyOpenPositionError(Exception):
228
246
  """
229
247
  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
@@ -32,6 +32,8 @@ class ProxyConfig:
32
32
  aiohttp_trust_env: bool = octobot_trading.constants.ENABLE_EXCHANGE_HTTP_PROXY_FROM_ENV
33
33
  # if set, will be called when exchange stops
34
34
  stop_proxy_callback: typing.Optional[typing.Callable] = None
35
+ # if set, returns the last url given to a callback method that return "True", meaning the last url that used a proxy
36
+ get_last_proxied_request_url: typing.Optional[typing.Callable] = None
35
37
 
36
38
  @classmethod
37
39
  def default_env_var_config(cls):
@@ -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.
@@ -408,3 +408,33 @@ def _use_request_counter(identifier: str, ccxt_client: async_ccxt.Exchange):
408
408
 
409
409
  def ccxt_exchange_class_factory(exchange_name):
410
410
  return getattr(async_ccxt, exchange_name)
411
+
412
+ def reraise_with_proxy_prefix_if_relevant(ccxt_connector, cause_error: Exception, raised_error: typing.Optional[Exception]):
413
+ if was_latest_request_proxied(ccxt_connector):
414
+ raised = raised_error or cause_error
415
+ raise raised.__class__(f"[Proxied request] {raised}") from cause_error
416
+
417
+
418
+ def was_latest_request_proxied(ccxt_connector) -> bool:
419
+ if not (
420
+ ccxt_connector.exchange_manager.proxy_config
421
+ and ccxt_connector.exchange_manager.proxy_config.get_last_proxied_request_url
422
+ ):
423
+ return False
424
+ last_proxied_request_url = ccxt_connector.exchange_manager.proxy_config.get_last_proxied_request_url()
425
+ last_client_request_url = ccxt_connector.client.last_request_url
426
+ # if last requests are matching: it was proxied
427
+ return last_proxied_request_url == last_client_request_url
428
+
429
+
430
+ def get_proxy_error_if_any(error: Exception) -> typing.Optional[Exception]:
431
+ if isinstance(error, (aiohttp.ClientProxyConnectionError, aiohttp.ClientHttpProxyError)):
432
+ return error
433
+ max_depth = 10
434
+ depth = 1
435
+ cause_error = error
436
+ while (cause_error := getattr(cause_error, "__cause__", None)) and depth < max_depth:
437
+ if isinstance(cause_error, (aiohttp.ClientProxyConnectionError, aiohttp.ClientHttpProxyError)):
438
+ return cause_error
439
+ depth += 1
440
+ return None
@@ -989,6 +989,21 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
989
989
  # 15 pairs, each on 3 time frames
990
990
  return 45
991
991
 
992
+ def raise_or_prefix_proxy_error_if_relevant(self, cause_error: Exception, raised_error: typing.Optional[Exception]):
993
+ """
994
+ Will raise octobot_trading.errors.ExchangeProxyError when the error is linked to a proxy
995
+ server of configuration issue.
996
+ Will re-raise a "[Proxied request] " prefix given error message if relevant, otherwise will just raise the error
997
+ """
998
+ if proxy_error := ccxt_client_util.get_proxy_error_if_any(cause_error):
999
+ raise octobot_trading.errors.ExchangeProxyError(proxy_error) from cause_error
1000
+ # when api key is wrong or proxy is unavailable
1001
+ ccxt_client_util.reraise_with_proxy_prefix_if_relevant(self, cause_error, raised_error)
1002
+ # reraise_with_proxy_prefix_if_relevant did not raise, raise the error as is
1003
+ if raised_error is None:
1004
+ raise cause_error
1005
+ raise raised_error from cause_error
1006
+
992
1007
  def log_ddos_error(self, error):
993
1008
  self.logger.error(
994
1009
  f"DDoSProtection triggered [{html_util.get_html_summary_if_relevant(error)} ({error.__class__.__name__})]. "
@@ -1003,26 +1018,32 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
1003
1018
  def error_describer(self):
1004
1019
  try:
1005
1020
  yield
1006
- except ccxt.DDoSProtection as e:
1021
+ except ccxt.DDoSProtection as err:
1007
1022
  # raised upon rate limit issues, last response data might have details on what is happening
1008
- if self.exchange_manager.exchange.should_log_on_ddos_exception(e):
1009
- self.log_ddos_error(e)
1023
+ if self.exchange_manager.exchange.should_log_on_ddos_exception(err):
1024
+ self.log_ddos_error(err)
1010
1025
  raise
1011
1026
  except ccxt.InvalidNonce as err:
1012
1027
  # use 2 index to get the caller of the context manager
1013
1028
  caller_function_name = inspect.stack()[2].function
1014
1029
  exchanges.log_time_sync_error(self.logger, self.name, err, caller_function_name)
1015
1030
  raise octobot_trading.errors.FailedRequest(html_util.get_html_summary_if_relevant(err)) from err
1016
- except ccxt.RequestTimeout as e:
1031
+ except ccxt.RequestTimeout as err:
1017
1032
  raise octobot_trading.errors.FailedRequest(
1018
- f"Request timeout: {html_util.get_html_summary_if_relevant(e)}"
1019
- ) from e
1033
+ f"Request timeout: {html_util.get_html_summary_if_relevant(err)}"
1034
+ ) from err
1020
1035
  except ccxt.AuthenticationError as err:
1021
- raise octobot_trading.errors.AuthenticationError(html_util.get_html_summary_if_relevant(err)) from err
1036
+ self.raise_or_prefix_proxy_error_if_relevant(
1037
+ err,
1038
+ octobot_trading.errors.AuthenticationError(html_util.get_html_summary_if_relevant(err))
1039
+ )
1022
1040
  except ccxt.ExchangeNotAvailable as err:
1023
- raise octobot_trading.errors.FailedRequest(
1024
- f"Failed to execute request: {err.__class__.__name__}: {html_util.get_html_summary_if_relevant(err)}"
1025
- ) from err
1041
+ self.raise_or_prefix_proxy_error_if_relevant(
1042
+ err,
1043
+ octobot_trading.errors.FailedRequest(
1044
+ f"Failed to execute request: {err.__class__.__name__}: {html_util.get_html_summary_if_relevant(err)}"
1045
+ )
1046
+ )
1026
1047
  except ccxt.ExchangeError as err:
1027
1048
  if self.exchange_manager.exchange.is_authentication_error(err):
1028
1049
  # ensure this is not an unhandled authentication error
@@ -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,
@@ -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)
@@ -116,13 +116,19 @@ async def add_symbols_details(
116
116
  ) -> exchange_data_import.ExchangeData:
117
117
 
118
118
  await ensure_symbol_markets(exchange_manager, reload=reload_markets, market_filter=market_filter)
119
- await asyncio.gather(*(
120
- _update_ohlcv(
121
- exchange_manager, symbol, time_frame, exchange_data,
119
+ if len(symbols) == 1:
120
+ await _update_ohlcv(
121
+ exchange_manager, next(iter(symbols)), time_frame, exchange_data,
122
122
  history_size, start_time, end_time, close_price_only, include_latest_candle
123
123
  )
124
- for symbol in symbols
125
- ))
124
+ else:
125
+ await asyncio.gather(*(
126
+ _update_ohlcv(
127
+ exchange_manager, symbol, time_frame, exchange_data,
128
+ history_size, start_time, end_time, close_price_only, include_latest_candle
129
+ )
130
+ for symbol in symbols
131
+ ))
126
132
  return exchange_data
127
133
 
128
134
 
@@ -202,11 +208,13 @@ async def get_open_orders(
202
208
  ignore_unsupported_orders: bool = True,
203
209
  ) -> list:
204
210
  open_orders = []
205
-
206
211
  symbols = symbols or [market.symbol for market in exchange_data.markets]
207
- await asyncio.gather(*(
208
- _get_open_orders(exchange_manager, symbol, open_orders, ignore_unsupported_orders) for symbol in symbols
209
- ))
212
+ if len(symbols) == 1:
213
+ await _get_open_orders(exchange_manager, next(iter(symbols)), open_orders, ignore_unsupported_orders)
214
+ else:
215
+ await asyncio.gather(*(
216
+ _get_open_orders(exchange_manager, symbol, open_orders, ignore_unsupported_orders) for symbol in symbols
217
+ ))
210
218
  return open_orders
211
219
 
212
220
 
@@ -235,10 +243,13 @@ async def get_cancelled_orders(
235
243
  ) -> list:
236
244
  cancelled_orders = []
237
245
  symbols = symbols or [market.symbol for market in exchange_data.markets]
238
- await asyncio.gather(*(
239
- _get_cancelled_orders(exchange_manager, symbol, cancelled_orders, ignore_unsupported_orders)
240
- for symbol in symbols
241
- ))
246
+ if len(symbols) == 1:
247
+ await _get_cancelled_orders(exchange_manager, next(iter(symbols)), cancelled_orders, ignore_unsupported_orders)
248
+ else:
249
+ await asyncio.gather(*(
250
+ _get_cancelled_orders(exchange_manager, symbol, cancelled_orders, ignore_unsupported_orders)
251
+ for symbol in symbols
252
+ ))
242
253
  return cancelled_orders
243
254
 
244
255
 
@@ -257,10 +268,13 @@ async def get_trades(
257
268
  ) -> list:
258
269
  trades = []
259
270
  symbols = symbols or [market.symbol for market in exchange_data.markets]
260
- await asyncio.gather(*(
261
- _get_trades(exchange_manager, symbol, trades)
262
- for symbol in symbols
263
- ))
271
+ if len(symbols) == 1:
272
+ await _get_trades(exchange_manager, next(iter(symbols)), trades)
273
+ else:
274
+ await asyncio.gather(*(
275
+ _get_trades(exchange_manager, symbol, trades)
276
+ for symbol in symbols
277
+ ))
264
278
  return trades
265
279
 
266
280
 
@@ -307,6 +321,10 @@ async def create_orders(
307
321
  order_creation_timeout: float,
308
322
  price_by_symbol: dict[str, float],
309
323
  ) -> list:
324
+ if len(orders) == 1:
325
+ return [
326
+ await _create_order(exchange_manager, next(iter(orders)), order_creation_timeout, price_by_symbol)
327
+ ]
310
328
  return await asyncio.gather(*(
311
329
  _create_order(exchange_manager, order_dict, order_creation_timeout, price_by_symbol)
312
330
  for order_dict in orders