OctoBot-Trading 2.4.77__tar.gz → 2.4.79__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (476) hide show
  1. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/CHANGELOG.md +10 -0
  2. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/OctoBot_Trading.egg-info/requires.txt +1 -1
  4. {OctoBot-Trading-2.4.77/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.79}/PKG-INFO +2 -2
  5. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/README.md +1 -1
  6. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/__init__.py +1 -1
  7. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +7 -3
  8. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +6 -3
  9. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +27 -7
  10. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +3 -2
  11. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/order.py +5 -2
  12. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +9 -2
  13. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/util/test_tools/exchanges_test_tools.py +2 -2
  14. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/requirements.txt +2 -1
  15. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/traders/test_trader.py +6 -3
  16. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +39 -8
  17. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/modes/script_keywords/basic_keywords/test_amount.py +23 -13
  18. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/test_portfolio.py +49 -23
  19. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_hollaex.py +1 -0
  20. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_htx.py +1 -1
  21. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/LICENSE +0 -0
  22. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/MANIFEST.in +0 -0
  23. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
  24. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  25. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  26. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  27. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/api/__init__.py +0 -0
  28. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/api/channels.py +0 -0
  29. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/api/contracts.py +0 -0
  30. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/api/exchange.py +0 -0
  31. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/api/modes.py +0 -0
  32. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/api/orders.py +0 -0
  33. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/api/portfolio.py +0 -0
  34. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/api/positions.py +0 -0
  35. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/api/profitability.py +0 -0
  36. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/api/storage.py +0 -0
  37. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/api/symbol_data.py +0 -0
  38. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/api/trader.py +0 -0
  39. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/api/trades.py +0 -0
  40. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/constants.py +0 -0
  41. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/enums.py +0 -0
  42. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/errors.py +0 -0
  43. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_channel.py +0 -0
  44. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/__init__.py +0 -0
  45. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  46. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  47. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  48. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  49. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  50. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  51. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  52. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  53. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  54. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  55. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  56. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  57. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  58. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  59. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  60. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  61. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  62. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  63. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  64. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  65. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  66. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  67. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  68. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  69. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  70. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  71. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  72. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  73. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  74. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  75. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  76. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  77. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  78. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  79. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  80. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  81. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  82. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  83. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  84. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  85. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  86. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  87. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  88. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  89. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  90. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  91. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  92. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  93. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  94. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  95. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  96. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/__init__.py +0 -0
  97. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  98. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  99. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  100. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  101. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/config/__init__.py +0 -0
  102. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  103. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  104. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  105. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  106. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
  107. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  108. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  109. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  110. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  111. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  112. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  113. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  114. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  115. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/exchange_builder.py +0 -0
  116. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/exchange_channels.py +0 -0
  117. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/exchange_details.py +0 -0
  118. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/exchange_factory.py +0 -0
  119. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/exchange_manager.py +0 -0
  120. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  121. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/exchanges.py +0 -0
  122. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  123. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  124. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  125. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  126. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/traders/__init__.py +0 -0
  127. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/traders/trader.py +0 -0
  128. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  129. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/types/__init__.py +0 -0
  130. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
  131. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  132. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/util/__init__.py +0 -0
  133. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  134. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  135. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  136. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  137. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/__init__.py +0 -0
  138. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/abstract_trading_mode.py +0 -0
  139. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/channel/__init__.py +0 -0
  140. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  141. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  142. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/channel/mode.py +0 -0
  143. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/mode_activity.py +0 -0
  144. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/mode_config.py +0 -0
  145. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/modes_factory.py +0 -0
  146. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/modes_util.py +0 -0
  147. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  148. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  149. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  150. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  151. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  152. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  153. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  154. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  155. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  156. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  157. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  158. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  159. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  160. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  161. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/octobot_channel_consumer.py +0 -0
  162. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/__init__.py +0 -0
  163. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  164. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/__init__.py +0 -0
  165. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  166. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  167. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  168. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  169. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  170. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  171. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  172. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  173. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  174. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  175. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  176. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/order_group.py +0 -0
  177. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/order_state.py +0 -0
  178. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/order_util.py +0 -0
  179. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  180. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  181. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  182. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  183. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  184. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  185. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  186. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  187. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  188. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  189. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  190. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  191. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  192. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  193. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  194. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  195. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  196. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  197. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  198. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  199. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  200. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  201. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  202. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  203. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  204. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  205. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  206. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  207. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  208. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  209. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  210. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  211. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  212. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  213. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  214. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  215. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  216. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  217. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  218. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  219. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  220. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  221. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  222. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  223. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  224. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  225. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  226. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  227. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  228. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  229. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  230. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  231. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  232. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/__init__.py +0 -0
  233. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  234. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  235. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  236. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  237. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/position.py +0 -0
  238. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  239. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/position_state.py +0 -0
  240. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/position_util.py +0 -0
  241. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  242. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  243. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  244. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  245. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  246. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  247. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  248. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  249. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  250. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/state.py +0 -0
  251. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/trades/__init__.py +0 -0
  252. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  253. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  254. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  255. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/trades/trade.py +0 -0
  256. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  257. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  258. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  259. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  260. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  261. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  262. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  263. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  264. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  265. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  266. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  267. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  268. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  269. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/signals/__init__.py +0 -0
  270. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/signals/channel/__init__.py +0 -0
  271. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  272. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  273. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/signals/channel/signal_producer.py +0 -0
  274. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/signals/signal_creation.py +0 -0
  275. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  276. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/signals/util.py +0 -0
  277. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/storage/__init__.py +0 -0
  278. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/storage/abstract_storage.py +0 -0
  279. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/storage/candles_storage.py +0 -0
  280. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/storage/orders_storage.py +0 -0
  281. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/storage/portfolio_storage.py +0 -0
  282. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/storage/storage_manager.py +0 -0
  283. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/storage/trades_storage.py +0 -0
  284. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/storage/transactions_storage.py +0 -0
  285. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/storage/util.py +0 -0
  286. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/supervisors/__init__.py +0 -0
  287. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  288. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  289. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/util/__init__.py +0 -0
  290. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/util/config_util.py +0 -0
  291. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/util/initializable.py +0 -0
  292. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/util/initialization_util.py +0 -0
  293. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/util/simulator_updater_utils.py +0 -0
  294. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/util/test_tools/__init__.py +0 -0
  295. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  296. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  297. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  298. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/setup.cfg +0 -0
  299. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/setup.py +0 -0
  300. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/api/__init__.py +0 -0
  301. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/api/test_channels.py +0 -0
  302. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/api/test_exchange.py +0 -0
  303. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/api/test_modes.py +0 -0
  304. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/api/test_orders.py +0 -0
  305. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/api/test_portfolio.py +0 -0
  306. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/api/test_profitability.py +0 -0
  307. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/api/test_symbol_data.py +0 -0
  308. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/api/test_trader.py +0 -0
  309. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/api/test_trades.py +0 -0
  310. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/cli/__init__.py +0 -0
  311. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/__init__.py +0 -0
  312. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/contracts/__init__.py +0 -0
  313. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  314. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  315. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/funding/__init__.py +0 -0
  316. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  317. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/kline/__init__.py +0 -0
  318. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  319. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/ohlcv/__init__.py +0 -0
  320. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  321. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  322. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/order_book/__init__.py +0 -0
  323. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  324. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/prices/__init__.py +0 -0
  325. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  326. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  327. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/recent_trades/__init__.py +0 -0
  328. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  329. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  330. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/ticker/__init__.py +0 -0
  331. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  332. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/__init__.py +0 -0
  333. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/connectors/__init__.py +0 -0
  334. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  335. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  336. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  337. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/implementations/__init__.py +0 -0
  338. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  339. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  340. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/test_abstract_exchange.py +0 -0
  341. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  342. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/test_exchange_builder.py +0 -0
  343. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/test_exchange_config_data.py +0 -0
  344. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/test_exchange_factory.py +0 -0
  345. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/test_exchange_manager.py +0 -0
  346. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/test_exchange_simulator.py +0 -0
  347. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/test_exchanges.py +0 -0
  348. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/traders/__init__.py +0 -0
  349. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/types/__init__.py +0 -0
  350. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  351. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/util/__init__.py +0 -0
  352. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  353. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/exchanges/util/test_exchange_util.py +0 -0
  354. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/modes/__init__.py +0 -0
  355. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/modes/script_keywords/__init__.py +0 -0
  356. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  357. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  358. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  359. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  360. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  361. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/modes/test_abstract_mode_consumer.py +0 -0
  362. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/modes/test_abstract_trading_mode.py +0 -0
  363. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/modes/test_modes_util.py +0 -0
  364. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/__init__.py +0 -0
  365. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/__init__.py +0 -0
  366. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/groups/__init__.py +0 -0
  367. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  368. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  369. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  370. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/states/__init__.py +0 -0
  371. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  372. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  373. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  374. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  375. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/states/test_order_state.py +0 -0
  376. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  377. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  378. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  379. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  380. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  381. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/test_order.py +0 -0
  382. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/test_order_adapter.py +0 -0
  383. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/test_order_factory.py +0 -0
  384. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/test_order_util.py +0 -0
  385. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/test_orders_manager.py +0 -0
  386. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  387. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/types/__init__.py +0 -0
  388. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  389. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  390. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  391. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  392. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  393. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  394. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  395. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  396. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/types/market/__init__.py +0 -0
  397. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  398. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  399. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  400. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  401. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  402. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  403. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/__init__.py +0 -0
  404. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  405. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  406. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  407. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  408. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/history/__init__.py +0 -0
  409. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  410. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  411. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/test_asset.py +0 -0
  412. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  413. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  414. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  415. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  416. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/types/__init__.py +0 -0
  417. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  418. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  419. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  420. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/positions/__init__.py +0 -0
  421. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/positions/channel/__init__.py +0 -0
  422. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/positions/states/__init__.py +0 -0
  423. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/positions/test_position.py +0 -0
  424. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/positions/test_position_factory.py +0 -0
  425. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/positions/test_positions_manager.py +0 -0
  426. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/positions/types/__init__.py +0 -0
  427. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  428. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  429. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/trades/__init__.py +0 -0
  430. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/trades/test_trade_factory.py +0 -0
  431. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/trades/test_trade_manager.py +0 -0
  432. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  433. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/trades/test_trade_util.py +0 -0
  434. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/transactions/__init__.py +0 -0
  435. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  436. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  437. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/signals/__init__.py +0 -0
  438. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  439. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/signals/test_util.py +0 -0
  440. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/test_utils/__init__.py +0 -0
  441. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/test_utils/order_util.py +0 -0
  442. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/test_utils/random_numbers.py +0 -0
  443. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/util/__init__.py +0 -0
  444. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests/util/test_config_util.py +0 -0
  445. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/__init__.py +0 -0
  446. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/__init__.py +0 -0
  447. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
  448. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  449. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  450. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_binance.py +0 -0
  451. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  452. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_bingx.py +0 -0
  453. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  454. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_bitget.py +0 -0
  455. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  456. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_bitso.py +0 -0
  457. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  458. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_bybit.py +0 -0
  459. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  460. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  461. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_coinex.py +0 -0
  462. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  463. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_gateio.py +0 -0
  464. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  465. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_kraken.py +0 -0
  466. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  467. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  468. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_mexc.py +0 -0
  469. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_ndax.py +0 -0
  470. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  471. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_okx.py +0 -0
  472. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  473. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_phemex.py +0 -0
  474. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  475. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_upbit.py +0 -0
  476. {OctoBot-Trading-2.4.77 → OctoBot-Trading-2.4.79}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [2.4.79] - 2024-04-24
8
+ ### Updated
9
+ - [Keywords] add ignored orders to amount keyword
10
+
11
+ ## [2.4.78] - 2024-04-15
12
+ ### Added
13
+ - [Exchanges] key adapter
14
+ ### Updated
15
+ - CCXT to 4.2.95
16
+
7
17
  ## [2.4.77] - 2024-04-13
8
18
  ### Added
9
19
  - [Exchanges] Handle inactive markets
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.77
3
+ Version: 2.4.79
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.77](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.79](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
20
20
  [![Codacy Badge](https://api.codacy.com/project/badge/Grade/903b6b22bceb4661b608a86fea655f69)](https://app.codacy.com/gh/Drakkar-Software/OctoBot-Trading?utm_source=github.com&utm_medium=referral&utm_content=Drakkar-Software/OctoBot-Trading&utm_campaign=Badge_Grade_Dashboard)
21
21
  [![PyPI](https://img.shields.io/pypi/v/OctoBot-Trading.svg)](https://pypi.python.org/pypi/OctoBot-Trading/)
22
22
  [![Coverage Status](https://coveralls.io/repos/github/Drakkar-Software/OctoBot-Trading/badge.svg?branch=master)](https://coveralls.io/github/Drakkar-Software/OctoBot-Trading?branch=master)
@@ -4,7 +4,7 @@ Async-Channel<2.3,>=2.2
4
4
  OctoBot-Commons<1.10,>=1.9.43
5
5
  OctoBot-Tentacles-Manager<2.10,>=2.9
6
6
  trading-backend>=1.2.7
7
- ccxt==4.2.77
7
+ ccxt==4.2.95
8
8
  cryptography
9
9
  sortedcontainers==2.4.0
10
10
  tinydb==4.5.2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.77
3
+ Version: 2.4.79
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.77](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.79](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.77](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.79](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.77" # major.minor.revision
18
+ VERSION = "2.4.79" # major.minor.revision
@@ -27,9 +27,11 @@ import octobot_trading.exchanges.connectors.ccxt.ccxt_clients_cache as ccxt_clie
27
27
  import octobot_trading.exchanges.util.exchange_util as exchange_util
28
28
 
29
29
 
30
- def create_client(exchange_class, exchange_manager, logger,
31
- options, headers, additional_config,
32
- should_authenticate, unauthenticated_exchange_fallback=None):
30
+ def create_client(
31
+ exchange_class, exchange_manager, logger, options, headers,
32
+ additional_config, should_authenticate, unauthenticated_exchange_fallback=None,
33
+ keys_adapter=None
34
+ ):
33
35
  """
34
36
  Exchange instance creation
35
37
  :return: the created ccxt (pro, async or sync) client
@@ -43,6 +45,8 @@ def create_client(exchange_class, exchange_manager, logger,
43
45
  if exchange_manager.ignore_config or exchange_manager.check_config(exchange_manager.exchange_name):
44
46
  try:
45
47
  key, secret, password = exchange_manager.get_exchange_credentials(exchange_manager.exchange_name)
48
+ if keys_adapter:
49
+ key, secret, password = keys_adapter(key, secret, password)
46
50
  if not (key and secret) and not exchange_manager.is_simulated and not exchange_manager.ignore_config:
47
51
  logger.warning(f"No exchange API key set for {exchange_manager.exchange_name}. "
48
52
  f"Enter your account details to enable real trading on this exchange.")
@@ -204,11 +204,12 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
204
204
  def _create_client(self, force_unauth=False):
205
205
  self.client, self.is_authenticated = self._client_factory(force_unauth)
206
206
 
207
- def _client_factory(self, force_unauth) -> tuple:
207
+ def _client_factory(self, force_unauth, keys_adapter=None) -> tuple:
208
208
  return ccxt_client_util.create_client(
209
209
  self.exchange_type, self.exchange_manager, self.logger,
210
210
  self.options, self.headers, self.additional_config,
211
- False if force_unauth else self._should_authenticate(), self.unauthenticated_exchange_fallback
211
+ False if force_unauth else self._should_authenticate(), self.unauthenticated_exchange_fallback,
212
+ keys_adapter=keys_adapter
212
213
  )
213
214
 
214
215
  def _should_authenticate(self):
@@ -218,7 +219,9 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
218
219
  )
219
220
 
220
221
  def unauthenticated_exchange_fallback(self, err):
221
- self.handle_token_error(err)
222
+ if not self.exchange_manager.exchange_only:
223
+ # don't log error when auth is probably not necessary
224
+ self.handle_token_error(err)
222
225
  return ccxt_client_util.get_unauthenticated_exchange(
223
226
  self.exchange_type,
224
227
  self.options, self.headers, self.additional_config
@@ -49,8 +49,10 @@ async def total_account_balance(context, side=trading_enums.PositionSide.BOTH.va
49
49
  f"the reference market. reference market: {reference_market}, symbol: {context.symbol}")
50
50
 
51
51
 
52
- async def available_account_balance(context, side=trading_enums.TradeOrderSide.BUY.value, use_total_holding=False,
53
- is_stop_order=False, reduce_only=True, target_price=None):
52
+ async def available_account_balance(
53
+ context, side=trading_enums.TradeOrderSide.BUY.value, use_total_holding=False,
54
+ is_stop_order=False, reduce_only=True, target_price=None, orders_to_be_ignored=None
55
+ ):
54
56
  portfolio_type = commons_constants.PORTFOLIO_TOTAL if use_total_holding else commons_constants.PORTFOLIO_AVAILABLE
55
57
  current_symbol_holding, _, market_quantity, price, _ = \
56
58
  await trading_personal_data.get_pre_order_data(context.exchange_manager,
@@ -67,6 +69,21 @@ async def available_account_balance(context, side=trading_enums.TradeOrderSide.B
67
69
  already_locked_amount = trading_constants.ZERO
68
70
  if use_total_holding and is_stop_order:
69
71
  already_locked_amount = _get_locked_amount_in_stop_orders(context, side)
72
+ if orders_to_be_ignored:
73
+ for order_to_be_ignored in orders_to_be_ignored:
74
+ if order_to_be_ignored.side == trading_enums.TradeOrderSide.BUY:
75
+ market_quantity += order_to_be_ignored.origin_quantity
76
+ else:
77
+ current_symbol_holding += order_to_be_ignored.origin_quantity
78
+ total_symbol_holding, _, total_market_quantity, _, _ = \
79
+ await trading_personal_data.get_pre_order_data(context.exchange_manager,
80
+ symbol=context.symbol,
81
+ timeout=trading_constants.ORDER_DATA_FETCHING_TIMEOUT,
82
+ portfolio_type=commons_constants.PORTFOLIO_TOTAL,
83
+ target_price=target_price)
84
+ # ensure not using more than total amounts
85
+ current_symbol_holding = min(current_symbol_holding, total_symbol_holding)
86
+ market_quantity = min(market_quantity, total_market_quantity)
70
87
  return (market_quantity if side == trading_enums.TradeOrderSide.BUY.value else current_symbol_holding) \
71
88
  - already_locked_amount
72
89
 
@@ -80,11 +97,14 @@ def _get_locked_amount_in_stop_orders(context, side):
80
97
  return locked_amount
81
98
 
82
99
 
83
- async def adapt_amount_to_holdings(context, amount, side, use_total_holding, reduce_only,
84
- is_stop_order, target_price=None):
85
- available_acc_bal = await available_account_balance(context, side, use_total_holding=use_total_holding,
86
- is_stop_order=is_stop_order, reduce_only=reduce_only,
87
- target_price=target_price)
100
+ async def adapt_amount_to_holdings(
101
+ context, amount, side, use_total_holding, reduce_only,
102
+ is_stop_order, target_price=None, orders_to_be_ignored=None
103
+ ):
104
+ available_acc_bal = await available_account_balance(
105
+ context, side, use_total_holding=use_total_holding, is_stop_order=is_stop_order,
106
+ reduce_only=reduce_only, target_price=target_price, orders_to_be_ignored=orders_to_be_ignored
107
+ )
88
108
  if available_acc_bal > amount:
89
109
  return amount
90
110
  else:
@@ -13,7 +13,6 @@
13
13
  #
14
14
  # You should have received a copy of the GNU Lesser General Public
15
15
  # License along with this library.
16
-
17
16
  import octobot_commons.symbols as commons_symbols
18
17
  import octobot_trading.modes.script_keywords.dsl as dsl
19
18
  import octobot_trading.modes.script_keywords.basic_keywords.account_balance as account_balance
@@ -32,6 +31,7 @@ async def get_amount_from_input_amount(
32
31
  use_total_holding=False,
33
32
  target_price=None,
34
33
  allow_holdings_adaptation=True,
34
+ orders_to_be_ignored=None,
35
35
  ):
36
36
  amount_type, amount_value = dsl.parse_quantity(input_amount)
37
37
 
@@ -81,7 +81,8 @@ async def get_amount_from_input_amount(
81
81
  else:
82
82
  raise trading_errors.InvalidArgumentError(f"Unsupported input: {input_amount} make sure to use a supported syntax for amount")
83
83
  adapted_amount = await account_balance.adapt_amount_to_holdings(
84
- context, amount_value, side, use_total_holding, reduce_only, is_stop_order, target_price=target_price
84
+ context, amount_value, side, use_total_holding, reduce_only, is_stop_order,
85
+ target_price=target_price, orders_to_be_ignored=orders_to_be_ignored
85
86
  )
86
87
  if adapted_amount < amount_value and not allow_holdings_adaptation:
87
88
  raise trading_errors.MissingFunds(
@@ -546,16 +546,19 @@ class Order(util.Initializable):
546
546
  is_from_exchange = False
547
547
  price = self.origin_price if use_origin_quantity_and_price else self.filled_price
548
548
  quantity = self.origin_quantity if use_origin_quantity_and_price else self.filled_quantity
549
+ # consider worse case taker fees when using use_origin_quantity_and_price as the order is not filled yet
550
+ taker_or_maker = enums.ExchangeConstantsOrderColumns.TAKER.value \
551
+ if use_origin_quantity_and_price else self.taker_or_maker
549
552
  if self.fees_currency_side is enums.FeesCurrencySide.UNDEFINED:
550
553
  computed_fee = self.exchange_manager.exchange.get_trade_fee(
551
- self.symbol, self.order_type, quantity, price, self.taker_or_maker
554
+ self.symbol, self.order_type, quantity, price, taker_or_maker
552
555
  )
553
556
  value = computed_fee[enums.FeePropertyColumns.COST.value]
554
557
  currency = computed_fee[enums.FeePropertyColumns.CURRENCY.value]
555
558
  is_from_exchange = computed_fee[enums.FeePropertyColumns.IS_FROM_EXCHANGE.value]
556
559
  else:
557
560
  symbol_fees = self.exchange_manager.exchange.get_fees(self.symbol)
558
- fees = decimal.Decimal(f"{symbol_fees[self.taker_or_maker]}")
561
+ fees = decimal.Decimal(f"{symbol_fees[taker_or_maker]}")
559
562
  if self.fees_currency_side is enums.FeesCurrencySide.CURRENCY:
560
563
  value = quantity / price * fees
561
564
  currency = self.currency
@@ -31,6 +31,9 @@ class SpotPortfolio(portfolio_class.Portfolio):
31
31
  """
32
32
  base_fees = order.get_total_fees(order.currency)
33
33
  quote_fees = order.get_total_fees(order.market)
34
+ forecasted_fees = order.get_computed_fee(use_origin_quantity_and_price=True)
35
+ forecasted_base_fees = order_util.get_fees_for_currency(forecasted_fees, order.currency)
36
+ forecasted_quote_fees = order_util.get_fees_for_currency(forecasted_fees, order.market)
34
37
 
35
38
  # update base
36
39
  if order.side == enums.TradeOrderSide.BUY:
@@ -38,12 +41,16 @@ class SpotPortfolio(portfolio_class.Portfolio):
38
41
  self._update_portfolio_data(order.currency, total_value=new_quantity, available_value=new_quantity)
39
42
  else:
40
43
  new_quantity = -order.filled_quantity - base_fees
41
- self._update_portfolio_data(order.currency, total_value=new_quantity)
44
+ # Align available amount using really paid fees. Does nothing if forecasted fees == real fees
45
+ available_update = forecasted_base_fees - base_fees
46
+ self._update_portfolio_data(order.currency, total_value=new_quantity, available_value=available_update)
42
47
 
43
48
  # update quote
44
49
  if order.side == enums.TradeOrderSide.BUY:
45
50
  new_quantity = -(order.filled_quantity * order.filled_price) - quote_fees
46
- self._update_portfolio_data(order.market, total_value=new_quantity)
51
+ # Align available amount using really paid fees. Does nothing if forecasted fees == real fees
52
+ available_update = forecasted_quote_fees - quote_fees
53
+ self._update_portfolio_data(order.market, total_value=new_quantity, available_value=available_update)
47
54
  else:
48
55
  new_quantity = (order.filled_quantity * order.filled_price) - quote_fees
49
56
  self._update_portfolio_data(order.market, total_value=new_quantity, available_value=new_quantity)
@@ -124,13 +124,13 @@ async def ensure_symbol_markets(
124
124
  await exchange_manager.exchange.connector.load_symbol_markets(reload=reload, market_filter=market_filter)
125
125
 
126
126
 
127
- async def get_portfolio(exchange_manager, as_float=False) -> dict:
127
+ async def get_portfolio(exchange_manager, as_float=False, clear_empty=True) -> dict:
128
128
  balance = await exchange_manager.exchange.get_balance()
129
129
  # filter out 0 values
130
130
  return {
131
131
  asset: {key: float(val) if as_float else val for key, val in values.items()} # use float for values
132
132
  for asset, values in balance.items()
133
- if any(value for value in values.values())
133
+ if not clear_empty or (clear_empty and any(value for value in values.values()))
134
134
  }
135
135
 
136
136
 
@@ -8,7 +8,8 @@ OctoBot-Tentacles-Manager>=2.9, <2.10
8
8
  trading-backend>=1.2.7
9
9
 
10
10
  # Exchange connection requirements
11
- ccxt==4.2.77 # always ensure real exchanges tests (in tests_additional and authenticated exchange tests) are passing before changing the ccxt version
11
+ # issue from 96, need ccxt==4.2.99
12
+ ccxt==4.2.95 # always ensure real exchanges tests (in tests_additional and authenticated exchange tests) are passing before changing the ccxt version
12
13
 
13
14
  cryptography # Never specify a version (managed by https://github.com/Drakkar-Software/OctoBot-PyPi-Linux-Deployer)
14
15
 
@@ -567,8 +567,9 @@ class TestTrader:
567
567
  with patch.object(ccxt.async_support.binanceus, "calculate_fee",
568
568
  Mock(return_value=get_fees_mock("SOL"))) as calculate_fee_mock:
569
569
  await limit_buy.on_fill(force_fill=True)
570
- # ensure call ccxt calculate_fee for order fees
571
- calculate_fee_mock.assert_called_once()
570
+ # called twice: once for filled order fee calculation, once for forecasted fees calculation used to restore
571
+ # available amounts if relevant
572
+ assert calculate_fee_mock.call_count == 2
572
573
 
573
574
  # added filled orders as filled trades
574
575
  assert len(trades_manager.trades) == 1
@@ -611,7 +612,9 @@ class TestTrader:
611
612
  with patch.object(ccxt.async_support.binanceus, "calculate_fee", Mock(return_value=get_fees_mock("SOL"))) \
612
613
  as calculate_fee_mock:
613
614
  await limit_buy.on_fill(force_fill=True)
614
- calculate_fee_mock.assert_called_once()
615
+ # called twice: once for filled order fee calculation, once for forecasted fees calculation used to restore
616
+ # available amounts if relevant
617
+ assert calculate_fee_mock.call_count == 2
615
618
 
616
619
  assert limit_buy not in orders_manager.get_open_orders()
617
620
 
@@ -47,8 +47,17 @@ async def test_total_account_balance(mock_context):
47
47
  async def test_available_account_balance(mock_context):
48
48
  current_symbol_holding = decimal.Decimal("100")
49
49
  market_quantity = decimal.Decimal("50")
50
- ret_val = (current_symbol_holding, "current_market_holding", market_quantity, "current_price", "symbol_market")
51
- with mock.patch.object(trading_personal_data, "get_pre_order_data", mock.AsyncMock(return_value=ret_val)) \
50
+
51
+ async def _get_pre_order_data(
52
+ exchange_manager, symbol: str, timeout: int = None,
53
+ portfolio_type=commons_constants.PORTFOLIO_AVAILABLE,
54
+ target_price=None
55
+ ):
56
+ if portfolio_type == commons_constants.PORTFOLIO_AVAILABLE:
57
+ return current_symbol_holding, "current_market_holding", market_quantity, "current_price", "symbol_market"
58
+ return current_symbol_holding*2, "current_market_holding", market_quantity*2, "current_price", "symbol_market"
59
+
60
+ with mock.patch.object(trading_personal_data, "get_pre_order_data", mock.AsyncMock(side_effect=_get_pre_order_data)) \
52
61
  as get_pre_order_data_mock, \
53
62
  mock.patch.object(account_balance, "_get_locked_amount_in_stop_orders",
54
63
  mock.Mock(return_value=trading_constants.ONE)) as _get_locked_amount_in_stop_orders_mock:
@@ -62,7 +71,7 @@ async def test_available_account_balance(mock_context):
62
71
  target_price=trading_constants.ZERO)
63
72
  get_pre_order_data_mock.reset_mock()
64
73
  _get_locked_amount_in_stop_orders_mock.assert_not_called()
65
- assert current_symbol_holding == await script_keywords.available_account_balance(
74
+ assert current_symbol_holding * 2 == await script_keywords.available_account_balance(
66
75
  mock_context, side=trading_enums.TradeOrderSide.SELL.value, use_total_holding=True)
67
76
  get_pre_order_data_mock.assert_called_once_with(mock_context.exchange_manager, symbol=mock_context.symbol,
68
77
  timeout=trading_constants.ORDER_DATA_FETCHING_TIMEOUT,
@@ -70,7 +79,7 @@ async def test_available_account_balance(mock_context):
70
79
  target_price=None)
71
80
  get_pre_order_data_mock.reset_mock()
72
81
  _get_locked_amount_in_stop_orders_mock.assert_not_called()
73
- assert current_symbol_holding - trading_constants.ONE == await script_keywords.available_account_balance(
82
+ assert current_symbol_holding * 2 - trading_constants.ONE == await script_keywords.available_account_balance(
74
83
  mock_context, side=trading_enums.TradeOrderSide.SELL.value, use_total_holding=True, is_stop_order=True)
75
84
  get_pre_order_data_mock.assert_called_once_with(mock_context.exchange_manager, symbol=mock_context.symbol,
76
85
  timeout=trading_constants.ORDER_DATA_FETCHING_TIMEOUT,
@@ -80,7 +89,7 @@ async def test_available_account_balance(mock_context):
80
89
  trading_enums.TradeOrderSide.SELL.value)
81
90
  get_pre_order_data_mock.reset_mock()
82
91
  _get_locked_amount_in_stop_orders_mock.reset_mock()
83
- assert market_quantity - trading_constants.ONE == await script_keywords.available_account_balance(
92
+ assert market_quantity * 2 - trading_constants.ONE == await script_keywords.available_account_balance(
84
93
  mock_context, side=trading_enums.TradeOrderSide.BUY.value, use_total_holding=True, is_stop_order=True)
85
94
  get_pre_order_data_mock.assert_called_once_with(mock_context.exchange_manager, symbol=mock_context.symbol,
86
95
  timeout=trading_constants.ORDER_DATA_FETCHING_TIMEOUT,
@@ -91,6 +100,25 @@ async def test_available_account_balance(mock_context):
91
100
  get_pre_order_data_mock.reset_mock()
92
101
  _get_locked_amount_in_stop_orders_mock.reset_mock()
93
102
 
103
+ buy_1 = trading_personal_data.BuyLimitOrder(mock_context.trader)
104
+ buy_1.origin_quantity = decimal.Decimal("10")
105
+ buy_1.origin_price = decimal.Decimal("100")
106
+ buy_2 = trading_personal_data.BuyLimitOrder(mock_context.trader)
107
+ buy_2.origin_quantity = decimal.Decimal("3")
108
+ buy_2.origin_price = decimal.Decimal("40")
109
+ sell_1 = trading_personal_data.SellLimitOrder(mock_context.trader)
110
+ sell_1.origin_quantity = decimal.Decimal("2.21")
111
+ sell_1.origin_price = decimal.Decimal("200")
112
+ assert market_quantity + buy_1.origin_quantity + buy_2.origin_quantity == \
113
+ await script_keywords.available_account_balance(
114
+ mock_context, side=trading_enums.TradeOrderSide.BUY.value, use_total_holding=False, is_stop_order=False,
115
+ orders_to_be_ignored=[buy_1, buy_2, sell_1]
116
+ )
117
+ assert get_pre_order_data_mock.call_count == 2
118
+ _get_locked_amount_in_stop_orders_mock.assert_not_called()
119
+ get_pre_order_data_mock.reset_mock()
120
+ _get_locked_amount_in_stop_orders_mock.reset_mock()
121
+
94
122
 
95
123
  async def test_adapt_amount_to_holdings(null_context):
96
124
  with mock.patch.object(account_balance, "available_account_balance",
@@ -106,18 +134,21 @@ async def test_adapt_amount_to_holdings(null_context):
106
134
  available_account_balance_mock.assert_called_once_with(null_context, trading_enums.TradeOrderSide.SELL,
107
135
  use_total_holding=False, is_stop_order="is_stop_order",
108
136
  reduce_only="reduce_only",
109
- target_price=trading_constants.ONE_HUNDRED)
137
+ target_price=trading_constants.ONE_HUNDRED,
138
+ orders_to_be_ignored=None)
110
139
  available_account_balance_mock.reset_mock()
111
140
  assert await script_keywords.adapt_amount_to_holdings(null_context,
112
141
  decimal.Decimal(1),
113
142
  trading_enums.TradeOrderSide.SELL,
114
143
  True,
115
144
  "reduce_only",
116
- "is_stop_order") == decimal.Decimal(1)
145
+ "is_stop_order",
146
+ orders_to_be_ignored=["plop"]) == decimal.Decimal(1)
117
147
  available_account_balance_mock.assert_called_once_with(null_context, trading_enums.TradeOrderSide.SELL,
118
148
  use_total_holding=True, is_stop_order="is_stop_order",
119
149
  reduce_only="reduce_only",
120
- target_price=None)
150
+ target_price=None,
151
+ orders_to_be_ignored=["plop"])
121
152
  assert await script_keywords.adapt_amount_to_holdings(null_context,
122
153
  decimal.Decimal(2),
123
154
  trading_enums.TradeOrderSide.SELL,
@@ -59,7 +59,8 @@ async def test_get_amount_from_input_amount(null_context):
59
59
  assert await script_keywords.get_amount_from_input_amount(null_context, "1", "buy") \
60
60
  == decimal.Decimal(1)
61
61
  adapt_amount_to_holdings_mock.assert_called_once_with(null_context, decimal.Decimal(2), "buy",
62
- False, True, False, target_price=None)
62
+ False, True, False, target_price=None,
63
+ orders_to_be_ignored=None)
63
64
  parse_quantity_mock.assert_called_once_with("1")
64
65
  parse_quantity_mock.reset_mock()
65
66
  adapt_amount_to_holdings_mock.reset_mock()
@@ -67,10 +68,11 @@ async def test_get_amount_from_input_amount(null_context):
67
68
  with pytest.raises(errors.MissingFunds):
68
69
  # raises as 1 != 2
69
70
  await script_keywords.get_amount_from_input_amount(
70
- null_context, "1", "buy", allow_holdings_adaptation=False
71
+ null_context, "1", "buy", allow_holdings_adaptation=False, orders_to_be_ignored=[]
71
72
  )
72
73
  adapt_amount_to_holdings_mock.assert_called_once_with(null_context, decimal.Decimal(2), "buy",
73
- False, True, False, target_price=None)
74
+ False, True, False, target_price=None,
75
+ orders_to_be_ignored=[])
74
76
  parse_quantity_mock.assert_called_once_with("1")
75
77
  adapt_amount_to_holdings_mock.reset_mock()
76
78
 
@@ -80,10 +82,12 @@ async def test_get_amount_from_input_amount(null_context):
80
82
  for allow_holdings_adaptation in (True, False):
81
83
  # doesn't raise as 1 == 1
82
84
  assert await script_keywords.get_amount_from_input_amount(
83
- null_context, "1", "buy", allow_holdings_adaptation=allow_holdings_adaptation
85
+ null_context, "1", "buy", allow_holdings_adaptation=allow_holdings_adaptation,
86
+ orders_to_be_ignored=["plip"]
84
87
  ) == decimal.Decimal(1)
85
88
  adapt_amount_to_holdings_mock.assert_called_once_with(null_context, decimal.Decimal(1), "buy",
86
- False, True, False, target_price=None)
89
+ False, True, False, target_price=None,
90
+ orders_to_be_ignored=["plip"])
87
91
  parse_quantity_mock.assert_called_once_with("1")
88
92
  parse_quantity_mock.reset_mock()
89
93
  adapt_amount_to_holdings_mock.reset_mock()
@@ -97,7 +101,8 @@ async def test_get_amount_from_input_amount(null_context):
97
101
  null_context, "1", "buy", allow_holdings_adaptation=allow_holdings_adaptation
98
102
  ) == decimal.Decimal(1)
99
103
  adapt_amount_to_holdings_mock.assert_called_once_with(null_context, decimal.Decimal("0.5"), "buy",
100
- False, True, False, target_price=None)
104
+ False, True, False, target_price=None,
105
+ orders_to_be_ignored=None)
101
106
  parse_quantity_mock.assert_called_once_with("1")
102
107
  parse_quantity_mock.reset_mock()
103
108
  adapt_amount_to_holdings_mock.reset_mock()
@@ -117,7 +122,7 @@ async def test_get_amount_from_input_amount(null_context):
117
122
  # without target_price
118
123
  adapt_amount_to_holdings_mock.assert_called_once_with(
119
124
  null_context, decimal.Decimal(2) / decimal.Decimal(100), "buy",
120
- False, True, False, target_price=None
125
+ False, True, False, target_price=None, orders_to_be_ignored=None
121
126
  )
122
127
  parse_quantity_mock.assert_called_once_with("1")
123
128
  adapt_amount_to_holdings_mock.reset_mock()
@@ -130,7 +135,7 @@ async def test_get_amount_from_input_amount(null_context):
130
135
  get_up_to_date_price_mock.assert_not_called()
131
136
  adapt_amount_to_holdings_mock.assert_called_once_with(
132
137
  null_context, decimal.Decimal(2) / decimal.Decimal(23), "buy",
133
- False, True, False, target_price=decimal.Decimal(23)
138
+ False, True, False, target_price=decimal.Decimal(23), orders_to_be_ignored=None
134
139
  )
135
140
  parse_quantity_mock.assert_called_once_with("1")
136
141
  adapt_amount_to_holdings_mock.reset_mock()
@@ -142,7 +147,8 @@ async def test_get_amount_from_input_amount(null_context):
142
147
  null_context, "1", "buy", target_price=decimal.Decimal("0.5"), allow_holdings_adaptation=False
143
148
  )
144
149
  adapt_amount_to_holdings_mock.assert_called_once_with(
145
- null_context, decimal.Decimal(4), "buy", False, True, False, target_price=decimal.Decimal("0.5")
150
+ null_context, decimal.Decimal(4), "buy", False, True, False, target_price=decimal.Decimal("0.5"),
151
+ orders_to_be_ignored=None
146
152
  )
147
153
  parse_quantity_mock.assert_called_once_with("1")
148
154
  adapt_amount_to_holdings_mock.reset_mock()
@@ -158,7 +164,8 @@ async def test_get_amount_from_input_amount(null_context):
158
164
  is_stop_order=True,
159
165
  target_price=constants.ZERO) == decimal.Decimal(1)
160
166
  adapt_amount_to_holdings_mock.assert_called_once_with(null_context, decimal.Decimal("1.5"), "buy",
161
- True, False, True, target_price=constants.ZERO)
167
+ True, False, True, target_price=constants.ZERO,
168
+ orders_to_be_ignored=None)
162
169
  parse_quantity_mock.assert_called_once_with("50")
163
170
  available_account_balance_mock.assert_called_once_with(null_context, "buy",
164
171
  use_total_holding=True, reduce_only=False)
@@ -173,7 +180,8 @@ async def test_get_amount_from_input_amount(null_context):
173
180
  as available_account_balance_mock:
174
181
  assert await script_keywords.get_amount_from_input_amount(null_context, "50", "buy") == decimal.Decimal(1)
175
182
  adapt_amount_to_holdings_mock.assert_called_once_with(null_context, decimal.Decimal("1.5"), "buy",
176
- False, True, False, target_price=None)
183
+ False, True, False, target_price=None,
184
+ orders_to_be_ignored=None)
177
185
  parse_quantity_mock.assert_called_once_with("50")
178
186
  available_account_balance_mock.assert_called_once_with(null_context, "buy",
179
187
  use_total_holding=False, reduce_only=True)
@@ -196,7 +204,8 @@ async def test_get_amount_from_input_amount(null_context):
196
204
 
197
205
  assert await script_keywords.get_amount_from_input_amount(null_context, "50", "buy") == decimal.Decimal(1)
198
206
  adapt_amount_to_holdings_mock.assert_called_once_with(null_context, decimal.Decimal("1.5"), "buy",
199
- False, True, False, target_price=None)
207
+ False, True, False, target_price=None,
208
+ orders_to_be_ignored=None)
200
209
  parse_quantity_mock.assert_called_once_with("50")
201
210
  get_holdings_value_mock.assert_called_once_with(("BTC", "USDT"), "BTC")
202
211
  adapt_amount_to_holdings_mock.reset_mock()
@@ -229,7 +238,8 @@ async def test_get_amount_from_input_amount(null_context):
229
238
 
230
239
  assert await script_keywords.get_amount_from_input_amount(null_context, "50", "buy") == decimal.Decimal(1)
231
240
  adapt_amount_to_holdings_mock.assert_called_once_with(null_context, decimal.Decimal("7.5"), "buy",
232
- False, True, False, target_price=None)
241
+ False, True, False, target_price=None,
242
+ orders_to_be_ignored=None)
233
243
  parse_quantity_mock.assert_called_once_with("50")
234
244
  get_holdings_value_mock.assert_called_once_with({'BTC', 'ETH', 'SOL', 'USDT'}, "BTC")
235
245
  adapt_amount_to_holdings_mock.reset_mock()