OctoBot-Trading 2.4.97__tar.gz → 2.4.99__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 (477) hide show
  1. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/CHANGELOG.md +9 -0
  2. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/OctoBot_Trading.egg-info/requires.txt +1 -1
  4. {OctoBot-Trading-2.4.97/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.99}/PKG-INFO +2 -2
  5. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/README.md +1 -1
  6. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/__init__.py +1 -1
  7. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/api/portfolio.py +2 -1
  8. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/constants.py +2 -1
  9. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/abstract_exchange.py +7 -2
  10. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/abstract_websocket_exchange.py +2 -2
  11. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/config/exchange_config_data.py +6 -0
  12. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +24 -0
  13. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +6 -4
  14. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +1 -1
  15. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +1 -1
  16. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/exchange_builder.py +12 -2
  17. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/exchange_factory.py +23 -12
  18. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/exchange_manager.py +5 -4
  19. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/implementations/exchange_simulator.py +9 -4
  20. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/types/rest_exchange.py +14 -5
  21. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/util/exchange_util.py +28 -15
  22. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/abstract_trading_mode.py +7 -0
  23. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/value_converter.py +2 -6
  24. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/trades/channel/trades_updater.py +22 -18
  25. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/trades/trades_manager.py +18 -6
  26. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/requirements.txt +1 -1
  27. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/__init__.py +15 -9
  28. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/implementations/test_default_rest_exchange.py +1 -1
  29. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/test_abstract_exchange.py +1 -1
  30. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/test_exchange_config_data.py +1 -1
  31. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/test_exchange_manager.py +1 -1
  32. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/test_exchanges.py +9 -9
  33. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/traders/test_trader.py +1 -1
  34. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/util/test_exchange_util.py +12 -12
  35. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/modes/test_abstract_mode_consumer.py +1 -1
  36. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/test_order_factory.py +1 -1
  37. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/trades/test_trade_factory.py +1 -1
  38. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/__init__.py +1 -1
  39. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/real_exchange_tester.py +4 -0
  40. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_bingx.py +1 -1
  41. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_bitget.py +2 -2
  42. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_bitmart.py +1 -1
  43. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_cryptocom.py +7 -1
  44. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_okx.py +1 -1
  45. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/LICENSE +0 -0
  46. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/MANIFEST.in +0 -0
  47. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
  48. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  49. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  50. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  51. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/api/__init__.py +0 -0
  52. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/api/channels.py +0 -0
  53. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/api/contracts.py +0 -0
  54. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/api/exchange.py +0 -0
  55. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/api/modes.py +0 -0
  56. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/api/orders.py +0 -0
  57. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/api/positions.py +0 -0
  58. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/api/profitability.py +0 -0
  59. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/api/storage.py +0 -0
  60. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/api/symbol_data.py +0 -0
  61. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/api/trader.py +0 -0
  62. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/api/trades.py +0 -0
  63. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/enums.py +0 -0
  64. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/errors.py +0 -0
  65. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_channel.py +0 -0
  66. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/__init__.py +0 -0
  67. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  68. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  69. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  70. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  71. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  72. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  73. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  74. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  75. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  76. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  77. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  78. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  79. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  80. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  81. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  82. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  83. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  84. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  85. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  86. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  87. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  88. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  89. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  90. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  91. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  92. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  93. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  94. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  95. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  96. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  97. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  98. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  99. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  100. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  101. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  102. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  103. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  104. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  105. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  106. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  107. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  108. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  109. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  110. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  111. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  112. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  113. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  114. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  115. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  116. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  117. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  118. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/__init__.py +0 -0
  119. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  120. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  121. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/config/__init__.py +0 -0
  122. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  123. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  124. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  125. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  126. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  127. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  128. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  129. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  130. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  131. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  132. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/exchange_channels.py +0 -0
  133. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/exchange_details.py +0 -0
  134. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  135. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/exchanges.py +0 -0
  136. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  137. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  138. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  139. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/traders/__init__.py +0 -0
  140. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/traders/trader.py +0 -0
  141. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  142. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/types/__init__.py +0 -0
  143. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  144. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/util/__init__.py +0 -0
  145. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  146. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  147. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  148. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/__init__.py +0 -0
  149. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/channel/__init__.py +0 -0
  150. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  151. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  152. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/channel/mode.py +0 -0
  153. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/mode_activity.py +0 -0
  154. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/mode_config.py +0 -0
  155. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/modes_factory.py +0 -0
  156. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/modes_util.py +0 -0
  157. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  158. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  159. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  160. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  161. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  162. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  163. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  164. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  165. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  166. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  167. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  168. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  169. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  170. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  171. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  172. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  173. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/octobot_channel_consumer.py +0 -0
  174. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/__init__.py +0 -0
  175. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  176. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/__init__.py +0 -0
  177. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  178. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  179. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  180. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  181. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  182. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  183. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  184. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  185. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  186. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/order.py +0 -0
  187. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  188. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  189. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/order_group.py +0 -0
  190. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/order_state.py +0 -0
  191. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/order_util.py +0 -0
  192. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  193. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  194. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  195. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  196. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  197. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  198. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  199. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  200. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  201. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  202. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  203. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  204. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  205. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  206. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  207. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  208. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  209. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  210. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  211. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  212. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  213. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  214. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  215. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  216. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  217. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  218. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  219. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  220. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  221. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  222. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  223. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  224. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  225. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  226. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  227. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  228. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  229. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  230. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  231. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  232. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  233. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  234. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  235. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  236. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  237. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  238. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  239. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  240. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  241. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  242. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  243. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  244. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  245. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/__init__.py +0 -0
  246. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  247. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  248. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  249. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  250. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/position.py +0 -0
  251. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  252. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/position_state.py +0 -0
  253. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/position_util.py +0 -0
  254. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  255. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  256. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  257. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  258. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  259. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  260. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  261. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  262. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  263. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/state.py +0 -0
  264. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/trades/__init__.py +0 -0
  265. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  266. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  267. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/trades/trade.py +0 -0
  268. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  269. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  270. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  271. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  272. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  273. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  274. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  275. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  276. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  277. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  278. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  279. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  280. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/signals/__init__.py +0 -0
  281. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/signals/channel/__init__.py +0 -0
  282. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  283. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  284. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/signals/channel/signal_producer.py +0 -0
  285. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/signals/signal_creation.py +0 -0
  286. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  287. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/signals/util.py +0 -0
  288. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/storage/__init__.py +0 -0
  289. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/storage/abstract_storage.py +0 -0
  290. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/storage/candles_storage.py +0 -0
  291. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/storage/orders_storage.py +0 -0
  292. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/storage/portfolio_storage.py +0 -0
  293. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/storage/storage_manager.py +0 -0
  294. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/storage/trades_storage.py +0 -0
  295. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/storage/transactions_storage.py +0 -0
  296. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/storage/util.py +0 -0
  297. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/supervisors/__init__.py +0 -0
  298. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  299. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  300. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/util/__init__.py +0 -0
  301. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/util/config_util.py +0 -0
  302. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/util/initializable.py +0 -0
  303. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/util/initialization_util.py +0 -0
  304. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/util/simulator_updater_utils.py +0 -0
  305. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/util/test_tools/__init__.py +0 -0
  306. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  307. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  308. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  309. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  310. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/setup.cfg +0 -0
  311. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/setup.py +0 -0
  312. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/api/__init__.py +0 -0
  313. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/api/test_channels.py +0 -0
  314. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/api/test_exchange.py +0 -0
  315. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/api/test_modes.py +0 -0
  316. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/api/test_orders.py +0 -0
  317. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/api/test_portfolio.py +0 -0
  318. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/api/test_profitability.py +0 -0
  319. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/api/test_symbol_data.py +0 -0
  320. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/api/test_trader.py +0 -0
  321. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/api/test_trades.py +0 -0
  322. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/cli/__init__.py +0 -0
  323. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/__init__.py +0 -0
  324. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/contracts/__init__.py +0 -0
  325. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  326. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  327. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/funding/__init__.py +0 -0
  328. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  329. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/kline/__init__.py +0 -0
  330. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  331. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/ohlcv/__init__.py +0 -0
  332. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  333. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  334. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/order_book/__init__.py +0 -0
  335. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  336. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/prices/__init__.py +0 -0
  337. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  338. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  339. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/recent_trades/__init__.py +0 -0
  340. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  341. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  342. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/ticker/__init__.py +0 -0
  343. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  344. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/connectors/__init__.py +0 -0
  345. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  346. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  347. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  348. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/implementations/__init__.py +0 -0
  349. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  350. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  351. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/test_exchange_builder.py +0 -0
  352. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/test_exchange_factory.py +0 -0
  353. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/test_exchange_simulator.py +0 -0
  354. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/traders/__init__.py +0 -0
  355. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/types/__init__.py +0 -0
  356. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  357. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/util/__init__.py +0 -0
  358. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  359. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/modes/__init__.py +0 -0
  360. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/modes/script_keywords/__init__.py +0 -0
  361. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  362. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  363. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  364. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  365. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  366. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  367. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  368. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/modes/test_abstract_trading_mode.py +0 -0
  369. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/modes/test_modes_util.py +0 -0
  370. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/__init__.py +0 -0
  371. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/__init__.py +0 -0
  372. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/groups/__init__.py +0 -0
  373. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  374. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  375. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  376. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/states/__init__.py +0 -0
  377. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  378. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  379. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  380. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  381. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/states/test_order_state.py +0 -0
  382. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  383. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  384. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  385. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  386. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  387. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/test_order.py +0 -0
  388. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/test_order_adapter.py +0 -0
  389. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/test_order_util.py +0 -0
  390. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/test_orders_manager.py +0 -0
  391. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  392. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/types/__init__.py +0 -0
  393. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  394. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  395. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  396. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  397. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  398. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  399. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  400. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  401. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/types/market/__init__.py +0 -0
  402. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  403. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  404. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  405. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  406. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  407. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  408. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/__init__.py +0 -0
  409. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  410. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  411. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  412. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  413. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/history/__init__.py +0 -0
  414. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  415. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  416. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/test_asset.py +0 -0
  417. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  418. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  419. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  420. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  421. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  422. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/types/__init__.py +0 -0
  423. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  424. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  425. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  426. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/positions/__init__.py +0 -0
  427. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/positions/channel/__init__.py +0 -0
  428. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/positions/states/__init__.py +0 -0
  429. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/positions/test_position.py +0 -0
  430. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/positions/test_position_factory.py +0 -0
  431. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/positions/test_positions_manager.py +0 -0
  432. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/positions/types/__init__.py +0 -0
  433. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  434. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  435. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/trades/__init__.py +0 -0
  436. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/trades/test_trade_manager.py +0 -0
  437. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  438. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/trades/test_trade_util.py +0 -0
  439. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/transactions/__init__.py +0 -0
  440. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  441. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  442. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/signals/__init__.py +0 -0
  443. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  444. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/signals/test_util.py +0 -0
  445. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/test_utils/__init__.py +0 -0
  446. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/test_utils/order_util.py +0 -0
  447. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/test_utils/random_numbers.py +0 -0
  448. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/util/__init__.py +0 -0
  449. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests/util/test_config_util.py +0 -0
  450. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/__init__.py +0 -0
  451. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  452. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  453. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_binance.py +0 -0
  454. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  455. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  456. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  457. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_bitso.py +0 -0
  458. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  459. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_bybit.py +0 -0
  460. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  461. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  462. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_coinex.py +0 -0
  463. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_gateio.py +0 -0
  464. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  465. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  466. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_htx.py +0 -0
  467. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_kraken.py +0 -0
  468. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  469. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  470. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_mexc.py +0 -0
  471. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_ndax.py +0 -0
  472. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  473. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  474. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_phemex.py +0 -0
  475. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  476. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/tests_additional/real_exchanges/test_upbit.py +0 -0
  477. {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.99}/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.99] - 2024-08-19
8
+ ### Updated
9
+ - [CCXT] updated to ccxt 4.3.85
10
+
11
+ ## [2.4.98] - 2024-08-16
12
+ ### Added
13
+ - [Exchanges] exchange_config_by_exchange in init
14
+ - [Trades] option to ignore cancelled orders
15
+
7
16
  ## [2.4.97] - 2024-08-14
8
17
  ### Added
9
18
  - [Exchanges] cancel_all_orders
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.97
3
+ Version: 2.4.99
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.97](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.99](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)
@@ -4,7 +4,7 @@ Async-Channel<2.3,>=2.2
4
4
  OctoBot-Commons<1.10,>=1.9.43
5
5
  OctoBot-Tentacles-Manager<2.10,>=2.9
6
6
  trading-backend>=1.2.7
7
- ccxt==4.3.56
7
+ ccxt==4.3.85
8
8
  cryptography
9
9
  sortedcontainers==2.4.0
10
10
  tinydb==4.5.2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.97
3
+ Version: 2.4.99
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.97](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.99](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.97](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.99](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.97" # major.minor.revision
18
+ VERSION = "2.4.99" # major.minor.revision
@@ -15,6 +15,7 @@
15
15
  # License along with this library.
16
16
  import decimal
17
17
 
18
+ import octobot_commons.symbols as commons_symbols
18
19
  import octobot_trading.exchange_channel as exchange_channel
19
20
  import octobot_trading.constants
20
21
  import octobot_trading.personal_data as personal_data
@@ -105,4 +106,4 @@ def can_convert_symbol_to_usd_like(symbol: str) -> bool:
105
106
 
106
107
 
107
108
  def is_usd_like_coin(coin) -> bool:
108
- return personal_data.ValueConverter.is_usd_like_coin(coin)
109
+ return commons_symbols.is_usd_like_coin(coin)
@@ -121,11 +121,12 @@ TESTED_EXCHANGES = [
121
121
  "mexc",
122
122
  "bingx",
123
123
  "coinex",
124
+ "bitmart",
124
125
  ])
125
126
  DEFAULT_FUTURE_EXCHANGES = sorted(["bybit"])
126
127
  SIMULATOR_TESTED_EXCHANGES = sorted(["bitfinex2", "bithumb", "bitstamp", "bittrex",
127
128
  "hitbtc", "kraken", "poloniex", "bitso", "ndax", "upbit",
128
- "wavesexchange", "bitmart",])
129
+ "wavesexchange",])
129
130
 
130
131
  # text content of errors due to exchange compliancy rules
131
132
  # Warning: should never be a false positive
@@ -72,7 +72,7 @@ class AbstractExchange(tentacles_management.AbstractTentacle):
72
72
  }
73
73
  ACCOUNTS = {}
74
74
 
75
- def __init__(self, config, exchange_manager):
75
+ def __init__(self, config, exchange_manager, exchange_config_by_exchange: typing.Optional[dict[str, dict]]):
76
76
  super().__init__()
77
77
  self.config = config
78
78
  self.exchange_manager = exchange_manager
@@ -97,6 +97,8 @@ class AbstractExchange(tentacles_management.AbstractTentacle):
97
97
 
98
98
  self._creating_exchange_order_descriptions = set()
99
99
 
100
+ if exchange_config_by_exchange and self.get_name() in exchange_config_by_exchange:
101
+ self.tentacle_config = exchange_config_by_exchange[self.get_name()]
100
102
  if self.exchange_manager.tentacles_setup_config is not None:
101
103
  self.load_user_inputs_from_class(self.exchange_manager.tentacles_setup_config, self.tentacle_config)
102
104
 
@@ -748,4 +750,7 @@ class AbstractExchange(tentacles_management.AbstractTentacle):
748
750
  def _get_order_description(
749
751
  self, side: enums.TradeOrderSide, symbol: str, quantity: decimal.Decimal, price: decimal.Decimal
750
752
  ) -> str:
751
- return f"{side.value}-{symbol}-{float(quantity)}-{float(price)}"
753
+ return (
754
+ f"{side.value if side else None}-{symbol}-"
755
+ f"{float(quantity) if quantity else None}-{float(price) if price else None}"
756
+ )
@@ -94,7 +94,7 @@ class AbstractWebsocketExchange:
94
94
  def get_exchange_credentials(self):
95
95
  """
96
96
  Exchange credentials
97
- :return: key, secret, password
97
+ :return: key, secret, password, uid
98
98
  """
99
99
  return self.exchange_manager.get_exchange_credentials(self.exchange_manager.exchange_name)
100
100
 
@@ -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
@@ -68,6 +68,9 @@ class ExchangeConfig(util.Initializable):
68
68
  # periodic updaters that should always be started for this configuration
69
69
  self.forced_updater_channels = set()
70
70
 
71
+ # When False, cancelled orders won't be saved in trades history
72
+ self.is_saving_cancelled_orders_as_trade = True
73
+
71
74
  self.backtesting_exchange_config = None
72
75
 
73
76
  async def initialize_impl(self):
@@ -150,6 +153,9 @@ class ExchangeConfig(util.Initializable):
150
153
  def add_forced_updater_channels(self, channel: set[str]):
151
154
  self.forced_updater_channels.update(channel)
152
155
 
156
+ def set_is_saving_cancelled_orders_as_trade(self, value: bool):
157
+ self.is_saving_cancelled_orders_as_trade = value
158
+
153
159
  async def add_watched_symbols(self, symbols):
154
160
  new_valid_symbols = [
155
161
  symbol
@@ -43,6 +43,30 @@ class CCXTAdapter(adapters.AbstractAdapter):
43
43
  # CCXT standard order parsing logic
44
44
  return fixed
45
45
 
46
+ def adapt_amount_from_filled_or_cost(self, fixed):
47
+ try:
48
+ if (
49
+ fixed[enums.ExchangeConstantsOrderColumns.TYPE.value] == enums.TradeOrderType.MARKET.value and
50
+ fixed[enums.ExchangeConstantsOrderColumns.SIDE.value] == enums.TradeOrderSide.BUY.value and
51
+ fixed[enums.ExchangeConstantsOrderColumns.FILLED.value]
52
+ ):
53
+ # convert amount to use the base unit: use FILLED for accuracy (when not None/0)
54
+ fixed[enums.ExchangeConstantsOrderColumns.AMOUNT.value] = (
55
+ fixed[enums.ExchangeConstantsOrderColumns.FILLED.value]
56
+ )
57
+ if (
58
+ (not fixed[enums.ExchangeConstantsOrderColumns.AMOUNT.value]) and
59
+ fixed[enums.ExchangeConstantsOrderColumns.COST.value] and
60
+ fixed[enums.ExchangeConstantsOrderColumns.PRICE.value]
61
+ ):
62
+ # convert amount to use the base unit
63
+ fixed[enums.ExchangeConstantsOrderColumns.AMOUNT.value] = (
64
+ fixed[enums.ExchangeConstantsOrderColumns.COST.value] /
65
+ fixed[enums.ExchangeConstantsOrderColumns.PRICE.value]
66
+ )
67
+ except KeyError:
68
+ pass
69
+
46
70
  def adapt_quantities_with_contract_size(self, order_or_trade, symbol):
47
71
  if self.connector.exchange_manager.is_future:
48
72
  symbol = symbol or order_or_trade.get(ecoc.SYMBOL.value)
@@ -45,15 +45,15 @@ def create_client(
45
45
  f"exchange with ccxt in version {ccxt.__version__}")
46
46
  if exchange_manager.ignore_config or exchange_manager.check_config(exchange_manager.exchange_name):
47
47
  try:
48
- key, secret, password = exchange_manager.get_exchange_credentials(exchange_manager.exchange_name)
48
+ key, secret, password, uid = exchange_manager.get_exchange_credentials(exchange_manager.exchange_name)
49
49
  if keys_adapter:
50
- key, secret, password = keys_adapter(key, secret, password)
50
+ key, secret, password, uid = keys_adapter(key, secret, password, uid)
51
51
  if not (key and secret) and not exchange_manager.is_simulated and not exchange_manager.ignore_config:
52
52
  logger.warning(f"No exchange API key set for {exchange_manager.exchange_name}. "
53
53
  f"Enter your account details to enable real trading on this exchange.")
54
54
  if should_authenticate and not exchange_manager.is_backtesting:
55
55
  client = exchange_class(_get_client_config(options, headers, additional_config,
56
- key, secret, password))
56
+ key, secret, password, uid))
57
57
  is_authenticated = True
58
58
  if exchange_manager.check_credentials:
59
59
  client.checkRequiredCredentials()
@@ -244,7 +244,7 @@ def _use_http_proxy_if_necessary(client):
244
244
  client.aiohttp_trust_env = constants.ENABLE_EXCHANGE_HTTP_PROXY_FROM_ENV
245
245
 
246
246
 
247
- def _get_client_config(options, headers, additional_config, api_key=None, secret=None, password=None):
247
+ def _get_client_config(options, headers, additional_config, api_key=None, secret=None, password=None, uid=None):
248
248
  config = {
249
249
  'verbose': constants.ENABLE_CCXT_VERBOSE,
250
250
  'enableRateLimit': constants.ENABLE_CCXT_RATE_LIMIT,
@@ -258,5 +258,7 @@ def _get_client_config(options, headers, additional_config, api_key=None, secret
258
258
  config['secret'] = secret
259
259
  if password is not None:
260
260
  config['password'] = password
261
+ if uid is not None:
262
+ config['uid'] = uid
261
263
  config.update(additional_config or {})
262
264
  return config
@@ -50,7 +50,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
50
50
  def __init__(
51
51
  self, config, exchange_manager, adapter_class=None, additional_config=None, rest_name=None, force_auth=False
52
52
  ):
53
- super().__init__(config, exchange_manager)
53
+ super().__init__(config, exchange_manager, None)
54
54
  self.client = None
55
55
  self.exchange_type = None
56
56
  self.adapter = self.get_adapter_class(adapter_class)(self)
@@ -35,7 +35,7 @@ import octobot_trading.exchanges.util as util
35
35
 
36
36
  class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
37
37
  def __init__(self, config, exchange_manager, backtesting, adapter_class=None):
38
- super().__init__(config, exchange_manager)
38
+ super().__init__(config, exchange_manager, None)
39
39
  self.backtesting = backtesting
40
40
  self.allowed_time_lag = constants.DEFAULT_BACKTESTING_TIME_LAG
41
41
  self.adapter = self.get_adapter_class(adapter_class)(self)
@@ -37,6 +37,7 @@ class ExchangeBuilder:
37
37
  self._is_using_trading_modes: bool = True
38
38
  self._matrix_id: str = None
39
39
  self.trading_config_by_trading_mode: dict = None
40
+ self.exchange_config_by_exchange: dict = None
40
41
  self.auto_start_trading_modes: bool = True
41
42
 
42
43
  async def build(self):
@@ -61,10 +62,12 @@ class ExchangeBuilder:
61
62
  if self._is_using_trading_modes:
62
63
  trading_mode_class = modes.get_activated_trading_mode(self.exchange_manager.tentacles_setup_config)
63
64
  # handle exchange related requirements if the activated trading mode has any
64
- self._register_trading_modes_requirements(trading_mode_class, self.exchange_manager.tentacles_setup_config)
65
+ self._register_trading_modes_requirements(
66
+ trading_mode_class, self.exchange_manager.tentacles_setup_config
67
+ )
65
68
 
66
69
  self._ensure_exchange_compatibility()
67
- await self.exchange_manager.initialize()
70
+ await self.exchange_manager.initialize(exchange_config_by_exchange=self.exchange_config_by_exchange)
68
71
  # add exchange to be able to use it
69
72
  exchanges.Exchanges.instance().add_exchange(self.exchange_manager, self._matrix_id)
70
73
 
@@ -110,6 +113,9 @@ class ExchangeBuilder:
110
113
  self.exchange_manager.exchange_config.add_forced_updater_channels(
111
114
  trading_mode_class.get_forced_updater_channels()
112
115
  )
116
+ self.exchange_manager.exchange_config.set_is_saving_cancelled_orders_as_trade(
117
+ not trading_mode_class.is_ignoring_cancelled_orders_trades()
118
+ )
113
119
 
114
120
  async def _build_trading_modes_if_required(self, trading_mode_class):
115
121
  if self._is_using_trading_modes:
@@ -270,6 +276,10 @@ class ExchangeBuilder:
270
276
  self.trading_config_by_trading_mode = trading_config_by_trading_mode
271
277
  return self
272
278
 
279
+ def use_exchange_config_by_exchange(self, exchange_config_by_exchange: typing.Optional[dict[str, dict]]):
280
+ self.exchange_config_by_exchange = exchange_config_by_exchange
281
+ return self
282
+
273
283
  def set_auto_start_trading_modes(self, auto_start_trading_modes):
274
284
  self.auto_start_trading_modes = auto_start_trading_modes
275
285
  return self
@@ -14,6 +14,7 @@
14
14
  # You should have received a copy of the GNU Lesser General Public
15
15
  # License along with this library.
16
16
  import asyncio
17
+ import typing
17
18
 
18
19
  import trading_backend
19
20
 
@@ -22,7 +23,7 @@ import octobot_trading.errors as errors
22
23
  import octobot_trading.exchanges as exchanges
23
24
 
24
25
 
25
- async def create_exchanges(exchange_manager):
26
+ async def create_exchanges(exchange_manager, exchange_config_by_exchange: typing.Optional[dict[str, dict]]):
26
27
  if exchange_manager.is_sandboxed and not exchange_manager.exchange_only:
27
28
  exchange_manager.logger.info(f"Using sandbox exchange for {exchange_manager.exchange_name}")
28
29
 
@@ -32,7 +33,7 @@ async def create_exchanges(exchange_manager):
32
33
  exchange_manager.load_constants()
33
34
  else:
34
35
  # real : create a rest or websocket exchange instance
35
- await create_real_exchange(exchange_manager)
36
+ await create_real_exchange(exchange_manager, exchange_config_by_exchange)
36
37
  exchange_manager.load_constants()
37
38
  await initialize_real_exchange(exchange_manager)
38
39
 
@@ -47,12 +48,13 @@ async def create_exchanges(exchange_manager):
47
48
  exchange_manager.is_ready = True
48
49
 
49
50
 
50
- async def create_real_exchange(exchange_manager) -> None:
51
+ async def create_real_exchange(exchange_manager, exchange_config_by_exchange: typing.Optional[dict[str, dict]]) -> None:
51
52
  """
52
53
  Create and initialize real REST exchange
53
54
  :param exchange_manager: the related exchange manager
55
+ :param exchange_config_by_exchange: optional exchange configurations
54
56
  """
55
- await _create_rest_exchange(exchange_manager)
57
+ await _create_rest_exchange(exchange_manager, exchange_config_by_exchange)
56
58
  try:
57
59
  await exchange_manager.exchange.initialize()
58
60
  _create_exchange_backend(exchange_manager)
@@ -62,7 +64,7 @@ async def create_real_exchange(exchange_manager) -> None:
62
64
  except errors.AuthenticationError:
63
65
  exchange_manager.logger.error("Authentication error, retrying without authentication...")
64
66
  exchange_manager.without_auth = True
65
- await create_real_exchange(exchange_manager)
67
+ await create_real_exchange(exchange_manager, exchange_config_by_exchange)
66
68
  return
67
69
 
68
70
 
@@ -112,12 +114,14 @@ async def _is_supporting_octobot() -> bool:
112
114
  return False
113
115
 
114
116
 
115
- async def _create_rest_exchange(exchange_manager) -> None:
117
+ async def _create_rest_exchange(
118
+ exchange_manager, exchange_config_by_exchange: typing.Optional[dict[str, dict]]
119
+ ) -> None:
116
120
  """
117
121
  create REST based on ccxt exchange
118
122
  :param exchange_manager: the related exchange manager
119
123
  """
120
- await _search_and_create_rest_exchange(exchange_manager)
124
+ await _search_and_create_rest_exchange(exchange_manager, exchange_config_by_exchange)
121
125
 
122
126
  if not exchange_manager.exchange:
123
127
  raise Exception(f"Can't create an exchange instance that match the exchange configuration ({exchange_manager})")
@@ -139,16 +143,23 @@ async def init_simulated_exchange(exchange_manager):
139
143
  await exchange_manager.exchange.create_backtesting_exchange_producers()
140
144
 
141
145
 
142
- async def _search_and_create_rest_exchange(exchange_manager) -> None:
146
+ async def _search_and_create_rest_exchange(
147
+ exchange_manager, exchange_config_by_exchange: typing.Optional[dict[str, dict]]
148
+ ) -> None:
143
149
  """
144
150
  Create a rest exchange if a RestExchange matching class is found
145
151
  :param exchange_manager: the related exchange manager
146
152
  """
147
- rest_exchange_class = exchanges.get_rest_exchange_class(exchange_manager.exchange_name,
148
- exchange_manager.tentacles_setup_config)
153
+ rest_exchange_class = exchanges.get_rest_exchange_class(
154
+ exchange_manager.exchange_name, exchange_manager.tentacles_setup_config, exchange_config_by_exchange
155
+ )
149
156
  if rest_exchange_class:
150
- exchange_manager.exchange = rest_exchange_class(config=exchange_manager.config,
151
- exchange_manager=exchange_manager)
157
+ if rest_exchange_class.HAS_FETCHED_DETAILS:
158
+ await rest_exchange_class.fetch_exchange_config(exchange_config_by_exchange, exchange_manager)
159
+ exchange_manager.exchange = rest_exchange_class(
160
+ config=exchange_manager.config, exchange_manager=exchange_manager,
161
+ exchange_config_by_exchange=exchange_config_by_exchange
162
+ )
152
163
 
153
164
 
154
165
  def _initialize_simulator_time_frames(exchange_manager):
@@ -85,8 +85,8 @@ class ExchangeManager(util.Initializable):
85
85
 
86
86
  self.debug_info = {}
87
87
 
88
- async def initialize_impl(self):
89
- await exchanges.create_exchanges(self)
88
+ async def initialize_impl(self, exchange_config_by_exchange: typing.Optional[dict[str, dict]]):
89
+ await exchanges.create_exchanges(self, exchange_config_by_exchange)
90
90
  if self.is_storage_enabled():
91
91
  await self.storage_manager.initialize()
92
92
 
@@ -306,7 +306,7 @@ class ExchangeManager(util.Initializable):
306
306
 
307
307
  def get_exchange_credentials(self, exchange_name):
308
308
  if self.ignore_config or not self.should_decrypt_token() or self.without_auth:
309
- return "", "", ""
309
+ return "", "", "", ""
310
310
  config_exchange = self.config[common_constants.CONFIG_EXCHANGES][exchange_name]
311
311
  return (
312
312
  configuration.decrypt_element_if_possible(
@@ -317,7 +317,8 @@ class ExchangeManager(util.Initializable):
317
317
  ).strip(" "), # remove leading and trailing whitespaces if any
318
318
  configuration.decrypt_element_if_possible(
319
319
  common_constants.CONFIG_EXCHANGE_PASSWORD, config_exchange, None
320
- )
320
+ ),
321
+ config_exchange.get(common_constants.CONFIG_EXCHANGE_UID, "")
321
322
  )
322
323
 
323
324
  def get_exchange_sub_account_id(self, exchange_name):
@@ -13,6 +13,8 @@
13
13
  #
14
14
  # You should have received a copy of the GNU Lesser General Public
15
15
  # License along with this library.
16
+ import typing
17
+
16
18
  import octobot_trading.constants as constants
17
19
  import octobot_trading.exchanges.util as exchange_util
18
20
  import octobot_trading.exchanges.connectors.simulator.exchange_simulator_connector as exchange_simulator_connector
@@ -22,12 +24,15 @@ import octobot_trading.exchanges.types.rest_exchange as rest_exchange
22
24
  class ExchangeSimulator(rest_exchange.RestExchange):
23
25
  DEFAULT_CONNECTOR_CLASS = exchange_simulator_connector.ExchangeSimulatorConnector
24
26
 
25
- def __init__(self, config, exchange_manager, backtesting):
27
+ def __init__(
28
+ self, config, exchange_manager, backtesting,
29
+ exchange_config_by_exchange: typing.Optional[dict[str, dict]] = None
30
+ ):
26
31
  self.backtesting = backtesting
27
32
  self.exchange_importers = []
28
33
  self.exchange_tentacle_class = None
29
34
  self.exchange_tentacle = None
30
- super().__init__(config, exchange_manager)
35
+ super().__init__(config, exchange_manager, exchange_config_by_exchange)
31
36
 
32
37
  def _create_connector(self, config, exchange_manager, connector_class):
33
38
  return (connector_class or self.DEFAULT_CONNECTOR_CLASS)(
@@ -41,7 +46,7 @@ class ExchangeSimulator(rest_exchange.RestExchange):
41
46
  await super().initialize_impl()
42
47
  self.exchange_importers = self.connector.exchange_importers
43
48
  self.exchange_tentacle_class = exchange_util.get_rest_exchange_class(
44
- self.exchange_manager.exchange_name, self.exchange_manager.tentacles_setup_config
49
+ self.exchange_manager.exchange_name, self.exchange_manager.tentacles_setup_config, None
45
50
  )
46
51
  if self.connector.should_adapt_market_statuses():
47
52
  await self._init_exchange_tentacle()
@@ -54,7 +59,7 @@ class ExchangeSimulator(rest_exchange.RestExchange):
54
59
  # initialize a locale exchange_tentacle to be able to access adapters for market statuses
55
60
  if self.exchange_tentacle_class:
56
61
  self.exchange_tentacle = self.exchange_tentacle_class(
57
- self.exchange_manager.config, self.exchange_manager
62
+ self.exchange_manager.config, self.exchange_manager, None
58
63
  )
59
64
  finally:
60
65
  self.exchange_manager.ignore_config = origin_ignore_config
@@ -108,10 +108,13 @@ class RestExchange(abstract_exchange.AbstractExchange):
108
108
 
109
109
  DEFAULT_CONNECTOR_CLASS = ccxt_connector.CCXTConnector
110
110
 
111
- def __init__(self, config, exchange_manager, connector_class=None):
112
- super().__init__(config, exchange_manager)
111
+ def __init__(
112
+ self, config, exchange_manager, exchange_config_by_exchange: typing.Optional[dict[str, dict]],
113
+ connector_class=None
114
+ ):
115
+ super().__init__(config, exchange_manager, exchange_config_by_exchange)
113
116
  if self.HAS_FETCHED_DETAILS:
114
- self._fetch_details(config, exchange_manager)
117
+ self._apply_fetched_details(config, exchange_manager)
115
118
  self.connector = self._create_connector(config, exchange_manager, connector_class)
116
119
  self.pair_contracts = {}
117
120
 
@@ -938,8 +941,14 @@ class RestExchange(abstract_exchange.AbstractExchange):
938
941
  """
939
942
  Auto fetched and filled exchanges
940
943
  """
941
- def _fetch_details(self, config, exchange_manager):
942
- raise NotImplementedError("_fetch_details is not implemented")
944
+ def _apply_fetched_details(self, config, exchange_manager):
945
+ raise NotImplementedError("_apply_fetched_details is not implemented")
946
+
947
+ @classmethod
948
+ async def fetch_exchange_config(
949
+ cls, exchange_config_by_exchange: typing.Optional[dict[str, dict]], exchange_manager
950
+ ):
951
+ raise NotImplementedError("fetch_exchange_config")
943
952
 
944
953
  @staticmethod
945
954
  def supported_autofill_exchanges(tentacle_config):
@@ -37,13 +37,20 @@ import octobot_trading.exchanges.exchange_details as exchange_details
37
37
  import octobot_trading.exchanges.exchange_builder as exchange_builder
38
38
 
39
39
 
40
- def get_rest_exchange_class(exchange_name, tentacles_setup_config):
41
- return search_exchange_class_from_exchange_name(exchanges_types.RestExchange, exchange_name, tentacles_setup_config)
40
+ def get_rest_exchange_class(
41
+ exchange_name: str, tentacles_setup_config, exchange_config_by_exchange: typing.Optional[dict[str, dict]]
42
+ ):
43
+ return search_exchange_class_from_exchange_name(
44
+ exchanges_types.RestExchange, exchange_name, tentacles_setup_config, exchange_config_by_exchange
45
+ )
42
46
 
43
47
 
44
- def search_exchange_class_from_exchange_name(exchange_class, exchange_name,
45
- tentacles_setup_config, enable_default=False):
46
- exchange_class = get_exchange_class_from_name(exchange_class, exchange_name, tentacles_setup_config, enable_default)
48
+ def search_exchange_class_from_exchange_name(
49
+ exchange_class, exchange_name, tentacles_setup_config, exchange_config_by_exchange, enable_default=False
50
+ ):
51
+ exchange_class = get_exchange_class_from_name(
52
+ exchange_class, exchange_name, tentacles_setup_config, exchange_config_by_exchange, enable_default
53
+ )
47
54
  if exchange_class is not None:
48
55
  return exchange_class
49
56
  if enable_default:
@@ -59,8 +66,10 @@ def search_exchange_class_from_exchange_name(exchange_class, exchange_name,
59
66
  return exchanges_implementations.DefaultRestExchange
60
67
 
61
68
 
62
- def get_exchange_class_from_name(exchange_parent_class, exchange_name, tentacles_setup_config,
63
- enable_default_implementation, strict_name_matching=False):
69
+ def get_exchange_class_from_name(
70
+ exchange_parent_class, exchange_name, tentacles_setup_config, exchange_config_by_exchange,
71
+ enable_default_implementation, strict_name_matching=False
72
+ ):
64
73
  for exchange_candidate in tentacles_management.get_all_classes_from_parent(exchange_parent_class):
65
74
  try:
66
75
  if _is_exchange_candidate_matching(
@@ -75,19 +84,21 @@ def get_exchange_class_from_name(exchange_parent_class, exchange_name, tentacles
75
84
  # As we are searching for an exchange_type specific subclass
76
85
  # We should ignore classes that raises NotImplementedError
77
86
  pass
78
- auto_filled_exchanges = _get_auto_filled_exchanges(tentacles_setup_config)
87
+ auto_filled_exchanges = _get_auto_filled_exchanges(tentacles_setup_config, exchange_config_by_exchange)
79
88
  if exchange_name in auto_filled_exchanges:
80
89
  return auto_filled_exchanges[exchange_name][0]
81
90
  return None
82
91
 
83
92
 
84
- def _get_auto_filled_exchanges(tentacles_setup_config):
93
+ def _get_auto_filled_exchanges(tentacles_setup_config, exchange_config_by_exchange: typing.Optional[dict[str, dict]]):
85
94
  auto_filled_exchanges = {}
86
95
  for exchange_candidate in _get_auto_filled_exchanges_tentacles():
87
96
  if tentacles_setup_config is None:
88
97
  # tentacles_setup_config is required for auto-filled exchanges
89
98
  continue
90
- config = api.get_tentacle_config(
99
+ config = exchange_config_by_exchange[exchange_candidate.get_name()] if (
100
+ exchange_config_by_exchange and exchange_candidate.get_name() in exchange_config_by_exchange
101
+ ) else api.get_tentacle_config(
91
102
  tentacles_setup_config, exchange_candidate
92
103
  )
93
104
  for exchange_name in exchange_candidate.supported_autofill_exchanges(config):
@@ -96,7 +107,7 @@ def _get_auto_filled_exchanges(tentacles_setup_config):
96
107
 
97
108
 
98
109
  def get_auto_filled_exchange_names(tentacles_setup_config):
99
- return list(_get_auto_filled_exchanges(tentacles_setup_config))
110
+ return list(_get_auto_filled_exchanges(tentacles_setup_config, None))
100
111
 
101
112
 
102
113
  def _get_auto_filled_exchanges_tentacles():
@@ -111,7 +122,7 @@ async def get_exchange_details(
111
122
  exchange_name, is_autofilled, tentacles_setup_config, aiohttp_session
112
123
  ) -> exchange_details.ExchangeDetails:
113
124
  if is_autofilled:
114
- auto_filled_exchanges = _get_auto_filled_exchanges(tentacles_setup_config)
125
+ auto_filled_exchanges = _get_auto_filled_exchanges(tentacles_setup_config, None)
115
126
  if exchange_name in auto_filled_exchanges:
116
127
  return await auto_filled_exchanges[exchange_name][0].get_autofilled_exchange_details(
117
128
  aiohttp_session, auto_filled_exchanges[exchange_name][1], exchange_name
@@ -208,7 +219,7 @@ def get_enabled_exchanges(config):
208
219
  async def get_local_exchange_manager(
209
220
  exchange_name: str, exchange_config: dict, tentacles_setup_config,
210
221
  is_sandboxed: bool, ignore_config=False, builder=None, use_cached_markets=True,
211
- is_broker_enabled: bool = False,
222
+ is_broker_enabled: bool = False, exchange_config_by_exchange: typing.Optional[dict[str, dict]] = None,
212
223
  market_filter: typing.Union[None, typing.Callable[[dict], bool]] = None
213
224
  ):
214
225
  exchange_type = exchange_config.get(common_constants.CONFIG_EXCHANGE_TYPE, get_default_exchange_type(exchange_name))
@@ -220,6 +231,7 @@ async def get_local_exchange_manager(
220
231
  .is_checking_credentials(False) \
221
232
  .is_sandboxed(is_sandboxed) \
222
233
  .is_using_exchange_type(exchange_type) \
234
+ .use_exchange_config_by_exchange(exchange_config_by_exchange) \
223
235
  .is_exchange_only() \
224
236
  .is_rest_only() \
225
237
  .is_broker_enabled(is_broker_enabled) \
@@ -344,9 +356,10 @@ def get_default_exchange_type(exchange_name):
344
356
  return common_constants.DEFAULT_EXCHANGE_TYPE
345
357
 
346
358
 
347
- def get_supported_exchange_types(exchange_name, tentacles_setup_config):
359
+ def get_supported_exchange_types(exchange_name, tentacles_setup_config, exchange_config_by_exchange=None):
348
360
  exchange_class = get_exchange_class_from_name(
349
- exchanges_types.RestExchange, exchange_name, tentacles_setup_config, False, strict_name_matching=True
361
+ exchanges_types.RestExchange, exchange_name, tentacles_setup_config,
362
+ exchange_config_by_exchange, False, strict_name_matching=True
350
363
  )
351
364
  if exchange_class is None:
352
365
  # default
@@ -179,6 +179,13 @@ class AbstractTradingMode(abstract_tentacle.AbstractTentacle):
179
179
  """
180
180
  return True
181
181
 
182
+ @classmethod
183
+ def is_ignoring_cancelled_orders_trades(cls) -> bool:
184
+ """
185
+ :return: True if trades created by cancelled orders should be ignored and not stored in trades manager
186
+ """
187
+ return False
188
+
182
189
  @classmethod
183
190
  def get_parent_trading_mode_classes(cls, higher_parent_class_limit=None) -> list:
184
191
  return [