OctoBot-Trading 2.4.17__tar.gz → 2.4.18__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 (468) hide show
  1. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/CHANGELOG.md +6 -0
  2. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/OctoBot_Trading.egg-info/SOURCES.txt +1 -0
  4. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/OctoBot_Trading.egg-info/requires.txt +1 -1
  5. {OctoBot-Trading-2.4.17/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.18}/PKG-INFO +2 -2
  6. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/README.md +1 -1
  7. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/__init__.py +1 -1
  8. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/constants.py +3 -3
  9. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/adapters/abstract_adapter.py +8 -0
  10. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +18 -1
  11. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/abstract_storage.py +20 -0
  12. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/candles_storage.py +1 -0
  13. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/orders_storage.py +1 -0
  14. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/portfolio_storage.py +1 -0
  15. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/trades_storage.py +2 -0
  16. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/transactions_storage.py +1 -0
  17. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/requirements.txt +1 -1
  18. OctoBot-Trading-2.4.18/tests_additional/real_exchanges/test_bingx.py +171 -0
  19. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_bybit.py +2 -2
  20. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_bybit_futures.py +3 -3
  21. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_coinbase.py +8 -5
  22. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_hitbtc.py +4 -2
  23. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_okx.py +2 -1
  24. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_okx_futures.py +2 -1
  25. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/LICENSE +0 -0
  26. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/MANIFEST.in +0 -0
  27. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  28. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  29. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  30. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/__init__.py +0 -0
  31. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/channels.py +0 -0
  32. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/contracts.py +0 -0
  33. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/exchange.py +0 -0
  34. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/modes.py +0 -0
  35. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/orders.py +0 -0
  36. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/portfolio.py +0 -0
  37. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/positions.py +0 -0
  38. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/profitability.py +0 -0
  39. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/storage.py +0 -0
  40. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/symbol_data.py +0 -0
  41. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/trader.py +0 -0
  42. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/trades.py +0 -0
  43. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/enums.py +0 -0
  44. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/errors.py +0 -0
  45. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_channel.py +0 -0
  46. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/__init__.py +0 -0
  47. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  48. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  49. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  50. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  51. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  52. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  53. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  54. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  55. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  56. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  57. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  58. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  59. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  60. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  61. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  62. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  63. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  64. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  65. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  66. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  67. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  68. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  69. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  70. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  71. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  72. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  73. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  74. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  75. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  76. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  77. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  78. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  79. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  80. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  81. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  82. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  83. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  84. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  85. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  86. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  87. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  88. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  89. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  90. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  91. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  92. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  93. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  94. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  95. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  96. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  97. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  98. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/__init__.py +0 -0
  99. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  100. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  101. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  102. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/config/__init__.py +0 -0
  103. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  104. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  105. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  106. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  107. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
  108. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +0 -0
  109. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  110. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  111. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  112. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  113. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  114. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  115. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  116. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/exchange_builder.py +0 -0
  117. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/exchange_channels.py +0 -0
  118. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/exchange_details.py +0 -0
  119. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/exchange_factory.py +0 -0
  120. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/exchange_manager.py +0 -0
  121. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  122. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/exchanges.py +0 -0
  123. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  124. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  125. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  126. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  127. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/traders/__init__.py +0 -0
  128. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/traders/trader.py +0 -0
  129. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  130. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/types/__init__.py +0 -0
  131. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
  132. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  133. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/util/__init__.py +0 -0
  134. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  135. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  136. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  137. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/__init__.py +0 -0
  138. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/abstract_trading_mode.py +0 -0
  139. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/channel/__init__.py +0 -0
  140. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  141. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  142. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/channel/mode.py +0 -0
  143. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/mode_config.py +0 -0
  144. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/modes_factory.py +0 -0
  145. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/modes_util.py +0 -0
  146. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  147. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  148. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  149. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  150. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  151. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  152. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  153. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  154. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  155. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  156. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  157. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  158. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  159. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  160. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/octobot_channel_consumer.py +0 -0
  161. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/__init__.py +0 -0
  162. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  163. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/__init__.py +0 -0
  164. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  165. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  166. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  167. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  168. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  169. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  170. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  171. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  172. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  173. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/order.py +0 -0
  174. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  175. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  176. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/order_group.py +0 -0
  177. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/order_state.py +0 -0
  178. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/order_util.py +0 -0
  179. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  180. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  181. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  182. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  183. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  184. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  185. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  186. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  187. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  188. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  189. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  190. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  191. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  192. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  193. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  194. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  195. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  196. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  197. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  198. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  199. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  200. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  201. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  202. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  203. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  204. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  205. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  206. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  207. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  208. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  209. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  210. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  211. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  212. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  213. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  214. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  215. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  216. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  217. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  218. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  219. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  220. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  221. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  222. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  223. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  224. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  225. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  226. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  227. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  228. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  229. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  230. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  231. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  232. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  233. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/__init__.py +0 -0
  234. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  235. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  236. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  237. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  238. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/position.py +0 -0
  239. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  240. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/position_state.py +0 -0
  241. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/position_util.py +0 -0
  242. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  243. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  244. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  245. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  246. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  247. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  248. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  249. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  250. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  251. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/state.py +0 -0
  252. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/__init__.py +0 -0
  253. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  254. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  255. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  256. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/trade.py +0 -0
  257. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  258. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  259. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  260. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  261. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  262. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  263. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  264. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  265. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  266. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  267. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  268. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  269. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  270. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/signals/__init__.py +0 -0
  271. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/signals/channel/__init__.py +0 -0
  272. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  273. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  274. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/signals/channel/signal_producer.py +0 -0
  275. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/signals/signal_creation.py +0 -0
  276. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  277. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/signals/util.py +0 -0
  278. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/__init__.py +0 -0
  279. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/storage_manager.py +0 -0
  280. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/util.py +0 -0
  281. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/supervisors/__init__.py +0 -0
  282. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  283. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  284. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/__init__.py +0 -0
  285. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/config_util.py +0 -0
  286. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/initializable.py +0 -0
  287. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/initialization_util.py +0 -0
  288. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/simulator_updater_utils.py +0 -0
  289. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/test_tools/__init__.py +0 -0
  290. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  291. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  292. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  293. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  294. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/setup.cfg +0 -0
  295. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/setup.py +0 -0
  296. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/__init__.py +0 -0
  297. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_channels.py +0 -0
  298. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_exchange.py +0 -0
  299. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_modes.py +0 -0
  300. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_orders.py +0 -0
  301. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_portfolio.py +0 -0
  302. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_profitability.py +0 -0
  303. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_symbol_data.py +0 -0
  304. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_trader.py +0 -0
  305. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_trades.py +0 -0
  306. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/cli/__init__.py +0 -0
  307. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/__init__.py +0 -0
  308. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/contracts/__init__.py +0 -0
  309. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  310. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  311. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/funding/__init__.py +0 -0
  312. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  313. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/kline/__init__.py +0 -0
  314. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  315. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/ohlcv/__init__.py +0 -0
  316. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  317. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  318. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/order_book/__init__.py +0 -0
  319. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  320. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/prices/__init__.py +0 -0
  321. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  322. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  323. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/recent_trades/__init__.py +0 -0
  324. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  325. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  326. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/ticker/__init__.py +0 -0
  327. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  328. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/__init__.py +0 -0
  329. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/connectors/__init__.py +0 -0
  330. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  331. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  332. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  333. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/implementations/__init__.py +0 -0
  334. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  335. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  336. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/test_abstract_exchange.py +0 -0
  337. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  338. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/test_exchange_builder.py +0 -0
  339. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/test_exchange_config_data.py +0 -0
  340. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/test_exchange_factory.py +0 -0
  341. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/test_exchange_manager.py +0 -0
  342. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/test_exchange_simulator.py +0 -0
  343. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/test_exchanges.py +0 -0
  344. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/traders/__init__.py +0 -0
  345. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/traders/test_trader.py +0 -0
  346. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/types/__init__.py +0 -0
  347. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  348. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/util/__init__.py +0 -0
  349. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  350. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/util/test_exchange_util.py +0 -0
  351. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/__init__.py +0 -0
  352. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/script_keywords/__init__.py +0 -0
  353. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  354. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  355. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  356. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  357. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  358. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/test_abstract_mode_consumer.py +0 -0
  359. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/test_abstract_trading_mode.py +0 -0
  360. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/__init__.py +0 -0
  361. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/__init__.py +0 -0
  362. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/groups/__init__.py +0 -0
  363. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  364. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  365. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  366. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/__init__.py +0 -0
  367. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  368. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  369. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  370. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  371. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/test_order_state.py +0 -0
  372. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  373. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  374. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  375. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  376. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  377. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/test_order.py +0 -0
  378. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/test_order_adapter.py +0 -0
  379. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/test_order_factory.py +0 -0
  380. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/test_order_util.py +0 -0
  381. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/test_orders_manager.py +0 -0
  382. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  383. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/__init__.py +0 -0
  384. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  385. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  386. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  387. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  388. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  389. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  390. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  391. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/market/__init__.py +0 -0
  392. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  393. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  394. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  395. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  396. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  397. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  398. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/__init__.py +0 -0
  399. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  400. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  401. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  402. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  403. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/history/__init__.py +0 -0
  404. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  405. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  406. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/test_asset.py +0 -0
  407. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  408. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  409. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  410. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  411. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  412. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/types/__init__.py +0 -0
  413. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  414. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  415. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  416. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/__init__.py +0 -0
  417. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/channel/__init__.py +0 -0
  418. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/states/__init__.py +0 -0
  419. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/test_position.py +0 -0
  420. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/test_position_factory.py +0 -0
  421. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/test_positions_manager.py +0 -0
  422. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/types/__init__.py +0 -0
  423. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  424. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  425. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/trades/__init__.py +0 -0
  426. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/trades/test_trade_factory.py +0 -0
  427. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/trades/test_trade_manager.py +0 -0
  428. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  429. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/transactions/__init__.py +0 -0
  430. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  431. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  432. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/signals/__init__.py +0 -0
  433. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  434. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/signals/test_util.py +0 -0
  435. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/test_utils/__init__.py +0 -0
  436. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/test_utils/order_util.py +0 -0
  437. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/test_utils/random_numbers.py +0 -0
  438. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/util/__init__.py +0 -0
  439. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/util/test_config_util.py +0 -0
  440. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/__init__.py +0 -0
  441. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/__init__.py +0 -0
  442. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
  443. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  444. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  445. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_binance.py +0 -0
  446. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  447. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  448. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_bitget.py +0 -0
  449. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  450. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_bitso.py +0 -0
  451. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  452. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_bittrex.py +0 -0
  453. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_coinex.py +0 -0
  454. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  455. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_gateio.py +0 -0
  456. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  457. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_huobi.py +0 -0
  458. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_huobipro.py +0 -0
  459. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_kraken.py +0 -0
  460. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  461. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  462. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_mexc.py +0 -0
  463. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_ndax.py +0 -0
  464. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  465. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_phemex.py +0 -0
  466. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  467. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_upbit.py +0 -0
  468. {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,12 @@ 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.18] - 2023-08-17
8
+ ### Updated
9
+ - [CCXT] to version 4.0.65
10
+ ### Fixed
11
+ - [Storage] handle corrupted db files auto fix
12
+
7
13
  ## [2.4.17] - 2023-08-16
8
14
  ### Added
9
15
  - [Orders] %s and %t amounts
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.17
3
+ Version: 2.4.18
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.17](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.18](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)
@@ -435,6 +435,7 @@ tests_additional/real_exchanges/real_futures_exchange_tester.py
435
435
  tests_additional/real_exchanges/test_ascendex.py
436
436
  tests_additional/real_exchanges/test_binance.py
437
437
  tests_additional/real_exchanges/test_binance_futures.py
438
+ tests_additional/real_exchanges/test_bingx.py
438
439
  tests_additional/real_exchanges/test_bitfinex.py
439
440
  tests_additional/real_exchanges/test_bitget.py
440
441
  tests_additional/real_exchanges/test_bithumb.py
@@ -4,7 +4,7 @@ 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==3.1.52
7
+ ccxt==4.0.65
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.17
3
+ Version: 2.4.18
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.17](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.18](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.17](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.18](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.17" # major.minor.revision
18
+ VERSION = "2.4.18" # major.minor.revision
@@ -78,7 +78,7 @@ FULL_CANDLE_HISTORY_EXCHANGES = [
78
78
  "bitstamp",
79
79
  "bybit",
80
80
  "gateio",
81
- "hitbtc",
81
+ "bingx",
82
82
  "hollaex",
83
83
  "huobi",
84
84
  "huobipro",
@@ -103,8 +103,8 @@ TESTED_EXCHANGES = [
103
103
  "hollaex",
104
104
  "mexc",
105
105
  ]
106
- DEFAULT_FUTURE_EXCHANGES = ["binanceusdm", "bybit"]
107
- SIMULATOR_TESTED_EXCHANGES = ["bitfinex2", "bithumb", "bitstamp", "bittrex", "coinex",
106
+ DEFAULT_FUTURE_EXCHANGES = ["bybit"]
107
+ SIMULATOR_TESTED_EXCHANGES = ["bingx", "bitfinex2", "bithumb", "bitstamp", "bittrex", "coinex",
108
108
  "hitbtc", "kraken", "poloniex", "bitso", "ndax", "upbit",
109
109
  "wavesexchange"]
110
110
 
@@ -69,6 +69,11 @@ class AbstractAdapter:
69
69
  fixed = self.fix_ticker(raw, **kwargs)
70
70
  return self.parse_ticker(fixed, **kwargs)
71
71
 
72
+ @_adapter
73
+ def adapt_ticker_from_kline(self, raw, symbol, **kwargs):
74
+ fixed = self.create_ticker_from_kline(raw, symbol, **kwargs)
75
+ return self.parse_ticker(fixed, **kwargs)
76
+
72
77
  @_adapter
73
78
  def adapt_balance(self, raw, **kwargs):
74
79
  fixed = self.fix_balance(raw, **kwargs)
@@ -166,6 +171,9 @@ class AbstractAdapter:
166
171
  def parse_ticker(self, fixed, **kwargs):
167
172
  raise NotImplementedError("parse_ticker is not implemented")
168
173
 
174
+ def create_ticker_from_kline(self, kline, symbol, **kwargs):
175
+ raise NotImplementedError("create_ticker_from_kline is not implemented")
176
+
169
177
  def fix_balance(self, raw, **kwargs):
170
178
  # add generic logic if necessary
171
179
  return raw
@@ -109,6 +109,23 @@ class CCXTAdapter(adapters.AbstractAdapter):
109
109
  # CCXT standard ticker parsing logic
110
110
  return fixed
111
111
 
112
+ def create_ticker_from_kline(self, kline, symbol, **kwargs):
113
+ return {
114
+ enums.ExchangeConstantsTickersColumns.SYMBOL.value: symbol,
115
+ enums.ExchangeConstantsTickersColumns.TIMESTAMP.value: kline[common_enums.PriceIndexes.IND_PRICE_TIME.value],
116
+ enums.ExchangeConstantsTickersColumns.OPEN.value: kline[common_enums.PriceIndexes.IND_PRICE_OPEN.value],
117
+ enums.ExchangeConstantsTickersColumns.HIGH.value: kline[common_enums.PriceIndexes.IND_PRICE_HIGH.value],
118
+ enums.ExchangeConstantsTickersColumns.LOW.value: kline[common_enums.PriceIndexes.IND_PRICE_LOW.value],
119
+ enums.ExchangeConstantsTickersColumns.CLOSE.value: kline[common_enums.PriceIndexes.IND_PRICE_CLOSE.value],
120
+ enums.ExchangeConstantsTickersColumns.BASE_VOLUME.value: kline[common_enums.PriceIndexes.IND_PRICE_VOL.value],
121
+ enums.ExchangeConstantsTickersColumns.LAST.value: kline[common_enums.PriceIndexes.IND_PRICE_CLOSE.value],
122
+ enums.ExchangeConstantsTickersColumns.BID.value: None,
123
+ enums.ExchangeConstantsTickersColumns.BID_VOLUME.value: None,
124
+ enums.ExchangeConstantsTickersColumns.ASK.value: None,
125
+ enums.ExchangeConstantsTickersColumns.ASK_VOLUME.value: None,
126
+ enums.ExchangeConstantsTickersColumns.PREVIOUS_CLOSE.value: None,
127
+ }
128
+
112
129
  def fix_balance(self, raw, **kwargs):
113
130
  fixed = super().fix_balance(raw, **kwargs)
114
131
  # remove not currency specific keys
@@ -237,7 +254,7 @@ class CCXTAdapter(adapters.AbstractAdapter):
237
254
  f"{fixed.get(ccxt_enums.ExchangePositionCCXTColumns.UNREALISED_PNL.value, 0)}"),
238
255
  enums.ExchangeConstantsPositionColumns.REALISED_PNL.value: constants.ZERO if is_empty else
239
256
  decimal.Decimal(
240
- f"{fixed.get(ccxt_enums.ExchangePositionCCXTColumns.REALISED_PNL.value, 0)}"),
257
+ f"{fixed.get(ccxt_enums.ExchangePositionCCXTColumns.REALISED_PNL.value, 0) or 0}"),
241
258
  enums.ExchangeConstantsPositionColumns.LIQUIDATION_PRICE.value: liquidation_price,
242
259
  enums.ExchangeConstantsPositionColumns.MARK_PRICE.value: constants.ZERO if is_empty else
243
260
  decimal.Decimal(
@@ -169,3 +169,23 @@ class AbstractStorage:
169
169
  elif isinstance(val, types.FunctionType):
170
170
  raise ValueError(f"{val.__name__} is a function, it can't be serialized")
171
171
  return sanitized
172
+
173
+ @staticmethod
174
+ def hard_reset_and_retry_if_necessary(fn):
175
+ """
176
+ Will retry the given function if a database hard reset error is raised
177
+ Warning: when it happens, will also completely reset the database
178
+ """
179
+ async def wrapper(*args, **kwargs):
180
+ try:
181
+ return await fn(*args, **kwargs)
182
+ except Exception as err:
183
+ database = args[0]._get_db() # pylint: disable=protected-access
184
+ if database.is_hard_reset_error(err):
185
+ logging.get_logger(args[0].__class__.__name__).warning(
186
+ f"Resetting database due to [{err}] error"
187
+ )
188
+ await database.hard_reset()
189
+ return await fn(*args, **kwargs)
190
+ raise
191
+ return wrapper
@@ -51,6 +51,7 @@ class CandlesStorage(abstract_storage.AbstractStorage):
51
51
  commons_enums.InitializationEventExchangeTopics.CANDLES.value)
52
52
  await self.store_candles()
53
53
 
54
+ @abstract_storage.AbstractStorage.hard_reset_and_retry_if_necessary
54
55
  async def store_candles(self):
55
56
  if not self.enabled:
56
57
  return
@@ -66,6 +66,7 @@ class OrdersStorage(abstract_storage.AbstractStorage):
66
66
  await self._add_historical_open_orders(order, update_type)
67
67
  await self.trigger_debounced_flush()
68
68
 
69
+ @abstract_storage.AbstractStorage.hard_reset_and_retry_if_necessary
69
70
  async def _update_history(self):
70
71
  await self._get_db().replace_all(
71
72
  self.HISTORY_TABLE,
@@ -29,6 +29,7 @@ class PortfolioStorage(abstract_storage.AbstractStorage):
29
29
  PRICE_INIT_TIMEOUT = 30
30
30
  HISTORY_TABLE = commons_enums.RunDatabases.HISTORICAL_PORTFOLIO_VALUE.value
31
31
 
32
+ @abstract_storage.AbstractStorage.hard_reset_and_retry_if_necessary
32
33
  async def store_history(self, reset=False):
33
34
  if not self.enabled:
34
35
  return
@@ -28,6 +28,7 @@ class TradesStorage(abstract_storage.AbstractStorage):
28
28
  LIVE_CHANNEL = channels_name.OctoBotTradingChannelsName.TRADES_CHANNEL.value
29
29
  HISTORY_TABLE = commons_enums.DBTables.TRADES.value
30
30
 
31
+ @abstract_storage.AbstractStorage.hard_reset_and_retry_if_necessary
31
32
  async def _live_callback(
32
33
  self,
33
34
  exchange: str,
@@ -65,6 +66,7 @@ class TradesStorage(abstract_storage.AbstractStorage):
65
66
  await authenticator.update_trades(history, self.exchange_manager.exchange_name, reset)
66
67
  self._to_update_auth_data_ids_buffer.clear()
67
68
 
69
+ @abstract_storage.AbstractStorage.hard_reset_and_retry_if_necessary
68
70
  async def _store_history(self):
69
71
  database = self._get_db()
70
72
  await database.replace_all(
@@ -24,6 +24,7 @@ class TransactionsStorage(abstract_storage.AbstractStorage):
24
24
  IS_LIVE_CONSUMER = False
25
25
  HISTORY_TABLE = commons_enums.DBTables.TRANSACTIONS.value
26
26
 
27
+ @abstract_storage.AbstractStorage.hard_reset_and_retry_if_necessary
27
28
  async def _store_history(self):
28
29
  transactions = [
29
30
  transaction
@@ -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==3.1.52 # always ensure real exchanges tests (in tests_additional and authenticated exchange tests) are passing before changing the ccxt version
11
+ ccxt==4.0.65 # 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
 
@@ -0,0 +1,171 @@
1
+ # Drakkar-Software OctoBot-Trading
2
+ # Copyright (c) Drakkar-Software, All rights reserved.
3
+ #
4
+ # This library is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 3.0 of the License, or (at your option) any later version.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library.
16
+ import pytest
17
+
18
+ from octobot_commons.enums import TimeFrames, PriceIndexes
19
+ from octobot_trading.enums import ExchangeConstantsMarketStatusColumns as Ecmsc, \
20
+ ExchangeConstantsOrderBookInfoColumns as Ecobic, ExchangeConstantsOrderColumns as Ecoc, \
21
+ ExchangeConstantsTickersColumns as Ectc
22
+ import octobot_trading.errors
23
+ from tests_additional.real_exchanges.real_exchange_tester import RealExchangeTester
24
+ # required to catch async loop context exceptions
25
+ from tests import event_loop
26
+
27
+ # All test coroutines will be treated as marked.
28
+ pytestmark = pytest.mark.asyncio
29
+
30
+
31
+ class TestBingxRealExchangeTester(RealExchangeTester):
32
+ EXCHANGE_NAME = "bingx"
33
+ SYMBOL = "BTC/USDT"
34
+ SYMBOL_2 = "ETH/BTC"
35
+ SYMBOL_3 = "SHIB/USDT"
36
+
37
+ async def _test_time_frames(self):
38
+ time_frames = await self.time_frames()
39
+ assert all(time_frame in time_frames for time_frame in (
40
+ TimeFrames.ONE_MINUTE.value,
41
+ TimeFrames.THREE_MINUTES.value,
42
+ TimeFrames.FIVE_MINUTES.value,
43
+ TimeFrames.FIFTEEN_MINUTES.value,
44
+ TimeFrames.THIRTY_MINUTES.value,
45
+ TimeFrames.ONE_HOUR.value,
46
+ TimeFrames.TWO_HOURS.value,
47
+ TimeFrames.FOUR_HOURS.value,
48
+ TimeFrames.SIX_HOURS.value,
49
+ TimeFrames.TWELVE_HOURS.value,
50
+ TimeFrames.ONE_DAY.value,
51
+ TimeFrames.THREE_DAYS.value,
52
+ TimeFrames.ONE_WEEK.value,
53
+ TimeFrames.ONE_MONTH.value
54
+ ))
55
+
56
+ async def test_get_market_status(self):
57
+ for market_status in await self.get_market_statuses():
58
+ assert market_status
59
+ assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
60
+ assert market_status[Ecmsc.PRECISION.value]
61
+ assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]) == \
62
+ market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]
63
+ assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_PRICE.value]) == \
64
+ market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_PRICE.value]
65
+ assert all(elem in market_status[Ecmsc.LIMITS.value]
66
+ for elem in (Ecmsc.LIMITS_AMOUNT.value,
67
+ Ecmsc.LIMITS_PRICE.value,
68
+ Ecmsc.LIMITS_COST.value))
69
+ self.check_market_status_limits(
70
+ market_status,
71
+ low_cost_max=10, low_cost_min=1, # no suitable /BTC pair for now
72
+ has_price_limits=False
73
+ )
74
+
75
+ async def test_get_symbol_prices(self):
76
+ # without limit
77
+ symbol_prices = await self.get_symbol_prices()
78
+ assert len(symbol_prices) == 50
79
+ # check candles order (oldest first)
80
+ self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
81
+ # check last candle is the current candle
82
+ assert symbol_prices[-1][PriceIndexes.IND_PRICE_TIME.value] >= self.get_time() - self.get_allowed_time_delta()
83
+
84
+ # try with candles limit (used in candled updater)
85
+ symbol_prices = await self.get_symbol_prices(limit=1500)
86
+ # max candles is 1000
87
+ assert len(symbol_prices) == 1000
88
+ # check candles order (oldest first)
89
+ self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
90
+ # check last candle is the current candle
91
+ assert symbol_prices[-1][PriceIndexes.IND_PRICE_TIME.value] >= self.get_time() - self.get_allowed_time_delta()
92
+
93
+ async def test_get_historical_symbol_prices(self):
94
+ # try with since and limit (used in data collector)
95
+ for limit in (50, None):
96
+ symbol_prices = await self.get_symbol_prices(since=self.CANDLE_SINCE, limit=limit)
97
+ if limit:
98
+ assert len(symbol_prices) == limit
99
+ else:
100
+ assert len(symbol_prices) > 5
101
+ # check candles order (oldest first)
102
+ self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
103
+ # check that fetched candles are historical candles
104
+ max_candle_time = self.get_time_after_time_frames(self.CANDLE_SINCE_SEC, len(symbol_prices))
105
+ assert max_candle_time <= self.get_time()
106
+ for candle in symbol_prices:
107
+ assert self.CANDLE_SINCE_SEC <= candle[PriceIndexes.IND_PRICE_TIME.value] <= max_candle_time
108
+
109
+ async def test_get_kline_price(self):
110
+ kline_price = await self.get_kline_price()
111
+ assert len(kline_price) == 1
112
+ assert len(kline_price[0]) == 6
113
+ kline_start_time = kline_price[0][PriceIndexes.IND_PRICE_TIME.value]
114
+ # assert kline is the current candle
115
+ assert kline_start_time >= self.get_time() - self.get_allowed_time_delta()
116
+
117
+ async def test_get_order_book(self):
118
+ order_book = await self.get_order_book()
119
+ assert len(order_book[Ecobic.ASKS.value]) == 5
120
+ assert len(order_book[Ecobic.ASKS.value][0]) == 2
121
+ assert len(order_book[Ecobic.BIDS.value]) == 5
122
+ assert len(order_book[Ecobic.BIDS.value][0]) == 2
123
+
124
+ async def test_get_recent_trades(self):
125
+ recent_trades = await self.get_recent_trades()
126
+ assert len(recent_trades) == 50
127
+ # check trades order (oldest first)
128
+ self.ensure_elements_order(recent_trades, Ecoc.TIMESTAMP.value)
129
+
130
+ async def test_get_price_ticker(self):
131
+ # get_price_ticker is not support on spot market :
132
+ # to be fixed in this exchange tentacle using create_ticker_from_kline
133
+ with pytest.raises(octobot_trading.errors.FailedRequest):
134
+ ticker = await self.get_price_ticker()
135
+ # self._check_ticker(ticker, self.SYMBOL, check_content=True)
136
+
137
+ async def test_get_all_currencies_price_ticker(self):
138
+ # warning: fetches swap tickers
139
+ tickers = await self.get_all_currencies_price_ticker()
140
+ for symbol, ticker in tickers.items():
141
+ self._check_ticker(ticker, symbol)
142
+
143
+ @staticmethod
144
+ def _check_ticker(ticker, symbol, check_content=False):
145
+ assert ticker[Ectc.SYMBOL.value] == symbol
146
+ assert all(key in ticker for key in (
147
+ Ectc.HIGH.value,
148
+ Ectc.LOW.value,
149
+ Ectc.BID.value,
150
+ Ectc.BID_VOLUME.value,
151
+ Ectc.ASK.value,
152
+ Ectc.ASK_VOLUME.value,
153
+ Ectc.OPEN.value,
154
+ Ectc.CLOSE.value,
155
+ Ectc.LAST.value,
156
+ Ectc.PREVIOUS_CLOSE.value
157
+ ))
158
+ if check_content:
159
+ assert ticker[Ectc.HIGH.value]
160
+ assert ticker[Ectc.LOW.value]
161
+ assert ticker[Ectc.BID.value]
162
+ assert ticker[Ectc.BID_VOLUME.value]
163
+ assert ticker[Ectc.ASK.value]
164
+ assert ticker[Ectc.ASK_VOLUME.value]
165
+ assert ticker[Ectc.OPEN.value]
166
+ assert ticker[Ectc.CLOSE.value]
167
+ assert ticker[Ectc.LAST.value]
168
+ assert ticker[Ectc.PREVIOUS_CLOSE.value]
169
+ assert ticker[Ectc.BASE_VOLUME.value]
170
+ assert ticker[Ectc.TIMESTAMP.value]
171
+ RealExchangeTester.check_ticker_typing(ticker)
@@ -77,9 +77,9 @@ class TestBybitRealExchangeTester(RealExchangeTester):
77
77
  # check last candle is the current candle
78
78
  assert symbol_prices[-1][PriceIndexes.IND_PRICE_TIME.value] >= self.get_time() - self.get_allowed_time_delta()
79
79
 
80
- # can't fetch more than 200 candles
80
+ # can't fetch more than 1000 candles
81
81
  symbol_prices = await self.get_symbol_prices(limit=1500)
82
- assert len(symbol_prices) == 200
82
+ assert len(symbol_prices) == 1000
83
83
  # check candles order (oldest first)
84
84
  self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
85
85
  # check last candle is the current candle
@@ -76,7 +76,7 @@ class TestBybitRealExchangeTester(RealFuturesExchangeTester):
76
76
  # without limit
77
77
  symbol_prices = await self.get_symbol_prices()
78
78
  assert len(symbol_prices) == 200
79
- # max is 200 on Bybit
79
+ # max is 1000 on Bybit
80
80
  symbol_prices = await self.get_symbol_prices(limit=200)
81
81
  assert len(symbol_prices) == 200
82
82
  # check candles order (oldest first)
@@ -85,8 +85,8 @@ class TestBybitRealExchangeTester(RealFuturesExchangeTester):
85
85
  assert symbol_prices[-1][PriceIndexes.IND_PRICE_TIME.value] >= self.get_time() - self.get_allowed_time_delta()
86
86
 
87
87
  # fetching more than 200 candles is fetching candles from the past
88
- symbol_prices = await self.get_symbol_prices(limit=500)
89
- assert len(symbol_prices) == 200
88
+ symbol_prices = await self.get_symbol_prices(limit=1500)
89
+ assert len(symbol_prices) == 1000
90
90
  # check candles order (oldest first)
91
91
  self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
92
92
  # check last candle is the current candle
@@ -18,7 +18,7 @@ import pytest
18
18
  import octobot_trading.errors
19
19
  from octobot_commons.enums import TimeFrames, PriceIndexes
20
20
  from octobot_trading.enums import ExchangeConstantsMarketStatusColumns as Ecmsc, \
21
- ExchangeConstantsOrderColumns as Ecoc, \
21
+ ExchangeConstantsOrderBookInfoColumns as Ecobic, ExchangeConstantsOrderColumns as Ecoc, \
22
22
  ExchangeConstantsTickersColumns as Ectc
23
23
  from tests_additional.real_exchanges.real_exchange_tester import RealExchangeTester
24
24
  # required to catch async loop context exceptions
@@ -106,8 +106,11 @@ class TestCoinbaseRealExchangeTester(RealExchangeTester):
106
106
  assert kline_start_time >= self.get_time() - self.get_allowed_time_delta()
107
107
 
108
108
  async def test_get_order_book(self):
109
- with pytest.raises(octobot_trading.errors.NotSupported):
110
- await self.get_order_book()
109
+ order_book = await self.get_order_book()
110
+ assert len(order_book[Ecobic.ASKS.value]) == 5
111
+ assert len(order_book[Ecobic.ASKS.value][0]) == 2
112
+ assert len(order_book[Ecobic.BIDS.value]) == 5
113
+ assert len(order_book[Ecobic.BIDS.value][0]) == 2
111
114
 
112
115
  async def test_get_recent_trades(self):
113
116
  recent_trades = await self.get_recent_trades()
@@ -151,8 +154,8 @@ class TestCoinbaseRealExchangeTester(RealExchangeTester):
151
154
  assert ticker[Ectc.LAST.value]
152
155
  assert ticker[Ectc.PREVIOUS_CLOSE.value] is None
153
156
  assert ticker[Ectc.BASE_VOLUME.value] is None
154
- assert ticker[Ectc.TIMESTAMP.value] is None # will trigger an 'Ignored incomplete ticker'
157
+ assert ticker[Ectc.TIMESTAMP.value]
155
158
  RealExchangeTester.check_ticker_typing(
156
159
  ticker,
157
- check_open=False, check_high=False, check_low=False, check_timestamp=False, check_base_volume=False
160
+ check_open=False, check_high=False, check_low=False, check_base_volume=False
158
161
  )
@@ -71,7 +71,7 @@ class TestHitBtcRealExchangeTester(RealExchangeTester):
71
71
  async def test_get_symbol_prices(self):
72
72
  # without limit
73
73
  symbol_prices = await self.get_symbol_prices(sort='DESC')
74
- assert len(symbol_prices) == 100
74
+ assert len(symbol_prices) == 10
75
75
  # check candles order (oldest first)
76
76
  self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
77
77
  # check last candle is the current candle
@@ -99,7 +99,9 @@ class TestHitBtcRealExchangeTester(RealExchangeTester):
99
99
  max_candle_time = self.get_time_after_time_frames(self.CANDLE_SINCE_SEC, len(symbol_prices))
100
100
  assert max_candle_time <= self.get_time()
101
101
  for candle in symbol_prices:
102
- assert self.CANDLE_SINCE_SEC <= candle[PriceIndexes.IND_PRICE_TIME.value] <= max_candle_time
102
+ assert self.CANDLE_SINCE_SEC <= candle[PriceIndexes.IND_PRICE_TIME.value]
103
+ # invalid max time: history is not supported
104
+ assert max_candle_time <= candle[PriceIndexes.IND_PRICE_TIME.value]
103
105
 
104
106
  async def test_get_kline_price(self):
105
107
  kline_price = await self.get_kline_price(sort='DESC') # to be fixed in hitbtc tentacle
@@ -68,7 +68,8 @@ class TestOkxRealExchangeTester(RealExchangeTester):
68
68
  normal_cost_min=1e-09,
69
69
  low_cost_min=1e-08,
70
70
  expect_invalid_price_limit_values=False,
71
- enable_price_and_cost_comparison=False)
71
+ enable_price_and_cost_comparison=False,
72
+ has_price_limits=False)
72
73
 
73
74
  async def test_get_symbol_prices(self):
74
75
  # without limit
@@ -67,7 +67,8 @@ class TestOkxFuturesRealExchangeTester(RealFuturesExchangeTester):
67
67
  self.check_market_status_limits(market_status,
68
68
  low_price_max=1e-05,
69
69
  expect_invalid_price_limit_values=False,
70
- enable_price_and_cost_comparison=True)
70
+ enable_price_and_cost_comparison=True,
71
+ has_price_limits=False)
71
72
 
72
73
  async def test_get_symbol_prices(self):
73
74
  # without limit