OctoBot-Trading 2.4.2__tar.gz → 2.4.4__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 (463) hide show
  1. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/CHANGELOG.md +11 -0
  2. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.2/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.4}/PKG-INFO +2 -2
  4. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/README.md +1 -1
  5. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/__init__.py +1 -1
  6. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/portfolio.py +2 -4
  7. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/trades.py +1 -1
  8. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/constants.py +0 -10
  9. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/enums.py +7 -2
  10. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/errors.py +0 -10
  11. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +1 -1
  12. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/abstract_exchange.py +4 -4
  13. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/adapters/abstract_adapter.py +9 -1
  14. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +1 -0
  15. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +15 -13
  16. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +1 -1
  17. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/traders/trader.py +10 -11
  18. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/types/rest_exchange.py +36 -34
  19. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/types/websocket_exchange.py +7 -2
  20. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/util/exchange_util.py +6 -6
  21. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/mode_config.py +21 -12
  22. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +6 -3
  23. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/exchange_personal_data.py +19 -17
  24. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/channel/orders.py +35 -27
  25. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/channel/orders_updater.py +2 -2
  26. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/order.py +17 -28
  27. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/order_factory.py +2 -1
  28. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/order_util.py +6 -4
  29. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/orders_manager.py +26 -14
  30. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/channel/trades.py +1 -1
  31. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/trade.py +6 -0
  32. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/trade_factory.py +2 -0
  33. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/trades_manager.py +14 -4
  34. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/signals/signal_creation.py +23 -8
  35. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/signals/trading_signal_bundle_builder.py +4 -5
  36. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/signals/util.py +4 -3
  37. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/orders_storage.py +1 -4
  38. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/script_keywords/basic_keywords/test_amount.py +6 -4
  39. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/test_order.py +22 -8
  40. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/test_order_util.py +46 -8
  41. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/test_orders_storage_operations.py +9 -3
  42. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/trades/__init__.py +2 -2
  43. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/trades/test_trade_factory.py +10 -3
  44. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/trades/test_trade_manager.py +16 -15
  45. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/signals/test_trading_signal_bundle_builder.py +25 -25
  46. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/signals/test_util.py +7 -7
  47. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/LICENSE +0 -0
  48. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/MANIFEST.in +0 -0
  49. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
  50. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  51. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  52. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/OctoBot_Trading.egg-info/requires.txt +0 -0
  53. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  54. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/__init__.py +0 -0
  55. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/channels.py +0 -0
  56. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/contracts.py +0 -0
  57. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/exchange.py +0 -0
  58. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/modes.py +0 -0
  59. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/orders.py +0 -0
  60. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/positions.py +0 -0
  61. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/profitability.py +0 -0
  62. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/storage.py +0 -0
  63. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/symbol_data.py +0 -0
  64. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/trader.py +0 -0
  65. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_channel.py +0 -0
  66. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/__init__.py +0 -0
  67. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  68. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  69. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  70. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  71. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  72. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  73. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  74. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  75. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  76. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  77. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  78. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  79. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  80. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  81. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  82. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  83. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  84. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  85. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  86. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  87. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  88. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  89. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  90. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  91. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  92. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  93. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  94. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  95. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  96. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  97. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  98. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  99. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  100. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  101. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  102. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  103. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  104. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  105. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  106. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  107. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  108. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  109. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  110. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  111. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  112. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  113. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  114. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  115. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  116. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  117. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/__init__.py +0 -0
  118. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  119. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  120. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/basic_exchange_wrapper.py +0 -0
  121. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/config/__init__.py +0 -0
  122. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  123. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  124. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  125. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  126. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
  127. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  128. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  129. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  130. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  131. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  132. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/exchange_builder.py +0 -0
  133. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/exchange_channels.py +0 -0
  134. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/exchange_factory.py +0 -0
  135. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/exchange_manager.py +0 -0
  136. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  137. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/exchanges.py +0 -0
  138. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  139. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  140. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  141. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  142. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/traders/__init__.py +0 -0
  143. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  144. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/types/__init__.py +0 -0
  145. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/util/__init__.py +0 -0
  146. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  147. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  148. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/__init__.py +0 -0
  149. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/abstract_trading_mode.py +0 -0
  150. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/channel/__init__.py +0 -0
  151. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  152. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  153. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/channel/mode.py +0 -0
  154. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/modes_factory.py +0 -0
  155. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/modes_util.py +0 -0
  156. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  157. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  158. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +12 -12
  159. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  160. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  161. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  162. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  163. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  164. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  165. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  166. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  167. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  168. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  169. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/octobot_channel_consumer.py +0 -0
  170. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/__init__.py +0 -0
  171. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/__init__.py +0 -0
  172. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  173. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  174. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  175. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  176. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  177. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  178. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  179. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  180. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/order_group.py +0 -0
  181. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/order_state.py +0 -0
  182. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  183. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  184. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  185. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  186. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  187. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  188. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  189. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  190. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  191. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  192. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  193. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  194. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  195. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  196. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  197. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  198. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  199. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  200. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  201. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  202. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  203. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  204. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  205. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  206. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  207. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  208. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  209. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  210. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  211. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  212. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  213. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  214. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  215. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  216. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  217. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  218. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  219. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  220. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  221. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  222. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  223. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  224. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  225. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  226. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  227. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  228. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  229. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  230. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  231. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  232. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  233. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  234. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  235. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/__init__.py +0 -0
  236. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  237. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  238. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  239. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  240. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/position.py +0 -0
  241. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  242. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/position_state.py +0 -0
  243. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/position_util.py +0 -0
  244. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  245. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  246. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  247. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  248. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  249. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  250. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  251. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  252. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  253. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/state.py +0 -0
  254. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/__init__.py +0 -0
  255. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  256. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  257. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  258. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  259. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  260. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  261. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  262. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  263. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  264. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  265. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  266. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  267. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  268. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/signals/__init__.py +0 -0
  269. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/signals/channel/__init__.py +0 -0
  270. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  271. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  272. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/signals/channel/signal_producer.py +0 -0
  273. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/__init__.py +0 -0
  274. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/abstract_storage.py +0 -0
  275. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/candles_storage.py +0 -0
  276. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/portfolio_storage.py +0 -0
  277. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/storage_manager.py +0 -0
  278. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/trades_storage.py +0 -0
  279. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/transactions_storage.py +0 -0
  280. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/util.py +0 -0
  281. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/supervisors/__init__.py +0 -0
  282. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  283. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  284. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/__init__.py +0 -0
  285. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/config_util.py +0 -0
  286. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/initializable.py +0 -0
  287. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/initialization_util.py +0 -0
  288. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/simulator_updater_utils.py +0 -0
  289. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/test_tools/__init__.py +0 -0
  290. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  291. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  292. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  293. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/requirements.txt +0 -0
  294. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/setup.cfg +0 -0
  295. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/setup.py +0 -0
  296. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/__init__.py +0 -0
  297. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_channels.py +0 -0
  298. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_exchange.py +0 -0
  299. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_modes.py +0 -0
  300. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_orders.py +0 -0
  301. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_portfolio.py +0 -0
  302. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_profitability.py +0 -0
  303. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_symbol_data.py +0 -0
  304. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_trader.py +0 -0
  305. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_trades.py +0 -0
  306. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/cli/__init__.py +0 -0
  307. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/__init__.py +0 -0
  308. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/contracts/__init__.py +0 -0
  309. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  310. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  311. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/funding/__init__.py +0 -0
  312. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  313. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/kline/__init__.py +0 -0
  314. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  315. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/ohlcv/__init__.py +0 -0
  316. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  317. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  318. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/order_book/__init__.py +0 -0
  319. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  320. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/prices/__init__.py +0 -0
  321. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  322. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  323. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/recent_trades/__init__.py +0 -0
  324. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  325. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  326. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/ticker/__init__.py +0 -0
  327. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  328. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/__init__.py +0 -0
  329. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/connectors/__init__.py +0 -0
  330. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  331. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  332. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/implementations/__init__.py +0 -0
  333. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  334. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  335. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_abstract_exchange.py +0 -0
  336. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  337. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_basic_exchange_wrapper.py +0 -0
  338. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_exchange_builder.py +0 -0
  339. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_exchange_config_data.py +0 -0
  340. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_exchange_factory.py +0 -0
  341. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_exchange_manager.py +0 -0
  342. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_exchange_simulator.py +0 -0
  343. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_exchanges.py +0 -0
  344. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/traders/__init__.py +0 -0
  345. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/traders/test_trader.py +0 -0
  346. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/types/__init__.py +0 -0
  347. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  348. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/util/__init__.py +0 -0
  349. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  350. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/util/test_exchange_util.py +0 -0
  351. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/__init__.py +0 -0
  352. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/script_keywords/__init__.py +0 -0
  353. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  354. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  355. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  356. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  357. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/test_abstract_mode_consumer.py +0 -0
  358. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/test_abstract_trading_mode.py +0 -0
  359. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/__init__.py +0 -0
  360. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/__init__.py +0 -0
  361. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/groups/__init__.py +0 -0
  362. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  363. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  364. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  365. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/__init__.py +0 -0
  366. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  367. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  368. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  369. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  370. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/test_order_state.py +0 -0
  371. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  372. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  373. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  374. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  375. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  376. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/test_order_adapter.py +0 -0
  377. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/test_order_factory.py +0 -0
  378. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/test_orders_manager.py +0 -0
  379. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/__init__.py +0 -0
  380. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  381. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  382. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  383. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  384. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  385. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  386. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  387. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/market/__init__.py +0 -0
  388. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  389. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  390. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  391. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  392. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  393. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  394. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/__init__.py +0 -0
  395. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  396. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  397. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  398. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  399. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/history/__init__.py +0 -0
  400. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  401. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  402. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/test_asset.py +0 -0
  403. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  404. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  405. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  406. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  407. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  408. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/types/__init__.py +0 -0
  409. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  410. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  411. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  412. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/__init__.py +0 -0
  413. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/channel/__init__.py +0 -0
  414. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/states/__init__.py +0 -0
  415. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/test_position.py +0 -0
  416. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/test_position_factory.py +0 -0
  417. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/test_positions_manager.py +0 -0
  418. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/types/__init__.py +0 -0
  419. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  420. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  421. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  422. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/transactions/__init__.py +0 -0
  423. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  424. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  425. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/signals/__init__.py +0 -0
  426. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/test_utils/__init__.py +0 -0
  427. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/test_utils/order_util.py +0 -0
  428. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/test_utils/random_numbers.py +0 -0
  429. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/util/__init__.py +0 -0
  430. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/util/test_config_util.py +0 -0
  431. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/__init__.py +0 -0
  432. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/__init__.py +0 -0
  433. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
  434. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  435. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  436. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_binance.py +0 -0
  437. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  438. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_bitget.py +0 -0
  439. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  440. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_bitso.py +0 -0
  441. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  442. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_bittrex.py +0 -0
  443. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_bybit.py +0 -0
  444. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  445. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  446. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_coinex.py +0 -0
  447. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  448. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_gateio.py +0 -0
  449. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  450. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  451. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_huobi.py +0 -0
  452. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_huobipro.py +0 -0
  453. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_kraken.py +0 -0
  454. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  455. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  456. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_ndax.py +0 -0
  457. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  458. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_okx.py +0 -0
  459. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  460. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_phemex.py +0 -0
  461. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  462. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_upbit.py +0 -0
  463. {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,17 @@ 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.4] - 2023-06-08
8
+ ### Fixed
9
+ - Orders sync issues
10
+ - Order sizing issues when using % param
11
+
12
+ ## [2.4.3] - 2023-05-12
13
+ ### Updated
14
+ - Use orders shared if for pnl
15
+ ### Fixed
16
+ - Chained orders in trading signals
17
+
7
18
  ## [2.4.2] - 2023-05-10
8
19
  ### Added
9
20
  - Display timeframe
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.2
3
+ Version: 2.4.4
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.2](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.4](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.2
3
+ Version: 2.4.4
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.2](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.4](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.2](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.4](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.2" # major.minor.revision
18
+ VERSION = "2.4.4" # major.minor.revision
@@ -40,14 +40,12 @@ def get_global_portfolio_currencies_values(exchange_managers: list) -> dict:
40
40
  currencies_values = {}
41
41
  for exchange in exchange_managers:
42
42
  this_currency_values = (
43
- exchange.exchange_personal_data.portfolio_manager \
44
- .portfolio_value_holder.get_current_crypto_currencies_values()
43
+ exchange.exchange_personal_data.portfolio_manager
44
+ .portfolio_value_holder.get_current_crypto_currencies_values()
45
45
  )
46
46
  for currency, value in this_currency_values.items():
47
47
  if currency not in currencies_values:
48
48
  currencies_values[currency] = value
49
- else:
50
- currencies_values[currency] += value
51
49
  return currencies_values
52
50
 
53
51
 
@@ -25,7 +25,7 @@ def get_trade_history(
25
25
  ) -> list:
26
26
  return [
27
27
  trade.to_dict() if as_dict else trade
28
- for trade in exchange_manager.exchange_personal_data.trades_manager.trades.values()
28
+ for trade in exchange_manager.exchange_personal_data.trades_manager.get_trades()
29
29
  if _trade_filter(trade, quote, symbol, since, include_cancelled)
30
30
  ]
31
31
 
@@ -181,16 +181,6 @@ CANCEL_ORDER_STATUS_SCOPE = [enums.OrderStatus.PENDING_CANCEL,
181
181
  enums.OrderStatus.EXPIRED,
182
182
  enums.OrderStatus.REJECTED]
183
183
 
184
- ORDER_NON_EMPTY_FIELDS = [enums.ExchangeConstantsOrderColumns.ID.value,
185
- enums.ExchangeConstantsOrderColumns.TIMESTAMP.value,
186
- enums.ExchangeConstantsOrderColumns.SYMBOL.value,
187
- enums.ExchangeConstantsOrderColumns.TYPE.value,
188
- enums.ExchangeConstantsOrderColumns.SIDE.value,
189
- enums.ExchangeConstantsOrderColumns.PRICE.value,
190
- enums.ExchangeConstantsOrderColumns.AMOUNT.value,
191
- enums.ExchangeConstantsOrderColumns.STATUS.value]
192
- ORDER_REQUIRED_FIELDS = ORDER_NON_EMPTY_FIELDS + [enums.ExchangeConstantsOrderColumns.REMAINING.value]
193
-
194
184
  DEFAULT_INITIALIZATION_EVENT_TOPICS = [
195
185
  commons_enums.InitializationEventExchangeTopics.BALANCE,
196
186
  commons_enums.InitializationEventExchangeTopics.ORDERS,
@@ -299,6 +299,7 @@ class ExchangeConstantsOrderBookTickerColumns(enum.Enum):
299
299
  class ExchangeConstantsOrderColumns(enum.Enum):
300
300
  INFO = "info"
301
301
  ID = "id"
302
+ EXCHANGE_ID = "exchange_id"
302
303
  ORDER_ID = "order_id"
303
304
  TIMESTAMP = "timestamp"
304
305
  DATETIME = 'datetime'
@@ -331,6 +332,10 @@ class ExchangeConstantsOrderColumns(enum.Enum):
331
332
  ENTRIES = "entries"
332
333
 
333
334
 
335
+ class TradeExtraConstants(enum.Enum):
336
+ CREATION_TIME = "creation_time"
337
+
338
+
334
339
  class ExchangeConstantsPositionColumns(enum.Enum):
335
340
  ID = "id"
336
341
  TIMESTAMP = "timestamp"
@@ -523,7 +528,7 @@ class TradingSignalOrdersAttrs(enum.Enum):
523
528
  GROUP_ID = "group_id"
524
529
  GROUP_TYPE = "group_type"
525
530
  TAG = "tag"
526
- SHARED_SIGNAL_ORDER_ID = "shared_signal_order_id"
531
+ ORDER_ID = "order_id"
527
532
  BUNDLED_WITH = "bundled_with"
528
533
  CHAINED_TO = "chained_to"
529
534
  ADDITIONAL_ORDERS = "additional_orders"
@@ -545,12 +550,12 @@ class StoredOrdersAttr(enum.Enum):
545
550
  CHAINED_ORDERS = "co"
546
551
  EXCHANGE_CREATION_PARAMS = "ecp"
547
552
  TRADER_CREATION_KWARGS = "tck"
548
- SHARED_SIGNAL_ORDER_ID = "ssoi"
549
553
  HAS_BEEN_BUNDLED = "hbb"
550
554
  ENTRIES = "en"
551
555
  UPDATE_TIME = "ut"
552
556
  UPDATE_TYPE = "uty"
553
557
  ORDER_ID = "oid"
558
+ ORDER_EXCHANGE_ID = "oeid"
554
559
  ORDER_STATUS = "s"
555
560
  ORDER_DETAILS = "d"
556
561
  UPDATE_WITH_TRIGGERING_ORDER_FEES = "utf"
@@ -111,16 +111,6 @@ class PortfolioOperationError(Exception):
111
111
  """
112
112
 
113
113
 
114
- class MissingOrderException(Exception):
115
- """
116
- Raised when an order is missing
117
- """
118
-
119
- def __init__(self, order_id):
120
- super().__init__()
121
- self.order_id = order_id
122
-
123
-
124
114
  class InvalidOrderState(Exception):
125
115
  """
126
116
  Raised when an order state is handled on a previously cleared order
@@ -67,7 +67,7 @@ class OHLCVUpdater(ohlcv_channel.OHLCVProducer):
67
67
  ]
68
68
 
69
69
  def _get_traded_pairs(self):
70
- return self.channel.exchange_manager.exchange_config.watched_pairs
70
+ return self.channel.exchange_manager.exchange_config.traded_symbol_pairs
71
71
 
72
72
  def _get_time_frames(self):
73
73
  return self.channel.exchange_manager.exchange_config.available_time_frames
@@ -227,10 +227,10 @@ class AbstractExchange(tentacles_management.AbstractTentacle):
227
227
  """
228
228
  raise NotImplementedError("get_all_currencies_price_ticker is not implemented")
229
229
 
230
- async def get_order(self, order_id: str, symbol: str = None, **kwargs: dict) -> dict:
230
+ async def get_order(self, exchange_order_id: str, symbol: str = None, **kwargs: dict) -> dict:
231
231
  """
232
232
  Get the order data from the exchange
233
- :param order_id: the order id
233
+ :param exchange_order_id: the order id on exchange
234
234
  :param symbol: the order symbol
235
235
  :return: the order data
236
236
  """
@@ -288,11 +288,11 @@ class AbstractExchange(tentacles_management.AbstractTentacle):
288
288
  raise NotImplementedError("get_leverage_tiers is not implemented")
289
289
 
290
290
  async def cancel_order(
291
- self, order_id: str, symbol: str, order_type: enums.TraderOrderType, **kwargs: dict
291
+ self, exchange_order_id: str, symbol: str, order_type: enums.TraderOrderType, **kwargs: dict
292
292
  ) -> enums.OrderStatus:
293
293
  """
294
294
  Cancel a order on the exchange
295
- :param order_id: the order id
295
+ :param exchange_order_id: the order id on exchange
296
296
  :param symbol: the order symbol
297
297
  :param order_type: the type of the order
298
298
  :return: True if the order is successfully cancelled
@@ -16,6 +16,7 @@
16
16
  import decimal
17
17
 
18
18
  import octobot_trading.errors as errors
19
+ import octobot_trading.enums as enums
19
20
  import octobot_commons.logging as logging
20
21
  import octobot_commons.constants as commons_constants
21
22
 
@@ -133,6 +134,9 @@ class AbstractAdapter:
133
134
  return default
134
135
 
135
136
  def fix_order(self, raw, **kwargs):
137
+ # id is reserved for octobot managed id. store exchange id in EXCHANGE_ID
138
+ raw[enums.ExchangeConstantsOrderColumns.EXCHANGE_ID.value] = \
139
+ raw.pop(enums.ExchangeConstantsOrderColumns.ID.value, None)
136
140
  # add generic logic if necessary
137
141
  return raw
138
142
 
@@ -182,7 +186,11 @@ class AbstractAdapter:
182
186
  raise NotImplementedError("parse_public_recent_trades is not implemented")
183
187
 
184
188
  def fix_trades(self, raw, **kwargs):
185
- # add generic logic if necessary
189
+ for trade in raw:
190
+ # id is reserved for octobot managed id. store exchange id in EXCHANGE_ID
191
+ trade[enums.ExchangeConstantsOrderColumns.EXCHANGE_ID.value] = \
192
+ trade.pop(enums.ExchangeConstantsOrderColumns.ID.value, None)
193
+ # add generic logic if necessary
186
194
  return raw
187
195
 
188
196
  def parse_trades(self, fixed, **kwargs):
@@ -148,6 +148,7 @@ class CCXTAdapter(adapters.AbstractAdapter):
148
148
  for recent_trade in fixed:
149
149
  recent_trade.pop(ecoc.INFO.value, None)
150
150
  recent_trade.pop(ecoc.DATETIME.value, None)
151
+ recent_trade.pop(ecoc.EXCHANGE_ID.value, None)
151
152
  recent_trade.pop(ecoc.ID.value, None)
152
153
  recent_trade.pop(ecoc.ORDER.value, None)
153
154
  recent_trade.pop(ecoc.FEE.value, None)
@@ -285,12 +285,12 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
285
285
  raise octobot_trading.errors.FailedRequest(f"Failed to get_all_currencies_price_ticker {e}")
286
286
 
287
287
  # ORDERS
288
- async def get_order(self, order_id: str, symbol: str = None, **kwargs: dict) -> dict:
288
+ async def get_order(self, exchange_order_id: str, symbol: str = None, **kwargs: dict) -> dict:
289
289
  if self.client.has['fetchOrder']:
290
290
  try:
291
291
  with self.error_describer():
292
292
  return self.adapter.adapt_order(
293
- await self.client.fetch_order(order_id, symbol, params=kwargs),
293
+ await self.client.fetch_order(exchange_order_id, symbol, params=kwargs),
294
294
  symbol=symbol
295
295
  )
296
296
  except ccxt.OrderNotFound:
@@ -306,7 +306,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
306
306
  # When fetch_order is not supported, uses get_open_orders and extract order id
307
307
  open_orders = await self.get_open_orders(symbol=symbol)
308
308
  for order in open_orders:
309
- if order.get(ecoc.ID.value, None) == order_id:
309
+ if order.get(ecoc.EXCHANGE_ID.value, None) == exchange_order_id:
310
310
  return order
311
311
  return None # OrderNotFound
312
312
 
@@ -449,7 +449,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
449
449
  async def create_limit_trailing_stop_order(self, symbol, quantity, price=None, side=None, params=None) -> dict:
450
450
  raise NotImplementedError("create_limit_trailing_stop_order is not implemented")
451
451
 
452
- async def edit_order(self, order_id: str, order_type: enums.TraderOrderType, symbol: str,
452
+ async def edit_order(self, exchange_order_id: str, order_type: enums.TraderOrderType, symbol: str,
453
453
  quantity: float, price: float, stop_price: float = None, side: str = None,
454
454
  current_price: float = None, params: dict = None):
455
455
  ccxt_order_type = self.get_ccxt_order_type(order_type)
@@ -459,21 +459,23 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
459
459
  price_to_use = None
460
460
  # do not use keyword arguments here as default ccxt edit order is passing *args (and not **kwargs)
461
461
  return self.adapter.adapt_order(
462
- await self.client.edit_order(order_id, symbol, ccxt_order_type, side, quantity, price_to_use, params),
462
+ await self.client.edit_order(
463
+ exchange_order_id, symbol, ccxt_order_type, side, quantity, price_to_use, params
464
+ ),
463
465
  symbol=symbol
464
466
  )
465
467
 
466
468
  async def cancel_order(
467
- self, order_id: str, symbol: str, order_type: enums.TraderOrderType, **kwargs: dict
469
+ self, exchange_order_id: str, symbol: str, order_type: enums.TraderOrderType, **kwargs: dict
468
470
  ) -> enums.OrderStatus:
469
471
  try:
470
472
  with self.error_describer():
471
- await self.client.cancel_order(order_id, symbol=symbol, params=kwargs)
473
+ await self.client.cancel_order(exchange_order_id, symbol=symbol, params=kwargs)
472
474
  # no exception, cancel worked
473
475
  try:
474
476
  # make sure order is canceled
475
477
  cancelled_order = await self.exchange_manager.exchange.get_order(
476
- order_id, symbol=symbol
478
+ exchange_order_id, symbol=symbol
477
479
  )
478
480
  if cancelled_order is None or personal_data.parse_is_cancelled(cancelled_order):
479
481
  return enums.OrderStatus.CANCELED
@@ -489,13 +491,13 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
489
491
  # get a cancelled order).
490
492
  return enums.OrderStatus.CANCELED
491
493
  except ccxt.OrderNotFound as e:
492
- self.logger.debug(f"Trying to cancel order with id {order_id} but order was not found")
494
+ self.logger.debug(f"Trying to cancel order with id {exchange_order_id} but order was not found")
493
495
  raise octobot_trading.errors.OrderCancelError from e
494
496
  except (ccxt.NotSupported, octobot_trading.errors.NotSupported) as e:
495
497
  raise octobot_trading.errors.NotSupported from e
496
498
  except Exception as e:
497
- self.logger.exception(e, True, f"Unexpected error when cancelling order with id: "
498
- f"{order_id} failed to cancel | {e} ({e.__class__.__name__})")
499
+ self.logger.exception(e, True, f"Unexpected error when cancelling order with exchange id: "
500
+ f"{exchange_order_id} failed to cancel | {e} ({e.__class__.__name__})")
499
501
  raise e
500
502
 
501
503
  async def get_positions(self, symbols=None, **kwargs: dict) -> list:
@@ -726,8 +728,8 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
726
728
  def parse_currency(self, currency):
727
729
  return self.client.safe_currency_code(currency)
728
730
 
729
- def parse_order_id(self, order):
730
- return order.get(ecoc.ID.value, None)
731
+ def parse_exhange_order_id(self, order):
732
+ return order.get(ecoc.EXCHANGE_ID.value, None)
731
733
 
732
734
  def parse_order_symbol(self, order):
733
735
  return order.get(ecoc.SYMBOL.value, None)
@@ -565,7 +565,7 @@ class CCXTWebsocketConnector(abstract_websocket_exchange.AbstractWebsocketExchan
565
565
  message = f"Closed exchange connection to force reconnect. Error: {err}"
566
566
  if subsequent_disconnections > 1 and subsequent_disconnections % 5 == 0:
567
567
  self.logger.error(
568
- f"Multiple disconnections if a row [{subsequent_disconnections}]for {ws_des}. {message}"
568
+ f"Multiple disconnections if a row [{subsequent_disconnections}] for {ws_des}. {message}"
569
569
  )
570
570
  else:
571
571
  self.logger.debug(message)
@@ -165,7 +165,7 @@ class Trader(util.Initializable):
165
165
  if not order.can_be_edited():
166
166
  raise errors.OrderEditError(f"Order can't be edited, order: {order}")
167
167
  changed = False
168
- previous_order_id = order.order_id
168
+ previous_exchange_order_id = order.exchange_order_id
169
169
  try:
170
170
  async with order.lock:
171
171
  # now that we got the lock, ensure we can edit the order
@@ -183,7 +183,7 @@ class Trader(util.Initializable):
183
183
  order_params.update(params or {})
184
184
  # fill in every param as some exchange rely on re-creating the order altogether
185
185
  edited_order = await self.exchange_manager.exchange.edit_order(
186
- order.order_id,
186
+ order.exchange_order_id,
187
187
  order.order_type,
188
188
  order.symbol,
189
189
  quantity=order.origin_quantity if edited_quantity is None else edited_quantity,
@@ -222,9 +222,9 @@ class Trader(util.Initializable):
222
222
  self.logger.info(f"Edited order: {order}")
223
223
  return changed
224
224
  finally:
225
- if previous_order_id != order.order_id:
225
+ if previous_exchange_order_id != order.exchange_order_id:
226
226
  # order id changed: update orders_manager to keep consistency
227
- self.exchange_manager.exchange_personal_data.orders_manager.replace_order(previous_order_id, order)
227
+ self.exchange_manager.exchange_personal_data.orders_manager.replace_order(order.order_id, order)
228
228
 
229
229
  async def _create_new_order(self, new_order, params: dict,
230
230
  wait_for_creation=True,
@@ -263,16 +263,15 @@ class Trader(util.Initializable):
263
263
  # rebind local elements to new order instance
264
264
  if new_order.order_group:
265
265
  updated_order.add_to_order_group(new_order.order_group)
266
+ updated_order.order_id = new_order.order_id
266
267
  updated_order.tag = new_order.tag
267
268
  updated_order.chained_orders = new_order.chained_orders
268
269
  for chained_order in new_order.chained_orders:
269
270
  chained_order.triggered_by = updated_order
270
- chained_order.replace_associated_entry_id(new_order.order_id, updated_order.order_id)
271
271
  updated_order.triggered_by = new_order.triggered_by
272
272
  updated_order.has_been_bundled = new_order.has_been_bundled
273
273
  updated_order.exchange_creation_params = new_order.exchange_creation_params
274
274
  updated_order.is_waiting_for_chained_trigger = new_order.is_waiting_for_chained_trigger
275
- updated_order.set_shared_signal_order_id(new_order.shared_signal_order_id)
276
275
  updated_order.associated_entry_ids = new_order.associated_entry_ids
277
276
  updated_order.update_with_triggering_order_fees = new_order.update_with_triggering_order_fees
278
277
 
@@ -362,7 +361,7 @@ class Trader(util.Initializable):
362
361
  async with order.lock:
363
362
  try:
364
363
  order_status = await self.exchange_manager.exchange.cancel_order(
365
- order.order_id, order.symbol, order.order_type
364
+ order.exchange_order_id, order.symbol, order.order_type
366
365
  )
367
366
  except errors.NotSupported:
368
367
  raise
@@ -370,7 +369,7 @@ class Trader(util.Initializable):
370
369
  # retry to cancel order
371
370
  self.logger.debug(f"Failed to cancel order ({err} {err.__class__.__name__}), retrying")
372
371
  order_status = await self.exchange_manager.exchange.cancel_order(
373
- order.order_id, order.symbol, order.order_type
372
+ order.exchange_order_id, order.symbol, order.order_type
374
373
  )
375
374
  except errors.OrderCancelError as err:
376
375
  if await self._handle_order_cancel_error(order, err, wait_for_cancelling, cancelling_timeout):
@@ -444,19 +443,19 @@ class Trader(util.Initializable):
444
443
  await order.state.wait_for_terminate(cancelling_timeout)
445
444
  self.logger.debug(f"Completed order cancelling, order: {order}")
446
445
 
447
- async def cancel_order_with_id(self, order_id, emit_trading_signals=False,
446
+ async def cancel_order_with_id(self, exchange_order_id, emit_trading_signals=False,
448
447
  wait_for_cancelling=True,
449
448
  cancelling_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT):
450
449
  """
451
450
  Gets order matching order_id from the OrderManager and calls self.cancel_order() on it
452
- :param order_id: Id of the order to cancel
451
+ :param exchange_order_id: Exchange id of the order to cancel
453
452
  :param emit_trading_signals: when true, trading signals will be emitted
454
453
  :param wait_for_cancelling: when True, always make sure the order is completely cancelled before returning.
455
454
  :param cancelling_timeout: time before raising a timeout error when waiting for an order cancel
456
455
  :return: True if cancel is successful, False if order is not found or cancellation failed
457
456
  """
458
457
  try:
459
- order = self.exchange_manager.exchange_personal_data.orders_manager.get_order(order_id)
458
+ order = self.exchange_manager.exchange_personal_data.orders_manager.get_order(exchange_order_id)
460
459
  async with signals.remote_signal_publisher(self.exchange_manager, order.symbol, emit_trading_signals):
461
460
  return await signals.cancel_order(
462
461
  self.exchange_manager,
@@ -39,7 +39,7 @@ import octobot_trading.personal_data.orders as orders
39
39
 
40
40
 
41
41
  class RestExchange(abstract_exchange.AbstractExchange):
42
- ORDER_NON_EMPTY_FIELDS = [ecoc.ID.value, ecoc.TIMESTAMP.value, ecoc.SYMBOL.value, ecoc.TYPE.value,
42
+ ORDER_NON_EMPTY_FIELDS = [ecoc.EXCHANGE_ID.value, ecoc.TIMESTAMP.value, ecoc.SYMBOL.value, ecoc.TYPE.value,
43
43
  ecoc.SIDE.value, ecoc.PRICE.value, ecoc.AMOUNT.value, ecoc.STATUS.value]
44
44
  ORDER_REQUIRED_FIELDS = ORDER_NON_EMPTY_FIELDS + [ecoc.REMAINING.value]
45
45
  PRINT_DEBUG_LOGS = False
@@ -143,7 +143,7 @@ class RestExchange(abstract_exchange.AbstractExchange):
143
143
  return await self._verify_order(created_order, order_type, symbol, price, side)
144
144
  return None
145
145
 
146
- async def edit_order(self, order_id: str, order_type: enums.TraderOrderType, symbol: str,
146
+ async def edit_order(self, exchange_order_id: str, order_type: enums.TraderOrderType, symbol: str,
147
147
  quantity: decimal.Decimal, price: decimal.Decimal,
148
148
  stop_price: decimal.Decimal = None, side: enums.TradeOrderSide = None,
149
149
  current_price: decimal.Decimal = None,
@@ -158,17 +158,17 @@ class RestExchange(abstract_exchange.AbstractExchange):
158
158
  side = None if side is None else side.value
159
159
  params = {} if params is None else params
160
160
  params.update(self.exchange_manager.exchange_backend.get_orders_parameters(None))
161
- edited_order = await self._edit_order(order_id, order_type, symbol, quantity=float_quantity,
161
+ edited_order = await self._edit_order(exchange_order_id, order_type, symbol, quantity=float_quantity,
162
162
  price=float_price, stop_price=float_stop_price, side=side,
163
163
  current_price=float_current_price, params=params)
164
164
  order = await self._verify_order(edited_order, order_type, symbol, price, side)
165
165
  return order
166
166
  return None
167
167
 
168
- async def _edit_order(self, order_id: str, order_type: enums.TraderOrderType, symbol: str,
168
+ async def _edit_order(self, exchange_order_id: str, order_type: enums.TraderOrderType, symbol: str,
169
169
  quantity: float, price: float, stop_price: float = None, side: str = None,
170
170
  current_price: float = None, params: dict = None):
171
- return await self.connector.edit_order(order_id, order_type, symbol,
171
+ return await self.connector.edit_order(exchange_order_id, order_type, symbol,
172
172
  quantity, price, stop_price, side,
173
173
  current_price, params)
174
174
 
@@ -196,14 +196,14 @@ class RestExchange(abstract_exchange.AbstractExchange):
196
196
  async def _verify_order(self, created_order, order_type, symbol, price, side, get_order_params=None):
197
197
  # some exchanges are not returning the full order details on creation: fetch it if necessary
198
198
  if created_order and not self._ensure_order_details_completeness(created_order):
199
- if ecoc.ID.value in created_order:
200
- order_id = created_order[ecoc.ID.value]
201
- if order_id is None:
202
- self.logger.error(f"No order id on created order: {created_order}")
199
+ if ecoc.EXCHANGE_ID.value in created_order:
200
+ order_exchange_id = created_order[ecoc.EXCHANGE_ID.value]
201
+ if order_exchange_id is None:
202
+ self.logger.error(f"No order exchange id on created order: {created_order}")
203
203
  return None
204
204
  params = get_order_params or {}
205
205
  fetched_order = await self.get_order(
206
- created_order[ecoc.ID.value], symbol=symbol, **params
206
+ created_order[ecoc.EXCHANGE_ID.value], symbol=symbol, **params
207
207
  )
208
208
  if fetched_order is None:
209
209
  created_order[ecoc.STATUS.value] = enums.OrderStatus.PENDING_CREATION.value
@@ -446,27 +446,27 @@ class RestExchange(abstract_exchange.AbstractExchange):
446
446
  async def get_all_currencies_price_ticker(self, **kwargs: dict) -> typing.Optional[list]:
447
447
  return await self.connector.get_all_currencies_price_ticker(**kwargs)
448
448
 
449
- async def get_order(self, order_id: str, symbol: str = None, **kwargs: dict) -> dict:
449
+ async def get_order(self, exchange_order_id: str, symbol: str = None, **kwargs: dict) -> dict:
450
450
  return await self._ensure_order_completeness(
451
- await self.connector.get_order(order_id, symbol=symbol, **kwargs),
451
+ await self.connector.get_order(exchange_order_id, symbol=symbol, **kwargs),
452
452
  symbol, **kwargs
453
453
  )
454
454
 
455
- async def get_order_from_open_and_closed_orders(self, order_id: str, symbol: str = None, **kwargs: dict) -> dict:
455
+ async def get_order_from_open_and_closed_orders(self, exchange_order_id: str, symbol: str = None, **kwargs: dict) -> dict:
456
456
  for order in await self.get_open_orders(symbol, **kwargs):
457
- if order[enums.ExchangeConstantsOrderColumns.ID.value] == order_id:
457
+ if order[enums.ExchangeConstantsOrderColumns.EXCHANGE_ID.value] == exchange_order_id:
458
458
  return order
459
459
  for order in await self.get_closed_orders(symbol, **kwargs):
460
- if order[enums.ExchangeConstantsOrderColumns.ID.value] == order_id:
460
+ if order[enums.ExchangeConstantsOrderColumns.EXCHANGE_ID.value] == exchange_order_id:
461
461
  return order
462
462
  return None # OrderNotFound
463
463
 
464
- async def get_order_from_trades(self, symbol, order_id, order_to_update=None):
464
+ async def get_order_from_trades(self, symbol, exchange_order_id, order_to_update=None):
465
465
  order_to_update = order_to_update or {}
466
466
  trades = await self.get_my_recent_trades(symbol)
467
467
  # usually the right trade is within the last ones
468
468
  for trade in trades[::-1]:
469
- if trade[ecoc.ORDER.value] == order_id:
469
+ if trade[ecoc.ORDER.value] == exchange_order_id:
470
470
  return exchanges_util.update_raw_order_from_raw_trade(order_to_update, trade)
471
471
  return None #OrderNotFound
472
472
 
@@ -505,47 +505,49 @@ class RestExchange(abstract_exchange.AbstractExchange):
505
505
  ]
506
506
 
507
507
  async def _ensure_orders_completeness(
508
- self, raw_orders, symbol, since=None, limit=None, trades_by_order_id=None, **kwargs
508
+ self, raw_orders, symbol, since=None, limit=None, trades_by_exchange_order_id=None, **kwargs
509
509
  ):
510
510
  if not self.REQUIRE_ORDER_FEES_FROM_TRADES \
511
511
  or not any(exchanges_util.is_missing_trading_fees(order) for order in raw_orders):
512
512
  return raw_orders
513
- trades_by_order_id = trades_by_order_id or await self._get_trades_by_order_id(
513
+ trades_by_exchange_order_id = trades_by_exchange_order_id or await self._get_trades_by_exchange_order_id(
514
514
  symbol=symbol, since=since, limit=limit, **kwargs
515
515
  )
516
516
  return [
517
- await self._ensure_order_completeness(order, symbol, trades_by_order_id=trades_by_order_id, **kwargs)
517
+ await self._ensure_order_completeness(
518
+ order, symbol, trades_by_exchange_order_id=trades_by_exchange_order_id, **kwargs
519
+ )
518
520
  for order in raw_orders
519
521
  ]
520
522
 
521
523
  async def _ensure_order_completeness(
522
- self, raw_order, symbol, since=None, limit=None, trades_by_order_id=None, **kwargs
524
+ self, raw_order, symbol, since=None, limit=None, trades_by_exchange_order_id=None, **kwargs
523
525
  ):
524
526
  if not self.REQUIRE_ORDER_FEES_FROM_TRADES or not exchanges_util.is_missing_trading_fees(raw_order):
525
527
  return raw_order
526
- trades_by_order_id = trades_by_order_id or await self._get_trades_by_order_id(
528
+ trades_by_exchange_order_id = trades_by_exchange_order_id or await self._get_trades_by_exchange_order_id(
527
529
  symbol=symbol, since=since, limit=limit, **kwargs
528
530
  )
529
- exchanges_util.apply_trades_fees(raw_order, trades_by_order_id)
531
+ exchanges_util.apply_trades_fees(raw_order, trades_by_exchange_order_id)
530
532
  return raw_order
531
533
 
532
- async def _get_trades_by_order_id(self, symbol=None, since=None, limit=None, **kwargs):
533
- trades_by_order_id = {}
534
+ async def _get_trades_by_exchange_order_id(self, symbol=None, since=None, limit=None, **kwargs):
535
+ trades_by_exchange_order_id = {}
534
536
  for trade in await self.get_my_recent_trades(symbol=symbol, since=since, limit=limit, **kwargs):
535
- order_id = trade[enums.ExchangeConstantsOrderColumns.ORDER.value]
536
- if order_id in trades_by_order_id:
537
- trades_by_order_id[order_id].append(trade)
537
+ exchange_order_id = trade[enums.ExchangeConstantsOrderColumns.ORDER.value]
538
+ if exchange_order_id in trades_by_exchange_order_id:
539
+ trades_by_exchange_order_id[exchange_order_id].append(trade)
538
540
  else:
539
- trades_by_order_id[order_id] = [trade]
540
- return trades_by_order_id
541
+ trades_by_exchange_order_id[exchange_order_id] = [trade]
542
+ return trades_by_exchange_order_id
541
543
 
542
544
  async def get_my_recent_trades(self, symbol: str = None, since: int = None, limit: int = None, **kwargs: dict) -> list:
543
545
  return await self.connector.get_my_recent_trades(symbol=symbol, since=since, limit=limit, **kwargs)
544
546
 
545
547
  async def cancel_order(
546
- self, order_id: str, symbol: str, order_type: enums.TraderOrderType, **kwargs: dict
548
+ self, exchange_order_id: str, symbol: str, order_type: enums.TraderOrderType, **kwargs: dict
547
549
  ) -> enums.OrderStatus:
548
- return await self.connector.cancel_order(order_id, symbol, order_type, **kwargs)
550
+ return await self.connector.cancel_order(exchange_order_id, symbol, order_type, **kwargs)
549
551
 
550
552
  def get_trade_fee(self, symbol, order_type, quantity, price, taker_or_maker):
551
553
  return self.connector.get_trade_fee(symbol, order_type, quantity, price, taker_or_maker)
@@ -836,8 +838,8 @@ class RestExchange(abstract_exchange.AbstractExchange):
836
838
  def parse_order_book_ticker(self, order_book_ticker):
837
839
  return self.connector.parse_order_book_ticker(order_book_ticker)
838
840
 
839
- def parse_order_id(self, order):
840
- return self.connector.parse_order_id(order)
841
+ def parse_exhange_order_id(self, order):
842
+ return self.connector.parse_exhange_order_id(order)
841
843
 
842
844
  def parse_order_symbol(self, order):
843
845
  return self.connector.parse_order_symbol(order)
@@ -14,6 +14,7 @@
14
14
  # You should have received a copy of the GNU Lesser General Public
15
15
  # License along with this library.
16
16
  import asyncio
17
+ import sys
17
18
  import concurrent.futures as futures
18
19
 
19
20
  import octobot_commons.thread_util as thread_util
@@ -134,7 +135,8 @@ class WebSocketExchange(abstract_websocket.AbstractWebsocketExchange):
134
135
  try:
135
136
  self.websocket_connectors_executors = futures.ThreadPoolExecutor(
136
137
  max_workers=len(self.websocket_connectors),
137
- thread_name_prefix=f"{self.get_name()}-{self.exchange_name}-pool-executor"
138
+ thread_name_prefix=f"{self.get_name()}-{self.exchange_name}-pool-executor",
139
+
138
140
  )
139
141
 
140
142
  self.websocket_connectors_tasks = [
@@ -201,7 +203,10 @@ class WebSocketExchange(abstract_websocket.AbstractWebsocketExchange):
201
203
  self.logger.error(f"Error when closing sockets : {e}")
202
204
  for websocket_task in self.websocket_connectors_tasks:
203
205
  websocket_task.cancel()
204
- thread_util.stop_thread_pool_executor_non_gracefully(self.websocket_connectors_executors)
206
+ if sys.version_info.minor >= 9:
207
+ self.websocket_connectors_executors.shutdown(True)
208
+ else:
209
+ thread_util.stop_thread_pool_executor_non_gracefully(self.websocket_connectors_executors)
205
210
  self.websocket_connectors_executors = None
206
211
 
207
212
  def add_pairs(self, pairs, watching_only=False):