OctoBot-Trading 2.4.207__tar.gz → 2.4.208__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 (513) hide show
  1. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/CHANGELOG.md +4 -0
  2. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/OctoBot_Trading.egg-info/SOURCES.txt +1 -0
  4. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/OctoBot_Trading.egg-info/requires.txt +1 -1
  5. {OctoBot-Trading-2.4.207/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.208}/PKG-INFO +2 -2
  6. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/README.md +1 -1
  7. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/__init__.py +1 -1
  8. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/constants.py +1 -1
  9. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/config/proxy_config.py +3 -6
  10. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +2 -17
  11. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/requirements.txt +1 -1
  12. OctoBot-Trading-2.4.208/tests/exchanges/connectors/ccxt/test_ccxt_client_util.py +179 -0
  13. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/real_exchange_tester.py +1 -1
  14. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_ascendex.py +1 -5
  15. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_bitfinex.py +1 -1
  16. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_bitget.py +1 -1
  17. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_cryptocom.py +2 -2
  18. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_gateio.py +2 -2
  19. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_hollaex.py +1 -1
  20. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_kraken.py +4 -3
  21. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_kucoin_futures.py +1 -1
  22. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_mexc.py +1 -1
  23. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_ndax.py +1 -1
  24. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_wavesexchange.py +1 -1
  25. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/LICENSE +0 -0
  26. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/MANIFEST.in +0 -0
  27. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  28. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  29. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  30. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/api/__init__.py +0 -0
  31. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/api/channels.py +0 -0
  32. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/api/contracts.py +0 -0
  33. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/api/exchange.py +0 -0
  34. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/api/modes.py +0 -0
  35. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/api/orders.py +0 -0
  36. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/api/portfolio.py +0 -0
  37. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/api/positions.py +0 -0
  38. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/api/profitability.py +0 -0
  39. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/api/storage.py +0 -0
  40. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/api/symbol_data.py +0 -0
  41. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/api/trader.py +0 -0
  42. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/api/trades.py +0 -0
  43. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/enums.py +0 -0
  44. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/errors.py +0 -0
  45. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_channel.py +0 -0
  46. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/__init__.py +0 -0
  47. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  48. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  49. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  50. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  51. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  52. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  53. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  54. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  55. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  56. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  57. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  58. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  59. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  60. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  61. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  62. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  63. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  64. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  65. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  66. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  67. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  68. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  69. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  70. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  71. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  72. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  73. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  74. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  75. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  76. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  77. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  78. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  79. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  80. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  81. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  82. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  83. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  84. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  85. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  86. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  87. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  88. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  89. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  90. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  91. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  92. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  93. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  94. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  95. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  96. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  97. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  98. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/__init__.py +0 -0
  99. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  100. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  101. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  102. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  103. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/config/__init__.py +0 -0
  104. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  105. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  106. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/config/exchange_credentials_data.py +0 -0
  107. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  108. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  109. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
  110. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  111. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +0 -0
  112. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  113. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  114. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  115. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  116. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  117. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  118. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  119. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/connectors/util.py +0 -0
  120. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/exchange_builder.py +0 -0
  121. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/exchange_channels.py +0 -0
  122. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/exchange_details.py +0 -0
  123. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/exchange_factory.py +0 -0
  124. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/exchange_manager.py +0 -0
  125. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  126. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/exchanges.py +0 -0
  127. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  128. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  129. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  130. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  131. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/traders/__init__.py +0 -0
  132. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/traders/trader.py +0 -0
  133. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  134. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/types/__init__.py +0 -0
  135. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
  136. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  137. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/util/__init__.py +0 -0
  138. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  139. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  140. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  141. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  142. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/__init__.py +0 -0
  143. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/abstract_trading_mode.py +0 -0
  144. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/channel/__init__.py +0 -0
  145. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  146. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  147. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/channel/mode.py +0 -0
  148. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/mode_activity.py +0 -0
  149. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/mode_config.py +0 -0
  150. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/modes_factory.py +0 -0
  151. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/modes_util.py +0 -0
  152. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  153. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  154. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  155. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  156. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  157. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  158. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  159. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  160. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  161. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  162. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  163. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  164. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  165. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  166. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  167. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  168. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/octobot_channel_consumer.py +0 -0
  169. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/__init__.py +0 -0
  170. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  171. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/__init__.py +0 -0
  172. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/active_order_swap_strategies/__init__.py +0 -0
  173. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/active_order_swap_strategies/active_order_swap_strategy.py +0 -0
  174. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/active_order_swap_strategies/stop_first_active_order_swap_strategy.py +0 -0
  175. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/active_order_swap_strategies/take_profit_first_active_order_swap_strategy.py +0 -0
  176. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  177. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  178. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  179. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  180. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  181. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  182. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  183. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  184. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  185. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/groups/trailing_on_filled_tp_balanced_order_group.py +0 -0
  186. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/order.py +0 -0
  187. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  188. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  189. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/order_group.py +0 -0
  190. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/order_state.py +0 -0
  191. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/order_util.py +0 -0
  192. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  193. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  194. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  195. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  196. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  197. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  198. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  199. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  200. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  201. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  202. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/trailing_profiles/__init__.py +0 -0
  203. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/trailing_profiles/filled_take_profit_trailing_profile.py +0 -0
  204. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/trailing_profiles/trailing_price_step.py +0 -0
  205. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile.py +0 -0
  206. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile_factory.py +0 -0
  207. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile_types.py +0 -0
  208. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/triggers/__init__.py +0 -0
  209. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/triggers/base_trigger.py +0 -0
  210. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/triggers/price_trigger.py +0 -0
  211. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  212. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  213. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  214. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  215. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  216. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  217. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  218. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  219. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  220. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  221. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  222. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  223. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  224. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  225. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  226. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  227. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  228. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  229. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  230. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  231. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  232. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  233. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  234. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  235. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  236. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  237. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  238. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  239. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  240. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  241. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  242. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  243. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  244. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  245. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  246. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  247. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  248. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  249. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/resolved_orders_portfolio_delta.py +0 -0
  250. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  251. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/sub_portfolio_data.py +0 -0
  252. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  253. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  254. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  255. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  256. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  257. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/__init__.py +0 -0
  258. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  259. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  260. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  261. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  262. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/position.py +0 -0
  263. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  264. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/position_state.py +0 -0
  265. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/position_util.py +0 -0
  266. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  267. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  268. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  269. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  270. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  271. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  272. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  273. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  274. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  275. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/state.py +0 -0
  276. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/trades/__init__.py +0 -0
  277. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  278. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  279. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  280. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/trades/trade.py +0 -0
  281. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  282. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  283. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  284. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  285. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  286. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  287. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  288. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  289. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  290. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  291. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  292. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  293. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  294. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/signals/__init__.py +0 -0
  295. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/signals/channel/__init__.py +0 -0
  296. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  297. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  298. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/signals/channel/signal_producer.py +0 -0
  299. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/signals/signal_creation.py +0 -0
  300. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  301. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/signals/util.py +0 -0
  302. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/storage/__init__.py +0 -0
  303. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/storage/abstract_storage.py +0 -0
  304. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/storage/candles_storage.py +0 -0
  305. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/storage/orders_storage.py +0 -0
  306. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/storage/portfolio_storage.py +0 -0
  307. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/storage/storage_manager.py +0 -0
  308. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/storage/trades_storage.py +0 -0
  309. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/storage/transactions_storage.py +0 -0
  310. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/storage/util.py +0 -0
  311. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/supervisors/__init__.py +0 -0
  312. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  313. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  314. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/util/__init__.py +0 -0
  315. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/util/config_util.py +0 -0
  316. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/util/initializable.py +0 -0
  317. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/util/initialization_util.py +0 -0
  318. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/util/simulator_updater_utils.py +0 -0
  319. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/util/test_tools/__init__.py +0 -0
  320. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  321. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  322. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  323. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  324. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/setup.cfg +0 -0
  325. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/setup.py +0 -0
  326. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/api/__init__.py +0 -0
  327. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/api/test_channels.py +0 -0
  328. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/api/test_exchange.py +0 -0
  329. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/api/test_modes.py +0 -0
  330. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/api/test_orders.py +0 -0
  331. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/api/test_portfolio.py +0 -0
  332. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/api/test_profitability.py +0 -0
  333. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/api/test_symbol_data.py +0 -0
  334. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/api/test_trader.py +0 -0
  335. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/api/test_trades.py +0 -0
  336. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/cli/__init__.py +0 -0
  337. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/__init__.py +0 -0
  338. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/contracts/__init__.py +0 -0
  339. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  340. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  341. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/funding/__init__.py +0 -0
  342. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  343. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/kline/__init__.py +0 -0
  344. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  345. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/ohlcv/__init__.py +0 -0
  346. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  347. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  348. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/order_book/__init__.py +0 -0
  349. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  350. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/prices/__init__.py +0 -0
  351. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  352. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  353. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/recent_trades/__init__.py +0 -0
  354. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  355. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  356. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/ticker/__init__.py +0 -0
  357. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  358. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/__init__.py +0 -0
  359. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/connectors/__init__.py +0 -0
  360. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  361. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  362. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  363. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/connectors/test_util.py +0 -0
  364. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/implementations/__init__.py +0 -0
  365. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  366. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  367. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/test_abstract_exchange.py +0 -0
  368. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  369. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/test_exchange_builder.py +0 -0
  370. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/test_exchange_config_data.py +0 -0
  371. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/test_exchange_factory.py +0 -0
  372. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/test_exchange_manager.py +0 -0
  373. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/test_exchange_simulator.py +0 -0
  374. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/test_exchanges.py +0 -0
  375. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/traders/__init__.py +0 -0
  376. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/traders/test_trader.py +0 -0
  377. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/types/__init__.py +0 -0
  378. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  379. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/util/__init__.py +0 -0
  380. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  381. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/exchanges/util/test_exchange_util.py +0 -0
  382. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/modes/__init__.py +0 -0
  383. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/modes/script_keywords/__init__.py +0 -0
  384. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  385. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  386. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  387. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  388. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  389. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  390. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  391. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/modes/test_abstract_mode_consumer.py +0 -0
  392. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/modes/test_abstract_trading_mode.py +0 -0
  393. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/modes/test_modes_util.py +0 -0
  394. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/__init__.py +0 -0
  395. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/__init__.py +0 -0
  396. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/active_order_swap_strategies/__init__.py +0 -0
  397. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/active_order_swap_strategies/test_active_order_swap_strategy.py +0 -0
  398. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/active_order_swap_strategies/test_stop_first_active_order_swap_strategy.py +0 -0
  399. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/active_order_swap_strategies/test_take_profit_first_active_order_swap_strategy.py +0 -0
  400. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/groups/__init__.py +0 -0
  401. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  402. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  403. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  404. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/groups/test_trailing_on_filled_tp_balanced_order_group.py +0 -0
  405. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/states/__init__.py +0 -0
  406. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  407. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  408. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  409. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  410. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/states/test_order_state.py +0 -0
  411. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  412. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  413. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  414. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  415. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  416. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/test_order.py +0 -0
  417. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/test_order_adapter.py +0 -0
  418. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/test_order_factory.py +0 -0
  419. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/test_order_util.py +0 -0
  420. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/test_orders_manager.py +0 -0
  421. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  422. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/trailing_profiles/__init__.py +0 -0
  423. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/trailing_profiles/test_filled_take_profit_trailing_profile.py +0 -0
  424. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/trailing_profiles/test_trailing_profile_factory.py +0 -0
  425. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/triggers/__init__.py +0 -0
  426. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/triggers/test_base_trigger.py +0 -0
  427. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/triggers/test_price_trigger.py +0 -0
  428. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/types/__init__.py +0 -0
  429. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  430. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  431. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  432. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  433. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  434. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  435. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  436. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  437. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/types/market/__init__.py +0 -0
  438. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  439. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  440. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  441. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  442. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  443. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  444. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/__init__.py +0 -0
  445. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  446. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  447. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  448. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  449. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/history/__init__.py +0 -0
  450. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  451. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  452. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/test_asset.py +0 -0
  453. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  454. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  455. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  456. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/test_portfolio_util.py +0 -0
  457. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  458. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/test_sub_portfolio_data.py +0 -0
  459. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  460. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/types/__init__.py +0 -0
  461. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  462. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  463. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  464. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/positions/__init__.py +0 -0
  465. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/positions/channel/__init__.py +0 -0
  466. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/positions/states/__init__.py +0 -0
  467. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/positions/test_position.py +0 -0
  468. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/positions/test_position_factory.py +0 -0
  469. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/positions/test_positions_manager.py +0 -0
  470. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/positions/types/__init__.py +0 -0
  471. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  472. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  473. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/trades/__init__.py +0 -0
  474. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/trades/test_trade_factory.py +0 -0
  475. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/trades/test_trade_manager.py +0 -0
  476. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  477. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/trades/test_trade_util.py +0 -0
  478. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/transactions/__init__.py +0 -0
  479. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  480. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  481. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/signals/__init__.py +0 -0
  482. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  483. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/signals/test_util.py +0 -0
  484. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/test_utils/__init__.py +0 -0
  485. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/test_utils/order_util.py +0 -0
  486. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/test_utils/random_numbers.py +0 -0
  487. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/util/__init__.py +0 -0
  488. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests/util/test_config_util.py +0 -0
  489. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/__init__.py +0 -0
  490. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/__init__.py +0 -0
  491. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  492. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_binance.py +0 -0
  493. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  494. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_bingx.py +0 -0
  495. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  496. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_bitmart.py +0 -0
  497. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_bitmex.py +0 -0
  498. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_bitso.py +0 -0
  499. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  500. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_bybit.py +0 -0
  501. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  502. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  503. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_coinex.py +0 -0
  504. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  505. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_htx.py +0 -0
  506. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_hyperliquid.py +0 -0
  507. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  508. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  509. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_okx.py +0 -0
  510. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  511. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_phemex.py +0 -0
  512. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  513. {OctoBot-Trading-2.4.207 → OctoBot-Trading-2.4.208}/tests_additional/real_exchanges/test_upbit.py +0 -0
@@ -4,6 +4,10 @@ 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.208] - 2025-08-18
8
+ ### Updated
9
+ [CCXT] update to 4.5.0
10
+
7
11
  ## [2.4.207] - 2025-08-16
8
12
  ### Updated
9
13
  [ExchangeData] add exchange_credential_id
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.207
3
+ Version: 2.4.208
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.207](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.208](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)
@@ -353,6 +353,7 @@ tests/exchanges/connectors/__init__.py
353
353
  tests/exchanges/connectors/test_util.py
354
354
  tests/exchanges/connectors/ccxt/__init__.py
355
355
  tests/exchanges/connectors/ccxt/mock_exchanges_data.py
356
+ tests/exchanges/connectors/ccxt/test_ccxt_client_util.py
356
357
  tests/exchanges/connectors/ccxt/test_ccxt_connector.py
357
358
  tests/exchanges/implementations/__init__.py
358
359
  tests/exchanges/implementations/test_default_rest_exchange.py
@@ -4,7 +4,7 @@ Async-Channel<2.3,>=2.2
4
4
  OctoBot-Commons<1.10,>=1.9.64
5
5
  OctoBot-Tentacles-Manager<2.10,>=2.9
6
6
  trading-backend>=1.2.35
7
- ccxt==4.4.85
7
+ ccxt==4.5.0
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.207
3
+ Version: 2.4.208
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.207](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.208](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.207](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.208](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.207" # major.minor.revision
18
+ VERSION = "2.4.208" # major.minor.revision
@@ -113,7 +113,7 @@ NaN = decimal.Decimal("nan")
113
113
 
114
114
  # exchanges where test_get_historical_symbol_prices is successful can be listed here
115
115
  FULL_CANDLE_HISTORY_EXCHANGES = [
116
- # "ascendex", broken since ccxt==4.4.85
116
+ "ascendex",
117
117
  "binance",
118
118
  "bitfinex",
119
119
  "bitstamp",
@@ -22,12 +22,12 @@ import octobot_trading.constants
22
22
  class ProxyConfig:
23
23
  # REST proxy
24
24
  http_proxy: typing.Optional[str] = None
25
- http_proxy_callback: typing.Optional[typing.Callable] = None
25
+ http_proxy_callback: typing.Optional[typing.Callable[[str, str, dict, typing.Any], typing.Optional[str]]] = None
26
26
  https_proxy: typing.Optional[str] = None
27
- https_proxy_callback: typing.Optional[typing.Callable] = None
27
+ https_proxy_callback: typing.Optional[typing.Callable[[str, str, dict, typing.Any], typing.Optional[str]]] = None
28
28
  # Websocket proxy
29
29
  socks_proxy : typing.Optional[str] = None
30
- socks_proxy_callback: typing.Optional[typing.Callable] = None
30
+ socks_proxy_callback: typing.Optional[typing.Callable[[str, str, dict, typing.Any], typing.Optional[str]]] = None
31
31
  # enable trust_env in exchange's aiohttp.ClientSession
32
32
  aiohttp_trust_env: bool = octobot_trading.constants.ENABLE_EXCHANGE_HTTP_PROXY_FROM_ENV
33
33
  # if set, will be called when exchange stops
@@ -37,9 +37,6 @@ class ProxyConfig:
37
37
  get_proxy_url: typing.Optional[typing.Callable[[], str]] = None
38
38
  # the host of this proxy, used to identify proxy connexion errors
39
39
  proxy_host: str = "DEFAULT PROXY HOST"
40
- # if DNS cache should be disabled with this proxy config. Warning: in this case, DNS cache will be
41
- # completely disabled for this exchange
42
- disable_dns_cache: bool = False
43
40
 
44
41
  @classmethod
45
42
  def default_env_var_config(cls):
@@ -328,7 +328,6 @@ def _use_proxy_if_necessary(client, proxy_config: proxy_config_import.ProxyConfi
328
328
  # extra args copied from self.open()
329
329
  ssl=client.ssl_context,
330
330
  loop=client.asyncio_loop,
331
- use_dns_cache=not proxy_config.disable_dns_cache,
332
331
  enable_cleanup_closed=True
333
332
  )
334
333
  client.socks_proxy_sessions[proxy_url] = aiohttp.ClientSession(
@@ -342,21 +341,6 @@ def _use_proxy_if_necessary(client, proxy_config: proxy_config_import.ProxyConfi
342
341
  raise ImportError(
343
342
  "The aiohttp_socks python library is not installed and is required to use a socks proxy"
344
343
  ) from err
345
- elif proxy_config.disable_dns_cache:
346
- # rewrite of async_ccxt.exchange.client.open()
347
- _init_ccxt_client_session_requirements(client)
348
- if client.session:
349
- # should not happen
350
- asyncio.create_task(client.session.close())
351
- connector = aiohttp.TCPConnector(
352
- ssl=client.ssl_context, loop=client.asyncio_loop, enable_cleanup_closed=True,
353
- # local overrides
354
- use_dns_cache=False
355
- # end local overrides
356
- )
357
- client.session = aiohttp.ClientSession(
358
- loop=client.asyncio_loop, connector=connector, trust_env=client.aiohttp_trust_env
359
- )
360
344
 
361
345
 
362
346
  def _init_ccxt_client_session_requirements(client):
@@ -468,7 +452,7 @@ def _use_request_counter(
468
452
  # connector = aiohttp.TCPConnector(ssl=self.ssl_context, loop=self.asyncio_loop, enable_cleanup_closed=True)
469
453
  ccxt_client.tcp_connector = aiohttp.TCPConnector(
470
454
  ssl=ccxt_client.ssl_context, loop=ccxt_client.asyncio_loop,
471
- enable_cleanup_closed=True, use_dns_cache=not proxy_config.disable_dns_cache
455
+ enable_cleanup_closed=True
472
456
  )
473
457
  counter_session = aiohttp_util.CounterClientSession(
474
458
  identifier,
@@ -490,6 +474,7 @@ def _use_request_counter(
490
474
  def ccxt_exchange_class_factory(exchange_name):
491
475
  return getattr(async_ccxt, exchange_name)
492
476
 
477
+
493
478
  def reraise_with_proxy_prefix_if_relevant(
494
479
  ccxt_connector, cause_error: Exception, raised_error: typing.Optional[Exception]
495
480
  ):
@@ -8,7 +8,7 @@ OctoBot-Tentacles-Manager>=2.9, <2.10
8
8
  trading-backend>=1.2.35
9
9
 
10
10
  # Exchange connection requirements
11
- ccxt==4.4.85 # always ensure real exchanges tests (in tests_additional and authenticated exchange tests) are passing before changing the ccxt version
11
+ ccxt==4.5.0 # 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,179 @@
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 contextlib
17
+ import pytest
18
+ import mock
19
+ import aiohttp
20
+ import ccxt.async_support as ccxt
21
+
22
+ import octobot_commons.aiohttp_util as aiohttp_util
23
+
24
+ import octobot_trading.exchanges as exchanges
25
+ import octobot_trading.exchanges.connectors.ccxt.ccxt_client_util as ccxt_client_util
26
+ import octobot_trading.constants as constants
27
+
28
+
29
+ @pytest.mark.asyncio
30
+ async def test_proxies():
31
+ with mock.patch.object(aiohttp.ClientSession, "_request", mock.AsyncMock()) as _request_mock:
32
+
33
+ # no proxy
34
+ proxy_config = exchanges.ProxyConfig()
35
+ async with _exchange_with_proxy_config(proxy_config) as exchange:
36
+ _request_mock.assert_not_called()
37
+ await exchange.load_markets()
38
+ assert _request_mock.call_count > 0
39
+ assert all(
40
+ call.kwargs["proxy"] is None
41
+ for call in _request_mock.call_args_list
42
+ )
43
+ _request_mock.reset_mock()
44
+
45
+ # http proxy
46
+ proxy_config = exchanges.ProxyConfig(
47
+ http_proxy="http://127.0.0.1:9090",
48
+ )
49
+ async with _exchange_with_proxy_config(proxy_config) as exchange:
50
+ _request_mock.assert_not_called()
51
+ await exchange.load_markets()
52
+ assert _request_mock.call_count > 0
53
+ assert all(
54
+ call.kwargs["proxy"] == "http://127.0.0.1:9090"
55
+ for call in _request_mock.call_args_list
56
+ )
57
+ _request_mock.reset_mock()
58
+
59
+ # http proxy callback
60
+ proxy_config = exchanges.ProxyConfig(
61
+ http_proxy_callback=lambda url, method, headers, body: "http://9.9.9.9:9090",
62
+ )
63
+ async with _exchange_with_proxy_config(proxy_config) as exchange:
64
+ _request_mock.assert_not_called()
65
+ await exchange.load_markets()
66
+ assert _request_mock.call_count > 0
67
+ assert all(
68
+ call.kwargs["proxy"] == "http://9.9.9.9:9090"
69
+ for call in _request_mock.call_args_list
70
+ )
71
+ _request_mock.reset_mock()
72
+
73
+ # https proxy
74
+ proxy_config = exchanges.ProxyConfig(
75
+ https_proxy="https://127.0.0.1:9090",
76
+ )
77
+ async with _exchange_with_proxy_config(proxy_config) as exchange:
78
+ _request_mock.assert_not_called()
79
+ await exchange.load_markets()
80
+ assert _request_mock.call_count > 0
81
+ assert all(
82
+ call.kwargs["proxy"] == "https://127.0.0.1:9090"
83
+ for call in _request_mock.call_args_list
84
+ )
85
+ _request_mock.reset_mock()
86
+
87
+ # https proxy callback
88
+ proxy_config = exchanges.ProxyConfig(
89
+ https_proxy_callback=lambda url, method, headers, body: "https://9.9.9.9:9090",
90
+ )
91
+ async with _exchange_with_proxy_config(proxy_config) as exchange:
92
+ _request_mock.assert_not_called()
93
+ await exchange.load_markets()
94
+ assert _request_mock.call_count > 0
95
+ assert all(
96
+ call.kwargs["proxy"] == "https://9.9.9.9:9090"
97
+ for call in _request_mock.call_args_list
98
+ )
99
+ _request_mock.reset_mock()
100
+
101
+ # https proxy callback
102
+ proxy_config = exchanges.ProxyConfig(
103
+ https_proxy_callback=lambda url, method, headers, body: "https://9.9.9.9:9090",
104
+ )
105
+ async with _exchange_with_proxy_config(proxy_config) as exchange:
106
+ _request_mock.assert_not_called()
107
+ await exchange.load_markets()
108
+ assert _request_mock.call_count > 0
109
+ assert all(
110
+ call.kwargs["proxy"] == "https://9.9.9.9:9090"
111
+ for call in _request_mock.call_args_list
112
+ )
113
+ _request_mock.reset_mock()
114
+
115
+
116
+ @pytest.mark.asyncio
117
+ async def test_request_counter():
118
+ with mock.patch.object(aiohttp.ClientSession, "_request", mock.AsyncMock()) as _request_mock:
119
+ # without proxy
120
+ proxy_config = exchanges.ProxyConfig()
121
+ with mock.patch.object(constants, "ENABLE_CCXT_REQUESTS_COUNTER", True):
122
+ async with _exchange_with_proxy_config(proxy_config, allow_request_counter=True) as exchange:
123
+ await exchange.load_markets()
124
+ assert _request_mock.call_count > 0
125
+ assert all(
126
+ call.kwargs["proxy"] is None
127
+ for call in _request_mock.call_args_list
128
+ )
129
+ assert isinstance(exchange.session, aiohttp_util.CounterClientSession)
130
+ # requests are counted by session counter
131
+ assert len(exchange.session.per_min.paths) > 0
132
+ assert exchange.session.per_min.paths[next(iter(exchange.session.per_min.paths))] > 0
133
+ _request_mock.reset_mock()
134
+
135
+ # with http proxy
136
+ proxy_config = exchanges.ProxyConfig(http_proxy="http://127.0.0.1:9090")
137
+ with mock.patch.object(constants, "ENABLE_CCXT_REQUESTS_COUNTER", True):
138
+ async with _exchange_with_proxy_config(proxy_config, allow_request_counter=True) as exchange:
139
+ await exchange.load_markets()
140
+ assert _request_mock.call_count > 0
141
+ assert all(
142
+ call.kwargs["proxy"] == "http://127.0.0.1:9090"
143
+ for call in _request_mock.call_args_list
144
+ )
145
+ assert isinstance(exchange.session, aiohttp_util.CounterClientSession)
146
+ # requests are counted by session counter
147
+ assert len(exchange.session.per_min.paths) > 0
148
+ assert exchange.session.per_min.paths[next(iter(exchange.session.per_min.paths))] > 0
149
+ _request_mock.reset_mock()
150
+
151
+ # with http proxy callback
152
+ proxy_config = exchanges.ProxyConfig(
153
+ http_proxy_callback=lambda url, method, headers, body: "http://9.9.9.9:9090"
154
+ )
155
+ with mock.patch.object(constants, "ENABLE_CCXT_REQUESTS_COUNTER", True):
156
+ async with _exchange_with_proxy_config(proxy_config, allow_request_counter=True) as exchange:
157
+ await exchange.load_markets()
158
+ assert _request_mock.call_count > 0
159
+ assert all(
160
+ call.kwargs["proxy"] == "http://9.9.9.9:9090"
161
+ for call in _request_mock.call_args_list
162
+ )
163
+ assert isinstance(exchange.session, aiohttp_util.CounterClientSession)
164
+ # requests are counted by session counter
165
+ assert len(exchange.session.per_min.paths) > 0
166
+ assert exchange.session.per_min.paths[next(iter(exchange.session.per_min.paths))] > 0
167
+ _request_mock.reset_mock()
168
+
169
+
170
+ @contextlib.asynccontextmanager
171
+ async def _exchange_with_proxy_config(proxy_config: exchanges.ProxyConfig, allow_request_counter=False):
172
+ exchange = None
173
+ try:
174
+ exchange = ccxt_client_util.instantiate_exchange(ccxt.kraken, {"enableRateLimit": False}, "test", proxy_config, allow_request_counter=allow_request_counter)
175
+ yield exchange
176
+ finally:
177
+ if exchange:
178
+ exchange.timeout_on_exit = 0 # avoid waiting for the exchange to close
179
+ await exchange.close()
@@ -123,7 +123,7 @@ class RealExchangeTester:
123
123
  async def test_get_historical_ohlcv(self):
124
124
  # common implementation, should always work if candles history is supported
125
125
  historical_ohlcv = await self.get_historical_ohlcv()
126
- assert len(historical_ohlcv) > 500 # should be around 650
126
+ assert len(historical_ohlcv) > 500, f"{len(historical_ohlcv)=} < 500" # should be around 650
127
127
  self.ensure_elements_order(historical_ohlcv, commons_enums.PriceIndexes.IND_PRICE_TIME.value)
128
128
  self.ensure_unique_elements(historical_ohlcv, commons_enums.PriceIndexes.IND_PRICE_TIME.value)
129
129
  start, end = self.get_historical_ohlcv_start_and_end_times()
@@ -95,9 +95,6 @@ class TestAscendExRealExchangeTester(RealExchangeTester):
95
95
  # try with since and limit (used in data collector)
96
96
  for limit in (500, None):
97
97
  symbol_prices = await self.get_symbol_prices(since=self.CANDLE_SINCE, limit=limit)
98
- # broken since ccxt==4.4.85
99
- assert symbol_prices == []
100
- continue
101
98
  if limit:
102
99
  assert len(symbol_prices) == limit
103
100
  else:
@@ -111,8 +108,7 @@ class TestAscendExRealExchangeTester(RealExchangeTester):
111
108
  assert self.CANDLE_SINCE_SEC <= candle[PriceIndexes.IND_PRICE_TIME.value] <= max_candle_time
112
109
 
113
110
  async def test_get_historical_ohlcv(self):
114
- # broken since ccxt==4.4.85
115
- assert await self.get_historical_ohlcv() == []
111
+ await super().test_get_historical_ohlcv()
116
112
 
117
113
  async def test_get_kline_price(self):
118
114
  kline_price = await self.get_kline_price()
@@ -54,7 +54,7 @@ class TestBitfinexRealExchangeTester(RealExchangeTester):
54
54
  ))
55
55
 
56
56
  async def test_active_symbols(self):
57
- await self.inner_test_active_symbols(400, 400)
57
+ await self.inner_test_active_symbols(350, 350)
58
58
 
59
59
  async def test_get_market_status(self):
60
60
  for market_status in await self.get_market_statuses():
@@ -81,7 +81,7 @@ class TestBitgetRealExchangeTester(RealExchangeTester):
81
81
  async def test_get_symbol_prices(self):
82
82
  # without limit
83
83
  symbol_prices = await self.get_symbol_prices()
84
- assert len(symbol_prices) == 100
84
+ assert len(symbol_prices) >=500, f"{len(symbol_prices)=} < 500"
85
85
  # check candles order (oldest first)
86
86
  self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
87
87
  # check last candle is the current candle
@@ -170,10 +170,10 @@ class TestCryptoComRealExchangeTester(RealExchangeTester):
170
170
  assert ticker[Ectc.BID_VOLUME.value] is None
171
171
  assert ticker[Ectc.ASK.value]
172
172
  assert ticker[Ectc.ASK_VOLUME.value] is None
173
- assert ticker[Ectc.OPEN.value] is None
173
+ assert ticker[Ectc.OPEN.value]
174
174
  assert ticker[Ectc.CLOSE.value]
175
175
  assert ticker[Ectc.LAST.value]
176
176
  assert ticker[Ectc.PREVIOUS_CLOSE.value] is None
177
177
  assert ticker[Ectc.BASE_VOLUME.value]
178
178
  assert ticker[Ectc.TIMESTAMP.value]
179
- RealExchangeTester.check_ticker_typing(ticker, check_open=False)
179
+ RealExchangeTester.check_ticker_typing(ticker)
@@ -160,10 +160,10 @@ class TestGateIORealExchangeTester(RealExchangeTester):
160
160
  assert ticker[Ectc.BID_VOLUME.value] is None
161
161
  assert ticker[Ectc.ASK.value]
162
162
  assert ticker[Ectc.ASK_VOLUME.value] is None
163
- assert ticker[Ectc.OPEN.value] is None
163
+ assert ticker[Ectc.OPEN.value]
164
164
  assert ticker[Ectc.CLOSE.value]
165
165
  assert ticker[Ectc.LAST.value]
166
166
  assert ticker[Ectc.PREVIOUS_CLOSE.value] is None
167
167
  assert ticker[Ectc.BASE_VOLUME.value]
168
168
  assert ticker[Ectc.TIMESTAMP.value] is None # will trigger an 'Ignored incomplete ticker'
169
- RealExchangeTester.check_ticker_typing(ticker, check_open=False, check_timestamp=False)
169
+ RealExchangeTester.check_ticker_typing(ticker, check_timestamp=False)
@@ -72,7 +72,7 @@ class TestHollaexRealExchangeTester(RealExchangeTester):
72
72
  # without limit is not supported replaced by a 500 default limit in hollaex tentacle
73
73
  symbol_prices = await self.get_symbol_prices(limit=500)
74
74
  # warning: large candle gaps, allow it in check
75
- assert 30 <= len(symbol_prices) <= 500
75
+ assert len(symbol_prices) == 500
76
76
  # check candles order (oldest first)
77
77
  self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
78
78
  # check last candle is the current candle
@@ -48,7 +48,7 @@ class TestKrakenRealExchangeTester(RealExchangeTester):
48
48
  ))
49
49
 
50
50
  async def test_active_symbols(self):
51
- await self.inner_test_active_symbols(700, 700)
51
+ await self.inner_test_active_symbols(1100, 1100)
52
52
 
53
53
  async def test_get_market_status(self):
54
54
  for market_status in await self.get_market_statuses():
@@ -66,12 +66,13 @@ class TestKrakenRealExchangeTester(RealExchangeTester):
66
66
  normal_cost_min=1e-07,
67
67
  low_cost_min=1e-08,
68
68
  expect_invalid_price_limit_values=False,
69
- enable_price_and_cost_comparison=False)
69
+ enable_price_and_cost_comparison=False,
70
+ has_price_limits=False)
70
71
 
71
72
  async def test_get_symbol_prices(self):
72
73
  # without limit
73
74
  symbol_prices = await self.get_symbol_prices()
74
- assert len(symbol_prices) == 720
75
+ assert len(symbol_prices) >= 500
75
76
  # check candles order (oldest first)
76
77
  self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
77
78
  # check last candle is the current candle
@@ -57,7 +57,7 @@ class TestKucoinFuturesRealExchangeTester(RealFuturesExchangeTester):
57
57
  ))
58
58
 
59
59
  async def test_active_symbols(self):
60
- await self.inner_test_active_symbols(300, 300)
60
+ await self.inner_test_active_symbols(450, 450)
61
61
 
62
62
  async def test_get_market_status(self):
63
63
  for market_status in await self.get_market_statuses():
@@ -49,7 +49,7 @@ class TestMEXCRealExchangeTester(RealExchangeTester):
49
49
  ))
50
50
 
51
51
  async def test_active_symbols(self):
52
- await self.inner_test_active_symbols(2500, 3200)
52
+ await self.inner_test_active_symbols(2500, 3000)
53
53
 
54
54
  async def test_get_market_status(self):
55
55
  for market_status in await self.get_market_statuses():
@@ -52,7 +52,7 @@ class TestNdaxRealExchangeTester(RealExchangeTester):
52
52
  ))
53
53
 
54
54
  async def test_active_symbols(self):
55
- await self.inner_test_active_symbols(50, 50)
55
+ await self.inner_test_active_symbols(70, 70)
56
56
 
57
57
  async def test_get_market_status(self):
58
58
  for market_status in await self.get_market_statuses():
@@ -33,7 +33,7 @@ class TestWavesExchangeRealExchangeTester(RealExchangeTester):
33
33
  EXCHANGE_NAME = "wavesexchange"
34
34
  SYMBOL = "WAVES/USDT"
35
35
  SYMBOL_2 = "ETH/WAVES"
36
- SYMBOL_3 = "WAVES/WETHU"
36
+ SYMBOL_3 = "WAVES/WBTC"
37
37
  ALLOWED_TIMEFRAMES_WITHOUT_CANDLE = RealExchangeTester.ALLOWED_TIMEFRAMES_WITHOUT_CANDLE + 1 # account for dumped candle
38
38
 
39
39
  async def test_time_frames(self):