OctoBot-Trading 2.4.98__tar.gz → 2.4.100__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.98 → OctoBot-Trading-2.4.100}/CHANGELOG.md +12 -0
  2. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/OctoBot_Trading.egg-info/requires.txt +1 -1
  4. {OctoBot-Trading-2.4.98/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.100}/PKG-INFO +2 -2
  5. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/README.md +1 -1
  6. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/__init__.py +1 -1
  7. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/api/exchange.py +2 -3
  8. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/api/portfolio.py +2 -1
  9. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/constants.py +8 -3
  10. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/abstract_exchange.py +4 -1
  11. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/abstract_websocket_exchange.py +2 -2
  12. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +24 -0
  13. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +6 -4
  14. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/exchange_builder.py +7 -2
  15. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/exchange_manager.py +3 -2
  16. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/exchanges.py +12 -0
  17. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/types/rest_exchange.py +2 -2
  18. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/abstract_trading_mode.py +3 -3
  19. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/mode_config.py +7 -5
  20. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/octobot_channel_consumer.py +10 -0
  21. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +27 -5
  22. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/value_converter.py +2 -6
  23. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/storage/abstract_storage.py +1 -2
  24. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/storage/orders_storage.py +19 -9
  25. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/storage/portfolio_storage.py +64 -25
  26. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/requirements.txt +1 -2
  27. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/__init__.py +2 -2
  28. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +12 -1
  29. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/real_exchange_tester.py +17 -0
  30. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_ascendex.py +3 -0
  31. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_binance.py +4 -0
  32. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_binance_futures.py +3 -0
  33. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_bingx.py +4 -1
  34. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_bitfinex.py +3 -0
  35. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_bitget.py +5 -2
  36. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_bithumb.py +3 -0
  37. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_bitmart.py +4 -1
  38. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_bitso.py +3 -0
  39. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_bitstamp.py +3 -0
  40. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_bybit.py +3 -0
  41. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_bybit_futures.py +3 -0
  42. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_coinbase.py +3 -0
  43. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_coinex.py +3 -0
  44. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_cryptocom.py +10 -1
  45. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_gateio.py +3 -0
  46. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_hitbtc.py +3 -0
  47. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_hollaex.py +3 -0
  48. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_htx.py +3 -0
  49. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_kraken.py +3 -0
  50. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_kucoin.py +3 -0
  51. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_kucoin_futures.py +3 -0
  52. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_mexc.py +3 -0
  53. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_ndax.py +3 -0
  54. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_okcoin.py +3 -0
  55. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_okx.py +4 -1
  56. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_okx_futures.py +3 -0
  57. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_phemex.py +3 -0
  58. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_poloniex.py +3 -0
  59. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_upbit.py +3 -0
  60. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/test_wavesexchange.py +3 -0
  61. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/LICENSE +0 -0
  62. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/MANIFEST.in +0 -0
  63. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
  64. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  65. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  66. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  67. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/api/__init__.py +0 -0
  68. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/api/channels.py +0 -0
  69. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/api/contracts.py +0 -0
  70. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/api/modes.py +0 -0
  71. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/api/orders.py +0 -0
  72. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/api/positions.py +0 -0
  73. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/api/profitability.py +0 -0
  74. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/api/storage.py +0 -0
  75. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/api/symbol_data.py +0 -0
  76. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/api/trader.py +0 -0
  77. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/api/trades.py +0 -0
  78. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/enums.py +0 -0
  79. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/errors.py +0 -0
  80. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_channel.py +0 -0
  81. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/__init__.py +0 -0
  82. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  83. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  84. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  85. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  86. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  87. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  88. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  89. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  90. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  91. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  92. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  93. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  94. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  95. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  96. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  97. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  98. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  99. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  100. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  101. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  102. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  103. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  104. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  105. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  106. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  107. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  108. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  109. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  110. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  111. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  112. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  113. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  114. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  115. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  116. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  117. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  118. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  119. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  120. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  121. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  122. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  123. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  124. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  125. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  126. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  127. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  128. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  129. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  130. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  131. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  132. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  133. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/__init__.py +0 -0
  134. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  135. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  136. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/config/__init__.py +0 -0
  137. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  138. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  139. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  140. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  141. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  142. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +0 -0
  143. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  144. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  145. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  146. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  147. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  148. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  149. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  150. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/exchange_channels.py +0 -0
  151. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/exchange_details.py +0 -0
  152. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/exchange_factory.py +0 -0
  153. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  154. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  155. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  156. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  157. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  158. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/traders/__init__.py +0 -0
  159. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/traders/trader.py +0 -0
  160. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  161. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/types/__init__.py +0 -0
  162. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  163. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/util/__init__.py +0 -0
  164. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  165. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  166. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  167. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  168. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/__init__.py +0 -0
  169. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/channel/__init__.py +0 -0
  170. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  171. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  172. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/channel/mode.py +0 -0
  173. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/mode_activity.py +0 -0
  174. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/modes_factory.py +0 -0
  175. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/modes_util.py +0 -0
  176. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  177. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  178. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  179. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  180. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  181. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  182. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  183. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  184. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  185. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  186. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  187. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  188. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  189. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  190. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  191. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  192. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/__init__.py +0 -0
  193. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  194. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/__init__.py +0 -0
  195. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  196. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  197. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  198. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  199. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  200. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  201. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  202. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  203. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  204. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/order.py +0 -0
  205. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  206. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  207. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/order_group.py +0 -0
  208. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/order_state.py +0 -0
  209. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/order_util.py +0 -0
  210. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  211. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  212. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  213. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  214. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  215. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  216. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  217. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  218. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  219. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  220. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  221. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  222. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  223. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  224. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  225. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  226. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  227. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  228. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  229. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  230. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  231. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  232. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  233. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  234. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  235. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  236. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  237. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  238. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  239. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  240. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  241. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  242. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  243. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  244. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  245. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  246. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  247. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  248. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  249. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  250. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  251. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  252. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  253. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  254. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  255. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  256. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  257. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  258. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  259. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  260. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  261. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  262. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/__init__.py +0 -0
  263. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  264. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  265. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  266. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  267. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/position.py +0 -0
  268. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  269. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/position_state.py +0 -0
  270. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/position_util.py +0 -0
  271. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  272. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  273. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  274. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  275. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  276. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  277. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  278. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  279. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  280. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/state.py +0 -0
  281. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/trades/__init__.py +0 -0
  282. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  283. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  284. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  285. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/trades/trade.py +0 -0
  286. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  287. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  288. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  289. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  290. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  291. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  292. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  293. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  294. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  295. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  296. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  297. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  298. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  299. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/signals/__init__.py +0 -0
  300. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/signals/channel/__init__.py +0 -0
  301. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  302. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  303. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/signals/channel/signal_producer.py +0 -0
  304. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/signals/signal_creation.py +0 -0
  305. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  306. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/signals/util.py +0 -0
  307. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/storage/__init__.py +0 -0
  308. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/storage/candles_storage.py +0 -0
  309. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/storage/storage_manager.py +0 -0
  310. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/storage/trades_storage.py +0 -0
  311. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/storage/transactions_storage.py +0 -0
  312. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/storage/util.py +0 -0
  313. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/supervisors/__init__.py +0 -0
  314. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  315. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  316. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/util/__init__.py +0 -0
  317. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/util/config_util.py +0 -0
  318. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/util/initializable.py +0 -0
  319. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/util/initialization_util.py +0 -0
  320. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/util/simulator_updater_utils.py +0 -0
  321. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/util/test_tools/__init__.py +0 -0
  322. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  323. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  324. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  325. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  326. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/setup.cfg +0 -0
  327. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/setup.py +0 -0
  328. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/api/__init__.py +0 -0
  329. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/api/test_channels.py +0 -0
  330. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/api/test_exchange.py +0 -0
  331. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/api/test_modes.py +0 -0
  332. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/api/test_orders.py +0 -0
  333. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/api/test_portfolio.py +0 -0
  334. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/api/test_profitability.py +0 -0
  335. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/api/test_symbol_data.py +0 -0
  336. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/api/test_trader.py +0 -0
  337. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/api/test_trades.py +0 -0
  338. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/cli/__init__.py +0 -0
  339. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/__init__.py +0 -0
  340. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/contracts/__init__.py +0 -0
  341. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  342. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  343. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/funding/__init__.py +0 -0
  344. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  345. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/kline/__init__.py +0 -0
  346. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  347. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/ohlcv/__init__.py +0 -0
  348. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  349. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  350. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/order_book/__init__.py +0 -0
  351. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  352. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/prices/__init__.py +0 -0
  353. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  354. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  355. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/recent_trades/__init__.py +0 -0
  356. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  357. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  358. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/ticker/__init__.py +0 -0
  359. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  360. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/connectors/__init__.py +0 -0
  361. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  362. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  363. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  364. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/implementations/__init__.py +0 -0
  365. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  366. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  367. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/test_abstract_exchange.py +0 -0
  368. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  369. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/test_exchange_builder.py +0 -0
  370. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/test_exchange_config_data.py +0 -0
  371. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/test_exchange_factory.py +0 -0
  372. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/test_exchange_manager.py +0 -0
  373. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/test_exchange_simulator.py +0 -0
  374. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/test_exchanges.py +0 -0
  375. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/traders/__init__.py +0 -0
  376. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/traders/test_trader.py +0 -0
  377. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/types/__init__.py +0 -0
  378. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  379. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/util/__init__.py +0 -0
  380. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  381. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/exchanges/util/test_exchange_util.py +0 -0
  382. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/modes/__init__.py +0 -0
  383. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/modes/script_keywords/__init__.py +0 -0
  384. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  385. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  386. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  387. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  388. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  389. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  390. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  391. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/modes/test_abstract_mode_consumer.py +0 -0
  392. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/modes/test_abstract_trading_mode.py +0 -0
  393. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/modes/test_modes_util.py +0 -0
  394. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/__init__.py +0 -0
  395. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/__init__.py +0 -0
  396. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/groups/__init__.py +0 -0
  397. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  398. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  399. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  400. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/states/__init__.py +0 -0
  401. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  402. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  403. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  404. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  405. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/states/test_order_state.py +0 -0
  406. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  407. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  408. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  409. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  410. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  411. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/test_order.py +0 -0
  412. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/test_order_adapter.py +0 -0
  413. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/test_order_factory.py +0 -0
  414. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/test_order_util.py +0 -0
  415. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/test_orders_manager.py +0 -0
  416. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  417. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/types/__init__.py +0 -0
  418. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  419. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  420. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  421. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  422. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  423. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  424. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  425. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  426. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/types/market/__init__.py +0 -0
  427. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  428. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  429. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  430. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  431. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  432. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  433. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/__init__.py +0 -0
  434. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  435. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  436. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  437. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  438. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/history/__init__.py +0 -0
  439. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  440. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/test_asset.py +0 -0
  441. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  442. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  443. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  444. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  445. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  446. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/types/__init__.py +0 -0
  447. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  448. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  449. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  450. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/positions/__init__.py +0 -0
  451. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/positions/channel/__init__.py +0 -0
  452. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/positions/states/__init__.py +0 -0
  453. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/positions/test_position.py +0 -0
  454. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/positions/test_position_factory.py +0 -0
  455. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/positions/test_positions_manager.py +0 -0
  456. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/positions/types/__init__.py +0 -0
  457. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  458. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  459. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/trades/__init__.py +0 -0
  460. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/trades/test_trade_factory.py +0 -0
  461. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/trades/test_trade_manager.py +0 -0
  462. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  463. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/trades/test_trade_util.py +0 -0
  464. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/transactions/__init__.py +0 -0
  465. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  466. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  467. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/signals/__init__.py +0 -0
  468. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  469. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/signals/test_util.py +0 -0
  470. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/test_utils/__init__.py +0 -0
  471. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/test_utils/order_util.py +0 -0
  472. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/test_utils/random_numbers.py +0 -0
  473. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/util/__init__.py +0 -0
  474. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests/util/test_config_util.py +0 -0
  475. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/__init__.py +0 -0
  476. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/__init__.py +0 -0
  477. {OctoBot-Trading-2.4.98 → OctoBot-Trading-2.4.100}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
@@ -4,6 +4,18 @@ 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.100] - 2024-08-21
8
+ ### Added
9
+ - [TradingModes] allow starting bot without enabled trading mode
10
+ - [Tests] add active markets count tests
11
+ ### Updated
12
+ - [Exchanges] use classmethods for autofilled exchanges
13
+ - [Portfolio] add time window in history select
14
+
15
+ ## [2.4.99] - 2024-08-19
16
+ ### Updated
17
+ - [CCXT] updated to ccxt 4.3.85
18
+
7
19
  ## [2.4.98] - 2024-08-16
8
20
  ### Added
9
21
  - [Exchanges] exchange_config_by_exchange in init
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.98
3
+ Version: 2.4.100
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.98](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.100](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.98
3
+ Version: 2.4.100
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.98](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.100](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.98](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.100](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.98" # major.minor.revision
18
+ VERSION = "2.4.100" # major.minor.revision
@@ -138,9 +138,8 @@ def get_matrix_id_from_exchange_id(exchange_name: str, exchange_id: str) -> str:
138
138
 
139
139
  def get_all_exchange_ids_from_matrix_id(matrix_id) -> list:
140
140
  return [
141
- exchange_configuration.id
142
- for exchange_configuration in exchanges.Exchanges.instance().get_all_exchanges()
143
- if exchange_configuration.matrix_id == matrix_id
141
+ get_exchange_manager_id(exchange_manager)
142
+ for exchange_manager in exchanges.Exchanges.instance().get_exchanges_managers_with_matrix_id(matrix_id)
144
143
  ]
145
144
 
146
145
 
@@ -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)
@@ -69,14 +69,18 @@ ENABLE_EXCHANGE_HTTP_PROXY_FROM_ENV = os_util.parse_boolean_environment_var(
69
69
  ENABLE_CCXT_VERBOSE = os_util.parse_boolean_environment_var("ENABLE_CCXT_VERBOSE", "False")
70
70
  ENABLE_CCXT_RATE_LIMIT = os_util.parse_boolean_environment_var("ENABLE_CCXT_RATE_LIMIT", "True")
71
71
  THROTTLED_WS_UPDATES = float(os.getenv("THROTTLED_WS_UPDATES", "0.1")) # avoid spamming CPU
72
- ENABLE_LIVE_CANDLES_STORAGE = os_util.parse_boolean_environment_var("ENABLE_LIVE_CANDLES_STORAGE", "False")
73
- ENABLE_HISTORICAL_ORDERS_UPDATES_STORAGE = os_util.parse_boolean_environment_var("ENABLE_HISTORICAL_ORDERS_UPDATES_STORAGE", "False")
74
72
  MAX_CANDLES_IN_RAM = int(os.getenv("MAX_CANDLES_IN_RAM", "3000")) # max candles per CandlesManager
75
73
  STORAGE_ORIGIN_VALUE = "origin_value"
76
74
  DISPLAY_TIME_FRAME = commons_enums.TimeFrames.ONE_HOUR
77
75
  DEFAULT_SUBACCOUNT_ID = "default_subaccount_id"
78
76
  DEFAULT_ACCOUNT_ID = "default_account_id"
79
77
 
78
+ # Storage
79
+ ENABLE_LIVE_CANDLES_STORAGE = os_util.parse_boolean_environment_var("ENABLE_LIVE_CANDLES_STORAGE", "False")
80
+ ENABLE_HISTORICAL_ORDERS_UPDATES_STORAGE = os_util.parse_boolean_environment_var("ENABLE_HISTORICAL_ORDERS_UPDATES_STORAGE", "False")
81
+ ENABLE_SIMULATED_ORDERS_STORAGE = os_util.parse_boolean_environment_var("ENABLE_SIMULATED_ORDERS_STORAGE", "False")
82
+ AUTH_UPDATE_DEBOUNCE_DURATION = float(os.getenv("AUTH_UPDATE_DEBOUNCE_DURATION", "10"))
83
+
80
84
  # Decimal default values (decimals are immutable, can be stored as constant)
81
85
  ZERO = decimal.Decimal(0)
82
86
  ONE = decimal.Decimal(1)
@@ -121,11 +125,12 @@ TESTED_EXCHANGES = [
121
125
  "mexc",
122
126
  "bingx",
123
127
  "coinex",
128
+ "bitmart",
124
129
  ])
125
130
  DEFAULT_FUTURE_EXCHANGES = sorted(["bybit"])
126
131
  SIMULATOR_TESTED_EXCHANGES = sorted(["bitfinex2", "bithumb", "bitstamp", "bittrex",
127
132
  "hitbtc", "kraken", "poloniex", "bitso", "ndax", "upbit",
128
- "wavesexchange", "bitmart",])
133
+ "wavesexchange",])
129
134
 
130
135
  # text content of errors due to exchange compliancy rules
131
136
  # Warning: should never be a false positive
@@ -750,4 +750,7 @@ class AbstractExchange(tentacles_management.AbstractTentacle):
750
750
  def _get_order_description(
751
751
  self, side: enums.TradeOrderSide, symbol: str, quantity: decimal.Decimal, price: decimal.Decimal
752
752
  ) -> str:
753
- 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
@@ -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
@@ -102,8 +102,13 @@ class ExchangeBuilder:
102
102
  raise e
103
103
 
104
104
  def _register_trading_modes_requirements(self, trading_mode_class, tentacles_setup_config):
105
- self.exchange_manager.is_trading = trading_mode_class.get_is_trading_on_exchange(self.exchange_name,
106
- tentacles_setup_config)
105
+ self.exchange_manager.is_trading = trading_mode_class.get_is_trading_on_exchange(
106
+ self.exchange_name, tentacles_setup_config
107
+ )
108
+ if not self.exchange_manager.is_trading:
109
+ self.logger.info(
110
+ f"{self.exchange_manager.exchange_name} exchange is configured not to apply any trading strategy."
111
+ )
107
112
  # take trading modes candles requirements into account if any
108
113
  self.config[commons_constants.CONFIG_TENTACLES_REQUIRED_CANDLES_COUNT] = max(
109
114
  self.config[commons_constants.CONFIG_TENTACLES_REQUIRED_CANDLES_COUNT],
@@ -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):
@@ -59,6 +59,18 @@ class Exchanges(singleton.Singleton):
59
59
  def get_exchanges_list(self, exchange_name) -> list:
60
60
  return list(self.exchanges[exchange_name].values())
61
61
 
62
+ def get_exchanges_managers_with_matrix_id(self, matrix_id: str) -> list:
63
+ return [
64
+ exchange_configuration.exchange_manager
65
+ for exchange_configuration in self.get_all_exchanges()
66
+ if exchange_configuration.matrix_id == matrix_id
67
+ ]
68
+
69
+ def get_exchanges_managers_with_same_matrix_id(self, exchange_manager) -> list:
70
+ return self.get_exchanges_managers_with_matrix_id(
71
+ self.get_exchange(exchange_manager.exchange_name, exchange_manager.id).matrix_id
72
+ )
73
+
62
74
  def del_exchange(self, exchange_name, exchange_manager_id, should_warn=True) -> None:
63
75
  try:
64
76
  self.exchanges[exchange_name].pop(exchange_manager_id, None)
@@ -950,8 +950,8 @@ class RestExchange(abstract_exchange.AbstractExchange):
950
950
  ):
951
951
  raise NotImplementedError("fetch_exchange_config")
952
952
 
953
- @staticmethod
954
- def supported_autofill_exchanges(tentacle_config):
953
+ @classmethod
954
+ def supported_autofill_exchanges(cls, tentacle_config):
955
955
  raise NotImplementedError("supported_autofill_exchanges is not implemented")
956
956
 
957
957
  @classmethod
@@ -447,9 +447,9 @@ class AbstractTradingMode(abstract_tentacle.AbstractTentacle):
447
447
  """
448
448
 
449
449
  @classmethod
450
- def get_required_strategies_names_and_count(cls,
451
- tentacles_config: tm_configuration.TentaclesSetupConfiguration,
452
- trading_mode_config=None):
450
+ def get_required_strategies_names_and_count(
451
+ cls, tentacles_config: tm_configuration.TentaclesSetupConfiguration, trading_mode_config=None
452
+ ):
453
453
  config = trading_mode_config or tentacles_manager_api.get_tentacle_config(tentacles_config, cls)
454
454
  if constants.TRADING_MODE_REQUIRED_STRATEGIES in config:
455
455
  return config[constants.TRADING_MODE_REQUIRED_STRATEGIES], cls.get_required_strategies_count(config)
@@ -47,12 +47,14 @@ def get_activated_trading_mode(tentacles_setup_config):
47
47
 
48
48
  if trading_mode_class is not None:
49
49
  return trading_mode_class
50
- except ModuleNotFoundError as e:
51
- logging.get_logger("get_activated_trading_mode").error(f"Error when loading "
52
- f"the activated trading mode: {e}")
50
+ except ModuleNotFoundError as err:
51
+ logging.get_logger("get_activated_trading_mode").error(
52
+ f"Error when loading the activated trading mode: {err}"
53
+ )
53
54
 
54
- raise errors.ConfigTradingError(f"Please ensure your tentacles configuration file is valid and "
55
- f"at least one trading mode is activated")
55
+ raise errors.ConfigTradingError(
56
+ "Please ensure your tentacles configuration file is valid and that a trading mode is activated"
57
+ )
56
58
 
57
59
 
58
60
  def should_emit_trading_signals_user_input(trading_mode, inputs: dict):
@@ -20,9 +20,11 @@ import octobot_commons.channels_name as channels_name
20
20
  import octobot_commons.logging as logging
21
21
  import octobot_commons.enums as enums
22
22
  import octobot_commons.constants as commons_constants
23
+ import octobot_commons.errors as commons_errors
23
24
 
24
25
  import octobot_trading.errors as errors
25
26
  import octobot_trading.exchanges as exchanges
27
+ import octobot_trading.modes as modes
26
28
  import octobot_trading.util as util
27
29
 
28
30
  OCTOBOT_CHANNEL_TRADING_CONSUMER_LOGGER_TAG = "OctoBotChannelTradingConsumer"
@@ -70,6 +72,14 @@ async def _handle_creation(bot_id, action, data):
70
72
  .has_matrix(data[OctoBotChannelTradingDataKeys.MATRIX_ID.value]) \
71
73
  .use_tentacles_setup_config(data[OctoBotChannelTradingDataKeys.TENTACLES_SETUP_CONFIG.value]) \
72
74
  .set_bot_id(bot_id)
75
+ try:
76
+ modes.get_activated_trading_mode(data[OctoBotChannelTradingDataKeys.TENTACLES_SETUP_CONFIG.value])
77
+ except commons_errors.ConfigTradingError:
78
+ logging.get_logger(OCTOBOT_CHANNEL_TRADING_CONSUMER_LOGGER_TAG).error(
79
+ f"No configured trading mode. in order to trade, selected a profile with a trading mode."
80
+ )
81
+ # do not raise on missing trading mode
82
+ exchange_builder.disable_trading_mode()
73
83
  _set_exchange_type_details(exchange_builder, config, data[OctoBotChannelTradingDataKeys.BACKTESTING.value])
74
84
  await exchange_builder.build()
75
85
  await channel_instances.get_chan_at_id(
@@ -157,10 +157,13 @@ class HistoricalPortfolioValueManager(util.Initializable):
157
157
  """
158
158
  to_timestamp = to_timestamp or self.portfolio_manager.exchange_manager.exchange.get_exchange_current_time()
159
159
  time_frame_seconds = commons_enums.TimeFramesMinutes[time_frame] * commons_constants.MINUTE_TO_SECONDS
160
+ sorted_available_timestamps = list(self.historical_portfolio_value)
160
161
  relevant_historical_values = [
161
162
  value
162
163
  for timestamp, value in self.historical_portfolio_value.items()
163
- if self._is_historical_timestamp_relevant(timestamp, time_frame_seconds, from_timestamp, to_timestamp)
164
+ if self._is_historical_timestamp_relevant(
165
+ timestamp, time_frame_seconds, from_timestamp, to_timestamp, sorted_available_timestamps
166
+ )
164
167
  ]
165
168
  historical_values = {}
166
169
  for historical_value in relevant_historical_values:
@@ -252,15 +255,34 @@ class HistoricalPortfolioValueManager(util.Initializable):
252
255
  if currency not in self.historical_starting_portfolio_values:
253
256
  self.historical_starting_portfolio_values[currency] = value.get(currency)
254
257
 
255
- def _is_historical_timestamp_relevant(self, timestamp, time_frame_seconds, from_timestamp, to_timestamp):
258
+ def _is_historical_timestamp_relevant(
259
+ self, timestamp, time_frame_seconds, from_timestamp, to_timestamp, sorted_available_timestamps: list
260
+ ):
256
261
  from_timestamp = from_timestamp or 0
257
262
  to_timestamp = to_timestamp or time.time()
258
- return self._is_timestamp_relevant(timestamp, time_frame_seconds) and \
263
+ return self._is_timestamp_relevant(timestamp, time_frame_seconds, sorted_available_timestamps) and \
259
264
  from_timestamp <= timestamp <= to_timestamp
260
265
 
261
266
  @staticmethod
262
- def _is_timestamp_relevant(timestamp, time_frame_seconds):
263
- return timestamp % time_frame_seconds == 0
267
+ def _is_timestamp_relevant(timestamp, time_frame_seconds, sorted_available_timestamps: list):
268
+ if timestamp % time_frame_seconds == 0:
269
+ # timestamp is expected at this time
270
+ return True
271
+ else:
272
+ # timestamp is relevant only if there is no other available timestamp within the given timeframe range
273
+ current_timestamp_index = sorted_available_timestamps.index(timestamp)
274
+ allowed_delta = time_frame_seconds / 2
275
+ previous_timestamp = (
276
+ sorted_available_timestamps[current_timestamp_index - 1]
277
+ if current_timestamp_index > 0
278
+ else 0
279
+ )
280
+ next_timestamp = (
281
+ sorted_available_timestamps[current_timestamp_index + 1]
282
+ if current_timestamp_index < len(sorted_available_timestamps) - 1
283
+ else (timestamp + allowed_delta)
284
+ )
285
+ return previous_timestamp + allowed_delta <= timestamp <= next_timestamp - allowed_delta
264
286
 
265
287
  @staticmethod
266
288
  def convert_to_historical_timestamp(timestamp, time_frame):
@@ -76,11 +76,11 @@ class ValueConverter:
76
76
  return self._check_currency_initialization(currency, currency_value)
77
77
 
78
78
  def get_usd_like_value(self, currency, quantity, raise_error=True, init_price_fetchers=True):
79
- if self.is_usd_like_coin(currency):
79
+ if symbol_util.is_usd_like_coin(currency):
80
80
  return quantity
81
81
  if symbol := self.get_usd_like_symbol_from_symbols(currency, self.last_prices_by_trading_pair):
82
82
  base, quote = symbol_util.parse_symbol(symbol).base_and_quote()
83
- usd_like_currency = base if self.is_usd_like_coin(base) else quote
83
+ usd_like_currency = base if symbol_util.is_usd_like_coin(base) else quote
84
84
  return self.evaluate_value(
85
85
  currency, quantity, raise_error=raise_error,
86
86
  target_currency=usd_like_currency, init_price_fetchers=init_price_fetchers
@@ -116,10 +116,6 @@ class ValueConverter:
116
116
  return True
117
117
  return False
118
118
 
119
- @staticmethod
120
- def is_usd_like_coin(coin) -> bool:
121
- return coin in commons_constants.USD_LIKE_COINS
122
-
123
119
  def _check_currency_initialization(self, currency, currency_value):
124
120
  """
125
121
  Check if the currency has to be removed from self.initializing_symbol_prices and return currency_value
@@ -31,7 +31,6 @@ class AbstractStorage:
31
31
  LIVE_CHANNEL = None
32
32
  IS_HISTORICAL = True
33
33
  HISTORY_TABLE = None
34
- AUTH_UPDATE_DEBOUNCE_DURATION = 10
35
34
  FLUSH_DEBOUNCE_DURATION = 5 # avoid disc spam on multiple quick live updated
36
35
 
37
36
  def __init__(self, exchange_manager, plot_settings: commons_display.PlotSettings,
@@ -123,7 +122,7 @@ class AbstractStorage:
123
122
 
124
123
  async def _waiting_update_auth_data(self, reset):
125
124
  try:
126
- await asyncio.sleep(self.AUTH_UPDATE_DEBOUNCE_DURATION)
125
+ await asyncio.sleep(trading_constants.AUTH_UPDATE_DEBOUNCE_DURATION)
127
126
  await self._update_auth_data(reset)
128
127
  except Exception as err:
129
128
  logging.get_logger(self.__class__.__name__).exception(err, True, f"Error when updating auth data: {err}")
@@ -27,6 +27,7 @@ import octobot_trading.enums as enums
27
27
  import octobot_trading.constants as constants
28
28
  import octobot_trading.storage.abstract_storage as abstract_storage
29
29
  import octobot_trading.storage.util as storage_util
30
+ import octobot_trading.exchanges as exchanges
30
31
 
31
32
 
32
33
  class OrdersStorage(abstract_storage.AbstractStorage):
@@ -36,13 +37,16 @@ class OrdersStorage(abstract_storage.AbstractStorage):
36
37
  ENABLE_HISTORICAL_ORDER_UPDATES_STORAGE = constants.ENABLE_HISTORICAL_ORDERS_UPDATES_STORAGE
37
38
 
38
39
  def __init__(self, exchange_manager, use_live_consumer_in_backtesting=None, is_historical=None):
39
- super().__init__(exchange_manager, plot_settings=None,
40
- use_live_consumer_in_backtesting=use_live_consumer_in_backtesting, is_historical=is_historical)
40
+ super().__init__(
41
+ exchange_manager, plot_settings=None,
42
+ use_live_consumer_in_backtesting=use_live_consumer_in_backtesting, is_historical=is_historical
43
+ )
41
44
  self.startup_orders = {}
42
45
 
43
46
  def should_store_data(self):
44
- return not self.exchange_manager.is_trader_simulated \
45
- and not self.exchange_manager.is_backtesting
47
+ return (
48
+ constants.ENABLE_SIMULATED_ORDERS_STORAGE or not self.exchange_manager.is_trader_simulated
49
+ ) and not self.exchange_manager.is_backtesting
46
50
 
47
51
  async def on_start(self):
48
52
  await self._load_startup_orders()
@@ -86,13 +90,19 @@ class OrdersStorage(abstract_storage.AbstractStorage):
86
90
 
87
91
  async def _update_auth_data(self, _):
88
92
  authenticator = authentication.Authenticator.instance()
89
- snapshot = [
90
- _format_order(order, self.exchange_manager)
91
- for order in self.exchange_manager.exchange_personal_data.orders_manager.get_open_orders()
92
- ]
93
+
94
+ orders_by_exchange = {
95
+ exchange_manager.exchange_name: [
96
+ _format_order(order, exchange_manager)
97
+ for order in exchange_manager.exchange_personal_data.orders_manager.get_open_orders()
98
+ ]
99
+ for exchange_manager in exchanges.Exchanges.instance().get_exchanges_managers_with_same_matrix_id(
100
+ self.exchange_manager
101
+ )
102
+ }
93
103
  if authenticator.is_initialized():
94
104
  # also update when history is empty to reset trade history
95
- await authenticator.update_orders(snapshot, self.exchange_manager.exchange_name)
105
+ await authenticator.update_orders(orders_by_exchange)
96
106
 
97
107
  async def _store_history(self):
98
108
  await self._update_history()