OctoBot-Trading 2.4.14__tar.gz → 2.4.16__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 (467) hide show
  1. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/CHANGELOG.md +10 -0
  2. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/OctoBot_Trading.egg-info/SOURCES.txt +1 -0
  4. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/OctoBot_Trading.egg-info/requires.txt +1 -1
  5. {OctoBot-Trading-2.4.14/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.16}/PKG-INFO +2 -2
  6. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/README.md +1 -1
  7. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/__init__.py +1 -1
  8. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/config/exchange_config_data.py +3 -2
  9. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +7 -0
  10. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +1 -4
  11. OctoBot-Trading-2.4.16/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +23 -0
  12. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +33 -2
  13. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/exchange_builder.py +8 -3
  14. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/exchange_manager.py +1 -1
  15. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/implementations/exchange_simulator.py +13 -0
  16. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/types/rest_exchange.py +17 -0
  17. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/util/exchange_util.py +5 -3
  18. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/order_util.py +1 -0
  19. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +12 -2
  20. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/portfolio_manager.py +2 -1
  21. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/test_tools/exchanges_test_tools.py +16 -4
  22. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/requirements.txt +1 -1
  23. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +11 -4
  24. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/LICENSE +0 -0
  25. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/MANIFEST.in +0 -0
  26. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  27. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  28. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  29. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/__init__.py +0 -0
  30. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/channels.py +0 -0
  31. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/contracts.py +0 -0
  32. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/exchange.py +0 -0
  33. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/modes.py +0 -0
  34. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/orders.py +0 -0
  35. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/portfolio.py +0 -0
  36. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/positions.py +0 -0
  37. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/profitability.py +0 -0
  38. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/storage.py +0 -0
  39. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/symbol_data.py +0 -0
  40. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/trader.py +0 -0
  41. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/trades.py +0 -0
  42. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/constants.py +0 -0
  43. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/enums.py +0 -0
  44. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/errors.py +0 -0
  45. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_channel.py +0 -0
  46. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/__init__.py +0 -0
  47. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  48. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  49. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  50. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  51. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  52. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  53. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  54. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  55. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  56. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  57. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  58. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  59. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  60. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  61. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  62. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  63. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  64. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  65. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  66. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  67. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  68. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  69. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  70. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  71. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  72. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  73. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  74. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  75. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  76. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  77. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  78. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  79. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  80. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  81. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  82. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  83. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  84. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  85. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  86. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  87. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  88. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  89. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  90. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  91. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  92. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  93. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  94. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  95. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  96. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  97. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  98. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/__init__.py +0 -0
  99. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  100. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  101. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  102. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  103. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/config/__init__.py +0 -0
  104. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  105. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  106. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  107. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
  108. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  109. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  110. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  111. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  112. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  113. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/exchange_channels.py +0 -0
  114. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/exchange_details.py +0 -0
  115. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/exchange_factory.py +0 -0
  116. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  117. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/exchanges.py +0 -0
  118. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  119. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  120. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  121. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/traders/__init__.py +0 -0
  122. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/traders/trader.py +0 -0
  123. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  124. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/types/__init__.py +0 -0
  125. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  126. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/util/__init__.py +0 -0
  127. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  128. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  129. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/__init__.py +0 -0
  130. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/abstract_trading_mode.py +0 -0
  131. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/channel/__init__.py +0 -0
  132. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  133. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  134. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/channel/mode.py +0 -0
  135. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/mode_config.py +0 -0
  136. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/modes_factory.py +0 -0
  137. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/modes_util.py +0 -0
  138. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  139. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  140. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  141. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  142. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  143. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  144. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  145. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  146. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  147. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  148. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  149. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  150. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  151. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  152. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/octobot_channel_consumer.py +0 -0
  153. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/__init__.py +0 -0
  154. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  155. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/__init__.py +0 -0
  156. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  157. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  158. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  159. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  160. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  161. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  162. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  163. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  164. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  165. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/order.py +0 -0
  166. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  167. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  168. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/order_group.py +0 -0
  169. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/order_state.py +0 -0
  170. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  171. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  172. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  173. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  174. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  175. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  176. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  177. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  178. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  179. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  180. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  181. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  182. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  183. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  184. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  185. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  186. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  187. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  188. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  189. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  190. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  191. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  192. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  193. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  194. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  195. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  196. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  197. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  198. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  199. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  200. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  201. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  202. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  203. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  204. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  205. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  206. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  207. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  208. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  209. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  210. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  211. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  212. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  213. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  214. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  215. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  216. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  217. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  218. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  219. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  220. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  221. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  222. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/__init__.py +0 -0
  223. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  224. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  225. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  226. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  227. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/position.py +0 -0
  228. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  229. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/position_state.py +0 -0
  230. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/position_util.py +0 -0
  231. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  232. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  233. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  234. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  235. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  236. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  237. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  238. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  239. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  240. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/state.py +0 -0
  241. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/__init__.py +0 -0
  242. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  243. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  244. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  245. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/trade.py +0 -0
  246. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  247. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  248. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  249. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  250. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  251. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  252. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  253. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  254. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  255. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  256. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  257. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  258. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  259. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/signals/__init__.py +0 -0
  260. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/signals/channel/__init__.py +0 -0
  261. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  262. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  263. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/signals/channel/signal_producer.py +0 -0
  264. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/signals/signal_creation.py +0 -0
  265. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  266. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/signals/util.py +0 -0
  267. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/__init__.py +0 -0
  268. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/abstract_storage.py +0 -0
  269. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/candles_storage.py +0 -0
  270. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/orders_storage.py +0 -0
  271. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/portfolio_storage.py +0 -0
  272. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/storage_manager.py +0 -0
  273. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/trades_storage.py +0 -0
  274. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/transactions_storage.py +0 -0
  275. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/util.py +0 -0
  276. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/supervisors/__init__.py +0 -0
  277. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  278. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  279. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/__init__.py +0 -0
  280. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/config_util.py +0 -0
  281. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/initializable.py +0 -0
  282. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/initialization_util.py +0 -0
  283. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/simulator_updater_utils.py +0 -0
  284. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/test_tools/__init__.py +0 -0
  285. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  286. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  287. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  288. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/setup.cfg +0 -0
  289. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/setup.py +0 -0
  290. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/__init__.py +0 -0
  291. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_channels.py +0 -0
  292. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_exchange.py +0 -0
  293. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_modes.py +0 -0
  294. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_orders.py +0 -0
  295. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_portfolio.py +0 -0
  296. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_profitability.py +0 -0
  297. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_symbol_data.py +0 -0
  298. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_trader.py +0 -0
  299. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_trades.py +0 -0
  300. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/cli/__init__.py +0 -0
  301. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/__init__.py +0 -0
  302. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/contracts/__init__.py +0 -0
  303. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  304. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  305. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/funding/__init__.py +0 -0
  306. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  307. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/kline/__init__.py +0 -0
  308. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  309. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/ohlcv/__init__.py +0 -0
  310. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  311. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  312. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/order_book/__init__.py +0 -0
  313. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  314. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/prices/__init__.py +0 -0
  315. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  316. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  317. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/recent_trades/__init__.py +0 -0
  318. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  319. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  320. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/ticker/__init__.py +0 -0
  321. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  322. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/__init__.py +0 -0
  323. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/connectors/__init__.py +0 -0
  324. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  325. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  326. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  327. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/implementations/__init__.py +0 -0
  328. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  329. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  330. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/test_abstract_exchange.py +0 -0
  331. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  332. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/test_exchange_builder.py +0 -0
  333. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/test_exchange_config_data.py +0 -0
  334. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/test_exchange_factory.py +0 -0
  335. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/test_exchange_manager.py +0 -0
  336. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/test_exchange_simulator.py +0 -0
  337. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/test_exchanges.py +0 -0
  338. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/traders/__init__.py +0 -0
  339. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/traders/test_trader.py +0 -0
  340. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/types/__init__.py +0 -0
  341. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  342. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/util/__init__.py +0 -0
  343. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  344. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/util/test_exchange_util.py +0 -0
  345. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/__init__.py +0 -0
  346. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/script_keywords/__init__.py +0 -0
  347. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  348. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  349. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  350. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  351. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  352. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/test_abstract_mode_consumer.py +0 -0
  353. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/test_abstract_trading_mode.py +0 -0
  354. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/__init__.py +0 -0
  355. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/__init__.py +0 -0
  356. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/groups/__init__.py +0 -0
  357. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  358. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  359. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  360. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/__init__.py +0 -0
  361. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  362. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  363. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  364. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  365. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/test_order_state.py +0 -0
  366. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  367. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  368. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  369. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  370. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  371. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/test_order.py +0 -0
  372. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/test_order_adapter.py +0 -0
  373. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/test_order_factory.py +0 -0
  374. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/test_order_util.py +0 -0
  375. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/test_orders_manager.py +0 -0
  376. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  377. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/__init__.py +0 -0
  378. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  379. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  380. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  381. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  382. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  383. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  384. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  385. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/market/__init__.py +0 -0
  386. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  387. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  388. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  389. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  390. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  391. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  392. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/__init__.py +0 -0
  393. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  394. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  395. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  396. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  397. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/history/__init__.py +0 -0
  398. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  399. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/test_asset.py +0 -0
  400. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  401. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  402. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  403. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  404. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  405. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/types/__init__.py +0 -0
  406. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  407. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  408. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  409. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/__init__.py +0 -0
  410. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/channel/__init__.py +0 -0
  411. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/states/__init__.py +0 -0
  412. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/test_position.py +0 -0
  413. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/test_position_factory.py +0 -0
  414. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/test_positions_manager.py +0 -0
  415. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/types/__init__.py +0 -0
  416. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  417. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  418. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/trades/__init__.py +0 -0
  419. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/trades/test_trade_factory.py +0 -0
  420. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/trades/test_trade_manager.py +0 -0
  421. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  422. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/transactions/__init__.py +0 -0
  423. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  424. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  425. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/signals/__init__.py +0 -0
  426. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  427. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/signals/test_util.py +0 -0
  428. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/test_utils/__init__.py +0 -0
  429. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/test_utils/order_util.py +0 -0
  430. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/test_utils/random_numbers.py +0 -0
  431. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/util/__init__.py +0 -0
  432. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/util/test_config_util.py +0 -0
  433. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/__init__.py +0 -0
  434. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/__init__.py +0 -0
  435. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
  436. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  437. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  438. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_binance.py +0 -0
  439. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  440. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  441. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_bitget.py +0 -0
  442. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  443. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_bitso.py +0 -0
  444. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  445. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_bittrex.py +0 -0
  446. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_bybit.py +0 -0
  447. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  448. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  449. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_coinex.py +0 -0
  450. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  451. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_gateio.py +0 -0
  452. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  453. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  454. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_huobi.py +0 -0
  455. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_huobipro.py +0 -0
  456. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_kraken.py +0 -0
  457. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  458. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  459. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_mexc.py +0 -0
  460. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_ndax.py +0 -0
  461. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  462. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_okx.py +0 -0
  463. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  464. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_phemex.py +0 -0
  465. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  466. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_upbit.py +0 -0
  467. {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,16 @@ 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.16] - 2023-08-14
8
+ ### Fixed
9
+ - [Exchanges] unwanted market status load
10
+
11
+ ## [2.4.15] - 2023-08-14
12
+ ### Updated
13
+ - [Backtesting] handle forced market statuses
14
+ ### Fixed
15
+ - [Exchanges] randomness in symbols processing
16
+
7
17
  ## [2.4.14] - 2023-08-07
8
18
  ### Updated
9
19
  - [PortfolioStorage] update profitability
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.14
3
+ Version: 2.4.16
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.14](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.16](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)
@@ -105,6 +105,7 @@ octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py
105
105
  octobot_trading/exchanges/connectors/ccxt/constants.py
106
106
  octobot_trading/exchanges/connectors/ccxt/enums.py
107
107
  octobot_trading/exchanges/connectors/simulator/__init__.py
108
+ octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py
108
109
  octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py
109
110
  octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py
110
111
  octobot_trading/exchanges/implementations/__init__.py
@@ -3,7 +3,7 @@ OctoBot-Backtesting<1.10,>=1.9
3
3
  Async-Channel<2.3,>=2.2
4
4
  OctoBot-Commons<1.10,>=1.9
5
5
  OctoBot-Tentacles-Manager<2.10,>=2.9
6
- trading-backend>=1.2.3
6
+ trading-backend>=1.2.7
7
7
  ccxt==3.1.52
8
8
  cryptography
9
9
  sortedcontainers==2.4.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.14
3
+ Version: 2.4.16
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.14](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.16](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.14](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.16](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.14" # major.minor.revision
18
+ VERSION = "2.4.16" # major.minor.revision
@@ -169,10 +169,11 @@ class ExchangeConfig(util.Initializable):
169
169
  traded_symbol_pairs_set = self._set_config_traded_pair(cryptocurrency,
170
170
  traded_symbol_pairs_set,
171
171
  existing_pairs)
172
- self.traded_symbol_pairs = list(traded_symbol_pairs_set)
172
+ # sort lists to avoid set insert randomness issues
173
+ self.traded_symbol_pairs = sorted(list(traded_symbol_pairs_set))
173
174
  self.traded_symbols = [
174
175
  octobot_commons.symbols.parse_symbol(symbol)
175
- for symbol in traded_symbol_pairs_set
176
+ for symbol in self.traded_symbol_pairs
176
177
  ]
177
178
 
178
179
  # only add self.traded_symbol_pairs to watched pairs as not every existing_pairs are being collected
@@ -104,6 +104,13 @@ def set_sandbox_mode(exchange_connector, is_sandboxed):
104
104
  return None
105
105
 
106
106
 
107
+ def set_markets_from_forced_markets(client, forced_markets: list):
108
+ client.set_markets([
109
+ client.parse_market(market) if hasattr(client, "parse_market") else market
110
+ for market in forced_markets
111
+ ])
112
+
113
+
107
114
  def get_ccxt_client_login_options(exchange_manager):
108
115
  """
109
116
  :return: ccxt client login option dict, can be overwritten to custom exchange login
@@ -114,10 +114,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
114
114
  if forced_markets is not None:
115
115
  if forced_markets:
116
116
  # only set markets if there are markets to be set
117
- self.client.set_markets([
118
- self.client.parse_market(market) if hasattr(self.client, "parse_market") else market
119
- for market in forced_markets
120
- ])
117
+ ccxt_client_util.set_markets_from_forced_markets(self.client, forced_markets)
121
118
  else:
122
119
  try:
123
120
  await self.client.load_markets(reload=reload)
@@ -0,0 +1,23 @@
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 ccxt.async_support
17
+ import octobot_trading.exchanges.connectors.ccxt.ccxt_client_util as ccxt_client_util
18
+
19
+
20
+ def parse_markets(exchange_name, forced_markets: list) -> dict:
21
+ client = getattr(ccxt.async_support, exchange_name)()
22
+ ccxt_client_util.set_markets_from_forced_markets(client, forced_markets)
23
+ return client.markets
@@ -26,8 +26,10 @@ import octobot_commons.constants as commons_constants
26
26
  import octobot_trading.exchange_channel as exchange_channel
27
27
  import octobot_trading.constants as constants
28
28
  import octobot_trading.enums as enums
29
+ import octobot_trading.errors as errors
29
30
  import octobot_trading.exchanges.abstract_exchange as abstract_exchange
30
31
  import octobot_trading.exchanges.connectors.simulator.exchange_simulator_adapter as exchange_simulator_adapter
32
+ import octobot_trading.exchanges.connectors.simulator.ccxt_client_simulation as ccxt_client_simulation
31
33
  import octobot_trading.exchange_data as exchange_data
32
34
  import octobot_trading.exchanges.util as util
33
35
 
@@ -44,6 +46,7 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
44
46
  self.current_future_candles = {}
45
47
 
46
48
  self.is_authenticated = False
49
+ self._forced_market_statuses: dict = None
47
50
 
48
51
  async def initialize_impl(self):
49
52
  self.exchange_importers = self.backtesting.get_importers(importers.ExchangeDataImporter)
@@ -61,9 +64,22 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
61
64
  # set exchange manager attributes
62
65
  self.exchange_manager.client_symbols = list(self.symbols)
63
66
 
67
+ # init _forced_market_statuses when available
68
+ if self.exchange_manager.forced_markets is not None:
69
+ self._init_forced_market_statuses(self.exchange_manager.forced_markets)
70
+
64
71
  def get_adapter_class(self, adapter_class):
65
72
  return adapter_class or exchange_simulator_adapter.ExchangeSimulatorAdapter
66
73
 
74
+ def _init_forced_market_statuses(self, forced_markets):
75
+ self._forced_market_statuses = ccxt_client_simulation.parse_markets(
76
+ self.exchange_manager.exchange_class_string,
77
+ forced_markets
78
+ )
79
+
80
+ def should_adapt_market_statuses(self) -> bool:
81
+ return bool(self.exchange_manager.forced_markets)
82
+
67
83
  @classmethod
68
84
  def load_user_inputs_from_class(cls, tentacles_setup_config, tentacle_config):
69
85
  # no user input in connector
@@ -125,6 +141,18 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
125
141
  return [backtesting_api.get_data_file_path(importer) for importer in self.exchange_importers]
126
142
 
127
143
  def get_market_status(self, symbol, price_example=0, with_fixer=True):
144
+ if self._forced_market_statuses:
145
+ try:
146
+ if with_fixer:
147
+ return util.ExchangeMarketStatusFixer(
148
+ self._forced_market_statuses[symbol], price_example
149
+ ).market_status
150
+ return self._forced_market_statuses[symbol]
151
+ except KeyError:
152
+ raise errors.NotSupported
153
+ return self._get_default_market_status()
154
+
155
+ def _get_default_market_status(self):
128
156
  return {
129
157
  # number of decimal digits "after the dot"
130
158
  enums.ExchangeConstantsMarketStatusColumns.PRECISION.value: {
@@ -199,8 +227,11 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
199
227
  currency, market = symbol_util.parse_symbol(symbol).base_and_quote()
200
228
  fee_currency = currency
201
229
 
202
- precision = self.get_market_status(symbol)[enums.ExchangeConstantsMarketStatusColumns.PRECISION.value] \
203
- [enums.ExchangeConstantsMarketStatusColumns.PRECISION_PRICE.value]
230
+ precision = self.get_market_status(
231
+ symbol, with_fixer=False
232
+ )[enums.ExchangeConstantsMarketStatusColumns.PRECISION.value][
233
+ enums.ExchangeConstantsMarketStatusColumns.PRECISION_PRICE.value
234
+ ]
204
235
  cost = float(number_util.round_into_str_with_max_digits(float(quantity) * rate, precision))
205
236
 
206
237
  if util.get_order_side(order_type) == enums.TradeOrderSide.SELL.value:
@@ -34,6 +34,7 @@ class ExchangeBuilder:
34
34
 
35
35
  self._is_using_trading_modes: bool = True
36
36
  self._matrix_id: str = None
37
+ self.trading_config_by_trading_mode: dict = None
37
38
 
38
39
  async def build(self):
39
40
  """
@@ -115,7 +116,7 @@ class ExchangeBuilder:
115
116
  else:
116
117
  self.logger.info(f"{self.exchange_name} exchange is online and won't be trading")
117
118
 
118
- async def _build_trading_modes(self, trading_mode_class, trading_config_by_trading_mode=None):
119
+ async def _build_trading_modes(self, trading_mode_class):
119
120
  try:
120
121
  self._ensure_trading_mode_compatibility(trading_mode_class)
121
122
  return await modes.create_trading_modes(
@@ -123,7 +124,7 @@ class ExchangeBuilder:
123
124
  self.exchange_manager,
124
125
  trading_mode_class,
125
126
  self.exchange_manager.bot_id,
126
- trading_config_by_trading_mode=trading_config_by_trading_mode
127
+ trading_config_by_trading_mode=self.trading_config_by_trading_mode
127
128
  )
128
129
  except errors.TradingModeIncompatibility as e:
129
130
  raise e
@@ -214,7 +215,7 @@ class ExchangeBuilder:
214
215
  self.exchange_manager.exchange_only = True
215
216
  return self
216
217
 
217
- def has_forced_markets(self, forced_markets: dict):
218
+ def has_forced_markets(self, forced_markets: list):
218
219
  self.exchange_manager.forced_markets = forced_markets
219
220
  return self
220
221
 
@@ -246,6 +247,10 @@ class ExchangeBuilder:
246
247
  self._matrix_id = matrix_id
247
248
  return self
248
249
 
250
+ def use_trading_config_by_trading_mode(self, trading_config_by_trading_mode):
251
+ self.trading_config_by_trading_mode = trading_config_by_trading_mode
252
+ return self
253
+
249
254
 
250
255
  def create_exchange_builder_instance(config, exchange_name):
251
256
  return ExchangeBuilder(config, exchange_name)
@@ -47,7 +47,7 @@ class ExchangeManager(util.Initializable):
47
47
  self.is_backtesting: bool = False
48
48
  self.rest_only: bool = False
49
49
  self.ignore_config: bool = False
50
- self.forced_markets: dict = None
50
+ self.forced_markets: list = None
51
51
  self.is_spot_only: bool = False
52
52
  self.is_margin: bool = False
53
53
  self.is_future: bool = False
@@ -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 octobot_trading.constants as constants
17
+ import octobot_trading.exchanges.util as exchange_util
17
18
  import octobot_trading.exchanges.connectors.simulator.exchange_simulator_connector as exchange_simulator_connector
18
19
  import octobot_trading.exchanges.types.rest_exchange as rest_exchange
19
20
 
@@ -36,6 +37,7 @@ class ExchangeSimulator(rest_exchange.RestExchange):
36
37
 
37
38
  async def initialize_impl(self):
38
39
  await super().initialize_impl()
40
+ self._set_market_status_params()
39
41
  self.exchange_importers = self.connector.exchange_importers
40
42
 
41
43
  async def stop(self) -> None:
@@ -43,6 +45,17 @@ class ExchangeSimulator(rest_exchange.RestExchange):
43
45
  self.backtesting = None
44
46
  self.exchange_importers = None
45
47
 
48
+ def _set_market_status_params(self):
49
+ params_source = rest_exchange.RestExchange
50
+ if self.connector.should_adapt_market_statuses():
51
+ params_source = exchange_util.get_rest_exchange_class(
52
+ self.exchange_manager.exchange_name, None
53
+ ) or params_source
54
+ # update params
55
+ self.FIX_MARKET_STATUS = params_source.FIX_MARKET_STATUS
56
+ self.REMOVE_MARKET_STATUS_PRICE_LIMITS = params_source.REMOVE_MARKET_STATUS_PRICE_LIMITS
57
+ self.ADAPT_MARKET_STATUS_FOR_CONTRACT_SIZE = params_source.ADAPT_MARKET_STATUS_FOR_CONTRACT_SIZE
58
+
46
59
  @classmethod
47
60
  def is_supporting_exchange(cls, exchange_candidate_name) -> bool:
48
61
  return exchange_simulator_connector.ExchangeSimulatorConnector.is_supporting_exchange(exchange_candidate_name)
@@ -43,6 +43,12 @@ class RestExchange(abstract_exchange.AbstractExchange):
43
43
  ecoc.SIDE.value, ecoc.PRICE.value, ecoc.AMOUNT.value, ecoc.STATUS.value]
44
44
  ORDER_REQUIRED_FIELDS = ORDER_NON_EMPTY_FIELDS + [ecoc.REMAINING.value]
45
45
  PRINT_DEBUG_LOGS = False
46
+ FIX_MARKET_STATUS = False # set True when get_fixed_market_status should be called when calling get_market_status
47
+ # set True when get_fixed_market_status should be remove price limits (when limits are invalid)
48
+ REMOVE_MARKET_STATUS_PRICE_LIMITS = False
49
+ # set True when get_fixed_market_status should adapt amounts for contract size
50
+ # (amounts are in not kept as contract size with OctoBot)
51
+ ADAPT_MARKET_STATUS_FOR_CONTRACT_SIZE = False
46
52
  REQUIRE_ORDER_FEES_FROM_TRADES = False # set True when get_order is not giving fees on closed orders and fees
47
53
  # should be fetched using recent trades.
48
54
  REQUIRE_CLOSED_ORDERS_FROM_RECENT_TRADES = False # set True when get_closed_orders is not supported
@@ -357,6 +363,14 @@ class RestExchange(abstract_exchange.AbstractExchange):
357
363
  """
358
364
  Override using get_fixed_market_status in exchange tentacle if the default market status is not as expected
359
365
  """
366
+ if self.FIX_MARKET_STATUS:
367
+ return self.get_fixed_market_status(
368
+ symbol,
369
+ price_example=price_example,
370
+ with_fixer=with_fixer,
371
+ remove_price_limits=self.REMOVE_MARKET_STATUS_PRICE_LIMITS,
372
+ adapt_for_contract_size=self.ADAPT_MARKET_STATUS_FOR_CONTRACT_SIZE
373
+ )
360
374
  return self.connector.get_market_status(symbol, price_example=price_example, with_fixer=with_fixer)
361
375
 
362
376
  def get_fixed_market_status(self, symbol, price_example=None, with_fixer=True, remove_price_limits=False,
@@ -424,6 +438,9 @@ class RestExchange(abstract_exchange.AbstractExchange):
424
438
  enums.ExchangeConstantsMarketStatusColumns.PRECISION_AMOUNT.value] = \
425
439
  number_util.get_digits_count(float_size)
426
440
 
441
+ async def get_account_id(self, **kwargs: dict) -> str:
442
+ raise NotImplementedError(f"get_account_id is not implemented on {self.exchange_manager.exchange_name}")
443
+
427
444
  async def get_balance(self, **kwargs: dict):
428
445
  return await self.connector.get_balance(**kwargs)
429
446
 
@@ -216,7 +216,7 @@ async def get_local_exchange_manager(
216
216
  .is_using_exchange_type(exchange_type) \
217
217
  .is_exchange_only() \
218
218
  .is_rest_only() \
219
- .has_forced_markets(forced_markets or {}) \
219
+ .has_forced_markets(forced_markets or []) \
220
220
  .is_ignoring_config(ignore_config) \
221
221
  .disable_trading_mode() \
222
222
  .build()
@@ -242,7 +242,7 @@ async def is_compatible_account(exchange_name: str, exchange_config: dict, tenta
242
242
  ) as local_exchange_manager:
243
243
  backend = trading_backend.exchange_factory.create_exchange_backend(local_exchange_manager.exchange)
244
244
  try:
245
- is_compatible, error = await backend.is_valid_account()
245
+ is_compatible, error = await backend.is_valid_account(always_check_key_rights=True)
246
246
  if not local_exchange_manager.is_spot_only:
247
247
  message = f"Future trading on {exchange_name.capitalize()} requires a supporting account. {error}." \
248
248
  f"Please create a new {exchange_name.capitalize()} account to use futures trading. "
@@ -255,13 +255,15 @@ async def is_compatible_account(exchange_name: str, exchange_config: dict, tenta
255
255
  return False, False, _get_time_sync_error_message(exchange_name, "backend.is_valid_account")
256
256
  except trading_backend.ExchangeAuthError:
257
257
  return False, False, f"Invalid {exchange_name.capitalize()} authentication details"
258
+ except trading_backend.APIKeyPermissionsError as err:
259
+ return False, False, f"Please update your API Key permissions: {err}"
258
260
  except (AttributeError, Exception) as e:
259
261
  return True, False, f"Error when loading exchange account: {e}"
260
262
 
261
263
 
262
264
  async def get_historical_ohlcv(
263
265
  local_exchange_manager, symbol, time_frame, start_time, end_time,
264
- request_retry_timeout=constants.HISTORICAL_CANDLES_FETCH_DEFAULT_TIMEOUT
266
+ request_retry_timeout=constants.HISTORICAL_CANDLES_FETCH_DEFAULT_TIMEOUT
265
267
  ):
266
268
  """
267
269
  Async generator, use as follows:
@@ -399,6 +399,7 @@ async def create_as_chained_order(order):
399
399
  order.status = enums.OrderStatus.OPEN
400
400
  # set uninitialized to allow second initialization from create_order
401
401
  order.is_initialized = False
402
+ order.creation_time = order.exchange_manager.exchange.get_exchange_current_time()
402
403
  await order.trader.create_order(
403
404
  order,
404
405
  loaded=False,
@@ -61,7 +61,15 @@ class HistoricalPortfolioValueManager(util.Initializable):
61
61
  )
62
62
  self.data_source = data_source or self.__class__.DEFAULT_DATA_SOURCE
63
63
  self.version = version or self.__class__.DEFAULT_DATA_VERSION
64
- self.starting_time = self.portfolio_manager.exchange_manager.exchange.get_exchange_current_time()
64
+ try:
65
+ self.starting_time = self.portfolio_manager.exchange_manager.exchange.get_exchange_current_time()
66
+ except AttributeError:
67
+ if self.portfolio_manager.exchange_manager.is_backtesting and \
68
+ not self.portfolio_manager.exchange_manager.exchange.connector.exchange_importers:
69
+ # Can happen on backtesting without datafiles (used in particular setups). Only this case is acceptable
70
+ self.starting_time = 0
71
+ else:
72
+ raise
65
73
  self.last_update_time = self.starting_time
66
74
  self.starting_portfolio = None
67
75
  self.historical_ending_portfolio = None
@@ -75,7 +83,9 @@ class HistoricalPortfolioValueManager(util.Initializable):
75
83
  """
76
84
  Reset the portfolio instance
77
85
  """
78
- await self._reload_historical_portfolio_value()
86
+ # don't load any previous portfolio value on backtesting
87
+ if not self.portfolio_manager.exchange_manager.is_backtesting:
88
+ await self._reload_historical_portfolio_value()
79
89
 
80
90
  async def reset_history(self):
81
91
  self.starting_time = self.portfolio_manager.exchange_manager.exchange.get_exchange_current_time()
@@ -52,7 +52,8 @@ class PortfolioManager(util.Initializable):
52
52
  Reset the portfolio instance
53
53
  """
54
54
 
55
- if self.exchange_manager.is_storage_enabled() and self.historical_portfolio_value_manager is None:
55
+ if (self.exchange_manager.is_storage_enabled() or self.exchange_manager.is_backtesting) \
56
+ and self.historical_portfolio_value_manager is None:
56
57
  self.historical_portfolio_value_manager = personal_data.HistoricalPortfolioValueManager(self)
57
58
  await self.historical_portfolio_value_manager.initialize()
58
59
  self.set_forced_portfolio_initial_config(
@@ -15,6 +15,7 @@
15
15
  # License along with this library.
16
16
  import asyncio
17
17
  import decimal
18
+ import time
18
19
 
19
20
  import octobot_commons.asyncio_tools as asyncio_tools
20
21
  import octobot_commons.enums as common_enums
@@ -29,6 +30,9 @@ import octobot_trading.personal_data as personal_data
29
30
  import octobot_trading.util.test_tools.exchange_data as exchange_data_import
30
31
 
31
32
 
33
+ BASE_TIMEOUT = 10
34
+
35
+
32
36
  async def create_test_exchange_manager(
33
37
  config: dict,
34
38
  exchange_name: str,
@@ -79,11 +83,20 @@ def _update_symbol_market(exchange_manager, market_details: exchange_data_import
79
83
 
80
84
  async def add_symbols_details(
81
85
  exchange_manager, symbols: list, time_frame: str, exchange_data: exchange_data_import.ExchangeData,
82
- history_size=1, forced_markets=None
86
+ history_size=1, forced_markets=None, start_time=0, end_time=0
83
87
  ) -> exchange_data_import.ExchangeData:
84
88
  parsed_tf = common_enums.TimeFrames(time_frame)
89
+
85
90
  async def _update_ohlcv(symbol):
86
- ohlcvs = await exchange_manager.exchange.get_symbol_prices(symbol, parsed_tf, limit=history_size)
91
+ if start_time == 0:
92
+ ohlcvs = await exchange_manager.exchange.get_symbol_prices(symbol, parsed_tf, limit=history_size)
93
+ else:
94
+ ohlcvs = []
95
+ async for ohlcv in exchanges.get_historical_ohlcv(
96
+ exchange_manager, symbol, parsed_tf, start_time * 1000, (end_time or time.time()) * 1000,
97
+ request_retry_timeout=BASE_TIMEOUT
98
+ ):
99
+ ohlcvs.extend(ohlcv)
87
100
  details = exchange_data_import.MarketDetails(
88
101
  symbol=symbol,
89
102
  time_frame=time_frame,
@@ -155,10 +168,9 @@ async def create_orders(exchange_manager, exchange_data: exchange_data_import.Ex
155
168
  current_price=decimal.Decimal(str(exchange_data.get_price(symbol))),
156
169
  reduce_only=order_dict[enums.ExchangeConstantsOrderColumns.REDUCE_ONLY.value],
157
170
  )
158
- # created_order = order_dict
159
171
  # is private, to use in tests context only
160
172
  return personal_data.create_order_instance_from_raw(
161
173
  exchange_manager.trader, created_order, force_open_or_pending_creation=True
162
- )
174
+ ) if created_order else None
163
175
 
164
176
  return await asyncio.gather(*(_create_order(order_dict) for order_dict in orders))
@@ -5,7 +5,7 @@ OctoBot-Backtesting>=1.9, <1.10
5
5
  Async-Channel>=2.2, <2.3
6
6
  OctoBot-Commons>=1.9, <1.10
7
7
  OctoBot-Tentacles-Manager>=2.9, <2.10
8
- trading-backend>=1.2.3
8
+ trading-backend>=1.2.7
9
9
 
10
10
  # Exchange connection requirements
11
11
  ccxt==3.1.52 # always ensure real exchanges tests (in tests_additional and authenticated exchange tests) are passing before changing the ccxt version
@@ -53,13 +53,20 @@ async def test_initialize(historical_portfolio_value_manager):
53
53
  await historical_portfolio_value_manager.initialize()
54
54
  assert historical_portfolio_value_manager.historical_portfolio_value == sortedcontainers.SortedDict()
55
55
 
56
- if os.getenv('CYTHON_IGNORE'):
57
- return
58
56
  with mock.patch.object(historical_portfolio_value_manager, "_reload_historical_portfolio_value", mock.AsyncMock()) \
59
- as _reload_historical_portfolio_value_mock:
57
+ as _reload_historical_portfolio_value_mock:
60
58
  historical_portfolio_value_manager.is_initialized = False
61
59
  await historical_portfolio_value_manager.initialize()
62
- _reload_historical_portfolio_value_mock.assert_called_once()
60
+ _reload_historical_portfolio_value_mock.assert_not_called()
61
+
62
+ try:
63
+ historical_portfolio_value_manager.portfolio_manager.exchange_manager.is_backtesting = False
64
+ historical_portfolio_value_manager.is_initialized = False
65
+ await historical_portfolio_value_manager.initialize()
66
+ _reload_historical_portfolio_value_mock.assert_called_once()
67
+ finally:
68
+ # restore value
69
+ historical_portfolio_value_manager.portfolio_manager.exchange_manager.is_backtesting = True
63
70
 
64
71
 
65
72
  async def test_on_new_value(historical_portfolio_value_manager):