OctoBot-Trading 2.4.97__tar.gz → 2.4.98__tar.gz

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