OctoBot-Trading 2.4.154__tar.gz → 2.4.156__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/CHANGELOG.md +14 -0
  2. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/OctoBot_Trading.egg-info/requires.txt +1 -0
  4. {OctoBot-Trading-2.4.154/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.156}/PKG-INFO +2 -2
  5. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/README.md +1 -1
  6. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/__init__.py +1 -1
  7. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/config/proxy_config.py +2 -1
  8. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +40 -10
  9. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +3 -2
  10. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/traders/trader.py +50 -30
  11. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/channel/abstract_mode_producer.py +14 -1
  12. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +1 -1
  13. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +11 -7
  14. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/order.py +1 -1
  15. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/order_util.py +1 -1
  16. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/trades/trades_manager.py +26 -6
  17. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/requirements.txt +1 -0
  18. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +8 -1
  19. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/LICENSE +0 -0
  20. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/MANIFEST.in +0 -0
  21. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
  22. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  23. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  24. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  25. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/api/__init__.py +0 -0
  26. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/api/channels.py +0 -0
  27. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/api/contracts.py +0 -0
  28. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/api/exchange.py +0 -0
  29. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/api/modes.py +0 -0
  30. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/api/orders.py +0 -0
  31. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/api/portfolio.py +0 -0
  32. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/api/positions.py +0 -0
  33. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/api/profitability.py +0 -0
  34. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/api/storage.py +0 -0
  35. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/api/symbol_data.py +0 -0
  36. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/api/trader.py +0 -0
  37. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/api/trades.py +0 -0
  38. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/constants.py +0 -0
  39. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/enums.py +0 -0
  40. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/errors.py +0 -0
  41. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_channel.py +0 -0
  42. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/__init__.py +0 -0
  43. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  44. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  45. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  46. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  47. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  48. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  49. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  50. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  51. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  52. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  53. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  54. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  55. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  56. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  57. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  58. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  59. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  60. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  61. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  62. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  63. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  64. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  65. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  66. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  67. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  68. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  69. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  70. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  71. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  72. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  73. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  74. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  75. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  76. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  77. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  78. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  79. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  80. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  81. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  82. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  83. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  84. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  85. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  86. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  87. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  88. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  89. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  90. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  91. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  92. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  93. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  94. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/__init__.py +0 -0
  95. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  96. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  97. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  98. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  99. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/config/__init__.py +0 -0
  100. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  101. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  102. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  103. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  104. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
  105. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  106. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  107. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  108. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  109. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  110. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  111. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  112. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  113. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/exchange_builder.py +0 -0
  114. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/exchange_channels.py +0 -0
  115. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/exchange_details.py +0 -0
  116. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/exchange_factory.py +0 -0
  117. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/exchange_manager.py +0 -0
  118. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  119. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/exchanges.py +0 -0
  120. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  121. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  122. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  123. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  124. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/traders/__init__.py +0 -0
  125. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  126. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/types/__init__.py +0 -0
  127. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
  128. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  129. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/util/__init__.py +0 -0
  130. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  131. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  132. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  133. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  134. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/__init__.py +0 -0
  135. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/abstract_trading_mode.py +0 -0
  136. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/channel/__init__.py +0 -0
  137. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  138. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/channel/mode.py +0 -0
  139. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/mode_activity.py +0 -0
  140. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/mode_config.py +0 -0
  141. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/modes_factory.py +0 -0
  142. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/modes_util.py +0 -0
  143. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  144. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  145. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  146. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  147. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  148. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  149. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  150. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  151. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  152. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  153. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  154. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  155. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  156. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  157. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  158. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/octobot_channel_consumer.py +0 -0
  159. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/__init__.py +0 -0
  160. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  161. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/__init__.py +0 -0
  162. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  163. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  164. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  165. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  166. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  167. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  168. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  169. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  170. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  171. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  172. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/order_group.py +0 -0
  173. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/order_state.py +0 -0
  174. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  175. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  176. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  177. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  178. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  179. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  180. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  181. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  182. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  183. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  184. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  185. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  186. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  187. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  188. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  189. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  190. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  191. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  192. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  193. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  194. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  195. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  196. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  197. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  198. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  199. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  200. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  201. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  202. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  203. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  204. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  205. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  206. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  207. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  208. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  209. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  210. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  211. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  212. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  213. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  214. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  215. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  216. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  217. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  218. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  219. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  220. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  221. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  222. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  223. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  224. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  225. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  226. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  227. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  228. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/__init__.py +0 -0
  229. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  230. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  231. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  232. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  233. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/position.py +0 -0
  234. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  235. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/position_state.py +0 -0
  236. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/position_util.py +0 -0
  237. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  238. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  239. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  240. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  241. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  242. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  243. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  244. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  245. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  246. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/state.py +0 -0
  247. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/trades/__init__.py +0 -0
  248. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  249. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  250. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  251. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/trades/trade.py +0 -0
  252. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  253. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  254. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  255. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  256. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  257. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  258. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  259. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  260. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  261. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  262. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  263. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  264. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/signals/__init__.py +0 -0
  265. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/signals/channel/__init__.py +0 -0
  266. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  267. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  268. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/signals/channel/signal_producer.py +0 -0
  269. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/signals/signal_creation.py +0 -0
  270. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  271. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/signals/util.py +0 -0
  272. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/storage/__init__.py +0 -0
  273. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/storage/abstract_storage.py +0 -0
  274. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/storage/candles_storage.py +0 -0
  275. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/storage/orders_storage.py +0 -0
  276. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/storage/portfolio_storage.py +0 -0
  277. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/storage/storage_manager.py +0 -0
  278. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/storage/trades_storage.py +0 -0
  279. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/storage/transactions_storage.py +0 -0
  280. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/storage/util.py +0 -0
  281. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/supervisors/__init__.py +0 -0
  282. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  283. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  284. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/util/__init__.py +0 -0
  285. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/util/config_util.py +0 -0
  286. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/util/initializable.py +0 -0
  287. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/util/initialization_util.py +0 -0
  288. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/util/simulator_updater_utils.py +0 -0
  289. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/util/test_tools/__init__.py +0 -0
  290. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  291. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  292. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  293. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  294. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/setup.cfg +0 -0
  295. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/setup.py +0 -0
  296. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/api/__init__.py +0 -0
  297. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/api/test_channels.py +0 -0
  298. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/api/test_exchange.py +0 -0
  299. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/api/test_modes.py +0 -0
  300. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/api/test_orders.py +0 -0
  301. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/api/test_portfolio.py +0 -0
  302. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/api/test_profitability.py +0 -0
  303. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/api/test_symbol_data.py +0 -0
  304. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/api/test_trader.py +0 -0
  305. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/api/test_trades.py +0 -0
  306. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/cli/__init__.py +0 -0
  307. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/__init__.py +0 -0
  308. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/contracts/__init__.py +0 -0
  309. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  310. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  311. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/funding/__init__.py +0 -0
  312. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  313. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/kline/__init__.py +0 -0
  314. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  315. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/ohlcv/__init__.py +0 -0
  316. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  317. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  318. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/order_book/__init__.py +0 -0
  319. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  320. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/prices/__init__.py +0 -0
  321. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  322. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  323. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/recent_trades/__init__.py +0 -0
  324. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  325. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  326. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/ticker/__init__.py +0 -0
  327. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  328. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/__init__.py +0 -0
  329. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/connectors/__init__.py +0 -0
  330. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  331. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  332. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/implementations/__init__.py +0 -0
  333. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  334. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  335. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/test_abstract_exchange.py +0 -0
  336. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  337. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/test_exchange_builder.py +0 -0
  338. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/test_exchange_config_data.py +0 -0
  339. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/test_exchange_factory.py +0 -0
  340. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/test_exchange_manager.py +0 -0
  341. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/test_exchange_simulator.py +0 -0
  342. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/test_exchanges.py +0 -0
  343. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/traders/__init__.py +0 -0
  344. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/traders/test_trader.py +0 -0
  345. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/types/__init__.py +0 -0
  346. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  347. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/util/__init__.py +0 -0
  348. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  349. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/exchanges/util/test_exchange_util.py +0 -0
  350. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/modes/__init__.py +0 -0
  351. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/modes/script_keywords/__init__.py +0 -0
  352. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  353. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  354. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  355. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  356. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  357. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  358. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  359. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/modes/test_abstract_mode_consumer.py +0 -0
  360. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/modes/test_abstract_trading_mode.py +0 -0
  361. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/modes/test_modes_util.py +0 -0
  362. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/__init__.py +0 -0
  363. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/__init__.py +0 -0
  364. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/groups/__init__.py +0 -0
  365. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  366. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  367. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  368. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/states/__init__.py +0 -0
  369. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  370. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  371. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  372. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  373. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/states/test_order_state.py +0 -0
  374. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  375. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  376. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  377. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  378. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  379. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/test_order.py +0 -0
  380. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/test_order_adapter.py +0 -0
  381. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/test_order_factory.py +0 -0
  382. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/test_order_util.py +0 -0
  383. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/test_orders_manager.py +0 -0
  384. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  385. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/types/__init__.py +0 -0
  386. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  387. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  388. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  389. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  390. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  391. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  392. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  393. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  394. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/types/market/__init__.py +0 -0
  395. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  396. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  397. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  398. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  399. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  400. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  401. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/__init__.py +0 -0
  402. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  403. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  404. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  405. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  406. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/history/__init__.py +0 -0
  407. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  408. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  409. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/test_asset.py +0 -0
  410. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  411. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  412. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  413. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  414. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  415. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/types/__init__.py +0 -0
  416. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  417. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  418. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  419. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/positions/__init__.py +0 -0
  420. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/positions/channel/__init__.py +0 -0
  421. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/positions/states/__init__.py +0 -0
  422. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/positions/test_position.py +0 -0
  423. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/positions/test_position_factory.py +0 -0
  424. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/positions/test_positions_manager.py +0 -0
  425. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/positions/types/__init__.py +0 -0
  426. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  427. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  428. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/trades/__init__.py +0 -0
  429. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/trades/test_trade_factory.py +0 -0
  430. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/trades/test_trade_manager.py +0 -0
  431. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  432. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/trades/test_trade_util.py +0 -0
  433. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/transactions/__init__.py +0 -0
  434. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  435. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  436. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/signals/__init__.py +0 -0
  437. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  438. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/signals/test_util.py +0 -0
  439. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/test_utils/__init__.py +0 -0
  440. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/test_utils/order_util.py +0 -0
  441. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/test_utils/random_numbers.py +0 -0
  442. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/util/__init__.py +0 -0
  443. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests/util/test_config_util.py +0 -0
  444. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/__init__.py +0 -0
  445. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/__init__.py +0 -0
  446. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
  447. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  448. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  449. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_binance.py +0 -0
  450. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  451. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_bingx.py +0 -0
  452. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  453. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_bitget.py +0 -0
  454. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  455. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_bitmart.py +0 -0
  456. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_bitmex.py +0 -0
  457. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_bitso.py +0 -0
  458. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  459. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_bybit.py +0 -0
  460. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  461. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  462. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_coinex.py +0 -0
  463. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  464. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_gateio.py +0 -0
  465. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  466. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  467. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_htx.py +0 -0
  468. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_kraken.py +0 -0
  469. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  470. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  471. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_mexc.py +0 -0
  472. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_ndax.py +0 -0
  473. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  474. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_okx.py +0 -0
  475. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  476. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_phemex.py +0 -0
  477. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  478. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_upbit.py +0 -0
  479. {OctoBot-Trading-2.4.154 → OctoBot-Trading-2.4.156}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,20 @@ 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.156] - 2025-02-10
8
+ ### Added
9
+ [TradingModes] add init topic methods
10
+ ### Updated
11
+ [Amount] improve amount error
12
+ [Exchange] add proxy error details on ddos error
13
+ [Trades] log more details on loaded historical trades
14
+
15
+ ## [2.4.155] - 2025-02-03
16
+ ### Added
17
+ [Exchanges] handle Socks proxies
18
+ ### Updated
19
+ [Trader] enable edit_order when without enable_order_auto_synchronization
20
+
7
21
  ## [2.4.154] - 2025-01-31
8
22
  ### Added
9
23
  [Exchanges] handle InvalidAPIKeyIPWhitelistError
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.154
3
+ Version: 2.4.156
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.154](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.156](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)
@@ -5,6 +5,7 @@ OctoBot-Commons<1.10,>=1.9.64
5
5
  OctoBot-Tentacles-Manager<2.10,>=2.9
6
6
  trading-backend>=1.2.35
7
7
  ccxt==4.3.85
8
+ aiohttp_socks==0.10.1
8
9
  cryptography
9
10
  sortedcontainers==2.4.0
10
11
  tinydb==4.5.2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.154
3
+ Version: 2.4.156
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.154](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.156](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.154](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.156](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.154" # major.minor.revision
18
+ VERSION = "2.4.156" # major.minor.revision
@@ -33,7 +33,8 @@ class ProxyConfig:
33
33
  # if set, will be called when exchange stops
34
34
  stop_proxy_callback: typing.Optional[typing.Callable] = None
35
35
  # if set, returns the last url given to a callback method that return "True", meaning the last url that used a proxy
36
- get_last_proxied_request_url: typing.Optional[typing.Callable] = None
36
+ get_last_proxied_request_url: typing.Optional[typing.Callable[[], typing.Optional[str]]] = None
37
+ get_proxy_url: typing.Optional[typing.Callable[[], str]] = None
37
38
  # the host of this proxy, used to identify proxy connexion errors
38
39
  proxy_host: str = "DEFAULT PROXY HOST"
39
40
  # if DNS cache should be disabled with this proxy config. Warning: in this case, DNS cache will be
@@ -14,6 +14,7 @@
14
14
  # You should have received a copy of the GNU Lesser General Public
15
15
  # License along with this library.
16
16
  import asyncio
17
+ import aiohttp_socks
17
18
  import os
18
19
  import ssl
19
20
  import aiohttp
@@ -144,7 +145,10 @@ def instantiate_exchange(
144
145
  client = exchange_class(config)
145
146
  _use_proxy_if_necessary(client, proxy_config)
146
147
  if constants.ENABLE_CCXT_REQUESTS_COUNTER and allow_request_counter:
147
- _use_request_counter(identifier, client, proxy_config)
148
+ if proxy_config.socks_proxy or proxy_config.socks_proxy_callback:
149
+ commons_logging.get_logger(__name__).error("socks proxy and request counter can't yet be used together.")
150
+ else:
151
+ _use_request_counter(identifier, client, proxy_config)
148
152
  return client
149
153
 
150
154
 
@@ -305,15 +309,27 @@ def _use_proxy_if_necessary(client, proxy_config: proxy_config_import.ProxyConfi
305
309
  client.socks_proxy = proxy_config.socks_proxy
306
310
  if proxy_config.socks_proxy_callback:
307
311
  client.socks_proxy_callback = proxy_config.socks_proxy_callback
308
- if proxy_config.disable_dns_cache:
312
+ if proxy_config.socks_proxy or proxy_config.socks_proxy_callback:
313
+ # rewrite of async_ccxt.exchange.client.fetch() ProxyConnector creation
314
+ _init_ccxt_client_session_requirements(client)
315
+ proxy_url = proxy_config.get_proxy_url()
316
+ if (client.socks_proxy_sessions is None):
317
+ client.socks_proxy_sessions = {}
318
+ if (proxy_url not in client.socks_proxy_sessions):
319
+ connector = aiohttp_socks.ProxyConnector.from_url(
320
+ proxy_url,
321
+ # extra args copied from self.open()
322
+ ssl=client.ssl_context,
323
+ loop=client.asyncio_loop,
324
+ use_dns_cache=not proxy_config.disable_dns_cache,
325
+ enable_cleanup_closed=True
326
+ )
327
+ client.socks_proxy_sessions[proxy_url] = aiohttp.ClientSession(
328
+ loop=client.asyncio_loop, connector=connector, trust_env=client.aiohttp_trust_env
329
+ )
330
+ elif proxy_config.disable_dns_cache:
309
331
  # rewrite of async_ccxt.exchange.client.open()
310
- if client.asyncio_loop is None:
311
- client.asyncio_loop = asyncio.get_running_loop()
312
- client.throttle.loop = client.asyncio_loop
313
-
314
- if client.ssl_context is None:
315
- # Create our SSL context object with our CA cert file
316
- client.ssl_context = ssl.create_default_context(cafile=client.cafile) if client.verify else client.verify
332
+ _init_ccxt_client_session_requirements(client)
317
333
  if client.session:
318
334
  # should not happen
319
335
  asyncio.create_task(client.session.close())
@@ -328,6 +344,18 @@ def _use_proxy_if_necessary(client, proxy_config: proxy_config_import.ProxyConfi
328
344
  )
329
345
 
330
346
 
347
+ def _init_ccxt_client_session_requirements(client):
348
+ # from async_ccxt.exchange.client.open()
349
+ if client.asyncio_loop is None:
350
+ client.asyncio_loop = asyncio.get_running_loop()
351
+ client.throttle.loop = client.asyncio_loop
352
+
353
+ if client.ssl_context is None:
354
+ # Create our SSL context object with our CA cert file
355
+ client.ssl_context = ssl.create_default_context(cafile=client.cafile) if client.verify else client.verify
356
+
357
+
358
+
331
359
  def _get_client_config(
332
360
  exchange_class, options, headers, additional_config,
333
361
  api_key=None, secret=None, password=None, uid=None,
@@ -465,7 +493,9 @@ def get_proxy_error_if_any(ccxt_connector, error: Exception) -> typing.Optional[
465
493
  depth = 1
466
494
  cause_error = error
467
495
  while cause_error and depth < max_depth:
468
- if isinstance(cause_error, (aiohttp.ClientProxyConnectionError, aiohttp.ClientHttpProxyError)) or (
496
+ if isinstance(cause_error, (
497
+ aiohttp.ClientProxyConnectionError, aiohttp.ClientHttpProxyError, aiohttp_socks.ProxyConnectionError
498
+ )) or (
469
499
  isinstance(cause_error, aiohttp.ClientConnectorError)
470
500
  and ccxt_connector.exchange_manager.proxy_config.proxy_host in str(cause_error)
471
501
  ):
@@ -18,6 +18,7 @@ import contextlib
18
18
  import decimal
19
19
  import ccxt.async_support as ccxt
20
20
  import ccxt.static_dependencies.ecdsa.der
21
+ import aiohttp_socks
21
22
  import typing
22
23
  import inspect
23
24
  import binascii
@@ -1022,7 +1023,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
1022
1023
  # raised upon rate limit issues, last response data might have details on what is happening
1023
1024
  if self.exchange_manager.exchange.should_log_on_ddos_exception(err):
1024
1025
  self.log_ddos_error(err)
1025
- raise
1026
+ self.raise_or_prefix_proxy_error_if_relevant(err, None)
1026
1027
  except ccxt.InvalidNonce as err:
1027
1028
  # use 2 index to get the caller of the context manager
1028
1029
  caller_function_name = inspect.stack()[2].function
@@ -1042,7 +1043,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
1042
1043
  err,
1043
1044
  error_class(html_util.get_html_summary_if_relevant(err))
1044
1045
  )
1045
- except ccxt.ExchangeNotAvailable as err:
1046
+ except (ccxt.ExchangeNotAvailable, aiohttp_socks.ProxyConnectionError) as err:
1046
1047
  self.raise_or_prefix_proxy_error_if_relevant(
1047
1048
  err,
1048
1049
  octobot_trading.errors.FailedRequest(
@@ -183,38 +183,23 @@ class Trader(util.Initializable):
183
183
  previous_exchange_order_id = order.exchange_order_id
184
184
  try:
185
185
  async with order.lock:
186
+ disabled_state_updater = self.exchange_manager.exchange_personal_data \
187
+ .orders_manager.enable_order_auto_synchronization is False
186
188
  # now that we got the lock, ensure we can edit the order
187
- if not self.simulate and not order.is_self_managed() and order.state is not None:
188
- # careful here: make sure we are not editing an order on exchange that is being updated
189
- # somewhere else
190
- async with order.state.refresh_operation():
191
- self.logger.info(f"Editing order: {order} ["
192
- f"edited_quantity: {str(edited_quantity)} "
193
- f"edited_price: {str(edited_price)} "
194
- f"edited_stop_price: {str(edited_stop_price)} "
195
- f"edited_current_price: {str(edited_current_price)}"
196
- f"]")
197
- order_params = self.exchange_manager.exchange.get_order_additional_params(order)
198
- order_params.update(params or {})
199
- # fill in every param as some exchange rely on re-creating the order altogether
200
- edited_order = await self.exchange_manager.exchange.edit_order(
201
- order.exchange_order_id,
202
- order.order_type,
203
- order.symbol,
204
- quantity=order.origin_quantity if edited_quantity is None else edited_quantity,
205
- price=order.origin_price if edited_price is None else edited_price,
206
- stop_price=edited_stop_price,
207
- side=order.side,
208
- current_price=edited_current_price,
209
- params=order_params
189
+ if not self.simulate and not order.is_self_managed() and (
190
+ order.state is not None or disabled_state_updater
191
+ ):
192
+ if disabled_state_updater:
193
+ changed = await self._edit_order_on_exchange(
194
+ order, edited_quantity, edited_price, edited_stop_price, edited_current_price, params
210
195
  )
211
- # apply new values from returned order (even order id might have changed)
212
- self.logger.debug(f"Successfully edited order on {self.exchange_manager.exchange_name}, "
213
- f"new order values: {edited_order}")
214
- changed = order.update_from_raw(edited_order)
215
- # update portfolio from exchange
216
- await self.exchange_manager.exchange_personal_data.\
217
- handle_portfolio_and_position_update_from_order(order)
196
+ else:
197
+ # careful here: make sure we are not editing an order on exchange that is being updated
198
+ # somewhere else
199
+ async with order.state.refresh_operation():
200
+ changed = await self._edit_order_on_exchange(
201
+ order, edited_quantity, edited_price, edited_stop_price, edited_current_price, params
202
+ )
218
203
  else:
219
204
  # consider order as cancelled to release portfolio amounts
220
205
  self.exchange_manager.exchange_personal_data.portfolio_manager.portfolio.update_portfolio_available(
@@ -242,6 +227,41 @@ class Trader(util.Initializable):
242
227
  # order id changed: update orders_manager to keep consistency
243
228
  self.exchange_manager.exchange_personal_data.orders_manager.replace_order(order.order_id, order)
244
229
 
230
+ async def _edit_order_on_exchange(
231
+ self, order,
232
+ edited_quantity: decimal.Decimal,
233
+ edited_price: decimal.Decimal,
234
+ edited_stop_price: decimal.Decimal,
235
+ edited_current_price: decimal.Decimal,
236
+ params: dict
237
+ ) -> bool:
238
+ self.logger.info(
239
+ f"Editing order: {order} [edited_quantity: {str(edited_quantity)} edited_price: {str(edited_price)} "
240
+ f"edited_stop_price: {str(edited_stop_price)} edited_current_price: {str(edited_current_price)}]"
241
+ )
242
+ order_params = self.exchange_manager.exchange.get_order_additional_params(order)
243
+ order_params.update(params or {})
244
+ # fill in every param as some exchange rely on re-creating the order altogether
245
+ edited_order = await self.exchange_manager.exchange.edit_order(
246
+ order.exchange_order_id,
247
+ order.order_type,
248
+ order.symbol,
249
+ quantity=order.origin_quantity if edited_quantity is None else edited_quantity,
250
+ price=order.origin_price if edited_price is None else edited_price,
251
+ stop_price=edited_stop_price,
252
+ side=order.side,
253
+ current_price=edited_current_price,
254
+ params=order_params
255
+ )
256
+ # apply new values from returned order (even order id might have changed)
257
+ self.logger.debug(
258
+ f"Successfully edited order on {self.exchange_manager.exchange_name}, new order values: {edited_order}"
259
+ )
260
+ changed = order.update_from_raw(edited_order)
261
+ # update portfolio from exchange
262
+ await self.exchange_manager.exchange_personal_data.handle_portfolio_and_position_update_from_order(order)
263
+ return changed
264
+
245
265
  async def _create_new_order(self, new_order, params: dict,
246
266
  wait_for_creation=True,
247
267
  creation_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT) -> object:
@@ -16,6 +16,7 @@
16
16
  import contextlib
17
17
  import asyncio
18
18
  import concurrent.futures
19
+ import typing
19
20
 
20
21
  import async_channel.enums as channel_enums
21
22
 
@@ -178,7 +179,19 @@ class AbstractTradingModeProducer(modes_channel.ModeChannelProducer):
178
179
  self.exchange_manager.id).matrix_id
179
180
  await self._subscribe_to_registration_topic(registration_topics, currency_filter, symbol_filter)
180
181
  await self.init_user_inputs(False)
181
- await self._wait_for_bot_init(self.CONFIG_INIT_TIMEOUT)
182
+ await self._wait_for_bot_init(
183
+ self.CONFIG_INIT_TIMEOUT,
184
+ extra_symbol_topics=self.get_extra_init_symbol_topics(),
185
+ extra_global_topics=self.get_extra_global_topics()
186
+ )
187
+
188
+ def get_extra_init_symbol_topics(self) -> typing.Optional[list]:
189
+ # Implement if necessary
190
+ return None
191
+
192
+ def get_extra_global_topics(self) -> typing.Optional[list]:
193
+ # Implement if necessary
194
+ return None
182
195
 
183
196
  async def _subscribe_to_registration_topic(self, registration_topics, currency_filter, symbol_filter):
184
197
  for registration_topic in registration_topics:
@@ -37,7 +37,7 @@ async def get_amount_from_input_amount(
37
37
  amount_type, amount_value = dsl.parse_quantity(input_amount)
38
38
 
39
39
  if amount_type is dsl.QuantityType.UNKNOWN or amount_value <= 0:
40
- raise trading_errors.InvalidArgumentError("amount cant be zero or negative")
40
+ raise trading_errors.InvalidArgumentError("Amount cant be zero or negative (amount: {amount_value})")
41
41
 
42
42
  if amount_type in (dsl.QuantityType.DELTA, dsl.QuantityType.DELTA_BASE):
43
43
  # nothing to do
@@ -116,7 +116,7 @@ class BalancedTakeProfitAndStopOrderGroup(order_group.OrderGroup):
116
116
  self.logger.error(f"Skipping order cancel: {err}")
117
117
  updated_orders = True
118
118
  for update_data in take_profit_actions[self.UPDATE] + stop_actions[self.UPDATE]:
119
- self.logger.info(f"Updating order side to {update_data[self.UPDATED_QUANTITY]} to keep balance, "
119
+ self.logger.info(f"Updating order quantity to {update_data[self.UPDATED_QUANTITY]} to keep balance, "
120
120
  f"order: {update_data[self.ORDER]}")
121
121
  order = update_data[self.ORDER]
122
122
  async with signals.remote_signal_publisher(order.trader.exchange_manager, order.symbol, True):
@@ -131,9 +131,11 @@ class BalancedTakeProfitAndStopOrderGroup(order_group.OrderGroup):
131
131
  self.logger.exception(e, True, f"Error when balancing orders: {e}")
132
132
  finally:
133
133
  # remove locally_balancing_orders from self.balancing_orders
134
- self.balancing_orders = [order
135
- for order in self.balancing_orders
136
- if order not in locally_balancing_orders]
134
+ self.balancing_orders = [
135
+ order
136
+ for order in self.balancing_orders
137
+ if order not in locally_balancing_orders
138
+ ]
137
139
 
138
140
  def _get_balance(self, closed_order, ignored_orders):
139
141
  balance = {
@@ -141,9 +143,11 @@ class BalancedTakeProfitAndStopOrderGroup(order_group.OrderGroup):
141
143
  self.STOP: _SideBalance()
142
144
  }
143
145
  for order in self.get_group_open_orders():
144
- if order is not closed_order \
145
- and (ignored_orders is None or order not in ignored_orders) \
146
- and order not in self.balancing_orders:
146
+ if (
147
+ order is not closed_order
148
+ and (ignored_orders is None or order not in ignored_orders)
149
+ and order not in self.balancing_orders
150
+ ):
147
151
  if order_util.is_stop_order(order.order_type):
148
152
  balance[self.STOP].add_order(order)
149
153
  else:
@@ -227,7 +227,7 @@ class Order(util.Initializable):
227
227
  should_update_total_cost = True
228
228
 
229
229
  if self.trader.simulate:
230
- if quantity and not self.filled_quantity:
230
+ if quantity and self.filled_quantity != quantity:
231
231
  self.filled_quantity = quantity
232
232
  changed = True
233
233
  should_update_total_cost = True
@@ -433,7 +433,7 @@ def is_stop_trade_order_type(order_type: enums.TradeOrderType):
433
433
  ]
434
434
 
435
435
 
436
- def is_take_profit_order(order_type):
436
+ def is_take_profit_order(order_type: enums.TraderOrderType):
437
437
  return order_type in [
438
438
  enums.TraderOrderType.TAKE_PROFIT, enums.TraderOrderType.TAKE_PROFIT_LIMIT,
439
439
  ]
@@ -165,9 +165,17 @@ class TradesManager(util.Initializable):
165
165
  try:
166
166
  if self.trader.exchange_manager.storage_manager.trades_storage:
167
167
  full_history = await self.trader.exchange_manager.storage_manager.trades_storage.get_history()
168
- self.logger.debug(f"Loaded {len(full_history)} trades")
169
- for trade_dict in full_history:
170
- self.upsert_trade_instance(personal_data.Trade.from_dict(self.trader, trade_dict))
168
+ self.logger.debug(
169
+ f"Loading {len(full_history)} {self.trader.exchange_manager.exchange_name} historical trades ..."
170
+ )
171
+ if full_history:
172
+ for trade_dict in full_history:
173
+ self.upsert_trade_instance(personal_data.Trade.from_dict(self.trader, trade_dict))
174
+ self.logger.debug(
175
+ f"Included {dict(self._get_trades_count_by_symbols())} "
176
+ f"{self.trader.exchange_manager.exchange_name} trades"
177
+ )
178
+
171
179
  if reset:
172
180
  # reset uploaded trades history
173
181
  await self.trader.exchange_manager.storage_manager.trades_storage.trigger_debounced_update_auth_data(
@@ -183,13 +191,25 @@ class TradesManager(util.Initializable):
183
191
  except Exception as err:
184
192
  self.logger.exception(err, True, f"Error when loading local trade history {err}")
185
193
 
194
+ def _get_trades_count_by_symbols(self, trades=None):
195
+ return collections.Counter(
196
+ trade.symbol
197
+ for trade in (trades or self.trades.values())
198
+ )
199
+
186
200
  def _remove_oldest_trades(self, nb_to_remove):
187
201
  self.logger.info(
188
- f"Clearing the {nb_to_remove} oldest historical trades as the maximum count of trades ("
189
- f"{self.MAX_TRADES_COUNT}) has been reached"
202
+ f"Clearing the {nb_to_remove} oldest historical {self.trader.exchange_manager.exchange_name} "
203
+ f"trades as the maximum count of trades ({self.MAX_TRADES_COUNT}) has been reached"
190
204
  )
205
+ popped = []
191
206
  for _ in range(nb_to_remove):
192
- self.trades.popitem(last=False)
207
+ popped.append(self.trades.popitem(last=False)[1])
208
+ self.logger.info(
209
+ f"Cleared the {len(popped)} {self.trader.exchange_manager.exchange_name} oldest historical trades: "
210
+ f"{dict(self._get_trades_count_by_symbols(trades=popped))}"
211
+ )
212
+
193
213
 
194
214
  def _set_initialized_event(self, symbol):
195
215
  # set init in updater as it's the only place we know if we fetched trades or not regardless of trades existence
@@ -9,6 +9,7 @@ trading-backend>=1.2.35
9
9
 
10
10
  # Exchange connection requirements
11
11
  ccxt==4.3.85 # always ensure real exchanges tests (in tests_additional and authenticated exchange tests) are passing before changing the ccxt version
12
+ aiohttp_socks==0.10.1 # used by ccxt socks proxy aiohttp connectors
12
13
 
13
14
  cryptography # Never specify a version (managed by https://github.com/Drakkar-Software/OctoBot-PyPi-Linux-Deployer)
14
15
 
@@ -18,6 +18,7 @@ import decimal
18
18
  import ccxt
19
19
  import aiohttp
20
20
  import aiohttp.client_reqrep
21
+ import aiohttp_socks
21
22
 
22
23
  import mock
23
24
  from mock import patch
@@ -265,7 +266,13 @@ async def test_error_describer(ccxt_connector):
265
266
  with pytest.raises(octobot_trading.errors.ExchangeProxyError):
266
267
  # proxy connection error
267
268
  with ccxt_connector.error_describer():
268
- raise ccxt.AuthenticationError from aiohttp.ClientProxyConnectionError(
269
+ raise ccxt.AuthenticationError from aiohttp_socks.ProxyConnectionError(
270
+ aiohttp.client_reqrep.ConnectionKey("host", 11, True, True, None, None, None), OSError("plop")
271
+ )
272
+ with pytest.raises(octobot_trading.errors.ExchangeProxyError):
273
+ # proxy connection error
274
+ with ccxt_connector.error_describer():
275
+ raise aiohttp_socks.ProxyConnectionError(
269
276
  aiohttp.client_reqrep.ConnectionKey("host", 11, True, True, None, None, None), OSError("plop")
270
277
  )
271
278
  with mock.patch.object(