OctoBot-Trading 2.4.185__tar.gz → 2.4.187__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 (509) hide show
  1. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/CHANGELOG.md +9 -0
  2. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.185/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.187}/PKG-INFO +2 -2
  4. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/README.md +1 -1
  5. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/__init__.py +1 -1
  6. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/constants.py +2 -0
  7. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/enums.py +7 -0
  8. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/errors.py +12 -0
  9. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +21 -15
  10. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +5 -2
  11. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +35 -4
  12. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/exchange_factory.py +4 -3
  13. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/implementations/exchange_simulator.py +8 -2
  14. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/types/rest_exchange.py +12 -1
  15. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/__init__.py +2 -0
  16. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/__init__.py +3 -0
  17. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/order_util.py +22 -0
  18. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/__init__.py +3 -0
  19. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/test_exchange_simulator.py +2 -0
  20. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/test_order_util.py +54 -0
  21. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/real_exchange_tester.py +2 -2
  22. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_hollaex.py +1 -1
  23. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/LICENSE +0 -0
  24. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/MANIFEST.in +0 -0
  25. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
  26. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  27. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  28. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/OctoBot_Trading.egg-info/requires.txt +0 -0
  29. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  30. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/__init__.py +0 -0
  31. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/channels.py +0 -0
  32. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/contracts.py +0 -0
  33. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/exchange.py +0 -0
  34. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/modes.py +0 -0
  35. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/orders.py +0 -0
  36. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/portfolio.py +0 -0
  37. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/positions.py +0 -0
  38. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/profitability.py +0 -0
  39. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/storage.py +0 -0
  40. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/symbol_data.py +0 -0
  41. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/trader.py +0 -0
  42. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/trades.py +0 -0
  43. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_channel.py +0 -0
  44. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/__init__.py +0 -0
  45. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  46. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  47. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  48. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  49. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  50. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  51. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  52. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  53. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  54. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  55. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  56. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  57. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  58. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  59. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  60. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  61. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  62. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  63. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  64. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  65. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  66. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  67. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  68. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  69. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  70. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  71. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  72. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  73. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  74. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  75. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  76. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  77. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  78. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  79. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  80. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  81. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  82. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  83. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  84. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  85. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  86. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  87. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  88. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  89. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  90. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  91. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  92. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  93. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  94. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  95. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  96. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/__init__.py +0 -0
  97. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  98. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  99. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  100. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  101. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/config/__init__.py +0 -0
  102. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  103. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  104. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/config/exchange_credentials_data.py +0 -0
  105. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/config/proxy_config.py +0 -0
  106. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  107. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  108. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
  109. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
  110. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  111. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  112. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  113. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  114. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  115. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  116. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/exchange_builder.py +0 -0
  117. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/exchange_channels.py +0 -0
  118. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/exchange_details.py +0 -0
  119. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/exchange_manager.py +0 -0
  120. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  121. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/exchanges.py +0 -0
  122. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  123. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  124. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  125. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/traders/__init__.py +0 -0
  126. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/traders/trader.py +0 -0
  127. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  128. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/types/__init__.py +0 -0
  129. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  130. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/util/__init__.py +0 -0
  131. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  132. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  133. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  134. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  135. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/__init__.py +0 -0
  136. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/abstract_trading_mode.py +0 -0
  137. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/channel/__init__.py +0 -0
  138. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  139. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  140. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/channel/mode.py +0 -0
  141. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/mode_activity.py +0 -0
  142. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/mode_config.py +0 -0
  143. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/modes_factory.py +0 -0
  144. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/modes_util.py +0 -0
  145. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  146. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  147. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  148. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  149. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  150. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  151. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  152. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  153. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  154. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  155. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  156. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  157. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  158. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  159. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  160. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  161. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/octobot_channel_consumer.py +0 -0
  162. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  163. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/active_order_swap_strategies/__init__.py +0 -0
  164. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/active_order_swap_strategies/active_order_swap_strategy.py +0 -0
  165. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/active_order_swap_strategies/stop_first_active_order_swap_strategy.py +0 -0
  166. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/active_order_swap_strategies/take_profit_first_active_order_swap_strategy.py +0 -0
  167. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  168. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  169. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  170. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  171. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  172. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  173. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  174. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  175. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  176. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/groups/trailing_on_filled_tp_balanced_order_group.py +0 -0
  177. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/order.py +0 -0
  178. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  179. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  180. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/order_group.py +0 -0
  181. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/order_state.py +0 -0
  182. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  183. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  184. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  185. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  186. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  187. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  188. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  189. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  190. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  191. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  192. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/trailing_profiles/__init__.py +0 -0
  193. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/trailing_profiles/filled_take_profit_trailing_profile.py +0 -0
  194. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/trailing_profiles/trailing_price_step.py +0 -0
  195. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile.py +0 -0
  196. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile_factory.py +0 -0
  197. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile_types.py +0 -0
  198. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/triggers/__init__.py +0 -0
  199. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/triggers/base_trigger.py +0 -0
  200. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/triggers/price_trigger.py +0 -0
  201. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  202. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  203. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  204. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  205. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  206. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  207. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  208. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  209. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  210. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  211. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  212. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  213. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  214. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  215. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  216. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  217. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  218. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  219. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  220. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  221. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  222. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  223. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  224. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  225. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  226. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  227. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  228. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  229. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  230. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  231. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  232. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  233. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  234. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  235. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  236. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  237. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  238. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  239. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  240. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/sub_portfolio_data.py +0 -0
  241. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  242. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  243. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  244. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  245. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  246. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/__init__.py +0 -0
  247. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  248. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  249. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  250. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  251. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/position.py +0 -0
  252. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  253. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/position_state.py +0 -0
  254. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/position_util.py +0 -0
  255. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  256. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  257. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  258. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  259. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  260. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  261. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  262. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  263. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  264. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/state.py +0 -0
  265. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/__init__.py +0 -0
  266. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  267. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  268. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  269. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/trade.py +0 -0
  270. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  271. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  272. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  273. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  274. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  275. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  276. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  277. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  278. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  279. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  280. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  281. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  282. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  283. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/signals/__init__.py +0 -0
  284. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/signals/channel/__init__.py +0 -0
  285. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  286. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  287. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/signals/channel/signal_producer.py +0 -0
  288. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/signals/signal_creation.py +0 -0
  289. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  290. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/signals/util.py +0 -0
  291. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/__init__.py +0 -0
  292. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/abstract_storage.py +0 -0
  293. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/candles_storage.py +0 -0
  294. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/orders_storage.py +0 -0
  295. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/portfolio_storage.py +0 -0
  296. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/storage_manager.py +0 -0
  297. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/trades_storage.py +0 -0
  298. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/transactions_storage.py +0 -0
  299. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/util.py +0 -0
  300. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/supervisors/__init__.py +0 -0
  301. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  302. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  303. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/__init__.py +0 -0
  304. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/config_util.py +0 -0
  305. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/initializable.py +0 -0
  306. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/initialization_util.py +0 -0
  307. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/simulator_updater_utils.py +0 -0
  308. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/test_tools/__init__.py +0 -0
  309. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  310. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  311. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  312. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  313. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/requirements.txt +0 -0
  314. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/setup.cfg +0 -0
  315. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/setup.py +0 -0
  316. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/__init__.py +0 -0
  317. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_channels.py +0 -0
  318. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_exchange.py +0 -0
  319. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_modes.py +0 -0
  320. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_orders.py +0 -0
  321. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_portfolio.py +0 -0
  322. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_profitability.py +0 -0
  323. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_symbol_data.py +0 -0
  324. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_trader.py +0 -0
  325. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_trades.py +0 -0
  326. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/cli/__init__.py +0 -0
  327. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/__init__.py +0 -0
  328. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/contracts/__init__.py +0 -0
  329. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  330. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  331. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/funding/__init__.py +0 -0
  332. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  333. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/kline/__init__.py +0 -0
  334. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  335. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/ohlcv/__init__.py +0 -0
  336. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  337. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  338. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/order_book/__init__.py +0 -0
  339. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  340. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/prices/__init__.py +0 -0
  341. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  342. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  343. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/recent_trades/__init__.py +0 -0
  344. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  345. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  346. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/ticker/__init__.py +0 -0
  347. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  348. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/connectors/__init__.py +0 -0
  349. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  350. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  351. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  352. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/implementations/__init__.py +0 -0
  353. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  354. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  355. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/test_abstract_exchange.py +0 -0
  356. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  357. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/test_exchange_builder.py +0 -0
  358. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/test_exchange_config_data.py +0 -0
  359. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/test_exchange_factory.py +0 -0
  360. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/test_exchange_manager.py +0 -0
  361. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/test_exchanges.py +0 -0
  362. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/traders/__init__.py +0 -0
  363. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/traders/test_trader.py +0 -0
  364. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/types/__init__.py +0 -0
  365. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  366. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/util/__init__.py +0 -0
  367. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  368. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/util/test_exchange_util.py +0 -0
  369. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/__init__.py +0 -0
  370. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/script_keywords/__init__.py +0 -0
  371. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  372. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  373. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  374. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  375. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  376. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  377. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  378. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/test_abstract_mode_consumer.py +0 -0
  379. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/test_abstract_trading_mode.py +0 -0
  380. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/test_modes_util.py +0 -0
  381. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/__init__.py +0 -0
  382. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/__init__.py +0 -0
  383. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/active_order_swap_strategies/__init__.py +0 -0
  384. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/active_order_swap_strategies/test_active_order_swap_strategy.py +0 -0
  385. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/active_order_swap_strategies/test_stop_first_active_order_swap_strategy.py +0 -0
  386. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/active_order_swap_strategies/test_take_profit_first_active_order_swap_strategy.py +0 -0
  387. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/groups/__init__.py +0 -0
  388. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  389. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  390. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  391. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/groups/test_trailing_on_filled_tp_balanced_order_group.py +0 -0
  392. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/__init__.py +0 -0
  393. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  394. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  395. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  396. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  397. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/test_order_state.py +0 -0
  398. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  399. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  400. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  401. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  402. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  403. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/test_order.py +0 -0
  404. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/test_order_adapter.py +0 -0
  405. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/test_order_factory.py +0 -0
  406. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/test_orders_manager.py +0 -0
  407. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  408. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/trailing_profiles/__init__.py +0 -0
  409. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/trailing_profiles/test_filled_take_profit_trailing_profile.py +0 -0
  410. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/trailing_profiles/test_trailing_profile_factory.py +0 -0
  411. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/triggers/__init__.py +0 -0
  412. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/triggers/test_base_trigger.py +0 -0
  413. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/triggers/test_price_trigger.py +0 -0
  414. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/__init__.py +0 -0
  415. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  416. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  417. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  418. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  419. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  420. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  421. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  422. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  423. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/market/__init__.py +0 -0
  424. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  425. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  426. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  427. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  428. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  429. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  430. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/__init__.py +0 -0
  431. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  432. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  433. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  434. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  435. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/history/__init__.py +0 -0
  436. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  437. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  438. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/test_asset.py +0 -0
  439. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  440. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  441. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  442. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/test_portfolio_util.py +0 -0
  443. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  444. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/test_sub_portfolio_data.py +0 -0
  445. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  446. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/types/__init__.py +0 -0
  447. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  448. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  449. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  450. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/__init__.py +0 -0
  451. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/channel/__init__.py +0 -0
  452. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/states/__init__.py +0 -0
  453. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/test_position.py +0 -0
  454. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/test_position_factory.py +0 -0
  455. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/test_positions_manager.py +0 -0
  456. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/types/__init__.py +0 -0
  457. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  458. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  459. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/trades/__init__.py +0 -0
  460. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/trades/test_trade_factory.py +0 -0
  461. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/trades/test_trade_manager.py +0 -0
  462. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  463. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/trades/test_trade_util.py +0 -0
  464. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/transactions/__init__.py +0 -0
  465. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  466. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  467. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/signals/__init__.py +0 -0
  468. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  469. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/signals/test_util.py +0 -0
  470. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/test_utils/__init__.py +0 -0
  471. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/test_utils/order_util.py +0 -0
  472. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/test_utils/random_numbers.py +0 -0
  473. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/util/__init__.py +0 -0
  474. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/util/test_config_util.py +0 -0
  475. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/__init__.py +0 -0
  476. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/__init__.py +0 -0
  477. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  478. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  479. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_binance.py +0 -0
  480. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  481. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bingx.py +0 -0
  482. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  483. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bitget.py +0 -0
  484. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  485. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bitmart.py +0 -0
  486. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bitmex.py +0 -0
  487. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bitso.py +0 -0
  488. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  489. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bybit.py +0 -0
  490. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  491. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  492. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_coinex.py +0 -0
  493. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  494. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_gateio.py +0 -0
  495. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  496. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_htx.py +0 -0
  497. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_hyperliquid.py +0 -0
  498. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_kraken.py +0 -0
  499. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  500. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  501. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_mexc.py +0 -0
  502. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_ndax.py +0 -0
  503. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  504. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_okx.py +0 -0
  505. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  506. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_phemex.py +0 -0
  507. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  508. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_upbit.py +0 -0
  509. {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [2.4.187] - 2025-06-08
8
+ ### Updated
9
+ [Exchanges] make fees more flexible
10
+
11
+ ## [2.4.186] - 2025-06-05
12
+ ### Updated
13
+ [Orders] add ensure_orders_limit
14
+ [Exchange] add get_max_orders_count
15
+
7
16
  ## [2.4.185] - 2025-06-04
8
17
  ### Updated
9
18
  [Exchanges] add supports_api_leverage_update
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.185
3
+ Version: 2.4.187
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.185](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.187](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.185
3
+ Version: 2.4.187
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.185](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.187](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.185](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.187](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.185" # major.minor.revision
18
+ VERSION = "2.4.187" # major.minor.revision
@@ -46,6 +46,8 @@ CHAINED_ORDERS_OUTDATED_PRICE_ALLOWANCE = decimal.Decimal("0.005") # allows 0.5
46
46
  # create instantly filled limit orders 0.5% beyond market
47
47
  INSTANT_FILLED_LIMIT_ORDER_PRICE_DELTA = decimal.Decimal("0.005")
48
48
  CREATED_ORDER_FORCED_UPDATE_PERIOD = 5
49
+ DEFAULT_MAX_DEFAULT_ORDERS_COUNT = 50
50
+ DEFAULT_MAX_STOP_ORDERS_COUNT = 5
49
51
 
50
52
  # Portfolio
51
53
  MAX_PORTFOLIO_SYNC_ATTEMPTS = 1
@@ -399,6 +399,13 @@ class ExchangeConstantsMarketPropertyColumns(enum.Enum):
399
399
  TAKER = "taker" # trading
400
400
  MAKER = "maker" # trading
401
401
  FEE = "fee" # withdraw
402
+ FEE_SIDE = "feeSide" # pay fees in the currency you give or get
403
+
404
+
405
+ class ExchangeFeeSides(enum.Enum):
406
+ GET = "get" # the fee is always in the currency you get
407
+ GIVE = "give" # the fee is always in the currency you give
408
+ QUOTE = "quote" # the fee is always in quote currency
402
409
 
403
410
 
404
411
  class ExchangeConstantsLeveragePropertyColumns(enum.Enum):
@@ -63,6 +63,12 @@ class UntradableSymbolError(OrderCreationError):
63
63
  """
64
64
 
65
65
 
66
+ class MaxOpenOrderReachedForSymbolError(OrderCreationError):
67
+ """
68
+ Raised when an order can't be created because the maximum amount of orders of this time has been reached
69
+ """
70
+
71
+
66
72
  class OrderEditError(OctoBotExchangeError):
67
73
  """
68
74
  Raised upon a failed order edition
@@ -348,3 +354,9 @@ class ExhaustedTrailingProfileError(Exception):
348
354
  """
349
355
  Raised when a trailing profile has no new price to produce anymore
350
356
  """
357
+
358
+
359
+ class MissingFeeDetailsError(Exception):
360
+ """
361
+ Raised when fee info are not available
362
+ """
@@ -599,8 +599,8 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
599
599
 
600
600
  def _add_stop_loss_price_param(self, params: dict, price: float):
601
601
  params = params or {}
602
- if ccxt_enums.ExchangeOrderCCXTUnifiedParams.STOP_LOSS_PRICE.value not in params:
603
- params[ccxt_enums.ExchangeOrderCCXTUnifiedParams.STOP_LOSS_PRICE.value] = price
602
+ if self.exchange_manager.exchange.STOP_LOSS_CREATE_PRICE_PARAM not in params:
603
+ params[self.exchange_manager.exchange.STOP_LOSS_CREATE_PRICE_PARAM] = price
604
604
  return params
605
605
 
606
606
  def _add_edit_stop_loss_price_param(self, params: dict, price: float):
@@ -889,19 +889,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
889
889
  raise RuntimeError(f"Unknown order type: {order_type}")
890
890
 
891
891
  def get_trade_fee(self, symbol: str, order_type: enums.TraderOrderType, quantity, price, taker_or_maker):
892
- limit_or_market_order_type = (
893
- enums.TradeOrderType.MARKET
894
- if taker_or_maker == enums.ExchangeConstantsMarketPropertyColumns.TAKER.value
895
- else enums.TradeOrderType.LIMIT
896
- )
897
- fees = self.client.calculate_fee(
898
- symbol=symbol,
899
- type=limit_or_market_order_type.value,
900
- side=exchanges.get_order_side(order_type),
901
- amount=float(quantity),
902
- price=float(price),
903
- takerOrMaker=taker_or_maker
904
- )
892
+ fees = self.calculate_fees(symbol, order_type, quantity, price, taker_or_maker)
905
893
  fees[enums.FeePropertyColumns.IS_FROM_EXCHANGE.value] = False
906
894
  fees[enums.FeePropertyColumns.COST.value] = decimal.Decimal(
907
895
  str(fees.get(enums.FeePropertyColumns.COST.value) or 0)
@@ -920,6 +908,24 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
920
908
  fees[enums.FeePropertyColumns.CURRENCY.value] = parsed_symbol.quote
921
909
  return fees
922
910
 
911
+ def calculate_fees(
912
+ self, symbol: str, order_type: enums.TraderOrderType,
913
+ quantity: decimal.Decimal, price: decimal.Decimal, taker_or_maker: str
914
+ ):
915
+ limit_or_market_order_type = (
916
+ enums.TradeOrderType.MARKET
917
+ if taker_or_maker == enums.ExchangeConstantsMarketPropertyColumns.TAKER.value
918
+ else enums.TradeOrderType.LIMIT
919
+ )
920
+ return self.client.calculate_fee(
921
+ symbol=symbol,
922
+ type=limit_or_market_order_type.value,
923
+ side=exchanges.get_order_side(order_type),
924
+ amount=float(quantity),
925
+ price=float(price),
926
+ takerOrMaker=taker_or_maker
927
+ )
928
+
923
929
  def get_fees(self, symbol):
924
930
  try:
925
931
  return ccxt_client_util.get_fees(self.client.market(symbol))
@@ -18,9 +18,12 @@ import decimal
18
18
  import octobot_trading.exchanges.connectors.ccxt.ccxt_client_util as ccxt_client_util
19
19
 
20
20
 
21
- def parse_markets(exchange_name, market_filter) -> dict:
21
+ def parse_markets(exchange_name: str, additional_client_config: dict, market_filter) -> dict:
22
22
  exchange_class = ccxt_client_util.ccxt_exchange_class_factory(exchange_name)
23
- config = ccxt_client_util.get_custom_domain_config(exchange_class)
23
+ config = {
24
+ **additional_client_config,
25
+ **ccxt_client_util.get_custom_domain_config(exchange_class)
26
+ }
24
27
  client = exchange_class(config)
25
28
  ccxt_client_util.load_markets_from_cache(client, market_filter)
26
29
  return client.markets
@@ -66,17 +66,18 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
66
66
 
67
67
  # init _forced_market_statuses when allowed
68
68
  if self.exchange_manager.use_cached_markets:
69
- self._init_forced_market_statuses()
69
+ additional_client_config = await self._get_additional_client_config()
70
+ self._init_forced_market_statuses(additional_client_config)
70
71
 
71
72
  def get_adapter_class(self, adapter_class):
72
73
  return adapter_class or exchange_simulator_adapter.ExchangeSimulatorAdapter
73
74
 
74
- def _init_forced_market_statuses(self):
75
+ def _init_forced_market_statuses(self, additional_client_config):
75
76
  def market_filter(market):
76
77
  return market[enums.ExchangeConstantsMarketStatusColumns.SYMBOL.value] in self.symbols
77
78
 
78
79
  self._forced_market_statuses = ccxt_client_simulation.parse_markets(
79
- self._get_exchange_class_rest_name(), market_filter
80
+ self._get_exchange_class_rest_name(), additional_client_config, market_filter
80
81
  )
81
82
 
82
83
  def _get_exchange_class_rest_name(self):
@@ -84,6 +85,21 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
84
85
  return self.exchange_manager.exchange.exchange_tentacle_class.get_rest_name(self.exchange_manager)
85
86
  return self.exchange_manager.exchange_class_string
86
87
 
88
+ async def _get_additional_client_config(self) -> dict:
89
+ if (
90
+ self.exchange_manager.exchange.exchange_tentacle_class
91
+ and self.exchange_manager.exchange.exchange_tentacle_class.HAS_FETCHED_DETAILS
92
+ ):
93
+ await self.exchange_manager.exchange.exchange_tentacle_class.fetch_exchange_config(
94
+ self.exchange_manager.exchange.exchange_config_by_exchange, self.exchange_manager
95
+ )
96
+ return self.exchange_manager.exchange.exchange_tentacle_class.get_custom_url_config(
97
+ self.exchange_manager.exchange.exchange_config_by_exchange.get(
98
+ self.exchange_manager.exchange.exchange_tentacle_class.__name__, {}
99
+ ), self.exchange_manager.exchange_name
100
+ )
101
+ return {}
102
+
87
103
  def should_adapt_market_statuses(self) -> bool:
88
104
  return self.exchange_manager.use_cached_markets
89
105
 
@@ -242,6 +258,17 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
242
258
  # 'is_from_exchange': False, // simulated fees
243
259
  # }
244
260
  def get_trade_fee(self, symbol: str, order_type: enums.TraderOrderType, quantity, price, taker_or_maker):
261
+ fees = self.calculate_fees(symbol, order_type, quantity, price, taker_or_maker)
262
+ fees[enums.FeePropertyColumns.IS_FROM_EXCHANGE.value] = False
263
+ fees[enums.FeePropertyColumns.COST.value] = decimal.Decimal(
264
+ str(fees.get(enums.FeePropertyColumns.COST.value) or 0)
265
+ )
266
+ return fees
267
+
268
+ def calculate_fees(
269
+ self, symbol: str, order_type: enums.TraderOrderType,
270
+ quantity: decimal.Decimal, price: decimal.Decimal, taker_or_maker: str
271
+ ):
245
272
  if not taker_or_maker:
246
273
  taker_or_maker = enums.ExchangeConstantsMarketPropertyColumns.TAKER.value
247
274
  base, quote = symbol_util.parse_symbol(symbol).base_and_quote()
@@ -258,7 +285,6 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
258
285
  enums.FeePropertyColumns.CURRENCY.value: fee_currency,
259
286
  enums.FeePropertyColumns.RATE.value: rate,
260
287
  enums.FeePropertyColumns.COST.value: cost,
261
- enums.FeePropertyColumns.IS_FROM_EXCHANGE.value: False,
262
288
  }
263
289
 
264
290
  def _get_fees_currency(self, base, quote, order_type: enums.TraderOrderType):
@@ -266,6 +292,11 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
266
292
  return quote
267
293
  return base
268
294
 
295
+ @classmethod
296
+ def register_simulator_connector_fee_methods(cls, exchange_name: str, simulator_connector):
297
+ # override when using custom fees in backtesting is necessary
298
+ pass
299
+
269
300
  def get_time_frames(self, importer):
270
301
  return time_frame_manager.sort_time_frames(list(set(backtesting_api.get_available_time_frames(importer)) &
271
302
  set(self.exchange_manager.exchange_config.available_time_frames)),
@@ -29,7 +29,7 @@ async def create_exchanges(exchange_manager, exchange_config_by_exchange: typing
29
29
 
30
30
  if exchange_manager.is_backtesting:
31
31
  # simulated : create exchange simulator instance
32
- await create_simulated_exchange(exchange_manager)
32
+ await create_simulated_exchange(exchange_manager, exchange_config_by_exchange)
33
33
  exchange_manager.load_constants()
34
34
  else:
35
35
  # real : create a rest or websocket exchange instance
@@ -139,9 +139,10 @@ async def _create_rest_exchange(
139
139
  raise Exception(f"Can't create an exchange instance that match the exchange configuration ({exchange_manager})")
140
140
 
141
141
 
142
- async def create_simulated_exchange(exchange_manager):
142
+ async def create_simulated_exchange(exchange_manager, exchange_config_by_exchange: typing.Optional[dict[str, dict]]):
143
143
  exchange_manager.exchange = exchanges.ExchangeSimulator(
144
- exchange_manager.config, exchange_manager, exchange_manager.backtesting
144
+ exchange_manager.config, exchange_manager, exchange_manager.backtesting,
145
+ exchange_config_by_exchange=exchange_config_by_exchange
145
146
  )
146
147
 
147
148
  await exchange_manager.exchange.initialize()
@@ -34,6 +34,7 @@ class ExchangeSimulator(rest_exchange.RestExchange):
34
34
  self.exchange_importers = []
35
35
  self.exchange_tentacle_class = None
36
36
  self.exchange_tentacle = None
37
+ self.exchange_config_by_exchange = exchange_config_by_exchange
37
38
  super().__init__(config, exchange_manager, exchange_config_by_exchange)
38
39
 
39
40
  def _create_connector(self, config, exchange_manager, connector_class):
@@ -46,12 +47,17 @@ class ExchangeSimulator(rest_exchange.RestExchange):
46
47
 
47
48
  async def initialize_impl(self):
48
49
  self.exchange_tentacle_class = exchange_util.get_rest_exchange_class(
49
- self.exchange_manager.exchange_name, self.exchange_manager.tentacles_setup_config, None
50
+ self.exchange_manager.exchange_name, self.exchange_manager.tentacles_setup_config,
51
+ self.exchange_config_by_exchange
50
52
  )
51
53
  await super().initialize_impl()
52
54
  self.exchange_importers = self.connector.exchange_importers
53
55
  if self.connector.should_adapt_market_statuses():
54
56
  await self._init_exchange_tentacle()
57
+ if self.exchange_tentacle_class:
58
+ self.exchange_tentacle_class.DEFAULT_CONNECTOR_CLASS.register_simulator_connector_fee_methods(
59
+ self.exchange_manager.exchange_name, self.connector
60
+ )
55
61
 
56
62
  async def _init_exchange_tentacle(self):
57
63
  origin_ignore_config = self.exchange_manager.ignore_config
@@ -61,7 +67,7 @@ class ExchangeSimulator(rest_exchange.RestExchange):
61
67
  # initialize a locale exchange_tentacle to be able to access adapters for market statuses
62
68
  if self.exchange_tentacle_class:
63
69
  self.exchange_tentacle = self.exchange_tentacle_class(
64
- self.exchange_manager.config, self.exchange_manager, None
70
+ self.exchange_manager.config, self.exchange_manager, self.exchange_config_by_exchange
65
71
  )
66
72
  finally:
67
73
  self.exchange_manager.ignore_config = origin_ignore_config
@@ -82,6 +82,7 @@ class RestExchange(abstract_exchange.AbstractExchange):
82
82
  # trigger an error
83
83
  # Name of the price param to give ccxt to edit a stop loss
84
84
  STOP_LOSS_EDIT_PRICE_PARAM = ccxt_enums.ExchangeOrderCCXTUnifiedParams.STOP_LOSS_PRICE.value
85
+ STOP_LOSS_CREATE_PRICE_PARAM = ccxt_enums.ExchangeOrderCCXTUnifiedParams.STOP_LOSS_PRICE.value
85
86
  """
86
87
  RestExchange is using its exchange connector to interact with the exchange.
87
88
  It should be used regardless of the exchange or the exchange library (ccxt or other)
@@ -559,6 +560,12 @@ class RestExchange(abstract_exchange.AbstractExchange):
559
560
  return exchanges_util.ExchangeMarketStatusFixer(market_status, price_example).market_status
560
561
  return market_status
561
562
 
563
+ def get_max_orders_count(self, symbol: str, order_type: enums.TraderOrderType) -> int:
564
+ return (
565
+ constants.DEFAULT_MAX_STOP_ORDERS_COUNT if orders.is_stop_order(order_type)
566
+ else constants.DEFAULT_MAX_DEFAULT_ORDERS_COUNT
567
+ )
568
+
562
569
  def _apply_contract_size(self, value, contract_size):
563
570
  if value is None:
564
571
  return value
@@ -1132,7 +1139,11 @@ class RestExchange(abstract_exchange.AbstractExchange):
1132
1139
  async def fetch_exchange_config(
1133
1140
  cls, exchange_config_by_exchange: typing.Optional[dict[str, dict]], exchange_manager
1134
1141
  ):
1135
- raise NotImplementedError("fetch_exchange_config")
1142
+ raise NotImplementedError("fetch_exchange_config is not implemented")
1143
+
1144
+ @classmethod
1145
+ def get_custom_url_config(cls, tentacle_config: dict, exchange_name: str) -> dict:
1146
+ raise NotImplementedError("get_custom_url_config is not implemented")
1136
1147
 
1137
1148
  @classmethod
1138
1149
  def supported_autofill_exchanges(cls, tentacle_config):
@@ -45,6 +45,7 @@ from octobot_trading.personal_data.orders import (
45
45
  is_stop_order,
46
46
  is_stop_trade_order_type,
47
47
  is_take_profit_order,
48
+ ensure_orders_limit,
48
49
  get_trade_order_type,
49
50
  create_as_chained_order,
50
51
  ensure_orders_relevancy,
@@ -292,6 +293,7 @@ __all__ = [
292
293
  "get_pnl_transaction_source_from_order",
293
294
  "is_stop_order",
294
295
  "is_stop_trade_order_type",
296
+ "ensure_orders_limit",
295
297
  "is_take_profit_order",
296
298
  "get_trade_order_type",
297
299
  "create_as_chained_order",
@@ -120,6 +120,7 @@ from octobot_trading.personal_data.orders.order_util import (
120
120
  is_stop_order,
121
121
  is_stop_trade_order_type,
122
122
  is_take_profit_order,
123
+ ensure_orders_limit,
123
124
  get_trade_order_type,
124
125
  create_order_price_trigger,
125
126
  create_as_active_order_using_strategy_if_any,
@@ -205,6 +206,8 @@ __all__ = [
205
206
  "get_pnl_transaction_source_from_order",
206
207
  "is_stop_order",
207
208
  "is_stop_trade_order_type",
209
+ "is_take_profit_order",
210
+ "ensure_orders_limit",
208
211
  "create_as_chained_order",
209
212
  "ensure_orders_relevancy",
210
213
  "get_order_quantity_currency",
@@ -517,6 +517,28 @@ def is_take_profit_order(order_type: enums.TraderOrderType):
517
517
  ]
518
518
 
519
519
 
520
+ def ensure_orders_limit(exchange_manager, symbol, added_orders: list[enums.TraderOrderType]):
521
+ max_limit_orders = exchange_manager.exchange.get_max_orders_count(symbol, enums.TraderOrderType.SELL_LIMIT)
522
+ max_stop_orders = exchange_manager.exchange.get_max_orders_count(symbol, enums.TraderOrderType.STOP_LOSS)
523
+ open_orders = exchange_manager.exchange_personal_data.orders_manager.get_open_orders(
524
+ symbol=symbol, active=None # consider both active and inactive orders of this symbol
525
+ )
526
+ stop_orders_count = len([o for o in open_orders if is_stop_order(o.order_type)]) + len(
527
+ [o_type for o_type in added_orders if is_stop_order(o_type)]
528
+ )
529
+ limit_orders_count = len(open_orders) + len(added_orders) - stop_orders_count
530
+ if limit_orders_count > max_limit_orders:
531
+ raise errors.MaxOpenOrderReachedForSymbolError(
532
+ f"{symbol} max open limit orders reached: "
533
+ f"limit = {max_limit_orders}, orders count = {limit_orders_count}"
534
+ )
535
+ if stop_orders_count > max_stop_orders:
536
+ raise errors.MaxOpenOrderReachedForSymbolError(
537
+ f"{symbol} max open stop orders reached: "
538
+ f"limit = {max_stop_orders}, orders count = {stop_orders_count}"
539
+ )
540
+
541
+
520
542
  def get_trade_order_type(order_type: enums.TraderOrderType) -> enums.TradeOrderType:
521
543
  if order_type in (enums.TraderOrderType.BUY_MARKET, enums.TraderOrderType.SELL_MARKET):
522
544
  return enums.TradeOrderType.MARKET
@@ -75,6 +75,9 @@ class MockedCCXTConnector(CCXTConnector):
75
75
  def _should_authenticate(self):
76
76
  return False
77
77
 
78
+ def register_simulator_connector_fee_methods(self, *args, **kwargs):
79
+ pass
80
+
78
81
 
79
82
  class MockedRestExchange(DefaultRestExchange):
80
83
  DEFAULT_CONNECTOR_CLASS = MockedCCXTConnector
@@ -118,6 +118,7 @@ async def test_init_exchange_tentacle(backtesting_trader):
118
118
  init_adapter = mock.Mock()
119
119
 
120
120
  class AdapterTentacle:
121
+ DEFAULT_CONNECTOR_CLASS = mock.Mock()
121
122
  def __init__(self, *_, **__):
122
123
  self.get_adapter_class = mock.Mock(
123
124
  return_value=init_adapter
@@ -125,6 +126,7 @@ async def test_init_exchange_tentacle(backtesting_trader):
125
126
  self.stop = mock.AsyncMock()
126
127
 
127
128
  class NoAdapterTentacle:
129
+ DEFAULT_CONNECTOR_CLASS = mock.Mock()
128
130
  def __init__(self, *_, **__):
129
131
  self.get_adapter_class = mock.Mock(
130
132
  return_value=None
@@ -22,6 +22,7 @@ import pytest
22
22
  import octobot_trading.api as api
23
23
  import octobot_trading.enums as enums
24
24
  import octobot_trading.constants as constants
25
+ import octobot_trading.errors
25
26
  import octobot_trading.personal_data as personal_data
26
27
  import octobot_trading.personal_data.orders.order_util as order_util
27
28
  import octobot_trading.personal_data.orders.order_factory as order_factory
@@ -940,3 +941,56 @@ def test_get_split_orders_count_and_increment():
940
941
  symbol_market,
941
942
  False
942
943
  ) == (0, decimal.Decimal('0'))
944
+
945
+
946
+ def test_ensure_orders_limit():
947
+ symbol = "BTC/USDT"
948
+ exchange_manager = mock.Mock(
949
+ exchange = mock.Mock(
950
+ get_max_orders_count = mock.Mock(return_value=5),
951
+ ),
952
+ exchange_personal_data = mock.Mock(
953
+ orders_manager = mock.Mock(
954
+ get_open_orders = mock.Mock(
955
+ return_value=[
956
+ mock.Mock(order_type=enums.TraderOrderType.BUY_LIMIT),
957
+ mock.Mock(order_type=enums.TraderOrderType.SELL_LIMIT),
958
+ mock.Mock(order_type=enums.TraderOrderType.STOP_LOSS),
959
+ mock.Mock(order_type=enums.TraderOrderType.STOP_LOSS),
960
+ mock.Mock(order_type=enums.TraderOrderType.STOP_LOSS),
961
+ ],
962
+ )
963
+ )
964
+ )
965
+ )
966
+
967
+ # do not raise
968
+ order_util.ensure_orders_limit(exchange_manager, symbol, [])
969
+ assert exchange_manager.exchange.get_max_orders_count.call_count == 2
970
+ assert exchange_manager.exchange.get_max_orders_count.mock_calls[0].args == (
971
+ symbol, enums.TraderOrderType.SELL_LIMIT
972
+ )
973
+ assert exchange_manager.exchange.get_max_orders_count.mock_calls[1].args == (
974
+ symbol, enums.TraderOrderType.STOP_LOSS
975
+ )
976
+ exchange_manager.exchange_personal_data.orders_manager.get_open_orders.assert_called_once_with(
977
+ symbol=symbol, active=None
978
+ )
979
+
980
+ # ok added limit orders
981
+ order_util.ensure_orders_limit(exchange_manager, symbol, [enums.TraderOrderType.BUY_LIMIT]*2)
982
+ order_util.ensure_orders_limit(exchange_manager, symbol, [enums.TraderOrderType.BUY_LIMIT]*3)
983
+ # too many added limit orders
984
+ with pytest.raises(octobot_trading.errors.MaxOpenOrderReachedForSymbolError):
985
+ order_util.ensure_orders_limit(exchange_manager, symbol, [enums.TraderOrderType.BUY_LIMIT]*4)
986
+ with pytest.raises(octobot_trading.errors.MaxOpenOrderReachedForSymbolError):
987
+ order_util.ensure_orders_limit(exchange_manager, symbol, [enums.TraderOrderType.BUY_LIMIT]*10)
988
+
989
+ # ok added stop orders
990
+ order_util.ensure_orders_limit(exchange_manager, symbol, [enums.TraderOrderType.STOP_LOSS])
991
+ order_util.ensure_orders_limit(exchange_manager, symbol, [enums.TraderOrderType.STOP_LOSS_LIMIT]*2)
992
+ # too many added stop orders
993
+ with pytest.raises(octobot_trading.errors.MaxOpenOrderReachedForSymbolError):
994
+ order_util.ensure_orders_limit(exchange_manager, symbol, [enums.TraderOrderType.STOP_LOSS]*3)
995
+ with pytest.raises(octobot_trading.errors.MaxOpenOrderReachedForSymbolError):
996
+ order_util.ensure_orders_limit(exchange_manager, symbol, [enums.TraderOrderType.STOP_LOSS_LIMIT]*10)
@@ -317,9 +317,9 @@ class RealExchangeTester:
317
317
  end = self.get_time_after_time_frames(start, self.HISTORICAL_CANDLES_TO_FETCH_COUNT)
318
318
  return start, end
319
319
 
320
- async def get_kline_price(self, **kwargs):
320
+ async def get_kline_price(self, time_frame=None, **kwargs):
321
321
  async with self.get_exchange_manager() as exchange_manager:
322
- return await exchange_manager.exchange.get_kline_price(self.SYMBOL, self.TIME_FRAME, **kwargs)
322
+ return await exchange_manager.exchange.get_kline_price(self.SYMBOL, time_frame or self.TIME_FRAME, **kwargs)
323
323
 
324
324
  async def get_order_book(self, **kwargs):
325
325
  async with self.get_exchange_manager() as exchange_manager:
@@ -107,7 +107,7 @@ class TestHollaexRealExchangeTester(RealExchangeTester):
107
107
  await super().test_get_historical_ohlcv()
108
108
 
109
109
  async def test_get_kline_price(self):
110
- kline_price = await self.get_kline_price()
110
+ kline_price = await self.get_kline_price(time_frame=TimeFrames.ONE_HOUR)
111
111
  assert len(kline_price) == 1
112
112
  assert len(kline_price[0]) == 6
113
113
  kline_start_time = kline_price[0][PriceIndexes.IND_PRICE_TIME.value]