OctoBot-Trading 2.4.126__tar.gz → 2.4.128__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/CHANGELOG.md +8 -0
  2. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/OctoBot_Trading.egg-info/SOURCES.txt +1 -0
  4. {OctoBot-Trading-2.4.126/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.128}/PKG-INFO +2 -2
  5. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/README.md +1 -1
  6. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/__init__.py +1 -1
  7. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/constants.py +2 -1
  8. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/kline/channel/kline_updater.py +1 -1
  9. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +67 -22
  10. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +7 -3
  11. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +1 -1
  12. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +4 -1
  13. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +25 -3
  14. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/__init__.py +2 -0
  15. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/__init__.py +2 -0
  16. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/decimal_order_adapter.py +6 -6
  17. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/order_util.py +7 -2
  18. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/util/test_exchange_market_status_fixer.py +51 -7
  19. OctoBot-Trading-2.4.128/tests_additional/real_exchanges/test_bitmex.py +161 -0
  20. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/LICENSE +0 -0
  21. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/MANIFEST.in +0 -0
  22. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  23. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  24. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/OctoBot_Trading.egg-info/requires.txt +0 -0
  25. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  26. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/api/__init__.py +0 -0
  27. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/api/channels.py +0 -0
  28. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/api/contracts.py +0 -0
  29. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/api/exchange.py +0 -0
  30. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/api/modes.py +0 -0
  31. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/api/orders.py +0 -0
  32. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/api/portfolio.py +0 -0
  33. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/api/positions.py +0 -0
  34. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/api/profitability.py +0 -0
  35. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/api/storage.py +0 -0
  36. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/api/symbol_data.py +0 -0
  37. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/api/trader.py +0 -0
  38. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/api/trades.py +0 -0
  39. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/enums.py +0 -0
  40. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/errors.py +0 -0
  41. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_channel.py +0 -0
  42. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/__init__.py +0 -0
  43. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  44. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  45. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  46. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  47. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  48. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  49. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  50. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  51. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  52. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  53. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  54. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  55. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  56. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  57. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  58. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  59. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  60. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  61. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  62. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  63. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  64. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  65. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  66. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  67. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  68. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  69. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  70. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  71. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  72. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  73. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  74. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  75. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  76. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  77. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  78. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  79. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  80. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  81. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  82. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  83. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  84. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  85. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  86. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  87. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  88. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  89. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  90. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/__init__.py +0 -0
  91. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  92. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  93. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  94. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  95. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/config/__init__.py +0 -0
  96. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  97. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  98. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/config/proxy_config.py +0 -0
  99. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  100. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  101. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
  102. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
  103. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  104. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  105. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  106. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  107. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  108. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  109. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  110. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  111. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/exchange_builder.py +0 -0
  112. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/exchange_channels.py +0 -0
  113. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/exchange_details.py +0 -0
  114. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/exchange_factory.py +0 -0
  115. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/exchange_manager.py +0 -0
  116. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  117. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/exchanges.py +0 -0
  118. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  119. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  120. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  121. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  122. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/traders/__init__.py +0 -0
  123. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/traders/trader.py +0 -0
  124. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  125. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/types/__init__.py +0 -0
  126. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
  127. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  128. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/util/__init__.py +0 -0
  129. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  130. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  131. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  132. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/__init__.py +0 -0
  133. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/abstract_trading_mode.py +0 -0
  134. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/channel/__init__.py +0 -0
  135. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  136. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  137. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/channel/mode.py +0 -0
  138. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/mode_activity.py +0 -0
  139. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/mode_config.py +0 -0
  140. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/modes_factory.py +0 -0
  141. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/modes_util.py +0 -0
  142. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  143. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  144. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  145. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  146. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  147. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  148. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  149. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  150. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  151. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  152. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  153. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  154. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  155. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  156. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  157. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  158. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/octobot_channel_consumer.py +0 -0
  159. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  160. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  161. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  162. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  163. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  164. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  165. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  166. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  167. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  168. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/order.py +0 -0
  169. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  170. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  171. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/order_group.py +0 -0
  172. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/order_state.py +0 -0
  173. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  174. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  175. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  176. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  177. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  178. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  179. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  180. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  181. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  182. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  183. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  184. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  185. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  186. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  187. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  188. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  189. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  190. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  191. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  192. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  193. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  194. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  195. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  196. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  197. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  198. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  199. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  200. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  201. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  202. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  203. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  204. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  205. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  206. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  207. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  208. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  209. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  210. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  211. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  212. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  213. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  214. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  215. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  216. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  217. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  218. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  219. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  220. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  221. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  222. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  223. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  224. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  225. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  226. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  227. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/__init__.py +0 -0
  228. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  229. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  230. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  231. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  232. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/position.py +0 -0
  233. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  234. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/position_state.py +0 -0
  235. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/position_util.py +0 -0
  236. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  237. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  238. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  239. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  240. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  241. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  242. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  243. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  244. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  245. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/state.py +0 -0
  246. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/trades/__init__.py +0 -0
  247. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  248. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  249. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  250. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/trades/trade.py +0 -0
  251. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  252. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  253. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  254. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  255. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  256. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  257. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  258. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  259. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  260. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  261. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  262. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  263. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  264. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/signals/__init__.py +0 -0
  265. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/signals/channel/__init__.py +0 -0
  266. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  267. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  268. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/signals/channel/signal_producer.py +0 -0
  269. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/signals/signal_creation.py +0 -0
  270. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  271. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/signals/util.py +0 -0
  272. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/storage/__init__.py +0 -0
  273. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/storage/abstract_storage.py +0 -0
  274. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/storage/candles_storage.py +0 -0
  275. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/storage/orders_storage.py +0 -0
  276. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/storage/portfolio_storage.py +0 -0
  277. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/storage/storage_manager.py +0 -0
  278. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/storage/trades_storage.py +0 -0
  279. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/storage/transactions_storage.py +0 -0
  280. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/storage/util.py +0 -0
  281. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/supervisors/__init__.py +0 -0
  282. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  283. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  284. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/util/__init__.py +0 -0
  285. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/util/config_util.py +0 -0
  286. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/util/initializable.py +0 -0
  287. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/util/initialization_util.py +0 -0
  288. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/util/simulator_updater_utils.py +0 -0
  289. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/util/test_tools/__init__.py +0 -0
  290. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  291. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  292. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  293. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  294. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/requirements.txt +0 -0
  295. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/setup.cfg +0 -0
  296. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/setup.py +0 -0
  297. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/api/__init__.py +0 -0
  298. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/api/test_channels.py +0 -0
  299. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/api/test_exchange.py +0 -0
  300. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/api/test_modes.py +0 -0
  301. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/api/test_orders.py +0 -0
  302. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/api/test_portfolio.py +0 -0
  303. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/api/test_profitability.py +0 -0
  304. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/api/test_symbol_data.py +0 -0
  305. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/api/test_trader.py +0 -0
  306. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/api/test_trades.py +0 -0
  307. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/cli/__init__.py +0 -0
  308. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/__init__.py +0 -0
  309. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/contracts/__init__.py +0 -0
  310. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  311. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  312. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/funding/__init__.py +0 -0
  313. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  314. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/kline/__init__.py +0 -0
  315. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  316. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/ohlcv/__init__.py +0 -0
  317. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  318. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  319. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/order_book/__init__.py +0 -0
  320. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  321. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/prices/__init__.py +0 -0
  322. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  323. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  324. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/recent_trades/__init__.py +0 -0
  325. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  326. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  327. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/ticker/__init__.py +0 -0
  328. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  329. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/__init__.py +0 -0
  330. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/connectors/__init__.py +0 -0
  331. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  332. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  333. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  334. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/implementations/__init__.py +0 -0
  335. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  336. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  337. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/test_abstract_exchange.py +0 -0
  338. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  339. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/test_exchange_builder.py +0 -0
  340. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/test_exchange_config_data.py +0 -0
  341. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/test_exchange_factory.py +0 -0
  342. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/test_exchange_manager.py +0 -0
  343. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/test_exchange_simulator.py +0 -0
  344. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/test_exchanges.py +0 -0
  345. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/traders/__init__.py +0 -0
  346. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/traders/test_trader.py +0 -0
  347. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/types/__init__.py +0 -0
  348. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  349. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/util/__init__.py +0 -0
  350. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/exchanges/util/test_exchange_util.py +0 -0
  351. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/modes/__init__.py +0 -0
  352. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/modes/script_keywords/__init__.py +0 -0
  353. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  354. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  355. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  356. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  357. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  358. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  359. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  360. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/modes/test_abstract_mode_consumer.py +0 -0
  361. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/modes/test_abstract_trading_mode.py +0 -0
  362. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/modes/test_modes_util.py +0 -0
  363. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/__init__.py +0 -0
  364. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/__init__.py +0 -0
  365. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/groups/__init__.py +0 -0
  366. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  367. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  368. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  369. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/states/__init__.py +0 -0
  370. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  371. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  372. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  373. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  374. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/states/test_order_state.py +0 -0
  375. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  376. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  377. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  378. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  379. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  380. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/test_order.py +0 -0
  381. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/test_order_adapter.py +0 -0
  382. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/test_order_factory.py +0 -0
  383. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/test_order_util.py +0 -0
  384. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/test_orders_manager.py +0 -0
  385. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  386. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/types/__init__.py +0 -0
  387. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  388. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  389. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  390. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  391. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  392. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  393. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  394. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  395. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/types/market/__init__.py +0 -0
  396. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  397. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  398. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  399. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  400. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  401. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  402. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/__init__.py +0 -0
  403. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  404. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  405. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  406. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  407. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/history/__init__.py +0 -0
  408. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  409. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  410. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/test_asset.py +0 -0
  411. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  412. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  413. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  414. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  415. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  416. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/types/__init__.py +0 -0
  417. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  418. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  419. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  420. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/positions/__init__.py +0 -0
  421. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/positions/channel/__init__.py +0 -0
  422. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/positions/states/__init__.py +0 -0
  423. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/positions/test_position.py +0 -0
  424. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/positions/test_position_factory.py +0 -0
  425. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/positions/test_positions_manager.py +0 -0
  426. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/positions/types/__init__.py +0 -0
  427. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  428. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  429. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/trades/__init__.py +0 -0
  430. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/trades/test_trade_factory.py +0 -0
  431. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/trades/test_trade_manager.py +0 -0
  432. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  433. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/trades/test_trade_util.py +0 -0
  434. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/transactions/__init__.py +0 -0
  435. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  436. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  437. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/signals/__init__.py +0 -0
  438. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  439. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/signals/test_util.py +0 -0
  440. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/test_utils/__init__.py +0 -0
  441. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/test_utils/order_util.py +0 -0
  442. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/test_utils/random_numbers.py +0 -0
  443. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/util/__init__.py +0 -0
  444. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests/util/test_config_util.py +0 -0
  445. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/__init__.py +0 -0
  446. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/__init__.py +0 -0
  447. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
  448. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  449. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  450. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_binance.py +0 -0
  451. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  452. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_bingx.py +0 -0
  453. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  454. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_bitget.py +0 -0
  455. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  456. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_bitmart.py +0 -0
  457. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_bitso.py +0 -0
  458. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  459. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_bybit.py +0 -0
  460. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  461. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  462. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_coinex.py +0 -0
  463. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  464. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_gateio.py +0 -0
  465. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  466. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  467. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_htx.py +0 -0
  468. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_kraken.py +0 -0
  469. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  470. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  471. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_mexc.py +0 -0
  472. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_ndax.py +0 -0
  473. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  474. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_okx.py +0 -0
  475. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  476. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_phemex.py +0 -0
  477. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  478. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_upbit.py +0 -0
  479. {OctoBot-Trading-2.4.126 → OctoBot-Trading-2.4.128}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,14 @@ 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.128] - 2023-12-03
8
+ ### Updated
9
+ [OHLCVUpdater] prevent missing candles spam
10
+
11
+ ## [2.4.127] - 2023-11-28
12
+ ### Updated
13
+ [MarketStatus] fix min cost overriding
14
+
7
15
  ## [2.4.126] - 2023-11-24
8
16
  ### Updated
9
17
  [Backtesting] make backtesting more flexible for missing data
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.126
3
+ Version: 2.4.128
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.126](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.128](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)
@@ -451,6 +451,7 @@ tests_additional/real_exchanges/test_bitfinex.py
451
451
  tests_additional/real_exchanges/test_bitget.py
452
452
  tests_additional/real_exchanges/test_bithumb.py
453
453
  tests_additional/real_exchanges/test_bitmart.py
454
+ tests_additional/real_exchanges/test_bitmex.py
454
455
  tests_additional/real_exchanges/test_bitso.py
455
456
  tests_additional/real_exchanges/test_bitstamp.py
456
457
  tests_additional/real_exchanges/test_bybit.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.126
3
+ Version: 2.4.128
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.126](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.128](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.126](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.128](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.126" # major.minor.revision
18
+ VERSION = "2.4.128" # major.minor.revision
@@ -115,6 +115,7 @@ FULL_CANDLE_HISTORY_EXCHANGES = [
115
115
  "coinbase",
116
116
  "binanceus",
117
117
  "bitmart",
118
+ "bitmex",
118
119
  ]
119
120
 
120
121
  DEFAULT_FUTURE_EXCHANGES = ["binanceusdm", "bybit"]
@@ -139,7 +140,7 @@ TESTED_EXCHANGES = [
139
140
  "bitmart",
140
141
  ])
141
142
  DEFAULT_FUTURE_EXCHANGES = sorted(["bybit"])
142
- SIMULATOR_TESTED_EXCHANGES = sorted(["bitfinex2", "bithumb", "bitstamp", "bittrex",
143
+ SIMULATOR_TESTED_EXCHANGES = sorted(["bitfinex2", "bithumb", "bitstamp", "bitmex",
143
144
  "hitbtc", "kraken", "poloniex", "bitso", "ndax", "upbit",
144
145
  "wavesexchange",])
145
146
 
@@ -78,7 +78,7 @@ class KlineUpdater(kline_channel.KlineProducer):
78
78
  except errors.FailedRequest as e:
79
79
  self.logger.warning(str(e))
80
80
  # avoid spamming on disconnected situation
81
- await asyncio.sleep(constants.DEFAULT_FAILED_REQUEST_RETRY_TIME)
81
+ await asyncio.sleep(constants.FAILED_NETWORK_REQUEST_RETRY_ATTEMPTS)
82
82
  except errors.NotSupported:
83
83
  self.logger.warning(f"{self.channel.exchange_manager.exchange_name} is not supporting updates")
84
84
  await self.pause()
@@ -35,7 +35,14 @@ class OHLCVUpdater(ohlcv_channel.OHLCVProducer):
35
35
  OHLCV_OLD_LIMIT = constants.DEFAULT_CANDLE_HISTORY_SIZE # should be <= to candle manager's MAX_CANDLES_COUNT
36
36
  OHLCV_ON_ERROR_TIME = 5
37
37
  OHLCV_MIN_REFRESH_TIME = 1
38
- OHLCV_REFRESH_TIME_THRESHOLD = 1.5 # to prevent spamming at candle closing
38
+ OHLCV_REFRESH_TIME_THRESHOLD_BY_RETRY_ATTEMPT = [
39
+ 2, # retry 1: t+2
40
+ 5, # retry 2: t+7
41
+ 8 , # retry 3: t+15
42
+ 15, # retry 4: t+30
43
+ 15, # retry 5: t+45
44
+ 60 # retry N: every 60s
45
+ ] # to prevent spamming when missing closed candles
39
46
  OHLCV_MISSING_DATA_REFRESH_RETRY_MAX_DELAY = 30 * common_constants.MINUTE_TO_SECONDS
40
47
 
41
48
  OHLCV_INITIALIZATION_TIMEOUT = 60
@@ -206,11 +213,18 @@ class OHLCVUpdater(ohlcv_channel.OHLCVProducer):
206
213
  time_frame_seconds: int = common_enums.TimeFramesMinutes[time_frame] * common_constants.MINUTE_TO_SECONDS
207
214
  time_frame_sleep: int = time_frame_seconds
208
215
  last_candle_timestamp: float = 0
209
- missing_data_sleep_time = min(int(time_frame_seconds / 6), self.OHLCV_MISSING_DATA_REFRESH_RETRY_MAX_DELAY)
210
216
 
217
+ current_candle_start_time = 0
218
+ attempt = 1
211
219
  while not self.should_stop and not self.channel.is_paused:
220
+ start_update_time = time.time()
221
+ iteration_candle_start_time = start_update_time - (start_update_time % time_frame_seconds)
212
222
  try:
213
- start_update_time = time.time()
223
+ if iteration_candle_start_time == current_candle_start_time:
224
+ attempt += 1 # not working?
225
+ else:
226
+ current_candle_start_time = iteration_candle_start_time
227
+ attempt = 1
214
228
  await self._ensure_candles_initialization(pair)
215
229
  # skip uninitialized candles
216
230
  if self.initialized_candles_by_tf_by_symbol[pair][time_frame]:
@@ -225,21 +239,37 @@ class OHLCVUpdater(ohlcv_channel.OHLCVProducer):
225
239
 
226
240
  if last_candle and len(candles) > 1:
227
241
  last_candle_timestamp, sleep_time = await self._refresh_current_candle(
228
- time_frame, pair, candles, last_candle, last_candle_timestamp, time_frame_sleep
242
+ time_frame, pair, candles, last_candle, last_candle_timestamp,
243
+ iteration_candle_start_time, time_frame_seconds, attempt
244
+ )
245
+ updated_sleep_time = self._ensure_correct_sleep_time(
246
+ sleep_time, iteration_candle_start_time, time_frame_seconds
229
247
  )
230
- await asyncio.sleep(self._ensure_correct_sleep_time(sleep_time, time_frame_sleep))
248
+ await asyncio.sleep(updated_sleep_time)
231
249
  else:
232
250
  # not enough candles: retry soon
251
+ sleep_time = self._ensure_correct_sleep_time(
252
+ self._get_missing_candle_retry_sleep_time(attempt),
253
+ iteration_candle_start_time, time_frame_seconds
254
+ )
233
255
  self.logger.debug(f"Missing candles in request results for {pair} on {time_frame}, refreshing "
234
- f"in {missing_data_sleep_time} seconds (available candles: {candles}).")
235
- await asyncio.sleep(missing_data_sleep_time)
256
+ f"in {sleep_time} seconds (available candles: {candles}).")
257
+ await asyncio.sleep(sleep_time)
236
258
  else:
237
259
  # candles on this time frame have not been initialized: sleep until the next candle update
238
260
  await asyncio.sleep(max(0.0, time_frame_sleep - (time.time() - start_update_time)))
239
- except errors.FailedRequest as e:
240
- self.logger.warning(str(e))
261
+ except errors.FailedRequest as err:
241
262
  # avoid spamming on disconnected situation
242
- await asyncio.sleep(constants.DEFAULT_FAILED_REQUEST_RETRY_TIME)
263
+ sleep_time = self._ensure_correct_sleep_time(
264
+ self._get_missing_candle_retry_sleep_time(attempt),
265
+ iteration_candle_start_time, time_frame_seconds
266
+ )
267
+ sleep_time = max(sleep_time, constants.DEFAULT_FAILED_REQUEST_RETRY_TIME)
268
+ self.logger.warning(
269
+ f"Impossible to fetch {time_frame.value} {pair} candles. Retry in {sleep_time} seconds: "
270
+ f"{html_util.get_html_summary_if_relevant(err)}"
271
+ )
272
+ await asyncio.sleep(sleep_time)
243
273
  except errors.NotSupported:
244
274
  self.logger.warning(
245
275
  f"{self.channel.exchange_manager.exchange_name} is not supporting updates")
@@ -253,36 +283,51 @@ class OHLCVUpdater(ohlcv_channel.OHLCVProducer):
253
283
  )
254
284
  await asyncio.sleep(self.OHLCV_ON_ERROR_TIME)
255
285
 
256
- async def _refresh_current_candle(self, time_frame, pair, candles, last_candle,
257
- last_candle_timestamp, time_frame_sleep):
286
+ async def _refresh_current_candle(
287
+ self, time_frame, pair, candles, last_candle, last_candle_timestamp,
288
+ iteration_candle_start_time, time_frame_seconds, attempt
289
+ ):
258
290
  current_candle_timestamp: float = last_candle[common_enums.PriceIndexes.IND_PRICE_TIME.value]
259
- should_sleep_time: float = current_candle_timestamp + time_frame_sleep - time.time()
291
+ should_sleep_time: float = current_candle_timestamp + time_frame_seconds - time.time()
260
292
 
261
293
  # if we're trying to refresh the current candle => useless
262
294
  if last_candle_timestamp == current_candle_timestamp:
263
295
  if should_sleep_time < 0:
264
- # up to date candle is not yet available on exchange: retry in a few seconds
296
+ # up-to-date candle is not yet available on exchange: retry in a few seconds
265
297
  should_sleep_time = self._ensure_correct_sleep_time(
266
- self.OHLCV_REFRESH_TIME_THRESHOLD,
267
- time_frame_sleep
298
+ self._get_missing_candle_retry_sleep_time(attempt),
299
+ iteration_candle_start_time,
300
+ time_frame_seconds
268
301
  )
269
302
  else:
270
303
  should_sleep_time = self._ensure_correct_sleep_time(
271
- should_sleep_time + time_frame_sleep + self.OHLCV_REFRESH_TIME_THRESHOLD,
272
- time_frame_sleep
304
+ should_sleep_time + time_frame_seconds + self._get_missing_candle_retry_sleep_time(attempt),
305
+ iteration_candle_start_time,
306
+ time_frame_seconds
273
307
  )
308
+ self.logger.debug(
309
+ f"Failed to fetch up-to-date candle for {pair} on {time_frame.value}. "
310
+ f"Retrying in {round(should_sleep_time, 2)} seconds"
311
+ )
312
+
274
313
  else:
275
314
  # A fresh candle happened
276
315
  last_candle_timestamp = current_candle_timestamp
277
316
  await self._push_complete_candles(time_frame, pair, candles)
278
317
  return last_candle_timestamp, should_sleep_time
279
318
 
280
- def _ensure_correct_sleep_time(self, sleep_time_candidate, time_frame_sleep):
319
+ def _get_missing_candle_retry_sleep_time(self, attempt):
320
+ if attempt < len(self.OHLCV_REFRESH_TIME_THRESHOLD_BY_RETRY_ATTEMPT):
321
+ return self.OHLCV_REFRESH_TIME_THRESHOLD_BY_RETRY_ATTEMPT[attempt - 1]
322
+ return self.OHLCV_REFRESH_TIME_THRESHOLD_BY_RETRY_ATTEMPT[-1]
323
+
324
+ def _ensure_correct_sleep_time(self, sleep_time_candidate, iteration_candle_start_time, time_frame_seconds):
281
325
  if sleep_time_candidate < OHLCVUpdater.OHLCV_MIN_REFRESH_TIME:
282
326
  return OHLCVUpdater.OHLCV_MIN_REFRESH_TIME
283
- elif sleep_time_candidate > time_frame_sleep:
284
- return time_frame_sleep
285
- return sleep_time_candidate
327
+ else:
328
+ max_sleep_time = max(iteration_candle_start_time + time_frame_seconds - time.time(), 0)
329
+ # ensure does not sleep more than missing time before next candle
330
+ return min(sleep_time_candidate, max_sleep_time)
286
331
 
287
332
  def _set_initialized(self, pair, time_frame, initialized):
288
333
  if pair not in self.initialized_candles_by_tf_by_symbol:
@@ -74,10 +74,14 @@ class RecentTradeUpdater(recent_trade_channel.RecentTradeProducer):
74
74
  except TypeError:
75
75
  pass
76
76
  await asyncio.sleep(self.refresh_time)
77
- except errors.FailedRequest as e:
78
- self.logger.warning(str(e))
77
+ except errors.FailedRequest as err:
78
+ sleep_time = constants.FAILED_NETWORK_REQUEST_RETRY_ATTEMPTS
79
+ self.logger.warning(
80
+ f"Impossible to fetch recent trades. Retry in {sleep_time} seconds: "
81
+ f"{html_util.get_html_summary_if_relevant(err)}"
82
+ )
79
83
  # avoid spamming on disconnected situation
80
- await asyncio.sleep(constants.DEFAULT_FAILED_REQUEST_RETRY_TIME)
84
+ await asyncio.sleep(sleep_time)
81
85
  except errors.NotSupported:
82
86
  self.logger.warning(f"{self.channel.exchange_manager.exchange_name} is not supporting updates")
83
87
  await self.pause()
@@ -74,7 +74,7 @@ class TickerUpdater(ticker_channel.TickerProducer):
74
74
  except errors.FailedRequest as e:
75
75
  self.logger.warning(html_util.get_html_summary_if_relevant(e))
76
76
  # avoid spamming on disconnected situation
77
- await asyncio.sleep(constants.DEFAULT_FAILED_REQUEST_RETRY_TIME)
77
+ await asyncio.sleep(constants.FAILED_NETWORK_REQUEST_RETRY_ATTEMPTS)
78
78
 
79
79
  async def fetch_and_push_pair(self, pair: str):
80
80
  with self._single_pair_update(pair) as can_update:
@@ -664,7 +664,10 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
664
664
  )
665
665
  if cancelled_order is None or personal_data.parse_is_cancelled(cancelled_order):
666
666
  return enums.OrderStatus.CANCELED
667
- elif personal_data.parse_is_open(cancelled_order):
667
+ elif (
668
+ personal_data.parse_is_open(cancelled_order)
669
+ or personal_data.parse_is_pending_cancel(cancelled_order)
670
+ ):
668
671
  return enums.OrderStatus.PENDING_CANCEL
669
672
  # cancel command worked but order is still existing and is not open or canceled. unhandled case
670
673
  # log error and consider it canceling. order states will manage the
@@ -245,7 +245,7 @@ class ExchangeMarketStatusFixer:
245
245
  def _fix_market_status_limits_with_price(self):
246
246
  candidate_amount_min, candidate_amount_max = self._calculate_amount()
247
247
  limits_amount = self.market_status[Ecmsc.LIMITS.value][Ecmsc.LIMITS_AMOUNT.value]
248
- amount_min = limits_amount.get(Ecmsc.LIMITS_PRICE_MIN.value)
248
+ amount_min = limits_amount.get(Ecmsc.LIMITS_AMOUNT_MIN.value)
249
249
  if not is_ms_valid(amount_min, zero_valid=True):
250
250
  amount_min = candidate_amount_min
251
251
  amount_max = limits_amount.get(Ecmsc.LIMITS_AMOUNT_MAX.value)
@@ -259,6 +259,28 @@ class ExchangeMarketStatusFixer:
259
259
  price_max = limits_price.get(Ecmsc.LIMITS_PRICE_MAX.value)
260
260
  if not is_ms_valid(price_max, zero_valid=False):
261
261
  price_max = self.price_example * self.LIMIT_PRICE_MULTIPLIER
262
+ limit_cost = self.market_status[Ecmsc.LIMITS.value].get(Ecmsc.LIMITS_COST.value, {})
263
+ cost_min = limit_cost.get(Ecmsc.LIMITS_COST_MIN.value)
264
+ if not is_ms_valid(cost_min, zero_valid=False):
265
+ updated_cost = False
266
+ if (
267
+ is_ms_valid(limits_price.get(Ecmsc.LIMITS_PRICE_MIN.value))
268
+ and is_ms_valid(limits_amount.get(Ecmsc.LIMITS_AMOUNT_MIN.value))
269
+ ):
270
+ # min cost can be computed from min price and amount: those values come from exchange data
271
+ candidate_cost_min = (
272
+ limits_price.get(Ecmsc.LIMITS_PRICE_MIN.value)
273
+ * limits_amount.get(Ecmsc.LIMITS_AMOUNT_MIN.value)
274
+ )
275
+ if is_ms_valid(candidate_cost_min, zero_valid=False):
276
+ cost_min = candidate_cost_min
277
+ updated_cost = True
278
+ if not updated_cost:
279
+ # avoid computing min cost based on indirect min price or amount
280
+ cost_min = 0
281
+ cost_max = limit_cost.get(Ecmsc.LIMITS_COST_MAX.value)
282
+ if not is_ms_valid(cost_max, zero_valid=False):
283
+ cost_max = price_max * amount_max
262
284
  self.market_status[Ecmsc.LIMITS.value] = {
263
285
  Ecmsc.LIMITS_AMOUNT.value: {
264
286
  Ecmsc.LIMITS_AMOUNT_MIN.value: amount_min,
@@ -269,8 +291,8 @@ class ExchangeMarketStatusFixer:
269
291
  Ecmsc.LIMITS_PRICE_MAX.value: price_max,
270
292
  },
271
293
  Ecmsc.LIMITS_COST.value: {
272
- Ecmsc.LIMITS_COST_MIN.value: price_min * amount_min,
273
- Ecmsc.LIMITS_COST_MAX.value: price_max * amount_max,
294
+ Ecmsc.LIMITS_COST_MIN.value: cost_min,
295
+ Ecmsc.LIMITS_COST_MAX.value: cost_max,
274
296
  }
275
297
  }
276
298
 
@@ -37,6 +37,7 @@ from octobot_trading.personal_data.orders import (
37
37
  parse_raw_fees,
38
38
  parse_order_status,
39
39
  parse_is_cancelled,
40
+ parse_is_pending_cancel,
40
41
  parse_is_open,
41
42
  get_pnl_transaction_source_from_order,
42
43
  is_stop_order,
@@ -253,6 +254,7 @@ __all__ = [
253
254
  "parse_raw_fees",
254
255
  "parse_order_status",
255
256
  "parse_is_cancelled",
257
+ "parse_is_pending_cancel",
256
258
  "parse_is_open",
257
259
  "get_pnl_transaction_source_from_order",
258
260
  "is_stop_order",
@@ -87,6 +87,7 @@ from octobot_trading.personal_data.orders.order_util import (
87
87
  parse_raw_fees,
88
88
  parse_order_status,
89
89
  parse_is_cancelled,
90
+ parse_is_pending_cancel,
90
91
  parse_is_open,
91
92
  get_up_to_date_price,
92
93
  get_pre_order_data,
@@ -160,6 +161,7 @@ __all__ = [
160
161
  "parse_raw_fees",
161
162
  "parse_order_status",
162
163
  "parse_is_cancelled",
164
+ "parse_is_pending_cancel",
163
165
  "parse_is_open",
164
166
  "get_up_to_date_price",
165
167
  "get_pre_order_data",
@@ -212,11 +212,11 @@ def decimal_check_and_adapt_order_details_if_necessary(quantity, price, symbol_m
212
212
  valid_price = decimal_adapt_price(symbol_market, price, truncate)
213
213
 
214
214
  # case 1: try with data directly from exchange
215
- if personal_data.is_valid(limit_amount, Ecmsc.LIMITS_AMOUNT_MIN.value):
215
+ if personal_data.is_valid(limit_amount, Ecmsc.LIMITS_AMOUNT_MIN.value, zero_valid=True):
216
216
  min_quantity = decimal.Decimal(str(limit_amount.get(Ecmsc.LIMITS_AMOUNT_MIN.value, math.nan)))
217
217
  max_quantity = None
218
218
  # not all symbol data have a max quantity
219
- if personal_data.is_valid(limit_amount, Ecmsc.LIMITS_AMOUNT_MAX.value):
219
+ if personal_data.is_valid(limit_amount, Ecmsc.LIMITS_AMOUNT_MAX.value, zero_valid=False):
220
220
  max_quantity = decimal.Decimal(str(limit_amount.get(Ecmsc.LIMITS_AMOUNT_MAX.value, math.nan)))
221
221
 
222
222
  total_order_price = valid_quantity * valid_price
@@ -226,11 +226,11 @@ def decimal_check_and_adapt_order_details_if_necessary(quantity, price, symbol_m
226
226
  return []
227
227
 
228
228
  # case 1.1: use only quantity and cost
229
- if personal_data.is_valid(limit_cost, Ecmsc.LIMITS_COST_MIN.value):
229
+ if personal_data.is_valid(limit_cost, Ecmsc.LIMITS_COST_MIN.value, zero_valid=True):
230
230
  min_cost = decimal.Decimal(str(limit_cost.get(Ecmsc.LIMITS_COST_MIN.value, math.nan)))
231
231
  max_cost = None
232
232
  # not all symbol data have a max cost
233
- if personal_data.is_valid(limit_cost, Ecmsc.LIMITS_COST_MAX.value):
233
+ if personal_data.is_valid(limit_cost, Ecmsc.LIMITS_COST_MAX.value, zero_valid=False):
234
234
  max_cost = decimal.Decimal(str(limit_cost.get(Ecmsc.LIMITS_COST_MAX.value, math.nan)))
235
235
 
236
236
  # check total_order_price not < min_cost
@@ -250,11 +250,11 @@ def decimal_check_and_adapt_order_details_if_necessary(quantity, price, symbol_m
250
250
 
251
251
  # case 1.2: use only quantity and price (if available)
252
252
  else:
253
- if personal_data.is_valid(limit_price, Ecmsc.LIMITS_PRICE_MIN.value):
253
+ if personal_data.is_valid(limit_price, Ecmsc.LIMITS_PRICE_MIN.value, zero_valid=True):
254
254
  min_price = decimal.Decimal(str(limit_price.get(Ecmsc.LIMITS_PRICE_MIN.value, math.nan)))
255
255
  max_price = None
256
256
  # not all symbol data have a max price
257
- if personal_data.is_valid(limit_price, Ecmsc.LIMITS_PRICE_MAX.value):
257
+ if personal_data.is_valid(limit_price, Ecmsc.LIMITS_PRICE_MAX.value, zero_valid=False):
258
258
  max_price = decimal.Decimal(str(limit_price.get(Ecmsc.LIMITS_PRICE_MAX.value, math.nan)))
259
259
 
260
260
  if (max_price is not None and (valid_price > max_price)) or valid_price < min_price:
@@ -34,14 +34,15 @@ from octobot_trading.enums import ExchangeConstantsMarketStatusColumns as Ecmsc
34
34
  LOGGER_NAME = "order_util"
35
35
 
36
36
 
37
- def is_valid(element, key):
37
+ def is_valid(element, key, zero_valid=False):
38
38
  """
39
39
  Checks is the element is valid with the market status fixer
40
40
  :param element:
41
41
  :param key:
42
+ :param zero_valid: if 0 should be considered a valid value
42
43
  :return:
43
44
  """
44
- return key in element and exchange_market_status_fixer.is_ms_valid(element[key])
45
+ return key in element and exchange_market_status_fixer.is_ms_valid(element[key], zero_valid=zero_valid)
45
46
 
46
47
 
47
48
  def get_min_max_amounts(symbol_market, default_value=None):
@@ -394,6 +395,10 @@ def parse_is_cancelled(raw_order):
394
395
  return parse_order_status(raw_order) in {enums.OrderStatus.CANCELED, enums.OrderStatus.CLOSED}
395
396
 
396
397
 
398
+ def parse_is_pending_cancel(raw_order):
399
+ return parse_order_status(raw_order) is enums.OrderStatus.PENDING_CANCEL
400
+
401
+
397
402
  def parse_is_open(raw_order):
398
403
  return parse_order_status(raw_order) is enums.OrderStatus.OPEN
399
404
 
@@ -63,7 +63,7 @@ class TestExchangeMarketStatusFixer:
63
63
  Ecmsc.LIMITS.value: self._get_limits(
64
64
  0.002190990480628382, 21909.904806283797,
65
65
  0.05, 10000.0,
66
- 0.0001095495240314191, 219099048.062838
66
+ 0, 219099048.062838
67
67
  )
68
68
  }
69
69
 
@@ -77,7 +77,7 @@ class TestExchangeMarketStatusFixer:
77
77
  Ecmsc.LIMITS.value: self._get_limits(
78
78
  0.002190990480628382, 21909.904806283797,
79
79
  0.05, 10000.0,
80
- 0.0001095495240314191, 219099048.062838
80
+ 0, 219099048.062838
81
81
  )
82
82
  }
83
83
 
@@ -92,7 +92,7 @@ class TestExchangeMarketStatusFixer:
92
92
  Ecmsc.LIMITS.value: self._get_limits(
93
93
  641.0256410256403, 64102564102564.04,
94
94
  1.5600000000000002e-09, 0.0015600000000000002,
95
- 9.999999999999991e-07, 99999999999.99991
95
+ 0, 99999999999.99991
96
96
  )
97
97
  }
98
98
 
@@ -107,14 +107,14 @@ class TestExchangeMarketStatusFixer:
107
107
  Ecmsc.LIMITS.value: self._get_limits(
108
108
  6.37795818470299, 63779581.84702988,
109
109
  0.0015678999, 1567.8999000000001,
110
- 0.01, 99999999999.99997
110
+ 0, 99999999999.99997
111
111
  )
112
112
  }
113
113
 
114
114
  current_price = 25.87257
115
115
  ms = {
116
116
  Ecmsc.PRECISION.value: self._get_precision(),
117
- Ecmsc.LIMITS.value: self._get_limits(None, None, 0, 0, None, None)
117
+ Ecmsc.LIMITS.value: self._get_limits(None, None, 0, 0, 11, None)
118
118
  }
119
119
 
120
120
  assert ExchangeMarketStatusFixer(ms, price_example=current_price).market_status == {
@@ -122,7 +122,7 @@ class TestExchangeMarketStatusFixer:
122
122
  Ecmsc.LIMITS.value: self._get_limits(
123
123
  0.3865097282566056, 3865097.2825660524,
124
124
  0.02587257, current_price * 1000,
125
- 0.010000000000000007, 99999999999.99997
125
+ 11, 99999999999.99997
126
126
  )
127
127
  }
128
128
 
@@ -137,7 +137,7 @@ class TestExchangeMarketStatusFixer:
137
137
  Ecmsc.LIMITS.value: self._get_limits(
138
138
  0.04986163396574511, 498616.3396574511,
139
139
  3, 3,
140
- 0.14958490189723533, 1495849.0189723533
140
+ 0, 1495849.0189723533
141
141
  )
142
142
  }
143
143
 
@@ -271,6 +271,50 @@ class TestExchangeMarketStatusFixer:
271
271
  9.999999999999991e-07, 99999999999.99991
272
272
  )
273
273
 
274
+ emsf = ExchangeMarketStatusFixer({
275
+ Ecmsc.LIMITS.value: self._get_limits(cost_min=1, cost_max=11000.33)
276
+ }, 0.000999)
277
+ emsf._fix_market_status_limits_with_price()
278
+ assert emsf.market_status[Ecmsc.LIMITS.value] == self._get_limits(
279
+ 1.001001001001, 100100100100.09999,
280
+ 9.99e-07, 0.9990000000000001,
281
+ 1, 11000.33
282
+ )
283
+
284
+ emsf = ExchangeMarketStatusFixer({
285
+ Ecmsc.LIMITS.value: self._get_limits(
286
+ amount_min=0.1, amount_max=10000,
287
+ price_min=44, price_max=4444,
288
+ )
289
+ }, 52)
290
+ # cost min max computed using price & amount
291
+ emsf._fix_market_status_limits_with_price()
292
+ assert emsf.market_status[Ecmsc.LIMITS.value] == self._get_limits(
293
+ 0.1, 10000,
294
+ 44, 4444,
295
+ 4.4, 44440000
296
+ )
297
+
298
+ # cost max ONLY computed using price & amount (missing min price)
299
+ emsf = ExchangeMarketStatusFixer({
300
+ Ecmsc.LIMITS.value: self._get_limits(
301
+ amount_min=0.1, amount_max=10000,
302
+ price_max=4444,
303
+ )
304
+ }, 52)
305
+ assert emsf.market_status[Ecmsc.LIMITS.value] == self._get_limits(
306
+ 0.1, 10000,
307
+ 0.052, 4444,
308
+ 0, 44440000 # min cost impossible to compute (no exchange info)
309
+ )
310
+ # min cost inferred from price (2nd call: consider min price as 'from exchange')
311
+ emsf._fix_market_status_limits_with_price()
312
+ assert emsf.market_status[Ecmsc.LIMITS.value] == self._get_limits(
313
+ 0.1, 10000,
314
+ 0.052, 4444,
315
+ 0.0052, 44440000
316
+ )
317
+
274
318
  # Precision
275
319
  def test_get_price_precision(self):
276
320
  if not os.getenv('CYTHON_IGNORE'):