OctoBot-Trading 2.4.102__tar.gz → 2.4.104__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 (477) hide show
  1. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/CHANGELOG.md +8 -0
  2. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.102/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.104}/PKG-INFO +2 -2
  4. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/README.md +1 -1
  5. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/__init__.py +1 -1
  6. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/__init__.py +2 -0
  7. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/exchange.py +4 -0
  8. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +8 -3
  9. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/types/rest_exchange.py +20 -9
  10. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/test_tools/exchanges_test_tools.py +1 -1
  11. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/real_exchange_tester.py +121 -0
  12. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_ascendex.py +5 -0
  13. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_binance.py +12 -0
  14. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_binance_futures.py +5 -0
  15. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bingx.py +5 -0
  16. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bitfinex.py +5 -0
  17. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bitget.py +5 -0
  18. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bithumb.py +5 -0
  19. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bitmart.py +5 -0
  20. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bitso.py +5 -0
  21. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bitstamp.py +5 -0
  22. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bybit.py +5 -0
  23. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bybit_futures.py +5 -0
  24. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_coinbase.py +5 -0
  25. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_coinex.py +5 -0
  26. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_cryptocom.py +5 -0
  27. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_gateio.py +5 -0
  28. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_hitbtc.py +5 -0
  29. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_hollaex.py +20 -0
  30. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_htx.py +5 -0
  31. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_kraken.py +5 -0
  32. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_kucoin.py +5 -0
  33. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_kucoin_futures.py +5 -0
  34. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_mexc.py +5 -0
  35. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_ndax.py +5 -0
  36. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_okx.py +5 -0
  37. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_okx_futures.py +5 -0
  38. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_phemex.py +5 -0
  39. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_poloniex.py +5 -0
  40. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_upbit.py +5 -0
  41. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_wavesexchange.py +5 -0
  42. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/LICENSE +0 -0
  43. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/MANIFEST.in +0 -0
  44. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
  45. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  46. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  47. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/OctoBot_Trading.egg-info/requires.txt +0 -0
  48. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  49. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/channels.py +0 -0
  50. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/contracts.py +0 -0
  51. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/modes.py +0 -0
  52. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/orders.py +0 -0
  53. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/portfolio.py +0 -0
  54. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/positions.py +0 -0
  55. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/profitability.py +0 -0
  56. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/storage.py +0 -0
  57. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/symbol_data.py +0 -0
  58. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/trader.py +0 -0
  59. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/trades.py +0 -0
  60. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/constants.py +0 -0
  61. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/enums.py +0 -0
  62. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/errors.py +0 -0
  63. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_channel.py +0 -0
  64. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/__init__.py +0 -0
  65. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  66. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  67. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  68. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  69. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  70. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  71. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  72. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  73. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  74. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  75. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  76. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  77. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  78. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  79. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  80. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  81. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  82. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  83. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  84. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  85. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  86. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  87. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  88. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  89. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  90. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  91. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  92. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  93. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  94. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  95. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  96. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  97. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  98. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  99. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  100. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  101. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  102. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  103. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  104. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  105. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  106. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  107. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  108. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  109. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  110. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  111. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  112. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  113. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  114. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  115. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  116. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/__init__.py +0 -0
  117. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  118. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  119. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  120. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  121. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/config/__init__.py +0 -0
  122. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  123. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  124. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  125. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  126. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
  127. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  128. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +0 -0
  129. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  130. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  131. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  132. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  133. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  134. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  135. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  136. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/exchange_builder.py +0 -0
  137. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/exchange_channels.py +0 -0
  138. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/exchange_details.py +0 -0
  139. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/exchange_factory.py +0 -0
  140. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/exchange_manager.py +0 -0
  141. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  142. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/exchanges.py +0 -0
  143. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  144. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  145. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  146. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  147. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/traders/__init__.py +0 -0
  148. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/traders/trader.py +0 -0
  149. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  150. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/types/__init__.py +0 -0
  151. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  152. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/util/__init__.py +0 -0
  153. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  154. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  155. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  156. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  157. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/__init__.py +0 -0
  158. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/abstract_trading_mode.py +0 -0
  159. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/channel/__init__.py +0 -0
  160. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  161. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  162. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/channel/mode.py +0 -0
  163. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/mode_activity.py +0 -0
  164. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/mode_config.py +0 -0
  165. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/modes_factory.py +0 -0
  166. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/modes_util.py +0 -0
  167. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  168. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  169. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  170. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  171. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  172. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  173. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  174. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  175. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  176. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  177. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  178. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  179. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  180. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  181. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  182. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  183. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/octobot_channel_consumer.py +0 -0
  184. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/__init__.py +0 -0
  185. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  186. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/__init__.py +0 -0
  187. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  188. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  189. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  190. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  191. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  192. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  193. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  194. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  195. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  196. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/order.py +0 -0
  197. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  198. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  199. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/order_group.py +0 -0
  200. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/order_state.py +0 -0
  201. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/order_util.py +0 -0
  202. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  203. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  204. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  205. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  206. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  207. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  208. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  209. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  210. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  211. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  212. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  213. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  214. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  215. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  216. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  217. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  218. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  219. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  220. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  221. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  222. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  223. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  224. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  225. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  226. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  227. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  228. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  229. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  230. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  231. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  232. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  233. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  234. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  235. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  236. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  237. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  238. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  239. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  240. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  241. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  242. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  243. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  244. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  245. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  246. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  247. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  248. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  249. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  250. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  251. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  252. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  253. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  254. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  255. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  256. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/__init__.py +0 -0
  257. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  258. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  259. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  260. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  261. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/position.py +0 -0
  262. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  263. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/position_state.py +0 -0
  264. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/position_util.py +0 -0
  265. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  266. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  267. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  268. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  269. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  270. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  271. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  272. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  273. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  274. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/state.py +0 -0
  275. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/__init__.py +0 -0
  276. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  277. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  278. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  279. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/trade.py +0 -0
  280. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  281. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  282. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  283. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  284. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  285. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  286. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  287. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  288. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  289. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  290. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  291. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  292. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  293. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/signals/__init__.py +0 -0
  294. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/signals/channel/__init__.py +0 -0
  295. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  296. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  297. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/signals/channel/signal_producer.py +0 -0
  298. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/signals/signal_creation.py +0 -0
  299. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  300. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/signals/util.py +0 -0
  301. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/__init__.py +0 -0
  302. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/abstract_storage.py +0 -0
  303. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/candles_storage.py +0 -0
  304. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/orders_storage.py +0 -0
  305. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/portfolio_storage.py +0 -0
  306. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/storage_manager.py +0 -0
  307. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/trades_storage.py +0 -0
  308. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/transactions_storage.py +0 -0
  309. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/util.py +0 -0
  310. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/supervisors/__init__.py +0 -0
  311. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  312. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  313. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/__init__.py +0 -0
  314. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/config_util.py +0 -0
  315. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/initializable.py +0 -0
  316. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/initialization_util.py +0 -0
  317. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/simulator_updater_utils.py +0 -0
  318. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/test_tools/__init__.py +0 -0
  319. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  320. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  321. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  322. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/requirements.txt +0 -0
  323. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/setup.cfg +0 -0
  324. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/setup.py +0 -0
  325. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/__init__.py +0 -0
  326. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_channels.py +0 -0
  327. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_exchange.py +0 -0
  328. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_modes.py +0 -0
  329. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_orders.py +0 -0
  330. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_portfolio.py +0 -0
  331. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_profitability.py +0 -0
  332. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_symbol_data.py +0 -0
  333. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_trader.py +0 -0
  334. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_trades.py +0 -0
  335. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/cli/__init__.py +0 -0
  336. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/__init__.py +0 -0
  337. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/contracts/__init__.py +0 -0
  338. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  339. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  340. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/funding/__init__.py +0 -0
  341. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  342. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/kline/__init__.py +0 -0
  343. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  344. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/ohlcv/__init__.py +0 -0
  345. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  346. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  347. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/order_book/__init__.py +0 -0
  348. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  349. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/prices/__init__.py +0 -0
  350. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  351. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  352. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/recent_trades/__init__.py +0 -0
  353. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  354. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  355. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/ticker/__init__.py +0 -0
  356. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  357. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/__init__.py +0 -0
  358. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/connectors/__init__.py +0 -0
  359. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  360. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  361. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  362. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/implementations/__init__.py +0 -0
  363. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  364. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  365. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/test_abstract_exchange.py +0 -0
  366. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  367. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/test_exchange_builder.py +0 -0
  368. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/test_exchange_config_data.py +0 -0
  369. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/test_exchange_factory.py +0 -0
  370. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/test_exchange_manager.py +0 -0
  371. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/test_exchange_simulator.py +0 -0
  372. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/test_exchanges.py +0 -0
  373. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/traders/__init__.py +0 -0
  374. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/traders/test_trader.py +0 -0
  375. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/types/__init__.py +0 -0
  376. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  377. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/util/__init__.py +0 -0
  378. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  379. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/util/test_exchange_util.py +0 -0
  380. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/__init__.py +0 -0
  381. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/script_keywords/__init__.py +0 -0
  382. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  383. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  384. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  385. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  386. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  387. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  388. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  389. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/test_abstract_mode_consumer.py +0 -0
  390. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/test_abstract_trading_mode.py +0 -0
  391. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/test_modes_util.py +0 -0
  392. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/__init__.py +0 -0
  393. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/__init__.py +0 -0
  394. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/groups/__init__.py +0 -0
  395. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  396. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  397. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  398. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/__init__.py +0 -0
  399. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  400. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  401. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  402. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  403. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/test_order_state.py +0 -0
  404. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  405. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  406. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  407. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  408. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  409. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/test_order.py +0 -0
  410. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/test_order_adapter.py +0 -0
  411. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/test_order_factory.py +0 -0
  412. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/test_order_util.py +0 -0
  413. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/test_orders_manager.py +0 -0
  414. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  415. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/__init__.py +0 -0
  416. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  417. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  418. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  419. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  420. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  421. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  422. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  423. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  424. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/market/__init__.py +0 -0
  425. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  426. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  427. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  428. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  429. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  430. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  431. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/__init__.py +0 -0
  432. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  433. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  434. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  435. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  436. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/history/__init__.py +0 -0
  437. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  438. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  439. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/test_asset.py +0 -0
  440. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  441. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  442. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  443. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  444. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  445. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/types/__init__.py +0 -0
  446. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  447. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  448. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  449. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/__init__.py +0 -0
  450. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/channel/__init__.py +0 -0
  451. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/states/__init__.py +0 -0
  452. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/test_position.py +0 -0
  453. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/test_position_factory.py +0 -0
  454. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/test_positions_manager.py +0 -0
  455. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/types/__init__.py +0 -0
  456. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  457. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  458. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/trades/__init__.py +0 -0
  459. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/trades/test_trade_factory.py +0 -0
  460. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/trades/test_trade_manager.py +0 -0
  461. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  462. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/trades/test_trade_util.py +0 -0
  463. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/transactions/__init__.py +0 -0
  464. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  465. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  466. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/signals/__init__.py +0 -0
  467. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  468. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/signals/test_util.py +0 -0
  469. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/test_utils/__init__.py +0 -0
  470. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/test_utils/order_util.py +0 -0
  471. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/test_utils/random_numbers.py +0 -0
  472. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/util/__init__.py +0 -0
  473. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/util/test_config_util.py +0 -0
  474. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/__init__.py +0 -0
  475. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/__init__.py +0 -0
  476. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  477. {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_okcoin.py +0 -0
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [2.4.104] - 2024-08-26
8
+ ### Updated
9
+ - [Exchange] handle ccxt.PermissionDenied
10
+
11
+ ## [2.4.103] - 2024-08-25
12
+ ### Added
13
+ - [API] add supports_custom_limit_order_book_fetch
14
+
7
15
  ## [2.4.102] - 2024-08-24
8
16
  ### Added
9
17
  - [Exchanges] add get_order_books
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.102
3
+ Version: 2.4.104
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.102](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.104](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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.102
3
+ Version: 2.4.104
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.102](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.104](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.102](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.104](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.102" # major.minor.revision
18
+ VERSION = "2.4.104" # major.minor.revision
@@ -123,6 +123,7 @@ from octobot_trading.api.exchange import (
123
123
  store_history_in_run_storage,
124
124
  get_enabled_exchanges_names,
125
125
  get_auto_filled_exchange_names,
126
+ supports_custom_limit_order_book_fetch,
126
127
  get_exchange_details,
127
128
  cancel_ccxt_throttle_task,
128
129
  stop_exchange,
@@ -309,6 +310,7 @@ __all__ = [
309
310
  "store_history_in_run_storage",
310
311
  "get_enabled_exchanges_names",
311
312
  "get_auto_filled_exchange_names",
313
+ "supports_custom_limit_order_book_fetch",
312
314
  "get_exchange_details",
313
315
  "cancel_ccxt_throttle_task",
314
316
  "stop_exchange",
@@ -324,6 +324,10 @@ def get_auto_filled_exchange_names(tentacles_setup_config) -> list:
324
324
  return exchanges.get_auto_filled_exchange_names(tentacles_setup_config)
325
325
 
326
326
 
327
+ def supports_custom_limit_order_book_fetch(exchange_manager) -> bool:
328
+ return exchange_manager.exchange.SUPPORTS_CUSTOM_LIMIT_ORDER_BOOK_FETCH
329
+
330
+
327
331
  async def get_exchange_details(
328
332
  exchange_name, is_autofilled, tentacles_setup_config, aiohttp_session
329
333
  ) -> exchanges.ExchangeDetails:
@@ -14,6 +14,7 @@
14
14
  # You should have received a copy of the GNU Lesser General Public
15
15
  # License along with this library.
16
16
  import decimal
17
+ import time
17
18
 
18
19
  import octobot_trading.exchanges.adapters as adapters
19
20
  import octobot_trading.exchanges.connectors.ccxt.enums as ccxt_enums
@@ -201,9 +202,13 @@ class CCXTAdapter(adapters.AbstractAdapter):
201
202
  # CCXT standard order_book fixing logic
202
203
  try:
203
204
  exchange_timestamp = fixed[enums.ExchangeConstantsOrderBookInfoColumns.TIMESTAMP.value]
204
- fixed[enums.ExchangeConstantsOrderBookInfoColumns.TIMESTAMP.value] = self.get_uniformized_timestamp(
205
- exchange_timestamp
206
- )
205
+ if exchange_timestamp is None:
206
+ # force current time
207
+ fixed[enums.ExchangeConstantsOrderBookInfoColumns.TIMESTAMP.value] = time.time()
208
+ else:
209
+ fixed[enums.ExchangeConstantsOrderBookInfoColumns.TIMESTAMP.value] = self.get_uniformized_timestamp(
210
+ exchange_timestamp
211
+ )
207
212
  except KeyError as e:
208
213
  self.logger.error(f"Fail to convert order book timestamp ({e})")
209
214
  return fixed
@@ -94,6 +94,8 @@ class RestExchange(abstract_exchange.AbstractExchange):
94
94
  CAN_HAVE_DELAYED_OPEN_ORDERS = False
95
95
  # Set True when get_cancelled_order() can return outdated open orders
96
96
  CAN_HAVE_DELAYED_CANCELLED_ORDERS = False
97
+ # Set True when the "limit" param when fetching order books is taken into account
98
+ SUPPORTS_CUSTOM_LIMIT_ORDER_BOOK_FETCH = False
97
99
 
98
100
  # text content of errors due to orders not found errors
99
101
  EXCHANGE_ORDER_NOT_FOUND_ERRORS: typing.List[typing.Iterable[str]] = []
@@ -222,7 +224,8 @@ class RestExchange(abstract_exchange.AbstractExchange):
222
224
  f"Error when handling order {err}. Please make sure that trading permissions are on for this API key."
223
225
  ) from err
224
226
  except ccxt.DDoSProtection as e:
225
- # raised upon rate limit issues, last response data might have details on what is happening
227
+ # ccxt.DDoSProtection: raised upon rate limit issues,
228
+ # last response data might have details on what is happening
226
229
  # ensure this is not a permission error (can happen on binance)
227
230
  if self.is_api_permission_error(e):
228
231
  # invalid api key or missing trading rights
@@ -283,15 +286,23 @@ class RestExchange(abstract_exchange.AbstractExchange):
283
286
  return created_order
284
287
 
285
288
  async def _create_order_with_retry(self, order_type, symbol, quantity: decimal.Decimal,
286
- price: decimal.Decimal, stop_price: decimal.Decimal,
289
+ price: decimal.Decimal, stop_price: decimal.Decimal,
287
290
  side: enums.TradeOrderSide,
288
- current_price: decimal.Decimal,
291
+ current_price: decimal.Decimal,
289
292
  reduce_only: bool, params) -> dict:
290
293
  try:
291
294
  return await self._create_specific_order(order_type, symbol, quantity, price=price,
292
295
  stop_price=stop_price, side=side,
293
- current_price=current_price,
296
+ current_price=current_price,
294
297
  reduce_only=reduce_only, params=params)
298
+ except ccxt.PermissionDenied as err:
299
+ if self.is_exchange_account_traded_symbol_permission_error(err):
300
+ # exchange won't let this order create: raise
301
+ raise errors.ExchangeAccountSymbolPermissionError(
302
+ f"Error when creating {symbol} {order_type} order on {self.exchange_manager.exchange_name}: {err}"
303
+ ) from err
304
+ # otherwise propagate exception: this is not a situation to retry
305
+ raise
295
306
  except (ccxt.InvalidOrder, ccxt.BadRequest) as err:
296
307
  if self.is_exchange_account_traded_symbol_permission_error(err):
297
308
  # exchange won't let this order create: raise
@@ -303,9 +314,9 @@ class RestExchange(abstract_exchange.AbstractExchange):
303
314
  f"This might be due to an update on {self.name} market rules. Fetching updated rules.")
304
315
  await self.connector.load_symbol_markets(reload=True, market_filter=self.exchange_manager.market_filter)
305
316
  # retry order creation with updated markets (ccxt will use the updated market values)
306
- return await self._create_specific_order(order_type, symbol, quantity, price=price,
317
+ return await self._create_specific_order(order_type, symbol, quantity, price=price,
307
318
  stop_price=stop_price, side=side,
308
- current_price=current_price, reduce_only=reduce_only,
319
+ current_price=current_price, reduce_only=reduce_only,
309
320
  params=params)
310
321
 
311
322
  def _ensure_order_details_completeness(self, order, order_required_fields=None, order_non_empty_fields=None):
@@ -318,7 +329,7 @@ class RestExchange(abstract_exchange.AbstractExchange):
318
329
  all(order[key] for key in order_non_empty_fields)
319
330
 
320
331
  async def _create_specific_order(self, order_type, symbol, quantity: decimal.Decimal, price: decimal.Decimal = None,
321
- side: enums.TradeOrderSide = None, current_price: decimal.Decimal = None,
332
+ side: enums.TradeOrderSide = None, current_price: decimal.Decimal = None,
322
333
  stop_price: decimal.Decimal = None, reduce_only: bool = False, params=None) -> dict:
323
334
  created_order = None
324
335
  float_quantity = float(quantity)
@@ -405,7 +416,7 @@ class RestExchange(abstract_exchange.AbstractExchange):
405
416
  raise NotImplementedError("_create_market_trailing_stop_order is not implemented")
406
417
 
407
418
  async def _create_limit_trailing_stop_order(
408
-
419
+
409
420
  self, symbol, quantity, price=None, side=None,
410
421
  reduce_only: bool = False, params=None) -> dict:
411
422
  raise NotImplementedError("_create_limit_trailing_stop_order is not implemented")
@@ -662,7 +673,7 @@ class RestExchange(abstract_exchange.AbstractExchange):
662
673
 
663
674
  async def switch_to_account(self, account_type: enums.AccountTypes):
664
675
  return await self.connector.switch_to_account(account_type=account_type)
665
-
676
+
666
677
  # Futures
667
678
  async def load_pair_future_contract(self, pair: str):
668
679
  """
@@ -159,7 +159,7 @@ async def get_order(
159
159
  exchange_manager,
160
160
  exchange_order_id: str,
161
161
  symbol: str,
162
- ) -> dict:
162
+ ) -> typing.Optional[dict]:
163
163
  return await exchange_manager.exchange.get_order(exchange_order_id, symbol=symbol)
164
164
 
165
165
 
@@ -14,13 +14,17 @@
14
14
  # You should have received a copy of the GNU Lesser General Public
15
15
  # License along with this library.
16
16
  import contextlib
17
+ import time
18
+ import typing
17
19
 
18
20
  import ccxt.async_support
21
+ import pytest
19
22
  from ccxt import Exchange
20
23
 
21
24
  import octobot_commons.constants as constants
22
25
  import octobot_commons.enums as commons_enums
23
26
  import octobot_trading.enums as trading_enums
27
+ import octobot_trading.errors as trading_errors
24
28
  import octobot_trading.exchanges.connectors.ccxt.ccxt_client_util as ccxt_client_util
25
29
  import octobot_trading.exchanges.util as exchanges_util
26
30
  from octobot_trading.enums import ExchangeConstantsTickersColumns as Ectc, \
@@ -44,6 +48,7 @@ class RealExchangeTester:
44
48
  REQUIRES_AUTH = False # set True when even normally public apis require authentication
45
49
  MARKET_STATUS_TYPE = trading_enums.ExchangeTypes.SPOT.value
46
50
  HISTORICAL_CANDLES_TO_FETCH_COUNT = 650
51
+ DEFAULT_CUSTOM_BOOK_LIMIT = 50
47
52
 
48
53
  # Public methods: to be implemented as tests
49
54
  # Use await self._[method_name] to get the test request result
@@ -68,6 +73,15 @@ class RealExchangeTester:
68
73
  async def test_get_order_book(self):
69
74
  pass
70
75
 
76
+
77
+ async def test_get_order_books(self):
78
+ # implement if necessary
79
+ pass
80
+
81
+ async def test_get_order_books(self):
82
+ # implement if necessary
83
+ pass
84
+
71
85
  async def test_get_recent_trades(self):
72
86
  pass
73
87
 
@@ -139,6 +153,113 @@ class RealExchangeTester:
139
153
  }
140
154
  }
141
155
 
156
+ def _get_ref_order_book_timestamp(self):
157
+ return time.time() + 30 # allow 30s desync
158
+
159
+ async def inner_test_unsupported_get_order_books(self):
160
+ async with (self.get_exchange_manager() as exchange_manager):
161
+ with pytest.raises(trading_errors.NotSupported):
162
+ # with symbols filter
163
+ symbols = [self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3]
164
+ await exchange_manager.exchange.get_order_books(symbols=symbols)
165
+
166
+ with pytest.raises(trading_errors.NotSupported):
167
+ # without symbols filter
168
+ await exchange_manager.exchange.get_order_books(symbols=None)
169
+
170
+ async def inner_test_get_order_books(
171
+ self,
172
+ expected_symbol_filter: bool,
173
+ expected_missing_symbol_filter_books_min_count: int,
174
+ expected_max_orders_by_side: int,
175
+ min_book_orders_count: int,
176
+ supports_custom_limit: bool,
177
+ custom_limit: typing.Optional[int],
178
+ max_empty_book_sides: int,
179
+ ):
180
+ async with (self.get_exchange_manager() as exchange_manager):
181
+ # with symbols filter
182
+ symbols = [self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3]
183
+ books_by_symbol = await exchange_manager.exchange.get_order_books(symbols=symbols)
184
+ ref_time = self._get_ref_order_book_timestamp()
185
+ empty_book_sides = []
186
+ if expected_symbol_filter:
187
+ assert len(books_by_symbol) == len(symbols)
188
+ else:
189
+ assert len(books_by_symbol) >= expected_missing_symbol_filter_books_min_count
190
+ for symbol, book in books_by_symbol.items():
191
+ assert 0 < book[trading_enums.ExchangeConstantsOrderBookInfoColumns.TIMESTAMP.value] < ref_time, (
192
+ f"Invalid {symbol} book timestamp value: "
193
+ f"{book[trading_enums.ExchangeConstantsOrderBookInfoColumns.TIMESTAMP.value]}, {ref_time=}"
194
+ )
195
+ for side in [
196
+ trading_enums.ExchangeConstantsOrderBookInfoColumns.BIDS,
197
+ trading_enums.ExchangeConstantsOrderBookInfoColumns.ASKS
198
+ ]:
199
+ if len(book[side.value]) == 0:
200
+ empty_book_sides.append((symbol, side))
201
+ else:
202
+ assert min_book_orders_count < len(book[side.value]) <= expected_max_orders_by_side, (
203
+ f"Unexpected {symbol} {side.value} orders count: {len(book[side.value])}. Expected: "
204
+ f"[{min_book_orders_count}: {expected_max_orders_by_side}]"
205
+ )
206
+ if len(empty_book_sides) > max_empty_book_sides:
207
+ raise AssertionError(
208
+ f"More empty book sides than expected: {max_empty_book_sides=} {empty_book_sides=}"
209
+ )
210
+ # without symbols filter
211
+ books_by_symbol = await exchange_manager.exchange.get_order_books(symbols=None)
212
+ empty_book_sides = []
213
+ assert len(books_by_symbol) >= expected_missing_symbol_filter_books_min_count, (
214
+ f"{len(books_by_symbol)=} NOT >= {expected_missing_symbol_filter_books_min_count=}"
215
+ )
216
+ for symbol, book in books_by_symbol.items():
217
+ assert 0 < book[trading_enums.ExchangeConstantsOrderBookInfoColumns.TIMESTAMP.value] < ref_time, (
218
+ f"Invalid {symbol} book timestamp value: "
219
+ f"{book[trading_enums.ExchangeConstantsOrderBookInfoColumns.TIMESTAMP.value]}, {ref_time=}"
220
+ )
221
+ for side in [
222
+ trading_enums.ExchangeConstantsOrderBookInfoColumns.BIDS,
223
+ trading_enums.ExchangeConstantsOrderBookInfoColumns.ASKS
224
+ ]:
225
+ if len(book[side.value]) == 0:
226
+ empty_book_sides.append((symbol, side))
227
+ else:
228
+ assert min_book_orders_count < len(book[side.value]) <= expected_max_orders_by_side, (
229
+ f"Unexpected {symbol} {side.value} orders count: {len(book[side.value])}. Expected: "
230
+ f"[{min_book_orders_count}: {expected_max_orders_by_side}]"
231
+ )
232
+ if len(empty_book_sides) > max_empty_book_sides:
233
+ raise AssertionError(
234
+ f"More empty book sides than expected: {max_empty_book_sides=} {empty_book_sides=}"
235
+ )
236
+ # with custom limit
237
+ books_by_symbol = await exchange_manager.exchange.get_order_books(symbols=None, limit=custom_limit)
238
+ self._ensure_book_custom_limit(
239
+ books_by_symbol, supports_custom_limit, expected_max_orders_by_side, custom_limit
240
+ )
241
+
242
+ def _ensure_book_custom_limit(
243
+ self,
244
+ books_by_symbol: dict,
245
+ supports_custom_limit: bool,
246
+ no_limit_default_size: int,
247
+ custom_limit: typing.Optional[int],
248
+ ):
249
+ has_taken_limit_into_account = False
250
+ custom_limit = custom_limit or self.DEFAULT_CUSTOM_BOOK_LIMIT
251
+ for symbol, book in books_by_symbol.items():
252
+ for side in [
253
+ trading_enums.ExchangeConstantsOrderBookInfoColumns.BIDS,
254
+ trading_enums.ExchangeConstantsOrderBookInfoColumns.ASKS
255
+ ]:
256
+ if no_limit_default_size < len(book[side.value]) <= custom_limit:
257
+ has_taken_limit_into_account = True
258
+ if supports_custom_limit:
259
+ assert has_taken_limit_into_account
260
+ else:
261
+ assert not supports_custom_limit
262
+
142
263
  @contextlib.asynccontextmanager
143
264
  async def get_exchange_manager(self, market_filter=None):
144
265
  async with get_exchange_manager(
@@ -116,10 +116,15 @@ class TestAscendExRealExchangeTester(RealExchangeTester):
116
116
  async def test_get_order_book(self):
117
117
  # limit param is not yet handled on AscendEx, consider orderbook with a least 6 bids and asks
118
118
  order_book = await self.get_order_book()
119
+ assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
119
120
  assert len(order_book[Ecobic.ASKS.value]) > 5
120
121
  assert len(order_book[Ecobic.ASKS.value][0]) == 2
121
122
  assert len(order_book[Ecobic.BIDS.value]) > 5
122
123
  assert len(order_book[Ecobic.BIDS.value][0]) == 2
124
+
125
+ async def test_get_order_books(self):
126
+ # implement if necessary
127
+ pass
123
128
 
124
129
  async def test_get_recent_trades(self):
125
130
  recent_trades = await self.get_recent_trades()
@@ -122,11 +122,23 @@ class TestBinanceRealExchangeTester(RealExchangeTester):
122
122
 
123
123
  async def test_get_order_book(self):
124
124
  order_book = await self.get_order_book()
125
+ assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
125
126
  assert len(order_book[Ecobic.ASKS.value]) == 5
126
127
  assert len(order_book[Ecobic.ASKS.value][0]) == 2
127
128
  assert len(order_book[Ecobic.BIDS.value]) == 5
128
129
  assert len(order_book[Ecobic.BIDS.value][0]) == 2
129
130
 
131
+ custom_limit_order_book = await self.get_order_book(limit=450)
132
+ # limit param is supported
133
+ # SUPPORTS_CUSTOM_LIMIT_ORDER_BOOK_FETCH = True in tentacle
134
+ self._ensure_book_custom_limit(
135
+ {self.SYMBOL: custom_limit_order_book}, True, 20, 450
136
+ )
137
+
138
+ async def test_get_order_books(self):
139
+ # not supported
140
+ await self.inner_test_unsupported_get_order_books()
141
+
130
142
  async def test_get_recent_trades(self):
131
143
  recent_trades = await self.get_recent_trades()
132
144
  assert len(recent_trades) == 50
@@ -126,10 +126,15 @@ class TestBinanceFuturesRealExchangeTester(RealFuturesExchangeTester):
126
126
 
127
127
  async def test_get_order_book(self):
128
128
  order_book = await self.get_order_book()
129
+ assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
129
130
  assert len(order_book[Ecobic.ASKS.value]) == 5
130
131
  assert len(order_book[Ecobic.ASKS.value][0]) == 2
131
132
  assert len(order_book[Ecobic.BIDS.value]) == 5
132
133
  assert len(order_book[Ecobic.BIDS.value][0]) == 2
134
+
135
+ async def test_get_order_books(self):
136
+ # implement if necessary
137
+ pass
133
138
 
134
139
  async def test_get_recent_trades(self):
135
140
  recent_trades = await self.get_recent_trades()
@@ -149,10 +149,15 @@ class TestBingxRealExchangeTester(RealExchangeTester):
149
149
 
150
150
  async def test_get_order_book(self):
151
151
  order_book = await self.get_order_book()
152
+ assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
152
153
  assert len(order_book[Ecobic.ASKS.value]) == 5
153
154
  assert len(order_book[Ecobic.ASKS.value][0]) == 2
154
155
  assert len(order_book[Ecobic.BIDS.value]) == 5
155
156
  assert len(order_book[Ecobic.BIDS.value][0]) == 2
157
+
158
+ async def test_get_order_books(self):
159
+ # implement if necessary
160
+ pass
156
161
 
157
162
  async def test_get_recent_trades(self):
158
163
  recent_trades = await self.get_recent_trades()
@@ -140,10 +140,15 @@ class TestBitfinexRealExchangeTester(RealExchangeTester):
140
140
  # bitfinex2 only supports 1, 25 and 100 size
141
141
  # https://docs.bitfinex.com/reference#rest-public-book
142
142
  order_book = await self.get_order_book(limit=25)
143
+ assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
143
144
  assert len(order_book[Ecobic.ASKS.value]) == 25
144
145
  assert len(order_book[Ecobic.ASKS.value][0]) == 2
145
146
  assert len(order_book[Ecobic.BIDS.value]) == 25
146
147
  assert len(order_book[Ecobic.BIDS.value][0]) == 2
148
+
149
+ async def test_get_order_books(self):
150
+ # implement if necessary
151
+ pass
147
152
 
148
153
  async def test_get_recent_trades(self):
149
154
  recent_trades = await self.get_recent_trades()
@@ -126,10 +126,15 @@ class TestBitgetRealExchangeTester(RealExchangeTester):
126
126
 
127
127
  async def test_get_order_book(self):
128
128
  order_book = await self.get_order_book()
129
+ assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
129
130
  assert len(order_book[Ecobic.ASKS.value]) == 150
130
131
  assert len(order_book[Ecobic.ASKS.value][0]) == 2
131
132
  assert len(order_book[Ecobic.BIDS.value]) == 150
132
133
  assert len(order_book[Ecobic.BIDS.value][0]) == 2
134
+
135
+ async def test_get_order_books(self):
136
+ # implement if necessary
137
+ pass
133
138
 
134
139
  async def test_get_recent_trades(self):
135
140
  recent_trades = await self.get_recent_trades()
@@ -117,10 +117,15 @@ class TestBithumbRealExchangeTester(RealExchangeTester):
117
117
 
118
118
  async def test_get_order_book(self):
119
119
  order_book = await self.get_order_book()
120
+ assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
120
121
  assert len(order_book[Ecobic.ASKS.value]) == 5
121
122
  assert len(order_book[Ecobic.ASKS.value][0]) == 2
122
123
  assert len(order_book[Ecobic.BIDS.value]) == 5
123
124
  assert len(order_book[Ecobic.BIDS.value][0]) == 2
125
+
126
+ async def test_get_order_books(self):
127
+ # implement if necessary
128
+ pass
124
129
 
125
130
  async def test_get_recent_trades(self):
126
131
  recent_trades = await self.get_recent_trades()
@@ -116,10 +116,15 @@ class TestBitMartRealExchangeTester(RealExchangeTester):
116
116
 
117
117
  async def test_get_order_book(self):
118
118
  order_book = await self.get_order_book()
119
+ assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
119
120
  assert len(order_book[Ecobic.ASKS.value]) == 5
120
121
  assert len(order_book[Ecobic.ASKS.value][0]) == 2
121
122
  assert len(order_book[Ecobic.BIDS.value]) == 5
122
123
  assert len(order_book[Ecobic.BIDS.value][0]) == 2
124
+
125
+ async def test_get_order_books(self):
126
+ # implement if necessary
127
+ pass
123
128
 
124
129
  async def test_get_recent_trades(self):
125
130
  recent_trades = await self.get_recent_trades()
@@ -116,10 +116,15 @@ class TestBitsoRealExchangeTester(RealExchangeTester):
116
116
 
117
117
  async def test_get_order_book(self):
118
118
  order_book = await self.get_order_book()
119
+ assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
119
120
  assert len(order_book[Ecobic.ASKS.value]) == 50
120
121
  assert len(order_book[Ecobic.ASKS.value][0]) == 2
121
122
  assert len(order_book[Ecobic.BIDS.value]) == 50
122
123
  assert len(order_book[Ecobic.BIDS.value][0]) == 2
124
+
125
+ async def test_get_order_books(self):
126
+ # implement if necessary
127
+ pass
123
128
 
124
129
  async def test_get_recent_trades(self):
125
130
  recent_trades = await self.get_recent_trades()
@@ -114,10 +114,15 @@ class TestBitstampRealExchangeTester(RealExchangeTester):
114
114
 
115
115
  async def test_get_order_book(self):
116
116
  order_book = await self.get_order_book()
117
+ assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
117
118
  assert len(order_book[Ecobic.ASKS.value]) >= 1000
118
119
  assert len(order_book[Ecobic.ASKS.value][0]) == 2
119
120
  assert len(order_book[Ecobic.BIDS.value]) >= 1000
120
121
  assert len(order_book[Ecobic.BIDS.value][0]) == 2
122
+
123
+ async def test_get_order_books(self):
124
+ # implement if necessary
125
+ pass
121
126
 
122
127
  async def test_get_recent_trades(self):
123
128
  recent_trades = await self.get_recent_trades()
@@ -123,10 +123,15 @@ class TestBybitRealExchangeTester(RealExchangeTester):
123
123
 
124
124
  async def test_get_order_book(self):
125
125
  order_book = await self.get_order_book()
126
+ assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
126
127
  assert len(order_book[Ecobic.ASKS.value]) == 5
127
128
  assert len(order_book[Ecobic.ASKS.value][0]) == 2
128
129
  assert len(order_book[Ecobic.BIDS.value]) == 5
129
130
  assert len(order_book[Ecobic.BIDS.value][0]) == 2
131
+
132
+ async def test_get_order_books(self):
133
+ # implement if necessary
134
+ pass
130
135
 
131
136
  async def test_get_recent_trades(self):
132
137
  recent_trades = await self.get_recent_trades()
@@ -136,10 +136,15 @@ class TestBybitRealExchangeTester(RealFuturesExchangeTester):
136
136
 
137
137
  async def test_get_order_book(self):
138
138
  order_book = await self.get_order_book()
139
+ assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
139
140
  assert len(order_book[Ecobic.ASKS.value]) == 5
140
141
  assert len(order_book[Ecobic.ASKS.value][0]) == 2
141
142
  assert len(order_book[Ecobic.BIDS.value]) == 5
142
143
  assert len(order_book[Ecobic.BIDS.value][0]) == 2
144
+
145
+ async def test_get_order_books(self):
146
+ # implement if necessary
147
+ pass
143
148
 
144
149
  async def test_get_recent_trades(self):
145
150
  recent_trades = await self.get_recent_trades()
@@ -125,10 +125,15 @@ class TestCoinbaseRealExchangeTester(RealExchangeTester):
125
125
 
126
126
  async def test_get_order_book(self):
127
127
  order_book = await self.get_order_book()
128
+ assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
128
129
  assert len(order_book[Ecobic.ASKS.value]) == 5
129
130
  assert len(order_book[Ecobic.ASKS.value][0]) == 2
130
131
  assert len(order_book[Ecobic.BIDS.value]) == 5
131
132
  assert len(order_book[Ecobic.BIDS.value][0]) == 2
133
+
134
+ async def test_get_order_books(self):
135
+ # implement if necessary
136
+ pass
132
137
 
133
138
  async def test_get_recent_trades(self):
134
139
  recent_trades = await self.get_recent_trades()
@@ -119,10 +119,15 @@ class TestCoinexRealExchangeTester(RealExchangeTester):
119
119
  async def test_get_order_book(self):
120
120
  # fetchOrderBook() limit argument must be None, 5/10/20/50. Default is 20
121
121
  order_book = await self.get_order_book(limit=10)
122
+ assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
122
123
  assert len(order_book[Ecobic.ASKS.value]) == 10
123
124
  assert len(order_book[Ecobic.ASKS.value][0]) == 2
124
125
  assert len(order_book[Ecobic.BIDS.value]) == 10
125
126
  assert len(order_book[Ecobic.BIDS.value][0]) == 2
127
+
128
+ async def test_get_order_books(self):
129
+ # implement if necessary
130
+ pass
126
131
 
127
132
  async def test_get_recent_trades(self):
128
133
  recent_trades = await self.get_recent_trades()
@@ -123,10 +123,15 @@ class TestCryptoComRealExchangeTester(RealExchangeTester):
123
123
 
124
124
  async def test_get_order_book(self):
125
125
  order_book = await self.get_order_book()
126
+ assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
126
127
  assert len(order_book[Ecobic.ASKS.value]) == 5
127
128
  assert len(order_book[Ecobic.ASKS.value][0]) == 3
128
129
  assert len(order_book[Ecobic.BIDS.value]) == 5
129
130
  assert len(order_book[Ecobic.BIDS.value][0]) == 3
131
+
132
+ async def test_get_order_books(self):
133
+ # implement if necessary
134
+ pass
130
135
 
131
136
  async def test_get_recent_trades(self):
132
137
  recent_trades = await self.get_recent_trades()