OctoBot-Trading 2.4.101__tar.gz → 2.4.103__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.101 → OctoBot-Trading-2.4.103}/CHANGELOG.md +9 -0
  2. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.101/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.103}/PKG-INFO +2 -2
  4. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/README.md +1 -1
  5. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/__init__.py +1 -1
  6. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/api/__init__.py +4 -0
  7. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/api/exchange.py +4 -0
  8. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/api/symbol_data.py +14 -2
  9. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +12 -0
  10. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +22 -0
  11. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/types/rest_exchange.py +7 -0
  12. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/real_exchange_tester.py +121 -0
  13. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_ascendex.py +5 -0
  14. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_binance.py +12 -0
  15. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_binance_futures.py +5 -0
  16. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_bingx.py +5 -0
  17. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_bitfinex.py +5 -0
  18. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_bitget.py +5 -0
  19. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_bithumb.py +5 -0
  20. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_bitmart.py +5 -0
  21. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_bitso.py +5 -0
  22. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_bitstamp.py +5 -0
  23. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_bybit.py +5 -0
  24. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_bybit_futures.py +5 -0
  25. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_coinbase.py +5 -0
  26. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_coinex.py +5 -0
  27. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_cryptocom.py +5 -0
  28. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_gateio.py +5 -0
  29. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_hitbtc.py +5 -0
  30. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_hollaex.py +20 -0
  31. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_htx.py +5 -0
  32. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_kraken.py +5 -0
  33. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_kucoin.py +5 -0
  34. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_kucoin_futures.py +5 -0
  35. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_mexc.py +5 -0
  36. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_ndax.py +5 -0
  37. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_okx.py +5 -0
  38. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_okx_futures.py +5 -0
  39. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_phemex.py +5 -0
  40. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_poloniex.py +5 -0
  41. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_upbit.py +5 -0
  42. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_wavesexchange.py +5 -0
  43. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/LICENSE +0 -0
  44. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/MANIFEST.in +0 -0
  45. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
  46. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  47. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  48. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/OctoBot_Trading.egg-info/requires.txt +0 -0
  49. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  50. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/api/channels.py +0 -0
  51. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/api/contracts.py +0 -0
  52. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/api/modes.py +0 -0
  53. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/api/orders.py +0 -0
  54. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/api/portfolio.py +0 -0
  55. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/api/positions.py +0 -0
  56. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/api/profitability.py +0 -0
  57. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/api/storage.py +0 -0
  58. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/api/trader.py +0 -0
  59. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/api/trades.py +0 -0
  60. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/constants.py +0 -0
  61. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/enums.py +0 -0
  62. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/errors.py +0 -0
  63. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_channel.py +0 -0
  64. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/__init__.py +0 -0
  65. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  66. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  67. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  68. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  69. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  70. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  71. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  72. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  73. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  74. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  75. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  76. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  77. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  78. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  79. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  80. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  81. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  82. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  83. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  84. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  85. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  86. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  87. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  88. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  89. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  90. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  91. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  92. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  93. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  94. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  95. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  96. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  97. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  98. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  99. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  100. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  101. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  102. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  103. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  104. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  105. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  106. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  107. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  108. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  109. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  110. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  111. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  112. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  113. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  114. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  115. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  116. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/__init__.py +0 -0
  117. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  118. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  119. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  120. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  121. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/config/__init__.py +0 -0
  122. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  123. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  124. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  125. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  126. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
  127. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  128. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  129. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  130. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  131. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  132. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  133. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  134. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  135. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/exchange_builder.py +0 -0
  136. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/exchange_channels.py +0 -0
  137. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/exchange_details.py +0 -0
  138. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/exchange_factory.py +0 -0
  139. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/exchange_manager.py +0 -0
  140. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  141. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/exchanges.py +0 -0
  142. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  143. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  144. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  145. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  146. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/traders/__init__.py +0 -0
  147. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/traders/trader.py +0 -0
  148. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  149. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/types/__init__.py +0 -0
  150. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  151. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/util/__init__.py +0 -0
  152. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  153. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  154. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  155. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  156. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/__init__.py +0 -0
  157. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/abstract_trading_mode.py +0 -0
  158. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/channel/__init__.py +0 -0
  159. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  160. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  161. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/channel/mode.py +0 -0
  162. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/mode_activity.py +0 -0
  163. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/mode_config.py +0 -0
  164. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/modes_factory.py +0 -0
  165. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/modes_util.py +0 -0
  166. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  167. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  168. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  169. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  170. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  171. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  172. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  173. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  174. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  175. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  176. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  177. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  178. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  179. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  180. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  181. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  182. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/octobot_channel_consumer.py +0 -0
  183. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/__init__.py +0 -0
  184. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  185. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/__init__.py +0 -0
  186. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  187. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  188. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  189. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  190. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  191. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  192. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  193. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  194. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  195. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/order.py +0 -0
  196. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  197. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  198. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/order_group.py +0 -0
  199. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/order_state.py +0 -0
  200. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/order_util.py +0 -0
  201. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  202. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  203. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  204. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  205. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  206. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  207. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  208. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  209. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  210. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  211. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  212. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  213. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  214. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  215. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  216. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  217. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  218. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  219. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  220. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  221. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  222. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  223. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  224. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  225. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  226. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  227. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  228. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  229. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  230. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  231. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  232. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  233. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  234. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  235. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  236. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  237. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  238. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  239. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  240. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  241. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  242. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  243. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  244. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  245. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  246. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  247. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  248. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  249. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  250. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  251. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  252. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  253. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  254. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  255. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/__init__.py +0 -0
  256. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  257. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  258. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  259. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  260. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/position.py +0 -0
  261. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  262. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/position_state.py +0 -0
  263. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/position_util.py +0 -0
  264. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  265. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  266. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  267. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  268. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  269. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  270. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  271. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  272. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  273. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/state.py +0 -0
  274. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/trades/__init__.py +0 -0
  275. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  276. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  277. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  278. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/trades/trade.py +0 -0
  279. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  280. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  281. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  282. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  283. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  284. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  285. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  286. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  287. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  288. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  289. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  290. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  291. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  292. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/signals/__init__.py +0 -0
  293. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/signals/channel/__init__.py +0 -0
  294. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  295. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  296. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/signals/channel/signal_producer.py +0 -0
  297. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/signals/signal_creation.py +0 -0
  298. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  299. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/signals/util.py +0 -0
  300. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/storage/__init__.py +0 -0
  301. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/storage/abstract_storage.py +0 -0
  302. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/storage/candles_storage.py +0 -0
  303. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/storage/orders_storage.py +0 -0
  304. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/storage/portfolio_storage.py +0 -0
  305. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/storage/storage_manager.py +0 -0
  306. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/storage/trades_storage.py +0 -0
  307. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/storage/transactions_storage.py +0 -0
  308. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/storage/util.py +0 -0
  309. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/supervisors/__init__.py +0 -0
  310. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  311. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  312. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/util/__init__.py +0 -0
  313. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/util/config_util.py +0 -0
  314. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/util/initializable.py +0 -0
  315. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/util/initialization_util.py +0 -0
  316. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/util/simulator_updater_utils.py +0 -0
  317. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/util/test_tools/__init__.py +0 -0
  318. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  319. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  320. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  321. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  322. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/requirements.txt +0 -0
  323. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/setup.cfg +0 -0
  324. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/setup.py +0 -0
  325. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/api/__init__.py +0 -0
  326. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/api/test_channels.py +0 -0
  327. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/api/test_exchange.py +0 -0
  328. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/api/test_modes.py +0 -0
  329. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/api/test_orders.py +0 -0
  330. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/api/test_portfolio.py +0 -0
  331. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/api/test_profitability.py +0 -0
  332. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/api/test_symbol_data.py +0 -0
  333. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/api/test_trader.py +0 -0
  334. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/api/test_trades.py +0 -0
  335. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/cli/__init__.py +0 -0
  336. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/__init__.py +0 -0
  337. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/contracts/__init__.py +0 -0
  338. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  339. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  340. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/funding/__init__.py +0 -0
  341. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  342. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/kline/__init__.py +0 -0
  343. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  344. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/ohlcv/__init__.py +0 -0
  345. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  346. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  347. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/order_book/__init__.py +0 -0
  348. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  349. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/prices/__init__.py +0 -0
  350. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  351. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  352. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/recent_trades/__init__.py +0 -0
  353. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  354. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  355. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/ticker/__init__.py +0 -0
  356. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  357. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/__init__.py +0 -0
  358. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/connectors/__init__.py +0 -0
  359. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  360. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  361. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  362. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/implementations/__init__.py +0 -0
  363. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  364. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  365. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/test_abstract_exchange.py +0 -0
  366. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  367. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/test_exchange_builder.py +0 -0
  368. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/test_exchange_config_data.py +0 -0
  369. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/test_exchange_factory.py +0 -0
  370. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/test_exchange_manager.py +0 -0
  371. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/test_exchange_simulator.py +0 -0
  372. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/test_exchanges.py +0 -0
  373. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/traders/__init__.py +0 -0
  374. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/traders/test_trader.py +0 -0
  375. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/types/__init__.py +0 -0
  376. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  377. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/util/__init__.py +0 -0
  378. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  379. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/exchanges/util/test_exchange_util.py +0 -0
  380. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/modes/__init__.py +0 -0
  381. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/modes/script_keywords/__init__.py +0 -0
  382. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  383. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  384. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  385. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  386. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  387. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  388. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  389. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/modes/test_abstract_mode_consumer.py +0 -0
  390. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/modes/test_abstract_trading_mode.py +0 -0
  391. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/modes/test_modes_util.py +0 -0
  392. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/__init__.py +0 -0
  393. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/__init__.py +0 -0
  394. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/groups/__init__.py +0 -0
  395. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  396. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  397. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  398. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/states/__init__.py +0 -0
  399. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  400. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  401. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  402. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  403. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/states/test_order_state.py +0 -0
  404. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  405. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  406. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  407. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  408. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  409. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/test_order.py +0 -0
  410. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/test_order_adapter.py +0 -0
  411. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/test_order_factory.py +0 -0
  412. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/test_order_util.py +0 -0
  413. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/test_orders_manager.py +0 -0
  414. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  415. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/types/__init__.py +0 -0
  416. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  417. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  418. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  419. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  420. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  421. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  422. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  423. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  424. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/types/market/__init__.py +0 -0
  425. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  426. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  427. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  428. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  429. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  430. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  431. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/__init__.py +0 -0
  432. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  433. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  434. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  435. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  436. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/history/__init__.py +0 -0
  437. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  438. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  439. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/test_asset.py +0 -0
  440. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  441. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  442. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  443. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  444. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  445. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/types/__init__.py +0 -0
  446. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  447. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  448. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  449. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/positions/__init__.py +0 -0
  450. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/positions/channel/__init__.py +0 -0
  451. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/positions/states/__init__.py +0 -0
  452. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/positions/test_position.py +0 -0
  453. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/positions/test_position_factory.py +0 -0
  454. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/positions/test_positions_manager.py +0 -0
  455. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/positions/types/__init__.py +0 -0
  456. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  457. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  458. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/trades/__init__.py +0 -0
  459. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/trades/test_trade_factory.py +0 -0
  460. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/trades/test_trade_manager.py +0 -0
  461. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  462. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/trades/test_trade_util.py +0 -0
  463. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/transactions/__init__.py +0 -0
  464. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  465. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  466. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/signals/__init__.py +0 -0
  467. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  468. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/signals/test_util.py +0 -0
  469. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/test_utils/__init__.py +0 -0
  470. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/test_utils/order_util.py +0 -0
  471. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/test_utils/random_numbers.py +0 -0
  472. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/util/__init__.py +0 -0
  473. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests/util/test_config_util.py +0 -0
  474. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/__init__.py +0 -0
  475. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/__init__.py +0 -0
  476. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  477. {OctoBot-Trading-2.4.101 → OctoBot-Trading-2.4.103}/tests_additional/real_exchanges/test_okcoin.py +0 -0
@@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [2.4.103] - 2024-08-25
8
+ ### Added
9
+ - [API] add supports_custom_limit_order_book_fetch
10
+
11
+ ## [2.4.102] - 2024-08-24
12
+ ### Added
13
+ - [Exchanges] add get_order_books
14
+ - [API] add get_daily_base_and_quote_volume_from_ticker
15
+
7
16
  ## [2.4.101] - 2024-08-22
8
17
  ### Added
9
18
  - [Leverage] add ccxt leverage
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.101
3
+ Version: 2.4.103
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.101](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.103](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.101
3
+ Version: 2.4.103
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.101](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.103](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.101](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.103](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.101" # major.minor.revision
18
+ VERSION = "2.4.103" # major.minor.revision
@@ -43,6 +43,7 @@ from octobot_trading.api.symbol_data import (
43
43
  get_symbol_low_candles,
44
44
  get_symbol_volume_candles,
45
45
  get_daily_base_and_quote_volume,
46
+ get_daily_base_and_quote_volume_from_ticker,
46
47
  get_symbol_time_candles,
47
48
  create_new_candles_manager,
48
49
  force_set_mark_price,
@@ -122,6 +123,7 @@ from octobot_trading.api.exchange import (
122
123
  store_history_in_run_storage,
123
124
  get_enabled_exchanges_names,
124
125
  get_auto_filled_exchange_names,
126
+ supports_custom_limit_order_book_fetch,
125
127
  get_exchange_details,
126
128
  cancel_ccxt_throttle_task,
127
129
  stop_exchange,
@@ -234,6 +236,7 @@ __all__ = [
234
236
  "get_symbol_low_candles",
235
237
  "get_symbol_volume_candles",
236
238
  "get_daily_base_and_quote_volume",
239
+ "get_daily_base_and_quote_volume_from_ticker",
237
240
  "get_symbol_time_candles",
238
241
  "create_new_candles_manager",
239
242
  "force_set_mark_price",
@@ -307,6 +310,7 @@ __all__ = [
307
310
  "store_history_in_run_storage",
308
311
  "get_enabled_exchanges_names",
309
312
  "get_auto_filled_exchange_names",
313
+ "supports_custom_limit_order_book_fetch",
310
314
  "get_exchange_details",
311
315
  "cancel_ccxt_throttle_task",
312
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 typing
17
18
 
18
19
  import octobot_commons.enums
19
20
 
@@ -95,14 +96,25 @@ def get_symbol_volume_candles(symbol_data, time_frame, limit=-1, include_in_cons
95
96
 
96
97
 
97
98
  def get_daily_base_and_quote_volume(symbol_data, reference_price: decimal.Decimal) -> (decimal.Decimal, decimal.Decimal):
98
- base_volume = symbol_data.ticker_manager.ticker.get(
99
+ return get_daily_base_and_quote_volume_from_ticker(
100
+ symbol_data.ticker_manager.ticker, reference_price=reference_price
101
+ )
102
+
103
+
104
+ def get_daily_base_and_quote_volume_from_ticker(
105
+ ticker: dict, reference_price: typing.Optional[decimal.Decimal] = None
106
+ ) -> (decimal.Decimal, decimal.Decimal):
107
+ base_volume = ticker.get(
99
108
  octobot_trading.enums.ExchangeConstantsTickersColumns.BASE_VOLUME.value,
100
109
  "nan"
101
110
  )
102
- quote_volume = symbol_data.ticker_manager.ticker.get(
111
+ quote_volume = ticker.get(
103
112
  octobot_trading.enums.ExchangeConstantsTickersColumns.QUOTE_VOLUME.value,
104
113
  "nan"
105
114
  )
115
+ reference_price = reference_price or decimal.Decimal(str(
116
+ ticker[octobot_trading.enums.ExchangeConstantsTickersColumns.CLOSE.value]
117
+ ))
106
118
  if base_volume:
107
119
  base_volume = decimal.Decimal(str(base_volume))
108
120
  if not quote_volume or decimal.Decimal(str(quote_volume)).is_nan():
@@ -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
@@ -199,6 +200,17 @@ class CCXTAdapter(adapters.AbstractAdapter):
199
200
  def fix_order_book(self, raw, **kwargs):
200
201
  fixed = super().fix_order_book(raw, **kwargs)
201
202
  # CCXT standard order_book fixing logic
203
+ try:
204
+ exchange_timestamp = fixed[enums.ExchangeConstantsOrderBookInfoColumns.TIMESTAMP.value]
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
+ )
212
+ except KeyError as e:
213
+ self.logger.error(f"Fail to convert order book timestamp ({e})")
202
214
  return fixed
203
215
 
204
216
  def parse_order_book(self, fixed, **kwargs):
@@ -311,6 +311,28 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
311
311
  except ccxt.BaseError as e:
312
312
  raise octobot_trading.errors.FailedRequest(f"Failed to get_order_book {e}")
313
313
 
314
+ # return bidasks on each side of the order book stack for each given symbol
315
+ @ccxt_client_util.converted_ccxt_common_errors
316
+ async def get_order_books(
317
+ self, symbols: typing.Optional[list[str]], limit: int = 5, **kwargs: dict
318
+ ) -> typing.Optional[dict]:
319
+ """
320
+ WARNING: not always supported by exchanges.
321
+ Raises octobot_trading.errors.NotSupported when not supported
322
+ :return: a dict of order book by symbol
323
+ """
324
+ try:
325
+ with self.error_describer():
326
+ book_by_symbol = await self.client.fetch_order_books(symbols=symbols, limit=limit, params=kwargs)
327
+ return {
328
+ symbol: self.adapter.adapt_order_book(book)
329
+ for symbol, book in book_by_symbol.items()
330
+ }
331
+ except ccxt.NotSupported:
332
+ raise octobot_trading.errors.NotSupported
333
+ except ccxt.BaseError as e:
334
+ raise octobot_trading.errors.FailedRequest(f"Failed to get_order_books {e}")
335
+
314
336
  @ccxt_client_util.converted_ccxt_common_errors
315
337
  async def get_recent_trades(self, symbol: str, limit: int = 50, **kwargs: dict) -> typing.Optional[list]:
316
338
  try:
@@ -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]] = []
@@ -502,6 +504,11 @@ class RestExchange(abstract_exchange.AbstractExchange):
502
504
  async def get_order_book(self, symbol: str, limit: int = 5, **kwargs: dict) -> typing.Optional[dict]:
503
505
  return await self.connector.get_order_book(symbol=symbol, limit=limit, **kwargs)
504
506
 
507
+ async def get_order_books(
508
+ self, symbols: typing.Optional[list[str]], limit: int = 5, **kwargs: dict
509
+ ) -> typing.Optional[dict]:
510
+ return await self.connector.get_order_books(symbols=symbols, limit=limit, **kwargs)
511
+
505
512
  async def get_recent_trades(self, symbol: str, limit: int = 50, **kwargs: dict) -> typing.Optional[list]:
506
513
  return await self.connector.get_recent_trades(symbol=symbol, limit=limit, **kwargs)
507
514
 
@@ -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()