OctoBot-Trading 2.4.115__tar.gz → 2.4.117__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 (480) hide show
  1. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/CHANGELOG.md +9 -0
  2. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/OctoBot_Trading.egg-info/SOURCES.txt +1 -0
  4. {OctoBot-Trading-2.4.115/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.117}/PKG-INFO +2 -2
  5. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/README.md +1 -1
  6. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/__init__.py +1 -1
  7. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/constants.py +5 -1
  8. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/__init__.py +2 -0
  9. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/abstract_websocket_exchange.py +1 -1
  10. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/config/__init__.py +5 -0
  11. OctoBot-Trading-2.4.117/octobot_trading/exchanges/config/proxy_config.py +40 -0
  12. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +50 -14
  13. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +6 -5
  14. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +3 -2
  15. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +1 -2
  16. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/exchange_builder.py +4 -0
  17. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/exchange_manager.py +4 -2
  18. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/util/exchange_util.py +2 -1
  19. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/util/test_tools/exchange_data.py +1 -1
  20. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/__init__.py +26 -2
  21. OctoBot-Trading-2.4.117/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +22 -0
  22. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +6 -4
  23. OctoBot-Trading-2.4.117/tests/exchanges/test_exchanges.py +136 -0
  24. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/real_exchange_tester.py +1 -2
  25. OctoBot-Trading-2.4.115/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -20
  26. OctoBot-Trading-2.4.115/tests/exchanges/test_exchanges.py +0 -166
  27. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/LICENSE +0 -0
  28. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/MANIFEST.in +0 -0
  29. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  30. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  31. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/OctoBot_Trading.egg-info/requires.txt +0 -0
  32. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  33. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/api/__init__.py +0 -0
  34. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/api/channels.py +0 -0
  35. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/api/contracts.py +0 -0
  36. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/api/exchange.py +0 -0
  37. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/api/modes.py +0 -0
  38. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/api/orders.py +0 -0
  39. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/api/portfolio.py +0 -0
  40. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/api/positions.py +0 -0
  41. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/api/profitability.py +0 -0
  42. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/api/storage.py +0 -0
  43. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/api/symbol_data.py +0 -0
  44. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/api/trader.py +0 -0
  45. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/api/trades.py +0 -0
  46. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/enums.py +0 -0
  47. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/errors.py +0 -0
  48. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_channel.py +0 -0
  49. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/__init__.py +0 -0
  50. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  51. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  52. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  53. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  54. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  55. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  56. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  57. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  58. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  59. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  60. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  61. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  62. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  63. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  64. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  65. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  66. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  67. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  68. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  69. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  70. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  71. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  72. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  73. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  74. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  75. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  76. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  77. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  78. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  79. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  80. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  81. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  82. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  83. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  84. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  85. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  86. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  87. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  88. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  89. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  90. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  91. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  92. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  93. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  94. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  95. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  96. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  97. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  98. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  99. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  100. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  101. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  102. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  103. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  104. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  105. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  106. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  107. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  108. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
  109. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  110. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  111. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  112. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  113. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  114. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  115. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/exchange_channels.py +0 -0
  116. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/exchange_details.py +0 -0
  117. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/exchange_factory.py +0 -0
  118. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  119. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/exchanges.py +0 -0
  120. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  121. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  122. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  123. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  124. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/traders/__init__.py +0 -0
  125. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/traders/trader.py +0 -0
  126. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  127. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/types/__init__.py +0 -0
  128. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
  129. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  130. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/util/__init__.py +0 -0
  131. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  132. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  133. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  134. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/__init__.py +0 -0
  135. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/abstract_trading_mode.py +0 -0
  136. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/channel/__init__.py +0 -0
  137. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  138. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  139. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/channel/mode.py +0 -0
  140. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/mode_activity.py +0 -0
  141. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/mode_config.py +0 -0
  142. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/modes_factory.py +0 -0
  143. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/modes_util.py +0 -0
  144. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  145. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  146. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  147. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  148. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  149. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  150. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  151. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  152. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  153. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  154. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  155. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  156. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  157. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  158. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  159. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  160. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/octobot_channel_consumer.py +0 -0
  161. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/__init__.py +0 -0
  162. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  163. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/__init__.py +0 -0
  164. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  165. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  166. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  167. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  168. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  169. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  170. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  171. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  172. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  173. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/order.py +0 -0
  174. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  175. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  176. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/order_group.py +0 -0
  177. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/order_state.py +0 -0
  178. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/order_util.py +0 -0
  179. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  180. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  181. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  182. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  183. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  184. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  185. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  186. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  187. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  188. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  189. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  190. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  191. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  192. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  193. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  194. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  195. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  196. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  197. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  198. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  199. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  200. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  201. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  202. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  203. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  204. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  205. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  206. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  207. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  208. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  209. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  210. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  211. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  212. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  213. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  214. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  215. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  216. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  217. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  218. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  219. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  220. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  221. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  222. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  223. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  224. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  225. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  226. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  227. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  228. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  229. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  230. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  231. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  232. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  233. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/__init__.py +0 -0
  234. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  235. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  236. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  237. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  238. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/position.py +0 -0
  239. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  240. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/position_state.py +0 -0
  241. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/position_util.py +0 -0
  242. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  243. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  244. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  245. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  246. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  247. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  248. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  249. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  250. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  251. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/state.py +0 -0
  252. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/trades/__init__.py +0 -0
  253. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  254. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  255. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  256. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/trades/trade.py +0 -0
  257. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  258. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  259. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  260. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  261. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  262. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  263. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  264. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  265. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  266. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  267. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  268. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  269. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  270. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/signals/__init__.py +0 -0
  271. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/signals/channel/__init__.py +0 -0
  272. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  273. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  274. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/signals/channel/signal_producer.py +0 -0
  275. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/signals/signal_creation.py +0 -0
  276. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  277. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/signals/util.py +0 -0
  278. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/storage/__init__.py +0 -0
  279. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/storage/abstract_storage.py +0 -0
  280. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/storage/candles_storage.py +0 -0
  281. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/storage/orders_storage.py +0 -0
  282. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/storage/portfolio_storage.py +0 -0
  283. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/storage/storage_manager.py +0 -0
  284. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/storage/trades_storage.py +0 -0
  285. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/storage/transactions_storage.py +0 -0
  286. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/storage/util.py +0 -0
  287. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/supervisors/__init__.py +0 -0
  288. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  289. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  290. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/util/__init__.py +0 -0
  291. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/util/config_util.py +0 -0
  292. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/util/initializable.py +0 -0
  293. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/util/initialization_util.py +0 -0
  294. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/util/simulator_updater_utils.py +0 -0
  295. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/util/test_tools/__init__.py +0 -0
  296. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  297. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  298. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  299. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/requirements.txt +0 -0
  300. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/setup.cfg +0 -0
  301. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/setup.py +0 -0
  302. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/api/__init__.py +0 -0
  303. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/api/test_channels.py +0 -0
  304. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/api/test_exchange.py +0 -0
  305. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/api/test_modes.py +0 -0
  306. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/api/test_orders.py +0 -0
  307. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/api/test_portfolio.py +0 -0
  308. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/api/test_profitability.py +0 -0
  309. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/api/test_symbol_data.py +0 -0
  310. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/api/test_trader.py +0 -0
  311. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/api/test_trades.py +0 -0
  312. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/cli/__init__.py +0 -0
  313. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/__init__.py +0 -0
  314. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/contracts/__init__.py +0 -0
  315. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  316. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  317. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/funding/__init__.py +0 -0
  318. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  319. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/kline/__init__.py +0 -0
  320. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  321. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/ohlcv/__init__.py +0 -0
  322. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  323. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  324. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/order_book/__init__.py +0 -0
  325. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  326. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/prices/__init__.py +0 -0
  327. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  328. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  329. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/recent_trades/__init__.py +0 -0
  330. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  331. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  332. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/ticker/__init__.py +0 -0
  333. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  334. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/connectors/__init__.py +0 -0
  335. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  336. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/implementations/__init__.py +0 -0
  337. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  338. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  339. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/test_abstract_exchange.py +0 -0
  340. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  341. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/test_exchange_builder.py +0 -0
  342. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/test_exchange_config_data.py +0 -0
  343. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/test_exchange_factory.py +0 -0
  344. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/test_exchange_manager.py +0 -0
  345. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/test_exchange_simulator.py +0 -0
  346. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/traders/__init__.py +0 -0
  347. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/traders/test_trader.py +0 -0
  348. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/types/__init__.py +0 -0
  349. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  350. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/util/__init__.py +0 -0
  351. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  352. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/exchanges/util/test_exchange_util.py +0 -0
  353. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/modes/__init__.py +0 -0
  354. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/modes/script_keywords/__init__.py +0 -0
  355. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  356. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  357. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  358. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  359. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  360. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  361. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  362. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/modes/test_abstract_mode_consumer.py +0 -0
  363. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/modes/test_abstract_trading_mode.py +0 -0
  364. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/modes/test_modes_util.py +0 -0
  365. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/__init__.py +0 -0
  366. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/__init__.py +0 -0
  367. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/groups/__init__.py +0 -0
  368. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  369. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  370. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  371. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/states/__init__.py +0 -0
  372. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  373. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  374. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  375. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  376. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/states/test_order_state.py +0 -0
  377. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  378. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  379. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  380. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  381. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  382. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/test_order.py +0 -0
  383. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/test_order_adapter.py +0 -0
  384. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/test_order_factory.py +0 -0
  385. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/test_order_util.py +0 -0
  386. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/test_orders_manager.py +0 -0
  387. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  388. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/types/__init__.py +0 -0
  389. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  390. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  391. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  392. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  393. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  394. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  395. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  396. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  397. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/types/market/__init__.py +0 -0
  398. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  399. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  400. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  401. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  402. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  403. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  404. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/__init__.py +0 -0
  405. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  406. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  407. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  408. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  409. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/history/__init__.py +0 -0
  410. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  411. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  412. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/test_asset.py +0 -0
  413. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  414. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  415. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  416. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  417. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  418. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/types/__init__.py +0 -0
  419. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  420. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  421. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  422. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/positions/__init__.py +0 -0
  423. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/positions/channel/__init__.py +0 -0
  424. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/positions/states/__init__.py +0 -0
  425. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/positions/test_position.py +0 -0
  426. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/positions/test_position_factory.py +0 -0
  427. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/positions/test_positions_manager.py +0 -0
  428. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/positions/types/__init__.py +0 -0
  429. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  430. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  431. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/trades/__init__.py +0 -0
  432. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/trades/test_trade_factory.py +0 -0
  433. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/trades/test_trade_manager.py +0 -0
  434. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  435. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/trades/test_trade_util.py +0 -0
  436. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/transactions/__init__.py +0 -0
  437. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  438. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  439. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/signals/__init__.py +0 -0
  440. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  441. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/signals/test_util.py +0 -0
  442. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/test_utils/__init__.py +0 -0
  443. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/test_utils/order_util.py +0 -0
  444. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/test_utils/random_numbers.py +0 -0
  445. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/util/__init__.py +0 -0
  446. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests/util/test_config_util.py +0 -0
  447. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/__init__.py +0 -0
  448. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/__init__.py +0 -0
  449. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  450. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  451. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_binance.py +0 -0
  452. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  453. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_bingx.py +0 -0
  454. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  455. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_bitget.py +0 -0
  456. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  457. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_bitmart.py +0 -0
  458. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_bitso.py +0 -0
  459. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  460. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_bybit.py +0 -0
  461. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  462. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  463. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_coinex.py +0 -0
  464. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  465. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_gateio.py +0 -0
  466. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  467. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  468. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_htx.py +0 -0
  469. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_kraken.py +0 -0
  470. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  471. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  472. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_mexc.py +0 -0
  473. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_ndax.py +0 -0
  474. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  475. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_okx.py +0 -0
  476. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  477. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_phemex.py +0 -0
  478. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  479. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/tests_additional/real_exchanges/test_upbit.py +0 -0
  480. {OctoBot-Trading-2.4.115 → OctoBot-Trading-2.4.117}/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.117] - 2024-10-24
8
+ ### Fixed
9
+ [Exchanges] cache key conflict
10
+
11
+ ## [2.4.116] - 2024-10-23
12
+ ### Added
13
+ [Exchanges] handle proxy config
14
+ [Exchanges] handle access token auth
15
+
7
16
  ## [2.4.115] - 2024-10-21
8
17
  ### Added
9
18
  [Orders] add get_valid_split_orders
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.115
3
+ Version: 2.4.117
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.115](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.117](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)
@@ -96,6 +96,7 @@ octobot_trading/exchanges/adapters/abstract_adapter.py
96
96
  octobot_trading/exchanges/config/__init__.py
97
97
  octobot_trading/exchanges/config/backtesting_exchange_config.py
98
98
  octobot_trading/exchanges/config/exchange_config_data.py
99
+ octobot_trading/exchanges/config/proxy_config.py
99
100
  octobot_trading/exchanges/connectors/__init__.py
100
101
  octobot_trading/exchanges/connectors/ccxt/__init__.py
101
102
  octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.115
3
+ Version: 2.4.117
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.115](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.117](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.115](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.117](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.115" # major.minor.revision
18
+ VERSION = "2.4.117" # major.minor.revision
@@ -66,7 +66,11 @@ DEFAULT_FAILED_REQUEST_RETRY_TIME = 1
66
66
  FAILED_NETWORK_REQUEST_RETRY_ATTEMPTS = 5
67
67
  DEFAULT_REQUEST_TIMEOUT = int(os.getenv("DEFAULT_REQUEST_TIMEOUT", "20000")) # default ccxt is 10s, use 20
68
68
  ENABLE_EXCHANGE_HTTP_PROXY_FROM_ENV = os_util.parse_boolean_environment_var(
69
- "ENABLE_EXCHANGE_HTTP_PROXY_FROM_ENV", "True")
69
+ "ENABLE_EXCHANGE_HTTP_PROXY_FROM_ENV", "True"
70
+ )
71
+ EXCHANGE_HTTP_PROXY_AUTHENTICATED_URL = os.getenv("EXCHANGE_HTTP_PROXY_AUTHENTICATED_URL")
72
+ EXCHANGE_HTTPS_PROXY_AUTHENTICATED_URL = os.getenv("EXCHANGE_HTTPS_PROXY_AUTHENTICATED_URL")
73
+ EXCHANGE_SOCKS_PROXY_AUTHENTICATED_URL = os.getenv("EXCHANGE_SOCKS_PROXY_AUTHENTICATED_URL")
70
74
  ENABLE_CCXT_VERBOSE = os_util.parse_boolean_environment_var("ENABLE_CCXT_VERBOSE", "False")
71
75
  ENABLE_CCXT_RATE_LIMIT = os_util.parse_boolean_environment_var("ENABLE_CCXT_RATE_LIMIT", "True")
72
76
  CCXT_DEFAULT_CACHE_LIMIT = int(os.getenv("CCXT_DEFAULT_CACHE_LIMIT", "1000")) # 1000: default ccxt value
@@ -94,6 +94,7 @@ from octobot_trading.exchanges import config
94
94
  from octobot_trading.exchanges.config import (
95
95
  ExchangeConfig,
96
96
  BacktestingExchangeConfig,
97
+ ProxyConfig,
97
98
  )
98
99
  from octobot_trading.exchanges import traders
99
100
  from octobot_trading.exchanges.traders import (
@@ -133,6 +134,7 @@ __all__ = [
133
134
  "AbstractAdapter",
134
135
  "ExchangeConfig",
135
136
  "BacktestingExchangeConfig",
137
+ "ProxyConfig",
136
138
  "ExchangeManager",
137
139
  "ExchangeBuilder",
138
140
  "create_exchange_builder_instance",
@@ -219,7 +219,7 @@ class AbstractWebsocketExchange:
219
219
  raise NotImplementedError(f"get_feeds_count is not implemented")
220
220
 
221
221
  def _should_authenticate(self):
222
- api_key, api_secret, _, _ = self.get_exchange_credentials()
222
+ api_key, api_secret, _, _, _ = self.get_exchange_credentials()
223
223
  return not self.exchange_manager.without_auth \
224
224
  and not self.exchange_manager.is_trader_simulated \
225
225
  and api_key and api_secret
@@ -23,8 +23,13 @@ from octobot_trading.exchanges.config import backtesting_exchange_config
23
23
  from octobot_trading.exchanges.config.backtesting_exchange_config import (
24
24
  BacktestingExchangeConfig,
25
25
  )
26
+ from octobot_trading.exchanges.config import proxy_config
27
+ from octobot_trading.exchanges.config.proxy_config import (
28
+ ProxyConfig,
29
+ )
26
30
 
27
31
  __all__ = [
28
32
  "ExchangeConfig",
29
33
  "BacktestingExchangeConfig",
34
+ "ProxyConfig",
30
35
  ]
@@ -0,0 +1,40 @@
1
+ # Drakkar-Software OctoBot-Trading
2
+ # Copyright (c) Drakkar-Software, All rights reserved.
3
+ #
4
+ # This library is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 3.0 of the License, or (at your option) any later version.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library.
16
+ import dataclasses
17
+ import typing
18
+ import octobot_trading.constants
19
+
20
+
21
+ @dataclasses.dataclass
22
+ class ProxyConfig:
23
+ # REST proxy
24
+ http_proxy: typing.Optional[str] = None
25
+ http_proxy_callback: typing.Optional[typing.Callable] = None
26
+ https_proxy: typing.Optional[str] = None
27
+ https_proxy_callback: typing.Optional[typing.Callable] = None
28
+ # Websocket proxy
29
+ socks_proxy : typing.Optional[str] = None
30
+ socks_proxy_callback: typing.Optional[typing.Callable] = None
31
+ # enable trust_env in exchange's aiohttp.ClientSession
32
+ aiohttp_trust_env: bool = octobot_trading.constants.ENABLE_EXCHANGE_HTTP_PROXY_FROM_ENV
33
+
34
+ @classmethod
35
+ def default_env_var_config(cls):
36
+ return cls(
37
+ http_proxy=octobot_trading.constants.EXCHANGE_HTTP_PROXY_AUTHENTICATED_URL or None,
38
+ https_proxy=octobot_trading.constants.EXCHANGE_HTTPS_PROXY_AUTHENTICATED_URL or None,
39
+ socks_proxy=octobot_trading.constants.EXCHANGE_SOCKS_PROXY_AUTHENTICATED_URL or None,
40
+ )
@@ -18,6 +18,7 @@ import logging
18
18
  import typing
19
19
  import ccxt
20
20
  import ccxt.pro as ccxt_pro
21
+ import ccxt.async_support as async_ccxt
21
22
 
22
23
  import octobot_commons.time_frame_manager as time_frame_manager
23
24
  import octobot_trading.constants as constants
@@ -25,6 +26,7 @@ import octobot_trading.enums as enums
25
26
  import octobot_trading.errors as errors
26
27
  import octobot_trading.exchanges.connectors.ccxt.enums as ccxt_enums
27
28
  import octobot_trading.exchanges.connectors.ccxt.ccxt_clients_cache as ccxt_clients_cache
29
+ import octobot_trading.exchanges.config.proxy_config as proxy_config_import
28
30
  import octobot_trading.exchanges.util.exchange_util as exchange_util
29
31
 
30
32
 
@@ -45,15 +47,23 @@ def create_client(
45
47
  f"exchange with ccxt in version {ccxt.__version__}")
46
48
  if exchange_manager.ignore_config or exchange_manager.check_config(exchange_manager.exchange_name):
47
49
  try:
48
- key, secret, password, uid = exchange_manager.get_exchange_credentials(exchange_manager.exchange_name)
50
+ auth_token_header_prefix = None
51
+ key, secret, password, uid, auth_token = exchange_manager.get_exchange_credentials(
52
+ exchange_manager.exchange_name
53
+ )
49
54
  if keys_adapter:
50
- key, secret, password, uid = keys_adapter(key, secret, password, uid)
55
+ key, secret, password, uid, auth_token, auth_token_header_prefix = keys_adapter(
56
+ key, secret, password, uid, auth_token
57
+ )
51
58
  if not (key and secret) and not exchange_manager.is_simulated and not exchange_manager.ignore_config:
52
59
  logger.warning(f"No exchange API key set for {exchange_manager.exchange_name}. "
53
60
  f"Enter your account details to enable real trading on this exchange.")
54
61
  if should_authenticate and not exchange_manager.is_backtesting:
55
- client = exchange_class(_get_client_config(options, headers, additional_config,
56
- key, secret, password, uid))
62
+ client = exchange_class(_get_client_config(
63
+ options, headers, additional_config,
64
+ api_key=key, secret=secret, password=password, uid=uid,
65
+ auth_token=auth_token, auth_token_header_prefix=auth_token_header_prefix
66
+ ))
57
67
  is_authenticated = True
58
68
  if exchange_manager.check_credentials:
59
69
  client.checkRequiredCredentials()
@@ -62,14 +72,16 @@ def create_client(
62
72
  except (ccxt.AuthenticationError, Exception) as e:
63
73
  if unauthenticated_exchange_fallback is None:
64
74
  return get_unauthenticated_exchange(
65
- exchange_class, options, headers, additional_config
75
+ exchange_class, options, headers, additional_config, exchange_manager.proxy_config
66
76
  ), False
67
77
  return unauthenticated_exchange_fallback(e), False
68
78
  else:
69
- client = get_unauthenticated_exchange(exchange_class, options, headers, additional_config)
79
+ client = get_unauthenticated_exchange(
80
+ exchange_class, options, headers, additional_config, exchange_manager.proxy_config
81
+ )
70
82
  logger.error("configuration issue: missing login information !")
71
83
  client.logger.setLevel(logging.INFO)
72
- _use_http_proxy_if_necessary(client)
84
+ _use_proxy_if_necessary(client, exchange_manager.proxy_config)
73
85
  return client, is_authenticated
74
86
 
75
87
 
@@ -95,9 +107,11 @@ async def close_client(client):
95
107
  client.orderbooks = {}
96
108
 
97
109
 
98
- def get_unauthenticated_exchange(exchange_class, options, headers, additional_config):
110
+ def get_unauthenticated_exchange(
111
+ exchange_class, options, headers, additional_config, proxy_config: proxy_config_import.ProxyConfig
112
+ ):
99
113
  client = exchange_class(_get_client_config(options, headers, additional_config))
100
- _use_http_proxy_if_necessary(client)
114
+ _use_proxy_if_necessary(client, proxy_config)
101
115
  return client
102
116
 
103
117
 
@@ -240,11 +254,29 @@ def converted_ccxt_common_errors(f):
240
254
  return converted_ccxt_common_errors_wrapper
241
255
 
242
256
 
243
- def _use_http_proxy_if_necessary(client):
244
- client.aiohttp_trust_env = constants.ENABLE_EXCHANGE_HTTP_PROXY_FROM_ENV
245
-
246
-
247
- def _get_client_config(options, headers, additional_config, api_key=None, secret=None, password=None, uid=None):
257
+ def _use_proxy_if_necessary(client, proxy_config: proxy_config_import.ProxyConfig):
258
+ client.aiohttp_trust_env = proxy_config.aiohttp_trust_env
259
+ if proxy_config.http_proxy:
260
+ client.http_proxy = proxy_config.http_proxy
261
+ if proxy_config.http_proxy_callback:
262
+ client.http_proxy_callback = proxy_config.http_proxy_callback
263
+ if proxy_config.https_proxy:
264
+ client.https_proxy = proxy_config.https_proxy
265
+ if proxy_config.https_proxy_callback:
266
+ client.https_proxy_callback = proxy_config.https_proxy_callback
267
+ if proxy_config.socks_proxy:
268
+ client.socks_proxy = proxy_config.socks_proxy
269
+ if proxy_config.socks_proxy_callback:
270
+ client.socks_proxy_callback = proxy_config.socks_proxy_callback
271
+
272
+
273
+ def _get_client_config(
274
+ options, headers, additional_config,
275
+ api_key=None, secret=None, password=None, uid=None,
276
+ auth_token=None, auth_token_header_prefix=None
277
+ ):
278
+ if auth_token is not None:
279
+ headers["Authorization"] = f"{auth_token_header_prefix or ''}{auth_token}"
248
280
  config = {
249
281
  'verbose': constants.ENABLE_CCXT_VERBOSE,
250
282
  'enableRateLimit': constants.ENABLE_CCXT_RATE_LIMIT,
@@ -262,3 +294,7 @@ def _get_client_config(options, headers, additional_config, api_key=None, secret
262
294
  config['uid'] = uid
263
295
  config.update(additional_config or {})
264
296
  return config
297
+
298
+
299
+ def ccxt_exchange_class_factory(exchange_name):
300
+ return getattr(async_ccxt, exchange_name)
@@ -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 cachetools
17
+ import json
17
18
 
18
19
  import octobot_commons.constants as commons_constants
19
20
 
@@ -22,12 +23,12 @@ _MARKETS_BY_EXCHANGE = cachetools.TTLCache(maxsize=50, ttl=commons_constants.DAY
22
23
 
23
24
 
24
25
  def get_client_key(client) -> str:
25
- return client.__class__.__name__
26
+ return f"{client.__class__.__name__}:{json.dumps(client.urls.get('api'))}"
26
27
 
27
28
 
28
- def get_exchange_parsed_markets(exchange: str):
29
- return _MARKETS_BY_EXCHANGE[exchange]
29
+ def get_exchange_parsed_markets(client_key: str):
30
+ return _MARKETS_BY_EXCHANGE[client_key]
30
31
 
31
32
 
32
- def set_exchange_parsed_markets(exchange: str, markets):
33
- _MARKETS_BY_EXCHANGE[exchange] = markets
33
+ def set_exchange_parsed_markets(client_key: str, markets):
34
+ _MARKETS_BY_EXCHANGE[client_key] = markets
@@ -200,7 +200,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
200
200
 
201
201
  def _create_exchange_type(self):
202
202
  if self.is_supporting_exchange(self.rest_name):
203
- self.exchange_type = getattr(ccxt, self.rest_name)
203
+ self.exchange_type = ccxt_client_util.ccxt_exchange_class_factory(self.rest_name)
204
204
  else:
205
205
  self.exchange_type = self.rest_name
206
206
 
@@ -256,7 +256,8 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
256
256
  self.handle_token_error(err)
257
257
  return ccxt_client_util.get_unauthenticated_exchange(
258
258
  self.exchange_type,
259
- self.options, self.headers, self.additional_config
259
+ self.options, self.headers, self.additional_config,
260
+ self.exchange_manager.proxy_config
260
261
  )
261
262
 
262
263
  def get_market_status(self, symbol, price_example=None, with_fixer=True):
@@ -13,12 +13,11 @@
13
13
  #
14
14
  # You should have received a copy of the GNU Lesser General Public
15
15
  # License along with this library.
16
- import ccxt.async_support
17
16
  import octobot_trading.exchanges.connectors.ccxt.ccxt_client_util as ccxt_client_util
18
17
 
19
18
 
20
19
  def parse_markets(exchange_name, market_filter) -> dict:
21
- client = getattr(ccxt.async_support, exchange_name)()
20
+ client = ccxt_client_util.ccxt_exchange_class_factory(exchange_name)()
22
21
  ccxt_client_util.load_markets_from_cache(client, market_filter)
23
22
  return client.markets
24
23
 
@@ -269,6 +269,10 @@ class ExchangeBuilder:
269
269
  self.exchange_manager.bot_id = bot_id
270
270
  return self
271
271
 
272
+ def set_proxy_config(self, proxy_config):
273
+ self.exchange_manager.proxy_config = proxy_config
274
+ return self
275
+
272
276
  def disable_trading_mode(self):
273
277
  self._is_using_trading_modes = False
274
278
  return self
@@ -58,6 +58,7 @@ class ExchangeManager(util.Initializable):
58
58
  self.without_auth: bool = False
59
59
  self.check_credentials: bool = True
60
60
  self.enable_storage: bool = True
61
+ self.proxy_config: exchanges.ProxyConfig = exchanges.ProxyConfig.default_env_var_config()
61
62
 
62
63
  # exchange_only is True when exchange channels are not required (therefore not created)
63
64
  self.exchange_only: bool = False
@@ -306,7 +307,7 @@ class ExchangeManager(util.Initializable):
306
307
 
307
308
  def get_exchange_credentials(self, exchange_name):
308
309
  if self.ignore_config or not self.should_decrypt_token() or self.without_auth:
309
- return "", "", "", ""
310
+ return "", "", "", "", ""
310
311
  config_exchange = self.config[common_constants.CONFIG_EXCHANGES][exchange_name]
311
312
  key = configuration.decrypt_element_if_possible(
312
313
  common_constants.CONFIG_EXCHANGE_KEY, config_exchange, None
@@ -321,7 +322,8 @@ class ExchangeManager(util.Initializable):
321
322
  configuration.decrypt_element_if_possible(
322
323
  common_constants.CONFIG_EXCHANGE_PASSWORD, config_exchange, None
323
324
  ),
324
- config_exchange.get(common_constants.CONFIG_EXCHANGE_UID, "")
325
+ config_exchange.get(common_constants.CONFIG_EXCHANGE_UID, ""),
326
+ config_exchange.get(common_constants.CONFIG_EXCHANGE_ACCESS_TOKEN, "")
325
327
  )
326
328
 
327
329
  def get_exchange_sub_account_id(self, exchange_name):
@@ -33,6 +33,7 @@ import octobot_trading.constants as constants
33
33
  import octobot_trading.exchanges.types as exchanges_types
34
34
  import octobot_trading.exchanges.implementations as exchanges_implementations
35
35
  import octobot_trading.exchanges.connectors.ccxt.enums as ccxt_enums
36
+ import octobot_trading.exchanges.connectors.ccxt.ccxt_client_util as ccxt_client_util
36
37
  import octobot_trading.exchanges.exchange_details as exchange_details
37
38
  import octobot_trading.exchanges.exchange_builder as exchange_builder
38
39
 
@@ -128,7 +129,7 @@ async def get_exchange_details(
128
129
  aiohttp_session, auto_filled_exchanges[exchange_name][1], exchange_name
129
130
  )
130
131
  try:
131
- exchange = getattr(ccxt, exchange_name)()
132
+ exchange = ccxt_client_util.ccxt_exchange_class_factory(exchange_name)()
132
133
  return exchange_details.ExchangeDetails(
133
134
  exchange.id,
134
135
  exchange.name,
@@ -33,7 +33,7 @@ class ExchangeAuthDetails(octobot_commons.dataclasses.FlexibleDataclass, octobot
33
33
  api_key: str = ""
34
34
  api_secret: str = ""
35
35
  api_password: str = ""
36
- oauth_token: str = ""
36
+ access_token: str = ""
37
37
  exchange_type: str = ""
38
38
  sandboxed: bool = False
39
39
  broker_enabled: bool = False
@@ -31,10 +31,12 @@ import octobot_trading.exchanges.connectors.ccxt.ccxt_clients_cache as ccxt_clie
31
31
  from octobot_commons.tests.test_config import load_test_config
32
32
  from octobot_trading.api.exchange import create_exchange_builder, cancel_ccxt_throttle_task
33
33
  from octobot_trading.exchanges.exchange_manager import ExchangeManager
34
+ from octobot_trading.exchanges.exchanges import Exchanges
34
35
  from octobot_trading.exchanges.implementations.default_rest_exchange import DefaultRestExchange
35
36
  from octobot_trading.exchanges.connectors.ccxt.ccxt_connector import CCXTConnector
36
37
  from octobot_trading.exchanges.traders.trader_simulator import TraderSimulator
37
38
  import octobot_trading.personal_data as personal_data
39
+ import octobot_trading.exchanges.connectors.ccxt.ccxt_client_util as ccxt_client_util
38
40
  from octobot_trading.enums import FeePropertyColumns, ExchangeConstantsMarketPropertyColumns, \
39
41
  ExchangeConstantsMarketPropertyColumns
40
42
 
@@ -62,10 +64,10 @@ class MockedCCXTConnector(CCXTConnector):
62
64
  return DEFAULT_EXCHANGE_NAME
63
65
 
64
66
  async def load_symbol_markets(self, reload=False, market_filter=None):
65
- if forced_markets := mock_exchanges_data.MOCKED_EXCHANGE_SYMBOL_DETAILS.get(
67
+ if mock_exchanges_data.MOCKED_EXCHANGE_SYMBOL_DETAILS.get(
66
68
  self.exchange_manager.exchange_name, None
67
69
  ):
68
- ccxt_clients_cache.set_exchange_parsed_markets(self.exchange_manager.exchange_name, forced_markets)
70
+ register_market_status_mocks(self.exchange_manager.exchange_name)
69
71
  await super().load_symbol_markets(
70
72
  reload=reload,
71
73
  )
@@ -365,3 +367,25 @@ async def future_backtesting_trader(backtesting_config, backtesting_exchange_man
365
367
  trader_instance = TraderSimulator(backtesting_config, backtesting_exchange_manager)
366
368
  await trader_instance.initialize()
367
369
  return backtesting_config, backtesting_exchange_manager, trader_instance
370
+
371
+
372
+ @contextlib.asynccontextmanager
373
+ async def cached_markets_exchange_manager(config, exchange_name, exchange_only=False):
374
+ exchange_manager = None
375
+ try:
376
+ exchange_manager = ExchangeManager(config, exchange_name)
377
+ register_market_status_mocks(exchange_name)
378
+ exchange_manager.exchange_only = exchange_only
379
+ await exchange_manager.initialize(exchange_config_by_exchange=None)
380
+ Exchanges.instance().add_exchange(exchange_manager, "")
381
+ yield exchange_manager
382
+ finally:
383
+ if exchange_manager is not None:
384
+ await exchange_manager.stop()
385
+
386
+
387
+ def register_market_status_mocks(exchange_name):
388
+ ccxt_clients_cache.set_exchange_parsed_markets(
389
+ ccxt_clients_cache.get_client_key(ccxt_client_util.ccxt_exchange_class_factory(exchange_name)()),
390
+ mock_exchanges_data.MOCKED_EXCHANGE_SYMBOL_DETAILS[exchange_name]
391
+ )