OctoBot-Trading 2.4.48__tar.gz → 2.4.50__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 (471) hide show
  1. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/CHANGELOG.md +9 -0
  2. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/OctoBot_Trading.egg-info/SOURCES.txt +1 -2
  4. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/OctoBot_Trading.egg-info/requires.txt +2 -2
  5. {OctoBot-Trading-2.4.48/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.50}/PKG-INFO +2 -2
  6. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/README.md +1 -1
  7. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/__init__.py +1 -1
  8. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/constants.py +2 -3
  9. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +3 -0
  10. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +12 -0
  11. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +7 -7
  12. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +33 -9
  13. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/types/rest_exchange.py +5 -1
  14. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/util/exchange_util.py +2 -2
  15. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/mode_config.py +4 -3
  16. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/requirements.txt +2 -2
  17. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/util/test_exchange_util.py +2 -2
  18. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bitfinex.py +2 -2
  19. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bitget.py +13 -7
  20. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_cryptocom.py +2 -2
  21. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_gateio.py +15 -12
  22. OctoBot-Trading-2.4.48/tests_additional/real_exchanges/test_huobi.py → OctoBot-Trading-2.4.50/tests_additional/real_exchanges/test_htx.py +2 -2
  23. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_kraken.py +2 -2
  24. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_ndax.py +2 -2
  25. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_okx.py +2 -2
  26. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_okx_futures.py +2 -2
  27. OctoBot-Trading-2.4.48/tests_additional/real_exchanges/test_bittrex.py +0 -167
  28. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/LICENSE +0 -0
  29. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/MANIFEST.in +0 -0
  30. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  31. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  32. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  33. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/__init__.py +0 -0
  34. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/channels.py +0 -0
  35. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/contracts.py +0 -0
  36. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/exchange.py +0 -0
  37. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/modes.py +0 -0
  38. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/orders.py +0 -0
  39. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/portfolio.py +0 -0
  40. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/positions.py +0 -0
  41. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/profitability.py +0 -0
  42. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/storage.py +0 -0
  43. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/symbol_data.py +0 -0
  44. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/trader.py +0 -0
  45. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/trades.py +0 -0
  46. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/enums.py +0 -0
  47. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/errors.py +0 -0
  48. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_channel.py +0 -0
  49. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/__init__.py +0 -0
  50. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  51. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  52. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  53. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  54. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  55. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  56. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  57. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  58. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  59. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  60. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  61. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  62. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  63. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  64. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  65. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  66. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  67. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  68. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  69. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  70. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  71. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  72. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  73. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  74. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  75. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  76. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  77. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  78. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  79. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  80. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  81. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  82. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  83. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  84. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  85. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  86. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  87. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  88. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  89. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  90. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  91. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  92. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  93. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  94. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  95. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  96. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  97. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  98. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  99. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  100. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/__init__.py +0 -0
  101. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  102. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  103. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  104. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  105. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/config/__init__.py +0 -0
  106. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  107. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  108. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  109. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  110. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
  111. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  112. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  113. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  114. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  115. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  116. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  117. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  118. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/exchange_builder.py +0 -0
  119. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/exchange_channels.py +0 -0
  120. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/exchange_details.py +0 -0
  121. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/exchange_factory.py +0 -0
  122. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/exchange_manager.py +0 -0
  123. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  124. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/exchanges.py +0 -0
  125. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  126. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  127. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  128. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  129. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/traders/__init__.py +0 -0
  130. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/traders/trader.py +0 -0
  131. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  132. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/types/__init__.py +0 -0
  133. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  134. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/util/__init__.py +0 -0
  135. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  136. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  137. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  138. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/__init__.py +0 -0
  139. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/abstract_trading_mode.py +0 -0
  140. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/channel/__init__.py +0 -0
  141. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  142. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  143. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/channel/mode.py +0 -0
  144. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/modes_factory.py +0 -0
  145. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/modes_util.py +0 -0
  146. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  147. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  148. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  149. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  150. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  151. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  152. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  153. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  154. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  155. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  156. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  157. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  158. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  159. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  160. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/octobot_channel_consumer.py +0 -0
  161. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/__init__.py +0 -0
  162. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  163. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/__init__.py +0 -0
  164. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  165. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  166. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  167. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  168. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  169. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  170. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  171. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  172. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  173. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/order.py +0 -0
  174. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  175. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  176. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/order_group.py +0 -0
  177. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/order_state.py +0 -0
  178. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/order_util.py +0 -0
  179. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  180. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  181. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  182. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  183. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  184. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  185. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  186. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  187. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  188. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  189. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  190. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  191. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  192. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  193. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  194. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  195. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  196. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  197. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  198. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  199. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  200. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  201. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  202. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  203. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  204. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  205. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  206. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  207. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  208. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  209. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  210. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  211. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  212. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  213. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  214. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  215. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  216. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  217. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  218. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  219. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  220. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  221. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  222. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  223. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  224. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  225. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  226. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  227. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  228. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  229. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  230. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  231. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  232. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  233. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/__init__.py +0 -0
  234. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  235. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  236. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  237. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  238. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/position.py +0 -0
  239. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  240. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/position_state.py +0 -0
  241. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/position_util.py +0 -0
  242. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  243. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  244. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  245. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  246. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  247. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  248. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  249. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  250. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  251. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/state.py +0 -0
  252. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/__init__.py +0 -0
  253. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  254. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  255. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  256. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/trade.py +0 -0
  257. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  258. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  259. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  260. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  261. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  262. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  263. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  264. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  265. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  266. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  267. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  268. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  269. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  270. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/signals/__init__.py +0 -0
  271. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/signals/channel/__init__.py +0 -0
  272. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  273. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  274. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/signals/channel/signal_producer.py +0 -0
  275. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/signals/signal_creation.py +0 -0
  276. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  277. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/signals/util.py +0 -0
  278. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/__init__.py +0 -0
  279. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/abstract_storage.py +0 -0
  280. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/candles_storage.py +0 -0
  281. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/orders_storage.py +0 -0
  282. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/portfolio_storage.py +0 -0
  283. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/storage_manager.py +0 -0
  284. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/trades_storage.py +0 -0
  285. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/transactions_storage.py +0 -0
  286. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/util.py +0 -0
  287. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/supervisors/__init__.py +0 -0
  288. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  289. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  290. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/__init__.py +0 -0
  291. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/config_util.py +0 -0
  292. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/initializable.py +0 -0
  293. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/initialization_util.py +0 -0
  294. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/simulator_updater_utils.py +0 -0
  295. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/test_tools/__init__.py +0 -0
  296. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  297. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  298. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  299. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  300. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/setup.cfg +0 -0
  301. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/setup.py +0 -0
  302. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/__init__.py +0 -0
  303. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_channels.py +0 -0
  304. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_exchange.py +0 -0
  305. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_modes.py +0 -0
  306. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_orders.py +0 -0
  307. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_portfolio.py +0 -0
  308. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_profitability.py +0 -0
  309. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_symbol_data.py +0 -0
  310. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_trader.py +0 -0
  311. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_trades.py +0 -0
  312. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/cli/__init__.py +0 -0
  313. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/__init__.py +0 -0
  314. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/contracts/__init__.py +0 -0
  315. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  316. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  317. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/funding/__init__.py +0 -0
  318. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  319. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/kline/__init__.py +0 -0
  320. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  321. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/ohlcv/__init__.py +0 -0
  322. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  323. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  324. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/order_book/__init__.py +0 -0
  325. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  326. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/prices/__init__.py +0 -0
  327. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  328. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  329. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/recent_trades/__init__.py +0 -0
  330. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  331. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  332. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/ticker/__init__.py +0 -0
  333. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  334. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/__init__.py +0 -0
  335. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/connectors/__init__.py +0 -0
  336. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  337. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  338. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  339. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/implementations/__init__.py +0 -0
  340. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  341. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  342. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/test_abstract_exchange.py +0 -0
  343. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  344. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/test_exchange_builder.py +0 -0
  345. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/test_exchange_config_data.py +0 -0
  346. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/test_exchange_factory.py +0 -0
  347. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/test_exchange_manager.py +0 -0
  348. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/test_exchange_simulator.py +0 -0
  349. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/test_exchanges.py +0 -0
  350. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/traders/__init__.py +0 -0
  351. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/traders/test_trader.py +0 -0
  352. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/types/__init__.py +0 -0
  353. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  354. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/util/__init__.py +0 -0
  355. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  356. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/__init__.py +0 -0
  357. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/script_keywords/__init__.py +0 -0
  358. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  359. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  360. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  361. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  362. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  363. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/test_abstract_mode_consumer.py +0 -0
  364. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/test_abstract_trading_mode.py +0 -0
  365. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/test_modes_util.py +0 -0
  366. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/__init__.py +0 -0
  367. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/__init__.py +0 -0
  368. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/groups/__init__.py +0 -0
  369. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  370. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  371. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  372. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/__init__.py +0 -0
  373. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  374. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  375. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  376. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  377. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/test_order_state.py +0 -0
  378. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  379. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  380. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  381. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  382. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  383. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/test_order.py +0 -0
  384. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/test_order_adapter.py +0 -0
  385. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/test_order_factory.py +0 -0
  386. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/test_order_util.py +0 -0
  387. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/test_orders_manager.py +0 -0
  388. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  389. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/__init__.py +0 -0
  390. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  391. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  392. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  393. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  394. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  395. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  396. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  397. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/market/__init__.py +0 -0
  398. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  399. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  400. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  401. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  402. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  403. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  404. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/__init__.py +0 -0
  405. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  406. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  407. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  408. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  409. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/history/__init__.py +0 -0
  410. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  411. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  412. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/test_asset.py +0 -0
  413. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  414. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  415. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  416. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  417. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  418. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/types/__init__.py +0 -0
  419. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  420. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  421. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  422. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/__init__.py +0 -0
  423. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/channel/__init__.py +0 -0
  424. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/states/__init__.py +0 -0
  425. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/test_position.py +0 -0
  426. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/test_position_factory.py +0 -0
  427. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/test_positions_manager.py +0 -0
  428. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/types/__init__.py +0 -0
  429. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  430. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  431. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/trades/__init__.py +0 -0
  432. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/trades/test_trade_factory.py +0 -0
  433. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/trades/test_trade_manager.py +0 -0
  434. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  435. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/trades/test_trade_util.py +0 -0
  436. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/transactions/__init__.py +0 -0
  437. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  438. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  439. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/signals/__init__.py +0 -0
  440. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  441. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/signals/test_util.py +0 -0
  442. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/test_utils/__init__.py +0 -0
  443. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/test_utils/order_util.py +0 -0
  444. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/test_utils/random_numbers.py +0 -0
  445. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/util/__init__.py +0 -0
  446. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/util/test_config_util.py +0 -0
  447. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/__init__.py +0 -0
  448. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/__init__.py +0 -0
  449. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
  450. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  451. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  452. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_binance.py +0 -0
  453. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  454. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bingx.py +0 -0
  455. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  456. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bitso.py +0 -0
  457. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  458. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bybit.py +0 -0
  459. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  460. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  461. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_coinex.py +0 -0
  462. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  463. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  464. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  465. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  466. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_mexc.py +0 -0
  467. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  468. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_phemex.py +0 -0
  469. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  470. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_upbit.py +0 -0
  471. {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [2.4.50] - 2023-01-18
8
+ ### Updated
9
+ - [Websocket] Fix websocket reconnection after binance auto disconect
10
+
11
+ ## [2.4.49] - 2023-01-08
12
+ ### Updated
13
+ - [Exchanges] replace Huobi by HTX
14
+ - [CCXT] 4.2.10
15
+
7
16
  ## [2.4.48] - 2023-12-15
8
17
  ### Fixed
9
18
  - [Orders] futures orders quantity parsing
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.48
3
+ Version: 2.4.50
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.48](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.50](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)
@@ -445,7 +445,6 @@ tests_additional/real_exchanges/test_bitget.py
445
445
  tests_additional/real_exchanges/test_bithumb.py
446
446
  tests_additional/real_exchanges/test_bitso.py
447
447
  tests_additional/real_exchanges/test_bitstamp.py
448
- tests_additional/real_exchanges/test_bittrex.py
449
448
  tests_additional/real_exchanges/test_bybit.py
450
449
  tests_additional/real_exchanges/test_bybit_futures.py
451
450
  tests_additional/real_exchanges/test_coinbase.py
@@ -454,7 +453,7 @@ tests_additional/real_exchanges/test_cryptocom.py
454
453
  tests_additional/real_exchanges/test_gateio.py
455
454
  tests_additional/real_exchanges/test_hitbtc.py
456
455
  tests_additional/real_exchanges/test_hollaex.py
457
- tests_additional/real_exchanges/test_huobi.py
456
+ tests_additional/real_exchanges/test_htx.py
458
457
  tests_additional/real_exchanges/test_kraken.py
459
458
  tests_additional/real_exchanges/test_kucoin.py
460
459
  tests_additional/real_exchanges/test_kucoin_futures.py
@@ -1,10 +1,10 @@
1
- numpy==1.24.3
1
+ numpy==1.26.3
2
2
  OctoBot-Backtesting<1.10,>=1.9
3
3
  Async-Channel<2.3,>=2.2
4
4
  OctoBot-Commons<1.10,>=1.9
5
5
  OctoBot-Tentacles-Manager<2.10,>=2.9
6
6
  trading-backend>=1.2.7
7
- ccxt==4.1.82
7
+ ccxt==4.2.10
8
8
  cryptography
9
9
  sortedcontainers==2.4.0
10
10
  tinydb==4.5.2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.48
3
+ Version: 2.4.50
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.48](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.50](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.48](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.50](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.48" # major.minor.revision
18
+ VERSION = "2.4.50" # major.minor.revision
@@ -82,10 +82,9 @@ FULL_CANDLE_HISTORY_EXCHANGES = [
82
82
  "bitfinex2",
83
83
  "bitstamp",
84
84
  "bybit",
85
- "gateio",
86
85
  "bingx",
87
86
  "hollaex",
88
- "huobi",
87
+ "htx",
89
88
  "kucoin",
90
89
  "okcoin",
91
90
  "okx",
@@ -97,7 +96,7 @@ TESTED_EXCHANGES = [
97
96
  "binance",
98
97
  "okx",
99
98
  "gateio",
100
- "huobi",
99
+ "htx",
101
100
  "bitget",
102
101
  "ascendex",
103
102
  "kucoin",
@@ -135,6 +135,9 @@ class OHLCVUpdater(ohlcv_channel.OHLCVProducer):
135
135
  self._set_initialized(pair, time_frame, False)
136
136
  # fetch history
137
137
  candles = None
138
+ if self.channel.exchange_manager.exchange_config is None:
139
+ # exchange stopped
140
+ return None
138
141
  try:
139
142
  candles: list = await self._get_init_candles(time_frame, pair)
140
143
  except errors.FailedRequest as e:
@@ -66,6 +66,18 @@ class CCXTAdapter(adapters.AbstractAdapter):
66
66
  except (KeyError, TypeError):
67
67
  pass
68
68
 
69
+ def _ensure_fees(self, order_or_trade):
70
+ # call if necessary
71
+ if order_or_trade.get(enums.ExchangeConstantsOrderColumns.FEE.value) is None:
72
+ order_or_trade[enums.ExchangeConstantsOrderColumns.FEE.value] = {
73
+ enums.FeePropertyColumns.COST.value: constants.ZERO,
74
+ enums.FeePropertyColumns.EXCHANGE_ORIGINAL_COST.value: constants.ZERO,
75
+ enums.FeePropertyColumns.CURRENCY.value: None,
76
+ enums.FeePropertyColumns.RATE.value: None,
77
+ enums.FeePropertyColumns.TYPE.value: ccxt_enums.ExchangeOrderCCXTColumns.TAKER_OR_MAKER.value,
78
+ enums.FeePropertyColumns.IS_FROM_EXCHANGE.value: True,
79
+ }
80
+
69
81
  def _fix_ohlcv_prices(self, ohlcv):
70
82
  for index, value in enumerate(ohlcv[common_enums.PriceIndexes.IND_PRICE_TIME.value + 1:]):
71
83
  ohlcv[index + 1] = float(value)
@@ -101,7 +101,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
101
101
  self.time_frames = self.get_client_time_frames()
102
102
 
103
103
  except (ccxt.ExchangeNotAvailable, ccxt.RequestTimeout) as e:
104
- raise octobot_trading.errors.UnreachableExchange() from e
104
+ raise octobot_trading.errors.UnreachableExchange(e) from e
105
105
  except ccxt.AuthenticationError:
106
106
  raise ccxt.AuthenticationError
107
107
 
@@ -347,10 +347,10 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
347
347
  pass
348
348
  except ccxt.NotSupported as e:
349
349
  # some exchanges are throwing this error when an order is cancelled (ex: coinbase pro)
350
- raise octobot_trading.errors.NotSupported from e
350
+ raise octobot_trading.errors.NotSupported(e) from e
351
351
  except ccxt.ExchangeError as e:
352
352
  # something went wrong and ccxt did not expect it
353
- raise octobot_trading.errors.FailedRequest from e
353
+ raise octobot_trading.errors.FailedRequest(e) from e
354
354
  else:
355
355
  # When fetch_order is not supported, uses get_open_orders and extract order id
356
356
  open_orders = await self.get_open_orders(symbol=symbol)
@@ -391,7 +391,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
391
391
  )
392
392
  except ccxt.NotSupported as e:
393
393
  # fetch_closed_orders is not supported
394
- raise octobot_trading.errors.NotSupported from e
394
+ raise octobot_trading.errors.NotSupported(e) from e
395
395
 
396
396
  async def get_my_recent_trades(self, symbol: str = None, since: int = None,
397
397
  limit: int = None, **kwargs: dict) -> list:
@@ -543,9 +543,9 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
543
543
  return enums.OrderStatus.CANCELED
544
544
  except ccxt.OrderNotFound as e:
545
545
  self.logger.debug(f"Trying to cancel order with id {exchange_order_id} but order was not found")
546
- raise octobot_trading.errors.OrderCancelError from e
546
+ raise octobot_trading.errors.OrderCancelError(e) from e
547
547
  except (ccxt.NotSupported, octobot_trading.errors.NotSupported) as e:
548
- raise octobot_trading.errors.NotSupported from e
548
+ raise octobot_trading.errors.NotSupported(e) from e
549
549
  except Exception as e:
550
550
  self.logger.exception(e, True, f"Unexpected error when cancelling order with exchange id: "
551
551
  f"{exchange_order_id} failed to cancel | {e} ({e.__class__.__name__})")
@@ -817,6 +817,6 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
817
817
  # use 2 index to get the caller of the context manager
818
818
  caller_function_name = inspect.stack()[2].function
819
819
  exchanges.log_time_sync_error(self.logger, self.name, err, caller_function_name)
820
- raise octobot_trading.errors.FailedRequest from err
820
+ raise octobot_trading.errors.FailedRequest(err) from err
821
821
  except ccxt.RequestTimeout as e:
822
822
  raise octobot_trading.errors.FailedRequest(f"Request timeout: {e}") from e
@@ -536,13 +536,18 @@ class CCXTWebsocketConnector(abstract_websocket_exchange.AbstractWebsocketExchan
536
536
  ws_des = f"{watch_func.__name__} {g_kwargs}"
537
537
  subsequent_disconnections = 0
538
538
  already_got_feed_stopping_error = False
539
+ already_got_closed_by_user_error = False
539
540
  spamming_logs_warning_interval = 5000
540
541
  spamming_logs_debug_interval = 1000
541
542
  while not self.should_stop:
542
543
  try:
543
544
  update_data = await watch_func(*g_args, **g_kwargs)
545
+
544
546
  self._last_message_time = time.time()
547
+ if subsequent_disconnections > 0:
548
+ self.logger.debug(f"Reconnected to {ws_des}")
545
549
  subsequent_disconnections = 0
550
+ already_got_closed_by_user_error = False
546
551
  if update_data:
547
552
  # Use a copy of the update data as it will be edited by adapters.
548
553
  # We should avoid editing the original object since it is also used in ccxt internally buffers
@@ -600,15 +605,34 @@ class CCXTWebsocketConnector(abstract_websocket_exchange.AbstractWebsocketExchan
600
605
  )
601
606
  return
602
607
  except Exception as err:
603
- error_count = self._increment_error_counter(g_kwargs.get("time_frame"), err)
604
- error_message = f"Unexpected error when handling {ws_des} feed: {err} ({err.__class__.__name__}) " \
605
- f"({error_count} times)"
606
- if error_count == 1:
607
- self.logger.exception(err, True, error_message)
608
- elif error_count % spamming_logs_warning_interval == 0:
609
- self.logger.warning(error_message)
610
- elif error_count % spamming_logs_debug_interval == 0:
611
- self.logger.debug(error_message)
608
+ count_error = True
609
+ if isinstance(err, ccxt.ExchangeClosedByUser):
610
+ if self.should_stop:
611
+ # normal when stopping websocket
612
+ self.logger.debug(
613
+ f"Disconnected {ws_des}: connection closed as {self.get_name()} is stopping ({err})"
614
+ )
615
+ return
616
+ # happening when auto-stopping websocket (calling self._close_exchange_to_force_reconnect)
617
+ # from another task: current task also raised ccxt.ExchangeClosedByUser
618
+ # this is normal as long as it happens only once after a reconnection
619
+ if not already_got_closed_by_user_error:
620
+ count_error = False
621
+ self.logger.debug(
622
+ f"{ws_des} connection automatically closed, reconnecting in {self.LONG_RECONNECT_DELAY} "
623
+ f"seconds ({err})"
624
+ )
625
+ already_got_closed_by_user_error = True
626
+ if count_error:
627
+ error_count = self._increment_error_counter(g_kwargs.get("time_frame"), err)
628
+ error_message = f"Unexpected error when handling {ws_des} feed: {err} ({err.__class__.__name__}) " \
629
+ f"({error_count} times)"
630
+ if error_count == 1:
631
+ self.logger.exception(err, True, error_message)
632
+ elif error_count % spamming_logs_warning_interval == 0:
633
+ self.logger.warning(error_message)
634
+ elif error_count % spamming_logs_debug_interval == 0:
635
+ self.logger.debug(error_message)
612
636
  await asyncio.sleep(self.LONG_RECONNECT_DELAY) # avoid spamming
613
637
  subsequent_disconnections += 1 # wait for a longer time before the next reconnect
614
638
  # self.client might have changed
@@ -548,7 +548,11 @@ class RestExchange(abstract_exchange.AbstractExchange):
548
548
  async def _ensure_order_completeness(
549
549
  self, raw_order, symbol, since=None, limit=None, trades_by_exchange_order_id=None, **kwargs
550
550
  ):
551
- if not self.REQUIRE_ORDER_FEES_FROM_TRADES or not exchanges_util.is_missing_trading_fees(raw_order):
551
+ if (
552
+ raw_order is None
553
+ or not self.REQUIRE_ORDER_FEES_FROM_TRADES
554
+ or not exchanges_util.is_missing_trading_fees(raw_order)
555
+ ):
552
556
  return raw_order
553
557
  trades_by_exchange_order_id = trades_by_exchange_order_id or await self._get_trades_by_exchange_order_id(
554
558
  symbol=symbol, since=since, limit=limit, **kwargs
@@ -156,7 +156,7 @@ def _get_docs_url():
156
156
  import octobot.constants
157
157
  return octobot.constants.OCTOBOT_DOCS_URL
158
158
  except ImportError:
159
- return "https://www.octobot.cloud/guides"
159
+ return "https://www.octobot.cloud/en/guides"
160
160
 
161
161
 
162
162
  def _get_exchanges_docs_url():
@@ -164,7 +164,7 @@ def _get_exchanges_docs_url():
164
164
  import octobot.constants
165
165
  return octobot.constants.EXCHANGES_DOCS_URL
166
166
  except ImportError:
167
- return "https://www.octobot.cloud/guides/exchanges"
167
+ return "https://www.octobot.cloud/en/guides/exchanges"
168
168
 
169
169
 
170
170
  def _get_time_sync_error_message(exchange_name, caller_name):
@@ -100,7 +100,8 @@ def get_order_amount_value_desc():
100
100
  f"holdings associated to the current traded symbol; " \
101
101
  f"5{dsl.QuantityType.TRADED_SYMBOLS_ASSETS_PERCENT.value} to trade 5% of the available " \
102
102
  f"holdings associated to all configured trading pairs. " \
103
- f"Leave empty to auto-compute the amount."
103
+ f"Leave empty to auto-compute the amount. Checkout the order amounts syntax from trading modes guides " \
104
+ f"for more details."
104
105
 
105
106
 
106
107
  def user_select_order_amount(trading_mode, inputs: dict, include_buy=True, include_sell=True,
@@ -108,7 +109,7 @@ def user_select_order_amount(trading_mode, inputs: dict, include_buy=True, inclu
108
109
  if include_buy:
109
110
  trading_mode.UI.user_input(
110
111
  constants.CONFIG_BUY_ORDER_AMOUNT, common_enums.UserInputTypes.TEXT, "", inputs,
111
- title=_get_order_amount_title("buy"),
112
+ title=_get_order_amount_title("buy/entry"),
112
113
  other_schema_values={"minLength": 0},
113
114
  editor_options={
114
115
  common_enums.UserInputOtherSchemaValuesTypes.DEPENDENCIES.value: buy_dependencies
@@ -117,7 +118,7 @@ def user_select_order_amount(trading_mode, inputs: dict, include_buy=True, inclu
117
118
  if include_sell:
118
119
  trading_mode.UI.user_input(
119
120
  constants.CONFIG_SELL_ORDER_AMOUNT, common_enums.UserInputTypes.TEXT, "", inputs,
120
- title=_get_order_amount_title("sell"),
121
+ title=_get_order_amount_title("sell/exit"),
121
122
  other_schema_values={"minLength": 0},
122
123
  editor_options={
123
124
  common_enums.UserInputOtherSchemaValuesTypes.DEPENDENCIES.value: sell_dependencies
@@ -1,4 +1,4 @@
1
- numpy==1.24.3
1
+ numpy==1.26.3
2
2
 
3
3
  # Drakkar-Software requirements
4
4
  OctoBot-Backtesting>=1.9, <1.10
@@ -8,7 +8,7 @@ OctoBot-Tentacles-Manager>=2.9, <2.10
8
8
  trading-backend>=1.2.7
9
9
 
10
10
  # Exchange connection requirements
11
- ccxt==4.1.82 # always ensure real exchanges tests (in tests_additional and authenticated exchange tests) are passing before changing the ccxt version
11
+ ccxt==4.2.10 # always ensure real exchanges tests (in tests_additional and authenticated exchange tests) are passing before changing the ccxt version
12
12
 
13
13
  cryptography # Never specify a version (managed by https://github.com/Drakkar-Software/OctoBot-PyPi-Linux-Deployer)
14
14
 
@@ -80,7 +80,7 @@ async def test_is_compatible_account_with_checked_exchange(exchange_config, tent
80
80
 
81
81
 
82
82
  def test_get_partners_explanation_message():
83
- assert ".cloud/guides" in exchanges.get_partners_explanation_message()
83
+ assert ".cloud/en/guides" in exchanges.get_partners_explanation_message()
84
84
 
85
85
 
86
86
  def test_log_time_sync_error():
@@ -90,7 +90,7 @@ def test_log_time_sync_error():
90
90
  assert "exchange_name".capitalize() in args
91
91
  assert "error" in args
92
92
  assert "hello call" in args
93
- assert ".cloud/guides" in args
93
+ assert ".cloud/en/guides" in args
94
94
 
95
95
 
96
96
  @pytest.mark.asyncio
@@ -184,6 +184,6 @@ class TestBitfinexRealExchangeTester(RealExchangeTester):
184
184
  assert ticker[Ectc.LAST.value]
185
185
  assert ticker[Ectc.PREVIOUS_CLOSE.value] is None
186
186
  assert ticker[Ectc.BASE_VOLUME.value]
187
- assert ticker[Ectc.TIMESTAMP.value]
187
+ assert ticker[Ectc.TIMESTAMP.value] is None # will trigger an 'Ignored incomplete ticker'
188
188
  # open is None on this exchange
189
- RealExchangeTester.check_ticker_typing(ticker)
189
+ RealExchangeTester.check_ticker_typing(ticker, check_timestamp=False)
@@ -20,6 +20,7 @@ from octobot_trading.enums import ExchangeConstantsMarketStatusColumns as Ecmsc,
20
20
  ExchangeConstantsOrderBookInfoColumns as Ecobic, ExchangeConstantsOrderColumns as Ecoc, \
21
21
  ExchangeConstantsTickersColumns as Ectc
22
22
  from tests_additional.real_exchanges.real_exchange_tester import RealExchangeTester
23
+ import octobot_trading.errors as errors
23
24
  from tests_additional.real_exchanges import get_exchange_manager
24
25
  # required to catch async loop context exceptions
25
26
  from tests import event_loop
@@ -80,7 +81,7 @@ class TestBitgetRealExchangeTester(RealExchangeTester):
80
81
  async def test_get_symbol_prices(self):
81
82
  # without limit
82
83
  symbol_prices = await self.get_symbol_prices()
83
- assert len(symbol_prices) == 200
84
+ assert len(symbol_prices) == 100
84
85
  # check candles order (oldest first)
85
86
  self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
86
87
  # check last candle is the current candle
@@ -99,9 +100,12 @@ class TestBitgetRealExchangeTester(RealExchangeTester):
99
100
  async def test_get_historical_symbol_prices(self):
100
101
  # try with since and limit (used in data collector)
101
102
  for limit in (50, None):
102
- assert await self.get_symbol_prices(since=self.CANDLE_SINCE, limit=limit) == []
103
- # with now time as until: does not give historical candles
104
- symbol_prices = await self.get_symbol_prices(since=self.CANDLE_SINCE, limit=limit, until=self.get_ms_time())
103
+ if limit is None:
104
+ with pytest.raises(errors.FailedRequest):
105
+ # not supported
106
+ await self.get_symbol_prices(since=self.CANDLE_SINCE, limit=limit)
107
+ continue
108
+ symbol_prices = await self.get_symbol_prices(since=self.CANDLE_SINCE, limit=limit)
105
109
  if limit:
106
110
  assert len(symbol_prices) == limit
107
111
  else:
@@ -111,9 +115,11 @@ class TestBitgetRealExchangeTester(RealExchangeTester):
111
115
  # check that fetched candles are historical candles
112
116
  max_candle_time = self.get_time_after_time_frames(self.CANDLE_SINCE_SEC, len(symbol_prices))
113
117
  assert max_candle_time <= self.get_time()
114
- with pytest.raises(AssertionError): # not supported
115
- for candle in symbol_prices:
116
- assert self.CANDLE_SINCE_SEC <= candle[PriceIndexes.IND_PRICE_TIME.value] <= max_candle_time
118
+ for candle in symbol_prices:
119
+ assert self.CANDLE_SINCE_SEC <= candle[PriceIndexes.IND_PRICE_TIME.value]
120
+
121
+ # invalid (since param not respected)
122
+ assert candle[PriceIndexes.IND_PRICE_TIME.value] > max_candle_time
117
123
 
118
124
  async def test_get_kline_price(self):
119
125
  kline_price = await self.get_kline_price()
@@ -114,9 +114,9 @@ class TestCryptoComRealExchangeTester(RealExchangeTester):
114
114
  async def test_get_order_book(self):
115
115
  order_book = await self.get_order_book()
116
116
  assert len(order_book[Ecobic.ASKS.value]) == 5
117
- assert len(order_book[Ecobic.ASKS.value][0]) == 2
117
+ assert len(order_book[Ecobic.ASKS.value][0]) == 3
118
118
  assert len(order_book[Ecobic.BIDS.value]) == 5
119
- assert len(order_book[Ecobic.BIDS.value][0]) == 2
119
+ assert len(order_book[Ecobic.BIDS.value][0]) == 3
120
120
 
121
121
  async def test_get_recent_trades(self):
122
122
  recent_trades = await self.get_recent_trades()
@@ -84,18 +84,21 @@ class TestGateIORealExchangeTester(RealExchangeTester):
84
84
  async def test_get_historical_symbol_prices(self):
85
85
  # try with since and limit (used in data collector)
86
86
  for limit in (50, None):
87
- symbol_prices = await self.get_symbol_prices(since=self.CANDLE_SINCE, limit=limit)
88
- if limit:
89
- assert len(symbol_prices) == limit
90
- else:
91
- assert len(symbol_prices) > 5
92
- # check candles order (oldest first)
93
- self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
94
- # check that fetched candles are historical candles
95
- max_candle_time = self.get_time_after_time_frames(self.CANDLE_SINCE_SEC, len(symbol_prices))
96
- assert max_candle_time <= self.get_time()
97
- for candle in symbol_prices:
98
- assert self.CANDLE_SINCE_SEC <= candle[PriceIndexes.IND_PRICE_TIME.value] <= max_candle_time
87
+ with pytest.raises(errors.FailedRequest):
88
+ await self.get_symbol_prices(since=self.CANDLE_SINCE, limit=limit)
89
+ # not supported anymore (Candlestick too long ago. Maximum 10000 points ago are allowed)
90
+ # symbol_prices = await self.get_symbol_prices(since=self.CANDLE_SINCE, limit=limit)
91
+ # if limit:
92
+ # assert len(symbol_prices) == limit
93
+ # else:
94
+ # assert len(symbol_prices) > 5
95
+ # # check candles order (oldest first)
96
+ # self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
97
+ # # check that fetched candles are historical candles
98
+ # max_candle_time = self.get_time_after_time_frames(self.CANDLE_SINCE_SEC, len(symbol_prices))
99
+ # assert max_candle_time <= self.get_time()
100
+ # for candle in symbol_prices:
101
+ # assert self.CANDLE_SINCE_SEC <= candle[PriceIndexes.IND_PRICE_TIME.value] <= max_candle_time
99
102
 
100
103
  async def test_get_kline_price(self):
101
104
  kline_price = await self.get_kline_price()
@@ -28,8 +28,8 @@ from tests import event_loop
28
28
  pytestmark = pytest.mark.asyncio
29
29
 
30
30
 
31
- class TestHuobiRealExchangeTester(RealExchangeTester):
32
- EXCHANGE_NAME = "huobi"
31
+ class TestHTXRealExchangeTester(RealExchangeTester):
32
+ EXCHANGE_NAME = "htx"
33
33
  SYMBOL = "BTC/USDT"
34
34
  SYMBOL_2 = "ETH/BTC"
35
35
  SYMBOL_3 = "XRP/BTC"
@@ -170,5 +170,5 @@ class TestKrakenRealExchangeTester(RealExchangeTester):
170
170
  assert ticker[Ectc.LAST.value]
171
171
  assert ticker[Ectc.PREVIOUS_CLOSE.value] is None
172
172
  assert ticker[Ectc.BASE_VOLUME.value]
173
- assert ticker[Ectc.TIMESTAMP.value]
174
- RealExchangeTester.check_ticker_typing(ticker)
173
+ assert ticker[Ectc.TIMESTAMP.value] is None # will trigger an 'Ignored incomplete ticker'
174
+ RealExchangeTester.check_ticker_typing(ticker, check_timestamp=False)
@@ -120,9 +120,9 @@ class TestNdaxRealExchangeTester(RealExchangeTester):
120
120
  async def test_get_order_book(self):
121
121
  order_book = await self.get_order_book()
122
122
  assert len(order_book[Ecobic.ASKS.value]) == 5
123
- assert len(order_book[Ecobic.ASKS.value][0]) == 2
123
+ assert len(order_book[Ecobic.ASKS.value][0]) == 3
124
124
  assert len(order_book[Ecobic.BIDS.value]) == 5
125
- assert len(order_book[Ecobic.BIDS.value][0]) == 2
125
+ assert len(order_book[Ecobic.BIDS.value][0]) == 3
126
126
 
127
127
  async def test_get_recent_trades(self):
128
128
  recent_trades = await self.get_recent_trades()
@@ -124,9 +124,9 @@ class TestOkxRealExchangeTester(RealExchangeTester):
124
124
  async def test_get_order_book(self):
125
125
  order_book = await self.get_order_book()
126
126
  assert len(order_book[Ecobic.ASKS.value]) == 5
127
- assert len(order_book[Ecobic.ASKS.value][0]) == 2
127
+ assert len(order_book[Ecobic.ASKS.value][0]) == 3
128
128
  assert len(order_book[Ecobic.BIDS.value]) == 5
129
- assert len(order_book[Ecobic.BIDS.value][0]) == 2
129
+ assert len(order_book[Ecobic.BIDS.value][0]) == 3
130
130
 
131
131
  async def test_get_recent_trades(self):
132
132
  recent_trades = await self.get_recent_trades()
@@ -123,9 +123,9 @@ class TestOkxFuturesRealExchangeTester(RealFuturesExchangeTester):
123
123
  async def test_get_order_book(self):
124
124
  order_book = await self.get_order_book()
125
125
  assert len(order_book[Ecobic.ASKS.value]) == 5
126
- assert len(order_book[Ecobic.ASKS.value][0]) == 2
126
+ assert len(order_book[Ecobic.ASKS.value][0]) == 3
127
127
  assert len(order_book[Ecobic.BIDS.value]) == 5
128
- assert len(order_book[Ecobic.BIDS.value][0]) == 2
128
+ assert len(order_book[Ecobic.BIDS.value][0]) == 3
129
129
 
130
130
  async def test_get_recent_trades(self):
131
131
  recent_trades = await self.get_recent_trades()