OctoBot-Trading 2.4.181__tar.gz → 2.4.183__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 (510) hide show
  1. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/CHANGELOG.md +10 -0
  2. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.181/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.183}/PKG-INFO +2 -2
  4. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/README.md +1 -1
  5. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/__init__.py +1 -1
  6. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/adapters/abstract_adapter.py +3 -2
  7. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +3 -2
  8. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +85 -40
  9. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/connectors/ccxt/enums.py +24 -0
  10. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/traders/trader.py +15 -4
  11. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/types/rest_exchange.py +15 -2
  12. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/abstract_trading_mode.py +3 -2
  13. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/order.py +18 -9
  14. OctoBot-Trading-2.4.183/tests/modes/test_abstract_mode_consumer.py +435 -0
  15. OctoBot-Trading-2.4.181/tests/modes/test_abstract_mode_consumer.py +0 -159
  16. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/LICENSE +0 -0
  17. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/MANIFEST.in +0 -0
  18. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
  19. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  20. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  21. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/OctoBot_Trading.egg-info/requires.txt +0 -0
  22. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  23. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/api/__init__.py +0 -0
  24. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/api/channels.py +0 -0
  25. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/api/contracts.py +0 -0
  26. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/api/exchange.py +0 -0
  27. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/api/modes.py +0 -0
  28. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/api/orders.py +0 -0
  29. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/api/portfolio.py +0 -0
  30. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/api/positions.py +0 -0
  31. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/api/profitability.py +0 -0
  32. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/api/storage.py +0 -0
  33. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/api/symbol_data.py +0 -0
  34. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/api/trader.py +0 -0
  35. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/api/trades.py +0 -0
  36. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/constants.py +0 -0
  37. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/enums.py +0 -0
  38. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/errors.py +0 -0
  39. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_channel.py +0 -0
  40. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/__init__.py +0 -0
  41. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  42. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  43. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  44. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  45. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  46. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  47. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  48. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  49. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  50. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  51. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  52. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  53. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  54. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  55. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  56. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  57. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  58. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  59. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  60. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  61. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  62. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  63. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  64. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  65. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  66. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  67. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  68. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  69. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  70. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  71. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  72. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  73. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  74. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  75. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  76. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  77. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  78. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  79. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  80. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  81. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  82. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  83. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  84. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  85. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  86. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  87. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  88. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  89. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  90. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  91. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  92. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/__init__.py +0 -0
  93. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  94. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  95. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  96. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/config/__init__.py +0 -0
  97. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  98. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  99. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/config/exchange_credentials_data.py +0 -0
  100. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/config/proxy_config.py +0 -0
  101. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  102. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  103. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
  104. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  105. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  106. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  107. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  108. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  109. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  110. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  111. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/exchange_builder.py +0 -0
  112. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/exchange_channels.py +0 -0
  113. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/exchange_details.py +0 -0
  114. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/exchange_factory.py +0 -0
  115. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/exchange_manager.py +0 -0
  116. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  117. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/exchanges.py +0 -0
  118. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  119. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  120. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  121. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  122. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/traders/__init__.py +0 -0
  123. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  124. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/types/__init__.py +0 -0
  125. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  126. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/util/__init__.py +0 -0
  127. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  128. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  129. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  130. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  131. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/__init__.py +0 -0
  132. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/channel/__init__.py +0 -0
  133. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  134. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  135. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/channel/mode.py +0 -0
  136. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/mode_activity.py +0 -0
  137. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/mode_config.py +0 -0
  138. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/modes_factory.py +0 -0
  139. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/modes_util.py +0 -0
  140. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  141. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  142. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  143. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  144. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  145. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  146. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  147. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  148. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  149. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  150. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  151. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  152. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  153. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  154. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  155. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  156. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/octobot_channel_consumer.py +0 -0
  157. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/__init__.py +0 -0
  158. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  159. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/__init__.py +0 -0
  160. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/active_order_swap_strategies/__init__.py +0 -0
  161. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/active_order_swap_strategies/active_order_swap_strategy.py +0 -0
  162. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/active_order_swap_strategies/stop_first_active_order_swap_strategy.py +0 -0
  163. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/active_order_swap_strategies/take_profit_first_active_order_swap_strategy.py +0 -0
  164. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  165. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  166. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  167. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  168. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  169. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  170. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  171. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  172. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  173. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/groups/trailing_on_filled_tp_balanced_order_group.py +0 -0
  174. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  175. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  176. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/order_group.py +0 -0
  177. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/order_state.py +0 -0
  178. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/order_util.py +0 -0
  179. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  180. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  181. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  182. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  183. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  184. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  185. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  186. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  187. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  188. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  189. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/trailing_profiles/__init__.py +0 -0
  190. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/trailing_profiles/filled_take_profit_trailing_profile.py +0 -0
  191. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/trailing_profiles/trailing_price_step.py +0 -0
  192. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile.py +0 -0
  193. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile_factory.py +0 -0
  194. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile_types.py +0 -0
  195. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/triggers/__init__.py +0 -0
  196. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/triggers/base_trigger.py +0 -0
  197. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/triggers/price_trigger.py +0 -0
  198. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  199. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  200. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  201. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  202. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  203. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  204. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  205. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  206. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  207. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  208. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  209. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  210. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  211. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  212. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  213. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  214. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  215. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  216. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  217. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  218. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  219. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  220. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  221. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  222. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  223. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  224. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  225. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  226. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  227. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  228. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  229. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  230. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  231. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  232. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  233. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  234. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  235. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  236. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  237. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/sub_portfolio_data.py +0 -0
  238. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  239. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  240. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  241. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  242. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  243. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/__init__.py +0 -0
  244. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  245. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  246. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  247. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  248. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/position.py +0 -0
  249. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  250. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/position_state.py +0 -0
  251. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/position_util.py +0 -0
  252. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  253. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  254. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  255. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  256. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  257. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  258. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  259. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  260. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  261. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/state.py +0 -0
  262. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/trades/__init__.py +0 -0
  263. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  264. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  265. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  266. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/trades/trade.py +0 -0
  267. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  268. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  269. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  270. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  271. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  272. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  273. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  274. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  275. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  276. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  277. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  278. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  279. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  280. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/signals/__init__.py +0 -0
  281. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/signals/channel/__init__.py +0 -0
  282. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  283. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  284. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/signals/channel/signal_producer.py +0 -0
  285. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/signals/signal_creation.py +0 -0
  286. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  287. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/signals/util.py +0 -0
  288. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/storage/__init__.py +0 -0
  289. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/storage/abstract_storage.py +0 -0
  290. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/storage/candles_storage.py +0 -0
  291. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/storage/orders_storage.py +0 -0
  292. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/storage/portfolio_storage.py +0 -0
  293. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/storage/storage_manager.py +0 -0
  294. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/storage/trades_storage.py +0 -0
  295. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/storage/transactions_storage.py +0 -0
  296. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/storage/util.py +0 -0
  297. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/supervisors/__init__.py +0 -0
  298. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  299. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  300. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/util/__init__.py +0 -0
  301. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/util/config_util.py +0 -0
  302. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/util/initializable.py +0 -0
  303. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/util/initialization_util.py +0 -0
  304. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/util/simulator_updater_utils.py +0 -0
  305. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/util/test_tools/__init__.py +0 -0
  306. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  307. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  308. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  309. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  310. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/requirements.txt +0 -0
  311. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/setup.cfg +0 -0
  312. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/setup.py +0 -0
  313. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/api/__init__.py +0 -0
  314. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/api/test_channels.py +0 -0
  315. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/api/test_exchange.py +0 -0
  316. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/api/test_modes.py +0 -0
  317. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/api/test_orders.py +0 -0
  318. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/api/test_portfolio.py +0 -0
  319. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/api/test_profitability.py +0 -0
  320. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/api/test_symbol_data.py +0 -0
  321. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/api/test_trader.py +0 -0
  322. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/api/test_trades.py +0 -0
  323. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/cli/__init__.py +0 -0
  324. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/__init__.py +0 -0
  325. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/contracts/__init__.py +0 -0
  326. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  327. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  328. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/funding/__init__.py +0 -0
  329. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  330. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/kline/__init__.py +0 -0
  331. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  332. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/ohlcv/__init__.py +0 -0
  333. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  334. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  335. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/order_book/__init__.py +0 -0
  336. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  337. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/prices/__init__.py +0 -0
  338. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  339. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  340. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/recent_trades/__init__.py +0 -0
  341. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  342. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  343. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/ticker/__init__.py +0 -0
  344. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  345. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/__init__.py +0 -0
  346. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/connectors/__init__.py +0 -0
  347. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  348. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  349. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  350. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/implementations/__init__.py +0 -0
  351. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  352. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  353. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/test_abstract_exchange.py +0 -0
  354. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  355. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/test_exchange_builder.py +0 -0
  356. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/test_exchange_config_data.py +0 -0
  357. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/test_exchange_factory.py +0 -0
  358. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/test_exchange_manager.py +0 -0
  359. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/test_exchange_simulator.py +0 -0
  360. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/test_exchanges.py +0 -0
  361. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/traders/__init__.py +0 -0
  362. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/traders/test_trader.py +0 -0
  363. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/types/__init__.py +0 -0
  364. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  365. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/util/__init__.py +0 -0
  366. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  367. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/exchanges/util/test_exchange_util.py +0 -0
  368. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/modes/__init__.py +0 -0
  369. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/modes/script_keywords/__init__.py +0 -0
  370. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  371. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  372. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  373. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  374. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  375. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  376. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  377. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/modes/test_abstract_trading_mode.py +0 -0
  378. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/modes/test_modes_util.py +0 -0
  379. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/__init__.py +0 -0
  380. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/__init__.py +0 -0
  381. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/active_order_swap_strategies/__init__.py +0 -0
  382. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/active_order_swap_strategies/test_active_order_swap_strategy.py +0 -0
  383. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/active_order_swap_strategies/test_stop_first_active_order_swap_strategy.py +0 -0
  384. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/active_order_swap_strategies/test_take_profit_first_active_order_swap_strategy.py +0 -0
  385. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/groups/__init__.py +0 -0
  386. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  387. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  388. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  389. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/groups/test_trailing_on_filled_tp_balanced_order_group.py +0 -0
  390. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/states/__init__.py +0 -0
  391. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  392. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  393. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  394. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  395. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/states/test_order_state.py +0 -0
  396. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  397. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  398. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  399. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  400. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  401. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/test_order.py +0 -0
  402. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/test_order_adapter.py +0 -0
  403. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/test_order_factory.py +0 -0
  404. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/test_order_util.py +0 -0
  405. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/test_orders_manager.py +0 -0
  406. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  407. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/trailing_profiles/__init__.py +0 -0
  408. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/trailing_profiles/test_filled_take_profit_trailing_profile.py +0 -0
  409. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/trailing_profiles/test_trailing_profile_factory.py +0 -0
  410. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/triggers/__init__.py +0 -0
  411. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/triggers/test_base_trigger.py +0 -0
  412. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/triggers/test_price_trigger.py +0 -0
  413. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/types/__init__.py +0 -0
  414. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  415. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  416. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  417. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  418. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  419. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  420. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  421. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  422. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/types/market/__init__.py +0 -0
  423. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  424. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  425. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  426. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  427. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  428. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  429. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/__init__.py +0 -0
  430. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  431. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  432. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  433. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  434. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/history/__init__.py +0 -0
  435. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  436. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  437. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/test_asset.py +0 -0
  438. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  439. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  440. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  441. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/test_portfolio_util.py +0 -0
  442. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  443. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/test_sub_portfolio_data.py +0 -0
  444. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  445. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/types/__init__.py +0 -0
  446. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  447. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  448. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  449. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/positions/__init__.py +0 -0
  450. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/positions/channel/__init__.py +0 -0
  451. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/positions/states/__init__.py +0 -0
  452. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/positions/test_position.py +0 -0
  453. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/positions/test_position_factory.py +0 -0
  454. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/positions/test_positions_manager.py +0 -0
  455. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/positions/types/__init__.py +0 -0
  456. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  457. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  458. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/trades/__init__.py +0 -0
  459. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/trades/test_trade_factory.py +0 -0
  460. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/trades/test_trade_manager.py +0 -0
  461. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  462. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/trades/test_trade_util.py +0 -0
  463. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/transactions/__init__.py +0 -0
  464. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  465. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  466. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/signals/__init__.py +0 -0
  467. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  468. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/signals/test_util.py +0 -0
  469. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/test_utils/__init__.py +0 -0
  470. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/test_utils/order_util.py +0 -0
  471. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/test_utils/random_numbers.py +0 -0
  472. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/util/__init__.py +0 -0
  473. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests/util/test_config_util.py +0 -0
  474. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/__init__.py +0 -0
  475. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/__init__.py +0 -0
  476. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
  477. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  478. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  479. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_binance.py +0 -0
  480. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  481. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_bingx.py +0 -0
  482. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  483. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_bitget.py +0 -0
  484. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  485. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_bitmart.py +0 -0
  486. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_bitmex.py +0 -0
  487. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_bitso.py +0 -0
  488. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  489. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_bybit.py +0 -0
  490. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  491. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  492. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_coinex.py +0 -0
  493. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  494. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_gateio.py +0 -0
  495. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  496. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  497. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_htx.py +0 -0
  498. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_hyperliquid.py +0 -0
  499. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_kraken.py +0 -0
  500. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  501. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  502. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_mexc.py +0 -0
  503. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_ndax.py +0 -0
  504. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  505. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_okx.py +0 -0
  506. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  507. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_phemex.py +0 -0
  508. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  509. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_upbit.py +0 -0
  510. {OctoBot-Trading-2.4.181 → OctoBot-Trading-2.4.183}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [2.4.183] - 2025-06-01
8
+ ### Fixed
9
+ [Exchanges] fix edit_order
10
+
11
+ ## [2.4.182] - 2025-05-31
12
+ ### Updated
13
+ [Exchanges] set hostname on custom domain
14
+ ### Fixed
15
+ [States] fix deadlock
16
+
7
17
  ## [2.4.181] - 2025-05-28
8
18
  ### Fixed
9
19
  [Orders] fix adapt_order_quantity_because_fees order side issue
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.181
3
+ Version: 2.4.183
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.181](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.183](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.181
3
+ Version: 2.4.183
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.181](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.183](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.181](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.183](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.181" # major.minor.revision
18
+ VERSION = "2.4.183" # major.minor.revision
@@ -148,8 +148,9 @@ class AbstractAdapter:
148
148
 
149
149
  def fix_order(self, raw, **kwargs):
150
150
  # id is reserved for octobot managed id. store exchange id in EXCHANGE_ID
151
- raw[enums.ExchangeConstantsOrderColumns.EXCHANGE_ID.value] = \
152
- raw.pop(enums.ExchangeConstantsOrderColumns.ID.value, None)
151
+ if enums.ExchangeConstantsOrderColumns.ID.value in raw:
152
+ raw[enums.ExchangeConstantsOrderColumns.EXCHANGE_ID.value] = \
153
+ raw.pop(enums.ExchangeConstantsOrderColumns.ID.value, None)
153
154
  # add generic logic if necessary
154
155
  return raw
155
156
 
@@ -394,10 +394,11 @@ def get_custom_domain_config(exchange_class):
394
394
  return {}
395
395
  if url_config := exchange_class().describe()[ccxt_enums.ExchangeColumns.URLS.value]:
396
396
  commons_logging.get_logger(__name__).info(
397
- f"Using custom domain for {exchange_class.__name__}: {old} is replaced by {new}"
397
+ f"Using custom domain for {exchange_class.__name__}: {old} is replaced by {new}, hostname has been updated"
398
398
  )
399
399
  return {
400
- ccxt_enums.ExchangeColumns.URLS.value: _get_patched_url_config(url_config, old, new)
400
+ ccxt_enums.ExchangeColumns.URLS.value: _get_patched_url_config(url_config, old, new),
401
+ ccxt_enums.ExchangeColumns.HOSTNAME.value: new
401
402
  }
402
403
  return {}
403
404
 
@@ -22,6 +22,7 @@ import aiohttp_socks
22
22
  import typing
23
23
  import inspect
24
24
  import binascii
25
+ import copy
25
26
 
26
27
  import octobot_commons.enums
27
28
  import octobot_commons.logging
@@ -596,52 +597,67 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
596
597
  symbol=symbol, quantity=quantity
597
598
  )
598
599
 
600
+ def _add_stop_loss_price_param(self, params: dict, price: float):
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
604
+ return params
605
+
606
+ def _add_edit_stop_loss_price_param(self, params: dict, price: float):
607
+ params = params or {}
608
+ if self.exchange_manager.exchange.STOP_LOSS_EDIT_PRICE_PARAM not in params:
609
+ params[self.exchange_manager.exchange.STOP_LOSS_EDIT_PRICE_PARAM] = price
610
+ return params
611
+
599
612
  @ccxt_client_util.converted_ccxt_common_errors
600
613
  async def create_market_stop_loss_order(self, symbol, quantity, price, side, current_price, params=None) -> dict:
601
- if self.client.has.get("createStopMarketOrder"):
602
- try:
603
- return self.adapter.adapt_order(
604
- await self.client.createStopMarketOrder(
605
- symbol,
606
- side=side,
607
- amount=quantity,
608
- stopPrice=price,
609
- params=params,
610
- ),
611
- symbol=symbol, quantity=quantity
612
- )
613
- except ccxt.OrderImmediatelyFillable:
614
- # make sure stop always stops
615
- created_order = await self.exchange_manager.exchange.create_order(
616
- order_type=(enums.TraderOrderType.BUY_MARKET
617
- if side == enums.TradeOrderSide.BUY.value
618
- else enums.TraderOrderType.SELL_MARKET),
619
- symbol=symbol,
620
- quantity=decimal.Decimal(str(quantity)),
621
- price=decimal.Decimal(str(price)),
622
- current_price=decimal.Decimal(str(current_price))
614
+ try:
615
+ params = self._add_stop_loss_price_param(params, price)
616
+ return self.adapter.adapt_order(
617
+ await self.client.create_order(
618
+ symbol,
619
+ enums.TradeOrderType.MARKET.value,
620
+ side,
621
+ quantity,
622
+ params=params,
623
+ ),
624
+ symbol=symbol, quantity=quantity
625
+ )
626
+ except ccxt.NotSupported as err:
627
+ raise NotImplementedError(f"create_market_stop_loss_order is not supported {err}")
628
+ except ccxt.OrderImmediatelyFillable:
629
+ # make sure stop always stops
630
+ created_order = await self.exchange_manager.exchange.create_order(
631
+ order_type=(enums.TraderOrderType.BUY_MARKET
632
+ if side == enums.TradeOrderSide.BUY.value
633
+ else enums.TraderOrderType.SELL_MARKET),
634
+ symbol=symbol,
635
+ quantity=decimal.Decimal(str(quantity)),
636
+ price=decimal.Decimal(str(price)),
637
+ current_price=decimal.Decimal(str(current_price))
638
+ )
639
+ created_order[enums.ExchangeConstantsOrderColumns.TYPE.value] = (
640
+ enums.TraderOrderType.STOP_LOSS.value
623
641
  )
624
- created_order[enums.ExchangeConstantsOrderColumns.TYPE.value] = (
625
- enums.TraderOrderType.STOP_LOSS.value
626
- )
627
- return created_order
628
- raise NotImplementedError("create_market_stop_loss_order is not implemented")
642
+ return created_order
629
643
 
630
644
  @ccxt_client_util.converted_ccxt_common_errors
631
645
  async def create_limit_stop_loss_order(self, symbol, quantity, price, stop_price, side, params=None) -> dict:
632
- if self.client.has.get("createStopLimitOrder"):
646
+ try:
647
+ params = self._add_stop_loss_price_param(params, stop_price)
633
648
  return self.adapter.adapt_order(
634
- await self.client.create_stop_limit_order(
649
+ await self.client.create_order(
635
650
  symbol,
636
- side=side,
637
- amount=quantity,
651
+ enums.TradeOrderType.LIMIT.value,
652
+ side,
653
+ quantity,
638
654
  price=price,
639
- stopPrice=stop_price,
640
655
  params=params,
641
656
  ),
642
657
  symbol=symbol, quantity=quantity
643
658
  )
644
- raise NotImplementedError("create_limit_stop_loss_order is not implemented")
659
+ except ccxt.NotSupported as err:
660
+ raise NotImplementedError(f"create_limit_stop_loss_order is not supported {err}")
645
661
 
646
662
  @ccxt_client_util.converted_ccxt_common_errors
647
663
  async def create_market_take_profit_order(self, symbol, quantity, price=None, side=None, params=None) -> dict:
@@ -664,17 +680,46 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
664
680
  quantity: float, price: float, stop_price: float = None, side: str = None,
665
681
  current_price: float = None, params: dict = None):
666
682
  ccxt_order_type = self.get_ccxt_order_type(order_type)
683
+ local_params = copy.copy(params)
684
+ if order_type == enums.TraderOrderType.STOP_LOSS:
685
+ local_params = self._add_edit_stop_loss_price_param(local_params, stop_price or price)
686
+ elif order_type == enums.TraderOrderType.STOP_LOSS_LIMIT:
687
+ local_params = self._add_edit_stop_loss_price_param(local_params, stop_price)
688
+ if self.exchange_manager.exchange.supports_native_edit_order(order_type):
689
+ price_to_use = price
690
+ if ccxt_order_type == enums.TradeOrderType.MARKET.value:
691
+ # can't set price in market orders
692
+ price_to_use = None
693
+ edited_order = await self.client.edit_order(
694
+ exchange_order_id, symbol, ccxt_order_type, side, quantity, price_to_use, local_params
695
+ )
696
+ if edited_order is not None:
697
+ # sometimes exchanges don't return the edited order details (ex: coinbase)
698
+ # => fill it with what we know and verify_order will fetch the rest
699
+ if not edited_order.get(ecoc.ID.value):
700
+ edited_order[ecoc.ID.value] = exchange_order_id
701
+ if not edited_order.get(ecoc.SYMBOL.value):
702
+ edited_order[ecoc.SYMBOL.value] = symbol
703
+ else:
704
+ # ccxt exchange edit order is disabled: force ccxt.exchange default edit order behavior
705
+ edited_order = await self._edit_order_by_cancel_and_create(
706
+ exchange_order_id, symbol, order_type, side, quantity, price, params
707
+ )
708
+ return self.adapter.adapt_order(edited_order, symbol=symbol, quantity=quantity)
709
+
710
+ async def _edit_order_by_cancel_and_create(
711
+ self, exchange_order_id: str, symbol: str, order_type: enums.TraderOrderType,
712
+ side: str, quantity: float, price: float, params: dict
713
+ ) -> dict:
714
+ await self.client.cancel_order(exchange_order_id, symbol)
667
715
  price_to_use = price
716
+ local_params = copy.copy(params)
717
+ ccxt_order_type = self.get_ccxt_order_type(order_type)
668
718
  if ccxt_order_type == enums.TradeOrderType.MARKET.value:
669
719
  # can't set price in market orders
670
720
  price_to_use = None
671
- # do not use keyword arguments here as default ccxt edit order is passing *args (and not **kwargs)
672
- return self.adapter.adapt_order(
673
- await self.client.edit_order(
674
- exchange_order_id, symbol, ccxt_order_type, side, quantity, price_to_use, params
675
- ),
676
- symbol=symbol, quantity=quantity
677
- )
721
+ local_params = self._add_stop_loss_price_param(local_params, price)
722
+ return await self.client.create_order(symbol, ccxt_order_type, side, quantity, price_to_use, local_params)
678
723
 
679
724
  @ccxt_client_util.converted_ccxt_common_errors
680
725
  async def cancel_all_orders(self, symbol: str = None, **kwargs: dict) -> None:
@@ -112,6 +112,29 @@ class ExchangeOrderCCXTColumns(enum.Enum):
112
112
  MARGIN_MODE = "marginMode"
113
113
 
114
114
 
115
+ class ExchangeOrderCCXTUnifiedParams(enum.Enum):
116
+ # see https://docs.ccxt.com/ for details
117
+ REDUCE_ONLY = "reduceOnly" # bool
118
+
119
+ # when creating orders
120
+ STOP_LOSS_PRICE = "stopLossPrice" # float
121
+ TAKE_PROFIT_PRICE = "takeProfitPrice" # float
122
+
123
+ # when editing orders
124
+ STOP_PRICE = "stopPrice" # float
125
+
126
+ # for trigger orders
127
+ TRIGGER_DIRECTION = "triggerDirection" # ascending/descending
128
+ TRIGGER_PRICE = "triggerPrice" # float
129
+ STOP_LOSS = "stopLoss" # dict with price and triggerPrice
130
+ TAKE_PROFIT = "takeProfit" # dict with price and triggerPrice
131
+
132
+ # for trailing orders
133
+ TRAILING_PERCENT = "trailingPercent" # float [0:100]
134
+ TRAILING_AMOUNT = "trailingAmount" # float
135
+ TRAILING_TRIGGER_PRICE = "trailingTriggerPrice" # float
136
+
137
+
115
138
  class ExchangeWrapperLibs(enum.Enum):
116
139
  ASYNC_CCXT = "async_ccxt"
117
140
  CCXT = "ccxt"
@@ -120,6 +143,7 @@ class ExchangeWrapperLibs(enum.Enum):
120
143
  class ExchangeColumns(enum.Enum):
121
144
  WEBSITE = "www"
122
145
  URLS = "urls"
146
+ HOSTNAME = "hostname"
123
147
  API = "api"
124
148
  REST = "rest"
125
149
  WEBSOCKET = "ws"
@@ -527,15 +527,26 @@ class Trader(util.Initializable):
527
527
  f"it impossible to handle this the issue. Please report it if you see it. "
528
528
  f"Order: {order}"
529
529
  ) from err
530
- # trigger forced refresh to get an update of the order
531
530
  if order.state.is_refreshing():
532
- await order.state.wait_for_next_state(cancelling_timeout)
531
+ # can't wait for the order state to fully refresh as it will require a portfolio lock which might
532
+ # be locked by this ask already (and create a deadlock)
533
+ # => be optimistic and consider refreshing state as end state
534
+ if order.is_refreshing_filling_state():
535
+ raise errors.FilledOrderError(f"Order is filled, it can't be cancelled. Order: {order}") from err
536
+ if order.is_refreshing_canceling_state():
537
+ self.logger.debug(f"Tried to cancel an already cancelled order. Order: {order}")
538
+ return True
533
539
  else:
540
+ # trigger forced refresh to get an update of the order
534
541
  previous_status = order.status
535
542
  await order.state.synchronize(force_synchronization=True)
536
543
  if previous_status != order.status:
537
- # status changed: wait for state change
538
- await order.state.wait_for_next_state(cancelling_timeout)
544
+ # don't wait for new state to avoid potential deadlock
545
+ if order.is_refreshing_filling_state():
546
+ raise errors.FilledOrderError(f"Order is filled, it can't be cancelled. Order: {order}") from err
547
+ if order.is_refreshing_canceling_state():
548
+ self.logger.debug(f"Tried to cancel an already cancelled order. Order: {order}")
549
+ return True
539
550
  if order.is_cancelled():
540
551
  self.logger.debug(f"Tried to cancel an already cancelled order. Order: {order}")
541
552
  return True
@@ -34,6 +34,7 @@ import octobot_trading.constants as constants
34
34
  import octobot_trading.errors as errors
35
35
  import octobot_trading.exchanges.util as exchanges_util
36
36
  import octobot_trading.exchanges.connectors.ccxt.ccxt_connector as ccxt_connector
37
+ import octobot_trading.exchanges.connectors.ccxt.enums as ccxt_enums
37
38
  from octobot_trading.enums import ExchangeConstantsOrderColumns as ecoc
38
39
  import octobot_trading.exchanges.abstract_exchange as abstract_exchange
39
40
  import octobot_trading.exchange_data.contracts as contracts
@@ -67,8 +68,8 @@ class RestExchange(abstract_exchange.AbstractExchange):
67
68
  # set True when get_positions() is not returning empty positions and should use get_position() instead
68
69
  REQUIRES_SYMBOL_FOR_EMPTY_POSITION = False
69
70
  SUPPORTS_SET_MARGIN_TYPE = True # set False when there is no API to switch between cross and isolated margin types
70
- SUPPORTS_SET_MARGIN_TYPE_ON_OPEN_POSITIONS = True # set False when the exchange refuses to change margin type
71
- # when an associated position is open
71
+ # set False when the exchange refuses to change margin type when an associated position is open
72
+ SUPPORTS_SET_MARGIN_TYPE_ON_OPEN_POSITIONS = True
72
73
  EXPECT_POSSIBLE_ORDER_NOT_FOUND_DURING_ORDER_CREATION = False # set True when get_order() can return None
73
74
  # (order not found) when orders are being created on exchange and are not fully processed on the exchange side.
74
75
  REQUIRES_AUTHENTICATION = False # set True when even normally public apis require authentication
@@ -79,6 +80,8 @@ class RestExchange(abstract_exchange.AbstractExchange):
79
80
  IS_SKIPPING_EMPTY_CANDLES_IN_OHLCV_FETCH = False # set True when the exchange is known for not returning any
80
81
  # candle when no traded happened during a candle time frame. In this case, a missing candle in backtesting won't
81
82
  # trigger an error
83
+ # Name of the price param to give ccxt to edit a stop loss
84
+ STOP_LOSS_EDIT_PRICE_PARAM = ccxt_enums.ExchangeOrderCCXTUnifiedParams.STOP_LOSS_PRICE.value
82
85
  """
83
86
  RestExchange is using its exchange connector to interact with the exchange.
84
87
  It should be used regardless of the exchange or the exchange library (ccxt or other)
@@ -199,6 +202,9 @@ class RestExchange(abstract_exchange.AbstractExchange):
199
202
  price: decimal.Decimal = None, stop_price: decimal.Decimal = None,
200
203
  side: enums.TradeOrderSide = None, current_price: decimal.Decimal = None,
201
204
  reduce_only: bool = False, params: dict = None) -> typing.Optional[dict]:
205
+ if self.exchange_manager.is_future:
206
+ # on futures exchange expects, quantity in contracts: convert quantity into contracts
207
+ quantity = quantity / self.get_contract_size(symbol)
202
208
  async with self._order_operation(order_type, symbol, quantity, price, stop_price):
203
209
  with self.creating_order(side, symbol, quantity, price):
204
210
  created_order = await self._create_order_with_retry(
@@ -216,6 +222,9 @@ class RestExchange(abstract_exchange.AbstractExchange):
216
222
  params: dict = None):
217
223
  # Note: on most exchange, this implementation will just replace the order by cancelling the one
218
224
  # which id is given and create a new one
225
+ if self.exchange_manager.is_future:
226
+ # on futures exchange expects, quantity in contracts: convert quantity into contracts
227
+ quantity = quantity / self.get_contract_size(symbol)
219
228
  async with self._order_operation(order_type, symbol, quantity, price, stop_price):
220
229
  float_quantity = float(quantity)
221
230
  float_price = float(price)
@@ -1024,6 +1033,10 @@ class RestExchange(abstract_exchange.AbstractExchange):
1024
1033
  def supports_trading_type(self, symbol, trading_type: enums.FutureContractType):
1025
1034
  return self.connector.supports_trading_type(symbol, trading_type)
1026
1035
 
1036
+ def supports_native_edit_order(self, order_type: enums.TraderOrderType) -> bool:
1037
+ # return False when default edit_order can't be used and order should always be canceled and recreated instead
1038
+ return True
1039
+
1027
1040
  def is_linear_symbol(self, symbol):
1028
1041
  """
1029
1042
  :param symbol: the symbol
@@ -564,10 +564,11 @@ class AbstractTradingMode(abstract_tentacle.AbstractTentacle):
564
564
  wait_for_creation=wait_for_creation, creation_timeout=creation_timeout
565
565
  )
566
566
 
567
- async def cancel_order(self, order, ignored_order: object = None) -> bool:
567
+ async def cancel_order(self, order, ignored_order: object = None, wait_for_cancelling: bool = True) -> bool:
568
568
  return await signals.cancel_order(
569
569
  self.exchange_manager, self.should_emit_trading_signal(), order,
570
- ignored_order=ignored_order
570
+ ignored_order=ignored_order,
571
+ wait_for_cancelling=wait_for_cancelling
571
572
  )
572
573
 
573
574
  async def cancel_all_orders(
@@ -368,13 +368,13 @@ class Order(util.Initializable):
368
368
  def get_total_fees(self, currency):
369
369
  return order_util.get_fees_for_currency(self.fee, currency)
370
370
 
371
- def is_created(self):
371
+ def is_created(self) -> bool:
372
372
  return self.state is None or self.state.is_created()
373
373
 
374
- def is_pending_creation(self):
374
+ def is_pending_creation(self) -> bool:
375
375
  return isinstance(self.state, orders_states.PendingCreationOrderState)
376
376
 
377
- def is_open(self):
377
+ def is_open(self) -> bool:
378
378
  # also check is_initialized to avoid considering uncreated orders as open
379
379
  return (
380
380
  self.state is None or self.state.is_open() or (
@@ -382,30 +382,39 @@ class Order(util.Initializable):
382
382
  )
383
383
  )
384
384
 
385
- def is_filled(self):
385
+ def is_filled(self) -> bool:
386
386
  if self.state is None:
387
387
  return self.status is enums.OrderStatus.FILLED
388
388
  return self.state.is_filled() or (self.state.is_closed() and self.status is enums.OrderStatus.FILLED)
389
389
 
390
- def is_cancelled(self):
390
+ def is_cancelled(self) -> bool:
391
391
  if self.state is None:
392
392
  return self.status is enums.OrderStatus.CANCELED
393
393
  return self.state.is_canceled() or (self.state.is_closed() and self.status is enums.OrderStatus.CANCELED)
394
394
 
395
- def is_cancelling(self):
395
+ def is_cancelling(self) -> bool:
396
396
  if self.state is None:
397
397
  return self.status is enums.OrderStatus.PENDING_CANCEL
398
398
  return self.state.state is enums.OrderStates.CANCELING or self.status is enums.OrderStatus.PENDING_CANCEL
399
399
 
400
- def is_closed(self):
400
+ def is_closed(self) -> bool:
401
401
  if self.state is None:
402
402
  return self.status is enums.OrderStatus.CLOSED
403
403
  return self.state.is_closed() if self.state is not None else self.status is enums.OrderStatus.CLOSED
404
404
 
405
- def is_refreshing(self):
405
+ def is_refreshing(self) -> bool:
406
406
  return self.state is not None and self.state.is_refreshing()
407
407
 
408
- def can_be_edited(self):
408
+ def is_refreshing_filling_state(self) -> bool:
409
+ return self._is_refreshing_state(orders_states.FillOrderState)
410
+
411
+ def is_refreshing_canceling_state(self) -> bool:
412
+ return self._is_refreshing_state(orders_states.CancelOrderState)
413
+
414
+ def _is_refreshing_state(self, state_type) -> bool:
415
+ return self.is_refreshing() and isinstance(self.state, state_type)
416
+
417
+ def can_be_edited(self) -> bool:
409
418
  # orders that are not yet open or already open can be edited
410
419
  return self.state is None or (self.state.is_open() and not self.is_refreshing())
411
420