OctoBot-Trading 2.4.76__tar.gz → 2.4.78__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 (476) hide show
  1. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/CHANGELOG.md +10 -0
  2. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/OctoBot_Trading.egg-info/requires.txt +1 -1
  4. {OctoBot-Trading-2.4.76/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.78}/PKG-INFO +2 -2
  5. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/README.md +1 -1
  6. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/__init__.py +1 -1
  7. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +16 -4
  8. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +9 -6
  9. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +1 -1
  10. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/test_tools/exchanges_test_tools.py +2 -2
  11. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/requirements.txt +2 -1
  12. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/test_exchange_config_data.py +13 -5
  13. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/real_exchange_tester.py +9 -0
  14. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_ascendex.py +1 -4
  15. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_binance.py +2 -4
  16. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_binance_futures.py +1 -4
  17. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bingx.py +1 -4
  18. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bitfinex.py +1 -4
  19. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bitget.py +1 -4
  20. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bithumb.py +1 -4
  21. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bitso.py +1 -4
  22. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bitstamp.py +1 -4
  23. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bybit.py +1 -4
  24. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bybit_futures.py +1 -4
  25. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_coinbase.py +1 -4
  26. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_coinex.py +1 -4
  27. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_cryptocom.py +1 -4
  28. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_gateio.py +1 -4
  29. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_hitbtc.py +1 -4
  30. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_hollaex.py +2 -4
  31. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_htx.py +2 -5
  32. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_kraken.py +1 -4
  33. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_kucoin.py +1 -4
  34. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_kucoin_futures.py +1 -4
  35. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_mexc.py +1 -4
  36. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_ndax.py +1 -4
  37. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_okcoin.py +1 -4
  38. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_okx.py +1 -4
  39. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_okx_futures.py +1 -4
  40. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_phemex.py +1 -4
  41. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_poloniex.py +1 -4
  42. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_upbit.py +1 -4
  43. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_wavesexchange.py +1 -4
  44. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/LICENSE +0 -0
  45. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/MANIFEST.in +0 -0
  46. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
  47. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  48. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  49. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  50. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/__init__.py +0 -0
  51. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/channels.py +0 -0
  52. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/contracts.py +0 -0
  53. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/exchange.py +0 -0
  54. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/modes.py +0 -0
  55. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/orders.py +0 -0
  56. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/portfolio.py +0 -0
  57. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/positions.py +0 -0
  58. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/profitability.py +0 -0
  59. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/storage.py +0 -0
  60. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/symbol_data.py +0 -0
  61. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/trader.py +0 -0
  62. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/trades.py +0 -0
  63. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/constants.py +0 -0
  64. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/enums.py +0 -0
  65. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/errors.py +0 -0
  66. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_channel.py +0 -0
  67. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/__init__.py +0 -0
  68. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  69. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  70. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  71. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  72. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  73. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  74. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  75. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  76. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  77. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  78. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  79. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  80. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  81. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  82. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  83. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  84. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  85. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  86. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  87. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  88. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  89. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  90. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  91. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  92. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  93. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  94. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  95. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  96. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  97. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  98. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  99. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  100. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  101. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  102. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  103. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  104. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  105. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  106. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  107. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  108. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  109. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  110. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  111. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  112. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  113. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  114. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  115. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  116. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  117. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  118. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  119. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/__init__.py +0 -0
  120. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  121. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  122. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  123. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  124. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/config/__init__.py +0 -0
  125. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  126. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  127. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  128. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  129. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
  130. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  131. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  132. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  133. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  134. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  135. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  136. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  137. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/exchange_builder.py +0 -0
  138. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/exchange_channels.py +0 -0
  139. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/exchange_details.py +0 -0
  140. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/exchange_factory.py +0 -0
  141. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/exchange_manager.py +0 -0
  142. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  143. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/exchanges.py +0 -0
  144. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  145. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  146. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  147. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  148. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/traders/__init__.py +0 -0
  149. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/traders/trader.py +0 -0
  150. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  151. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/types/__init__.py +0 -0
  152. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
  153. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  154. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/util/__init__.py +0 -0
  155. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  156. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  157. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  158. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  159. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/__init__.py +0 -0
  160. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/abstract_trading_mode.py +0 -0
  161. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/channel/__init__.py +0 -0
  162. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  163. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  164. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/channel/mode.py +0 -0
  165. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/mode_activity.py +0 -0
  166. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/mode_config.py +0 -0
  167. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/modes_factory.py +0 -0
  168. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/modes_util.py +0 -0
  169. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  170. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  171. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  172. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  173. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  174. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  175. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  176. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  177. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  178. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  179. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  180. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  181. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  182. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  183. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  184. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  185. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/octobot_channel_consumer.py +0 -0
  186. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/__init__.py +0 -0
  187. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  188. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/__init__.py +0 -0
  189. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  190. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  191. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  192. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  193. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  194. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  195. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  196. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  197. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  198. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/order.py +0 -0
  199. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  200. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  201. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/order_group.py +0 -0
  202. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/order_state.py +0 -0
  203. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/order_util.py +0 -0
  204. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  205. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  206. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  207. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  208. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  209. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  210. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  211. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  212. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  213. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  214. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  215. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  216. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  217. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  218. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  219. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  220. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  221. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  222. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  223. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  224. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  225. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  226. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  227. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  228. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  229. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  230. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  231. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  232. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  233. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  234. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  235. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  236. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  237. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  238. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  239. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  240. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  241. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  242. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  243. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  244. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  245. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  246. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  247. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  248. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  249. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  250. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  251. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  252. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  253. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  254. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  255. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  256. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  257. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  258. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/__init__.py +0 -0
  259. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  260. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  261. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  262. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  263. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/position.py +0 -0
  264. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  265. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/position_state.py +0 -0
  266. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/position_util.py +0 -0
  267. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  268. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  269. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  270. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  271. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  272. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  273. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  274. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  275. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  276. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/state.py +0 -0
  277. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/__init__.py +0 -0
  278. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  279. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  280. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  281. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/trade.py +0 -0
  282. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  283. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  284. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  285. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  286. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  287. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  288. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  289. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  290. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  291. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  292. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  293. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  294. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  295. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/signals/__init__.py +0 -0
  296. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/signals/channel/__init__.py +0 -0
  297. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  298. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  299. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/signals/channel/signal_producer.py +0 -0
  300. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/signals/signal_creation.py +0 -0
  301. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  302. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/signals/util.py +0 -0
  303. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/__init__.py +0 -0
  304. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/abstract_storage.py +0 -0
  305. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/candles_storage.py +0 -0
  306. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/orders_storage.py +0 -0
  307. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/portfolio_storage.py +0 -0
  308. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/storage_manager.py +0 -0
  309. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/trades_storage.py +0 -0
  310. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/transactions_storage.py +0 -0
  311. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/util.py +0 -0
  312. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/supervisors/__init__.py +0 -0
  313. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  314. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  315. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/__init__.py +0 -0
  316. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/config_util.py +0 -0
  317. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/initializable.py +0 -0
  318. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/initialization_util.py +0 -0
  319. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/simulator_updater_utils.py +0 -0
  320. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/test_tools/__init__.py +0 -0
  321. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  322. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  323. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  324. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/setup.cfg +0 -0
  325. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/setup.py +0 -0
  326. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/__init__.py +0 -0
  327. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_channels.py +0 -0
  328. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_exchange.py +0 -0
  329. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_modes.py +0 -0
  330. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_orders.py +0 -0
  331. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_portfolio.py +0 -0
  332. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_profitability.py +0 -0
  333. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_symbol_data.py +0 -0
  334. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_trader.py +0 -0
  335. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_trades.py +0 -0
  336. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/cli/__init__.py +0 -0
  337. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/__init__.py +0 -0
  338. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/contracts/__init__.py +0 -0
  339. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  340. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  341. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/funding/__init__.py +0 -0
  342. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  343. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/kline/__init__.py +0 -0
  344. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  345. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/ohlcv/__init__.py +0 -0
  346. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  347. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  348. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/order_book/__init__.py +0 -0
  349. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  350. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/prices/__init__.py +0 -0
  351. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  352. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  353. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/recent_trades/__init__.py +0 -0
  354. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  355. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  356. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/ticker/__init__.py +0 -0
  357. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  358. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/__init__.py +0 -0
  359. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/connectors/__init__.py +0 -0
  360. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  361. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  362. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  363. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/implementations/__init__.py +0 -0
  364. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  365. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  366. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/test_abstract_exchange.py +0 -0
  367. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  368. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/test_exchange_builder.py +0 -0
  369. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/test_exchange_factory.py +0 -0
  370. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/test_exchange_manager.py +0 -0
  371. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/test_exchange_simulator.py +0 -0
  372. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/test_exchanges.py +0 -0
  373. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/traders/__init__.py +0 -0
  374. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/traders/test_trader.py +0 -0
  375. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/types/__init__.py +0 -0
  376. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  377. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/util/__init__.py +0 -0
  378. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  379. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/util/test_exchange_util.py +0 -0
  380. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/__init__.py +0 -0
  381. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/script_keywords/__init__.py +0 -0
  382. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  383. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  384. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  385. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  386. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  387. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  388. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  389. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/test_abstract_mode_consumer.py +0 -0
  390. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/test_abstract_trading_mode.py +0 -0
  391. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/test_modes_util.py +0 -0
  392. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/__init__.py +0 -0
  393. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/__init__.py +0 -0
  394. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/groups/__init__.py +0 -0
  395. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  396. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  397. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  398. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/__init__.py +0 -0
  399. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  400. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  401. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  402. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  403. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/test_order_state.py +0 -0
  404. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  405. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  406. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  407. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  408. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  409. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/test_order.py +0 -0
  410. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/test_order_adapter.py +0 -0
  411. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/test_order_factory.py +0 -0
  412. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/test_order_util.py +0 -0
  413. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/test_orders_manager.py +0 -0
  414. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  415. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/__init__.py +0 -0
  416. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  417. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  418. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  419. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  420. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  421. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  422. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  423. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  424. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/market/__init__.py +0 -0
  425. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  426. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  427. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  428. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  429. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  430. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  431. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/__init__.py +0 -0
  432. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  433. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  434. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  435. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  436. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/history/__init__.py +0 -0
  437. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  438. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  439. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/test_asset.py +0 -0
  440. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  441. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  442. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  443. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  444. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  445. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/types/__init__.py +0 -0
  446. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  447. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  448. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  449. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/__init__.py +0 -0
  450. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/channel/__init__.py +0 -0
  451. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/states/__init__.py +0 -0
  452. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/test_position.py +0 -0
  453. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/test_position_factory.py +0 -0
  454. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/test_positions_manager.py +0 -0
  455. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/types/__init__.py +0 -0
  456. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  457. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  458. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/trades/__init__.py +0 -0
  459. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/trades/test_trade_factory.py +0 -0
  460. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/trades/test_trade_manager.py +0 -0
  461. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  462. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/trades/test_trade_util.py +0 -0
  463. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/transactions/__init__.py +0 -0
  464. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  465. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  466. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/signals/__init__.py +0 -0
  467. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  468. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/signals/test_util.py +0 -0
  469. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/test_utils/__init__.py +0 -0
  470. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/test_utils/order_util.py +0 -0
  471. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/test_utils/random_numbers.py +0 -0
  472. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/util/__init__.py +0 -0
  473. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/util/test_config_util.py +0 -0
  474. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/__init__.py +0 -0
  475. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/__init__.py +0 -0
  476. {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
@@ -4,6 +4,16 @@ 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.78] - 2024-04-15
8
+ ### Added
9
+ - [Exchanges] key adapter
10
+ ### Updated
11
+ - CCXT to 4.2.95
12
+
13
+ ## [2.4.77] - 2024-04-13
14
+ ### Added
15
+ - [Exchanges] Handle inactive markets
16
+
7
17
  ## [2.4.76] - 2024-04-12
8
18
  ### Added
9
19
  - [Exchanges] Handle order type open status for symbol
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.76
3
+ Version: 2.4.78
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.76](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.78](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)
@@ -4,7 +4,7 @@ Async-Channel<2.3,>=2.2
4
4
  OctoBot-Commons<1.10,>=1.9.43
5
5
  OctoBot-Tentacles-Manager<2.10,>=2.9
6
6
  trading-backend>=1.2.7
7
- ccxt==4.2.77
7
+ ccxt==4.2.95
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.76
3
+ Version: 2.4.78
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.76](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.78](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.76](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.78](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.76" # major.minor.revision
18
+ VERSION = "2.4.78" # major.minor.revision
@@ -27,9 +27,11 @@ import octobot_trading.exchanges.connectors.ccxt.ccxt_clients_cache as ccxt_clie
27
27
  import octobot_trading.exchanges.util.exchange_util as exchange_util
28
28
 
29
29
 
30
- def create_client(exchange_class, exchange_manager, logger,
31
- options, headers, additional_config,
32
- should_authenticate, unauthenticated_exchange_fallback=None):
30
+ def create_client(
31
+ exchange_class, exchange_manager, logger, options, headers,
32
+ additional_config, should_authenticate, unauthenticated_exchange_fallback=None,
33
+ keys_adapter=None
34
+ ):
33
35
  """
34
36
  Exchange instance creation
35
37
  :return: the created ccxt (pro, async or sync) client
@@ -43,6 +45,8 @@ def create_client(exchange_class, exchange_manager, logger,
43
45
  if exchange_manager.ignore_config or exchange_manager.check_config(exchange_manager.exchange_name):
44
46
  try:
45
47
  key, secret, password = exchange_manager.get_exchange_credentials(exchange_manager.exchange_name)
48
+ if keys_adapter:
49
+ key, secret, password = keys_adapter(key, secret, password)
46
50
  if not (key and secret) and not exchange_manager.is_simulated and not exchange_manager.ignore_config:
47
51
  logger.warning(f"No exchange API key set for {exchange_manager.exchange_name}. "
48
52
  f"Enter your account details to enable real trading on this exchange.")
@@ -134,8 +138,16 @@ def get_ccxt_client_login_options(exchange_manager):
134
138
  return {'defaultType': 'spot'}
135
139
 
136
140
 
137
- def get_symbols(client):
141
+ def get_symbols(client, active_only):
138
142
  try:
143
+ if active_only:
144
+ return set(
145
+ symbol
146
+ for symbol in client.symbols
147
+ if client.markets.get(symbol, {}).get(
148
+ enums.ExchangeConstantsMarketStatusColumns.ACTIVE.value, True
149
+ )
150
+ )
139
151
  return set(client.symbols)
140
152
  except (AttributeError, TypeError):
141
153
  # ccxt exchange load_markets failed
@@ -97,7 +97,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
97
97
  )
98
98
 
99
99
  # initialize symbols and timeframes
100
- self.symbols = self.get_client_symbols()
100
+ self.symbols = self.get_client_symbols(active_only=True)
101
101
  self.time_frames = self.get_client_time_frames()
102
102
 
103
103
  except (ccxt.ExchangeNotAvailable, ccxt.RequestTimeout) as e:
@@ -157,8 +157,8 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
157
157
  else:
158
158
  raise
159
159
 
160
- def get_client_symbols(self):
161
- return ccxt_client_util.get_symbols(self.client)
160
+ def get_client_symbols(self, active_only=True):
161
+ return ccxt_client_util.get_symbols(self.client, active_only)
162
162
 
163
163
  def get_client_time_frames(self):
164
164
  return ccxt_client_util.get_time_frames(self.client)
@@ -204,11 +204,12 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
204
204
  def _create_client(self, force_unauth=False):
205
205
  self.client, self.is_authenticated = self._client_factory(force_unauth)
206
206
 
207
- def _client_factory(self, force_unauth) -> tuple:
207
+ def _client_factory(self, force_unauth, keys_adapter=None) -> tuple:
208
208
  return ccxt_client_util.create_client(
209
209
  self.exchange_type, self.exchange_manager, self.logger,
210
210
  self.options, self.headers, self.additional_config,
211
- False if force_unauth else self._should_authenticate(), self.unauthenticated_exchange_fallback
211
+ False if force_unauth else self._should_authenticate(), self.unauthenticated_exchange_fallback,
212
+ keys_adapter=keys_adapter
212
213
  )
213
214
 
214
215
  def _should_authenticate(self):
@@ -218,7 +219,9 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
218
219
  )
219
220
 
220
221
  def unauthenticated_exchange_fallback(self, err):
221
- self.handle_token_error(err)
222
+ if not self.exchange_manager.exchange_only:
223
+ # don't log error when auth is probably not necessary
224
+ self.handle_token_error(err)
222
225
  return ccxt_client_util.get_unauthenticated_exchange(
223
226
  self.exchange_type,
224
227
  self.options, self.headers, self.additional_config
@@ -766,7 +766,7 @@ class CCXTWebsocketConnector(abstract_websocket_exchange.AbstractWebsocketExchan
766
766
  return self.EXCHANGE_FEEDS.get(Feeds.CANDLE, Feeds.UNSUPPORTED.value) != Feeds.UNSUPPORTED.value
767
767
 
768
768
  def _is_supported_pair(self, pair):
769
- return pair in ccxt_client_util.get_symbols(self.client)
769
+ return pair in ccxt_client_util.get_symbols(self.client, True)
770
770
 
771
771
  def _is_pair_independent_feed(self, feed):
772
772
  return feed in self.PAIR_INDEPENDENT_CHANNELS
@@ -124,13 +124,13 @@ async def ensure_symbol_markets(
124
124
  await exchange_manager.exchange.connector.load_symbol_markets(reload=reload, market_filter=market_filter)
125
125
 
126
126
 
127
- async def get_portfolio(exchange_manager, as_float=False) -> dict:
127
+ async def get_portfolio(exchange_manager, as_float=False, clear_empty=True) -> dict:
128
128
  balance = await exchange_manager.exchange.get_balance()
129
129
  # filter out 0 values
130
130
  return {
131
131
  asset: {key: float(val) if as_float else val for key, val in values.items()} # use float for values
132
132
  for asset, values in balance.items()
133
- if any(value for value in values.values())
133
+ if not clear_empty or (clear_empty and any(value for value in values.values()))
134
134
  }
135
135
 
136
136
 
@@ -8,7 +8,8 @@ OctoBot-Tentacles-Manager>=2.9, <2.10
8
8
  trading-backend>=1.2.7
9
9
 
10
10
  # Exchange connection requirements
11
- ccxt==4.2.77 # always ensure real exchanges tests (in tests_additional and authenticated exchange tests) are passing before changing the ccxt version
11
+ # issue from 96, need ccxt==4.2.99
12
+ ccxt==4.2.95 # always ensure real exchanges tests (in tests_additional and authenticated exchange tests) are passing before changing the ccxt version
12
13
 
13
14
  cryptography # Never specify a version (managed by https://github.com/Drakkar-Software/OctoBot-PyPi-Linux-Deployer)
14
15
 
@@ -80,7 +80,6 @@ class TestExchangeConfig:
80
80
  }
81
81
  _, exchange_manager = await self.init_default(config=config)
82
82
 
83
- assert "UNI/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
84
83
  assert "AVAX/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
85
84
  assert "ADA/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
86
85
  assert "MATIC/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
@@ -90,6 +89,9 @@ class TestExchangeConfig:
90
89
  assert "AVAX/BNB" not in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
91
90
  assert "ETH/BTC" in exchange_manager.exchange_config.traded_symbol_pairs
92
91
 
92
+ # inactive markets
93
+ assert "UNI/BTC" not in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
94
+
93
95
  # disabled
94
96
  assert "Ethereum" not in exchange_manager.exchange_config.traded_cryptocurrencies
95
97
  assert "ADA/ETH" not in exchange_manager.exchange_config.traded_symbol_pairs
@@ -113,10 +115,12 @@ class TestExchangeConfig:
113
115
  }
114
116
  _, exchange_manager = await self.init_default(config=config)
115
117
 
116
- assert "TRX/BTC" in exchange_manager.exchange_config.traded_symbol_pairs
117
118
  assert "ADA/BTC" in exchange_manager.exchange_config.traded_symbol_pairs
118
119
  assert "Bitcoin" in exchange_manager.exchange_config.traded_cryptocurrencies
119
120
 
121
+ # inactive markets
122
+ assert "TRX/BTC" not in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
123
+
120
124
  # invalid ETH wildcard config
121
125
  assert "Ethereum" not in exchange_manager.exchange_config.traded_cryptocurrencies
122
126
 
@@ -141,7 +145,6 @@ class TestExchangeConfig:
141
145
 
142
146
  _, exchange_manager = await self.init_default(config=config)
143
147
 
144
- assert "UNI/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
145
148
  assert "AVAX/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
146
149
  assert "ADA/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
147
150
  assert "MATIC/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
@@ -152,6 +155,9 @@ class TestExchangeConfig:
152
155
  assert "AVAX/BNB" not in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
153
156
  assert "BTC/USDT" in exchange_manager.exchange_config.traded_symbol_pairs
154
157
 
158
+ # inactive markets
159
+ assert "UNI/BTC" not in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
160
+
155
161
  # disabled
156
162
  assert "Ethereum" not in exchange_manager.exchange_config.traded_cryptocurrencies
157
163
  assert "ADA/ETH" not in exchange_manager.exchange_config.traded_symbol_pairs
@@ -189,11 +195,13 @@ class TestExchangeConfig:
189
195
  _, exchange_manager = await self.init_default(config=config)
190
196
 
191
197
  assert exchange_manager.exchange_config.traded_cryptocurrencies["Binance Coin"] == ["BNB/USDT"]
192
- assert exchange_manager.exchange_config.traded_cryptocurrencies["Binance USD"] == ["BNB/BUSD"]
193
198
  assert exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"] == ["BNB/BTC"]
194
199
  assert exchange_manager.exchange_config.traded_cryptocurrencies["Tether"] == ["BNB/USDT"]
195
200
 
196
- sorted_pairs_without_redundancy = sorted(["BNB/USDT", "BNB/BUSD", "BNB/BTC"])
201
+ # inactive markets
202
+ assert exchange_manager.exchange_config.traded_cryptocurrencies["Binance USD"] == []
203
+
204
+ sorted_pairs_without_redundancy = sorted(["BNB/USDT", "BNB/BTC"])
197
205
  assert sorted(exchange_manager.exchange_config.traded_symbol_pairs) == sorted_pairs_without_redundancy
198
206
 
199
207
  cancel_ccxt_throttle_task()
@@ -35,6 +35,7 @@ class RealExchangeTester:
35
35
  SYMBOL = None
36
36
  SYMBOL_2 = None
37
37
  SYMBOL_3 = None
38
+ INACTIVE_MARKETS = []
38
39
  # default is 1h, change if necessary
39
40
  TIME_FRAME = commons_enums.TimeFrames.ONE_HOUR
40
41
  ALLOWED_TIMEFRAMES_WITHOUT_CANDLE = 0
@@ -102,6 +103,14 @@ class RealExchangeTester:
102
103
  # async def test_create_order(self):
103
104
  # pass
104
105
 
106
+ def ensure_required_market_status_values(self, market_status):
107
+ assert market_status
108
+ assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
109
+ assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
110
+ assert market_status[Ecmsc.ACTIVE.value] \
111
+ is False if market_status[Ecmsc.SYMBOL.value] in self.INACTIVE_MARKETS else True
112
+ assert market_status[Ecmsc.PRECISION.value]
113
+
105
114
  async def test_get_historical_ohlcv(self):
106
115
  # common implementation, should always work if candles history is supported
107
116
  historical_ohlcv = await self.get_historical_ohlcv()
@@ -52,10 +52,7 @@ class TestAscendExRealExchangeTester(RealExchangeTester):
52
52
 
53
53
  async def test_get_market_status(self):
54
54
  for market_status in await self.get_market_statuses():
55
- assert market_status
56
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
57
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
58
- assert market_status[Ecmsc.PRECISION.value]
55
+ self.ensure_required_market_status_values(market_status)
59
56
  # on AscendEx, precision is a decimal instead of a number of digits
60
57
  assert 0 < market_status[Ecmsc.PRECISION.value][
61
58
  Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in AscendEx tentacle
@@ -32,6 +32,7 @@ class TestBinanceRealExchangeTester(RealExchangeTester):
32
32
  SYMBOL = "BTC/USDT"
33
33
  SYMBOL_2 = "ETH/BTC"
34
34
  SYMBOL_3 = "XRP/BTC"
35
+ INACTIVE_MARKETS = [SYMBOL_3]
35
36
 
36
37
  async def test_time_frames(self):
37
38
  time_frames = await self.time_frames()
@@ -55,10 +56,7 @@ class TestBinanceRealExchangeTester(RealExchangeTester):
55
56
 
56
57
  async def test_get_market_status(self):
57
58
  for market_status in await self.get_market_statuses():
58
- assert market_status
59
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
60
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
61
- assert market_status[Ecmsc.PRECISION.value]
59
+ self.ensure_required_market_status_values(market_status)
62
60
  assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]) == \
63
61
  market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]
64
62
  assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_PRICE.value]) == \
@@ -59,10 +59,7 @@ class TestBinanceFuturesRealExchangeTester(RealFuturesExchangeTester):
59
59
 
60
60
  async def test_get_market_status(self):
61
61
  for market_status in await self.get_market_statuses():
62
- assert market_status
63
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
64
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
65
- assert market_status[Ecmsc.PRECISION.value]
62
+ self.ensure_required_market_status_values(market_status)
66
63
  assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]) == \
67
64
  market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]
68
65
  assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_PRICE.value]) == \
@@ -56,10 +56,7 @@ class TestBingxRealExchangeTester(RealExchangeTester):
56
56
 
57
57
  async def test_get_market_status(self):
58
58
  for market_status in await self.get_market_statuses():
59
- assert market_status
60
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
61
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
62
- assert market_status[Ecmsc.PRECISION.value]
59
+ self.ensure_required_market_status_values(market_status)
63
60
  assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]) == \
64
61
  market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]
65
62
  assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_PRICE.value]) == \
@@ -55,10 +55,7 @@ class TestBitfinexRealExchangeTester(RealExchangeTester):
55
55
 
56
56
  async def test_get_market_status(self):
57
57
  for market_status in await self.get_market_statuses():
58
- assert market_status
59
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
60
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
61
- assert market_status[Ecmsc.PRECISION.value]
58
+ self.ensure_required_market_status_values(market_status)
62
59
  assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]) == \
63
60
  market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]
64
61
  assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_PRICE.value]) == \
@@ -57,10 +57,7 @@ class TestBitgetRealExchangeTester(RealExchangeTester):
57
57
 
58
58
  async def test_get_market_status(self):
59
59
  for market_status in await self.get_market_statuses():
60
- assert market_status
61
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
62
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
63
- assert market_status[Ecmsc.PRECISION.value]
60
+ self.ensure_required_market_status_values(market_status)
64
61
  # on Bitget, precision is a decimal instead of a number of digits
65
62
  assert 0 < market_status[Ecmsc.PRECISION.value][
66
63
  Ecmsc.PRECISION_AMOUNT.value] < 1 # to be fixed in Bitget tentacle
@@ -50,10 +50,7 @@ class TestBithumbRealExchangeTester(RealExchangeTester):
50
50
 
51
51
  async def test_get_market_status(self):
52
52
  for market_status in await self.get_market_statuses():
53
- assert market_status
54
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
55
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
56
- assert market_status[Ecmsc.PRECISION.value]
53
+ self.ensure_required_market_status_values(market_status)
57
54
  assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]) == \
58
55
  market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]
59
56
  assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_PRICE.value]) == \
@@ -49,10 +49,7 @@ class TestBitsoRealExchangeTester(RealExchangeTester):
49
49
 
50
50
  async def test_get_market_status(self):
51
51
  for market_status in await self.get_market_statuses():
52
- assert market_status
53
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
54
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
55
- assert market_status[Ecmsc.PRECISION.value]
52
+ self.ensure_required_market_status_values(market_status)
56
53
  # on this exchange, precision is a decimal instead of a number of digits
57
54
  assert 0 < market_status[Ecmsc.PRECISION.value][
58
55
  Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in this exchange tentacle
@@ -53,10 +53,7 @@ class TestBitstampRealExchangeTester(RealExchangeTester):
53
53
 
54
54
  async def test_get_market_status(self):
55
55
  for market_status in await self.get_market_statuses():
56
- assert market_status
57
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
58
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
59
- assert market_status[Ecmsc.PRECISION.value]
56
+ self.ensure_required_market_status_values(market_status)
60
57
  # on this exchange, precision is a decimal instead of a number of digits
61
58
  assert 0 < market_status[Ecmsc.PRECISION.value][
62
59
  Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in this exchange tentacle
@@ -53,10 +53,7 @@ class TestBybitRealExchangeTester(RealExchangeTester):
53
53
 
54
54
  async def test_get_market_status(self):
55
55
  for market_status in await self.get_market_statuses():
56
- assert market_status
57
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
58
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
59
- assert market_status[Ecmsc.PRECISION.value]
56
+ self.ensure_required_market_status_values(market_status)
60
57
  # on Bybit, precision is a decimal instead of a number of digits
61
58
  assert 0 < market_status[Ecmsc.PRECISION.value][
62
59
  Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in Bybit tentacle
@@ -59,10 +59,7 @@ class TestBybitRealExchangeTester(RealFuturesExchangeTester):
59
59
 
60
60
  async def test_get_market_status(self):
61
61
  for market_status in await self.get_market_statuses():
62
- assert market_status
63
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
64
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
65
- assert market_status[Ecmsc.PRECISION.value]
62
+ self.ensure_required_market_status_values(market_status)
66
63
  # on Bybit, precision is a decimal instead of a number of digits
67
64
  assert 0 < market_status[Ecmsc.PRECISION.value][
68
65
  Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in Bybit tentacle
@@ -50,10 +50,7 @@ class TestCoinbaseRealExchangeTester(RealExchangeTester):
50
50
 
51
51
  async def test_get_market_status(self):
52
52
  for market_status in await self.get_market_statuses():
53
- assert market_status
54
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
55
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
56
- assert market_status[Ecmsc.PRECISION.value]
53
+ self.ensure_required_market_status_values(market_status)
57
54
  assert 0 < market_status[Ecmsc.PRECISION.value][
58
55
  Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in coinbase tentacle
59
56
  assert 0 < market_status[Ecmsc.PRECISION.value][
@@ -53,10 +53,7 @@ class TestCoinexRealExchangeTester(RealExchangeTester):
53
53
 
54
54
  async def test_get_market_status(self):
55
55
  for market_status in await self.get_market_statuses():
56
- assert market_status
57
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
58
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
59
- assert market_status[Ecmsc.PRECISION.value]
56
+ self.ensure_required_market_status_values(market_status)
60
57
  # on this exchange, precision is a decimal instead of a number of digits
61
58
  assert 0 < market_status[Ecmsc.PRECISION.value][
62
59
  Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in this exchange tentacle
@@ -51,10 +51,7 @@ class TestCryptoComRealExchangeTester(RealExchangeTester):
51
51
 
52
52
  async def test_get_market_status(self):
53
53
  for market_status in await self.get_market_statuses():
54
- assert market_status
55
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
56
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
57
- assert market_status[Ecmsc.PRECISION.value]
54
+ self.ensure_required_market_status_values(market_status)
58
55
  # on CryptoCom, precision is a decimal instead of a number of digits
59
56
  assert 0 < market_status[Ecmsc.PRECISION.value][
60
57
  Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in CryptoCom tentacle
@@ -49,10 +49,7 @@ class TestGateIORealExchangeTester(RealExchangeTester):
49
49
 
50
50
  async def test_get_market_status(self):
51
51
  for market_status in await self.get_market_statuses():
52
- assert market_status
53
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
54
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
55
- assert market_status[Ecmsc.PRECISION.value]
52
+ self.ensure_required_market_status_values(market_status)
56
53
  assert 1e-08 <= market_status[Ecmsc.PRECISION.value][
57
54
  Ecmsc.PRECISION_AMOUNT.value] < 1 # to be fixed in tentacle
58
55
  assert 1e-08 <= market_status[Ecmsc.PRECISION.value][
@@ -50,10 +50,7 @@ class TestHitBtcRealExchangeTester(RealExchangeTester):
50
50
 
51
51
  async def test_get_market_status(self):
52
52
  for market_status in await self.get_market_statuses():
53
- assert market_status
54
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
55
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
56
- assert market_status[Ecmsc.PRECISION.value]
53
+ self.ensure_required_market_status_values(market_status)
57
54
  assert 1e-08 <= market_status[Ecmsc.PRECISION.value][
58
55
  Ecmsc.PRECISION_AMOUNT.value] < 1 # to be fixed in hitbtc tentacle
59
56
  assert 1e-09 <= market_status[Ecmsc.PRECISION.value][
@@ -44,10 +44,7 @@ class TestHollaexRealExchangeTester(RealExchangeTester):
44
44
 
45
45
  async def test_get_market_status(self):
46
46
  for market_status in await self.get_market_statuses():
47
- assert market_status
48
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
49
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
50
- assert market_status[Ecmsc.PRECISION.value]
47
+ self.ensure_required_market_status_values(market_status)
51
48
  assert 1e-08 <= market_status[Ecmsc.PRECISION.value][
52
49
  Ecmsc.PRECISION_AMOUNT.value] < 1.0 # to be fixed in tentacle
53
50
  assert 1e-08 <= market_status[Ecmsc.PRECISION.value][
@@ -57,6 +54,7 @@ class TestHollaexRealExchangeTester(RealExchangeTester):
57
54
  Ecmsc.LIMITS_PRICE.value,
58
55
  Ecmsc.LIMITS_COST.value))
59
56
  self.check_market_status_limits(market_status,
57
+ normal_price_max=30000,
60
58
  normal_cost_min=1e-07,
61
59
  low_price_min=0.01, # XRP/USDT instead of /BTC
62
60
  low_price_max=1,
@@ -50,10 +50,7 @@ class TestHTXRealExchangeTester(RealExchangeTester):
50
50
 
51
51
  async def test_get_market_status(self):
52
52
  for market_status in await self.get_market_statuses():
53
- assert market_status
54
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
55
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
56
- assert market_status[Ecmsc.PRECISION.value]
53
+ self.ensure_required_market_status_values(market_status)
57
54
  assert 1e-06 <= market_status[Ecmsc.PRECISION.value][
58
55
  Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in tentacle
59
56
  assert 1e-09 <= market_status[Ecmsc.PRECISION.value][
@@ -85,7 +82,7 @@ class TestHTXRealExchangeTester(RealExchangeTester):
85
82
 
86
83
  # without useHistoricalEndpointForSpot=False
87
84
  useHistoricalEndpointForSpot_symbol_prices = await self.get_symbol_prices(limit=200)
88
- assert len(useHistoricalEndpointForSpot_symbol_prices) == 150
85
+ assert len(useHistoricalEndpointForSpot_symbol_prices) == 200
89
86
 
90
87
  async def test_get_historical_symbol_prices(self):
91
88
  # try with since and limit (used in data collector)
@@ -49,10 +49,7 @@ class TestKrakenRealExchangeTester(RealExchangeTester):
49
49
 
50
50
  async def test_get_market_status(self):
51
51
  for market_status in await self.get_market_statuses():
52
- assert market_status
53
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
54
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
55
- assert market_status[Ecmsc.PRECISION.value]
52
+ self.ensure_required_market_status_values(market_status)
56
53
  # on this exchange, precision is a decimal instead of a number of digits
57
54
  assert 0 < market_status[Ecmsc.PRECISION.value][
58
55
  Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in this exchange tentacle
@@ -54,10 +54,7 @@ class TestKucoinRealExchangeTester(RealExchangeTester):
54
54
 
55
55
  async def test_get_market_status(self):
56
56
  for market_status in await self.get_market_statuses():
57
- assert market_status
58
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
59
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
60
- assert market_status[Ecmsc.PRECISION.value]
57
+ self.ensure_required_market_status_values(market_status)
61
58
  # on this exchange, precision is a decimal instead of a number of digits
62
59
  assert 0 < market_status[Ecmsc.PRECISION.value][
63
60
  Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in this exchange tentacle
@@ -56,10 +56,7 @@ class TestKucoinFuturesRealExchangeTester(RealFuturesExchangeTester):
56
56
 
57
57
  async def test_get_market_status(self):
58
58
  for market_status in await self.get_market_statuses():
59
- assert market_status
60
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
61
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
62
- assert market_status[Ecmsc.PRECISION.value]
59
+ self.ensure_required_market_status_values(market_status)
63
60
  # on this exchange, precision is a decimal instead of a number of digits
64
61
  assert 0 < market_status[Ecmsc.PRECISION.value][
65
62
  Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in this exchange tentacle
@@ -50,10 +50,7 @@ class TestMEXCRealExchangeTester(RealExchangeTester):
50
50
 
51
51
  async def test_get_market_status(self):
52
52
  for market_status in await self.get_market_statuses():
53
- assert market_status
54
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
55
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
56
- assert market_status[Ecmsc.PRECISION.value]
53
+ self.ensure_required_market_status_values(market_status)
57
54
  assert 1e-06 <= market_status[Ecmsc.PRECISION.value][
58
55
  Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in tentacle
59
56
  assert 1e-09 <= market_status[Ecmsc.PRECISION.value][
@@ -53,10 +53,7 @@ class TestNdaxRealExchangeTester(RealExchangeTester):
53
53
 
54
54
  async def test_get_market_status(self):
55
55
  for market_status in await self.get_market_statuses():
56
- assert market_status
57
- assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
58
- assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
59
- assert market_status[Ecmsc.PRECISION.value]
56
+ self.ensure_required_market_status_values(market_status)
60
57
  # on this exchange, precision is a decimal instead of a number of digits
61
58
  assert 0 < market_status[Ecmsc.PRECISION.value][
62
59
  Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in this exchange tentacle