OctoBot-Trading 2.4.60__tar.gz → 2.4.62__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 (475) hide show
  1. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/CHANGELOG.md +8 -0
  2. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/OctoBot_Trading.egg-info/SOURCES.txt +4 -0
  4. {OctoBot-Trading-2.4.60/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.62}/PKG-INFO +2 -2
  5. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/README.md +1 -1
  6. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/__init__.py +1 -1
  7. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/__init__.py +8 -0
  8. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +14 -0
  9. OctoBot-Trading-2.4.62/octobot_trading/modes/script_keywords/basic_keywords/position.py +58 -0
  10. OctoBot-Trading-2.4.62/octobot_trading/modes/script_keywords/basic_keywords/price.py +64 -0
  11. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/dsl/values.py +1 -0
  12. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/channel/orders.py +1 -1
  13. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/order.py +7 -2
  14. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/script_keywords/__init__.py +1 -0
  15. OctoBot-Trading-2.4.62/tests/modes/script_keywords/basic_keywords/test_position.py +53 -0
  16. OctoBot-Trading-2.4.62/tests/modes/script_keywords/basic_keywords/test_price.py +135 -0
  17. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/script_keywords/dsl/test_quantity.py +6 -0
  18. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/test_order.py +57 -0
  19. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/LICENSE +0 -0
  20. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/MANIFEST.in +0 -0
  21. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  22. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  23. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/OctoBot_Trading.egg-info/requires.txt +0 -0
  24. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  25. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/__init__.py +0 -0
  26. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/channels.py +0 -0
  27. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/contracts.py +0 -0
  28. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/exchange.py +0 -0
  29. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/modes.py +0 -0
  30. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/orders.py +0 -0
  31. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/portfolio.py +0 -0
  32. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/positions.py +0 -0
  33. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/profitability.py +0 -0
  34. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/storage.py +0 -0
  35. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/symbol_data.py +0 -0
  36. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/trader.py +0 -0
  37. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/trades.py +0 -0
  38. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/constants.py +0 -0
  39. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/enums.py +0 -0
  40. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/errors.py +0 -0
  41. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_channel.py +0 -0
  42. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/__init__.py +0 -0
  43. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  44. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  45. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  46. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  47. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  48. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  49. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  50. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  51. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  52. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  53. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  54. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  55. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  56. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  57. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  58. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  59. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  60. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  61. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  62. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  63. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  64. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  65. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  66. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  67. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  68. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  69. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  70. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  71. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  72. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  73. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  74. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  75. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  76. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  77. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  78. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  79. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  80. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  81. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  82. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  83. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  84. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  85. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  86. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  87. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  88. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  89. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  90. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  91. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  92. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  93. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  94. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/__init__.py +0 -0
  95. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  96. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  97. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  98. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  99. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/config/__init__.py +0 -0
  100. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  101. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  102. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  103. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  104. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
  105. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
  106. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  107. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +0 -0
  108. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  109. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  110. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  111. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  112. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  113. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  114. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  115. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/exchange_builder.py +0 -0
  116. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/exchange_channels.py +0 -0
  117. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/exchange_details.py +0 -0
  118. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/exchange_factory.py +0 -0
  119. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/exchange_manager.py +0 -0
  120. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  121. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/exchanges.py +0 -0
  122. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  123. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  124. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  125. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  126. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/traders/__init__.py +0 -0
  127. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/traders/trader.py +0 -0
  128. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  129. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/types/__init__.py +0 -0
  130. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
  131. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  132. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/util/__init__.py +0 -0
  133. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  134. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  135. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  136. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  137. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/__init__.py +0 -0
  138. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/abstract_trading_mode.py +0 -0
  139. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/channel/__init__.py +0 -0
  140. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  141. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  142. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/channel/mode.py +0 -0
  143. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/mode_config.py +0 -0
  144. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/modes_factory.py +0 -0
  145. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/modes_util.py +0 -0
  146. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  147. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  148. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  149. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  150. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  151. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  152. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  153. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  154. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  155. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  156. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  157. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/octobot_channel_consumer.py +0 -0
  158. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/__init__.py +0 -0
  159. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  160. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/__init__.py +0 -0
  161. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  162. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  163. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  164. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  165. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  166. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  167. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  168. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  169. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  170. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  171. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/order_group.py +0 -0
  172. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/order_state.py +0 -0
  173. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/order_util.py +0 -0
  174. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  175. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  176. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  177. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  178. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  179. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  180. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  181. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  182. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  183. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  184. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  185. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  186. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  187. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  188. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  189. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  190. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  191. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  192. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  193. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  194. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  195. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  196. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  197. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  198. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  199. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  200. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  201. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  202. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  203. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  204. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  205. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  206. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  207. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  208. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  209. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  210. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  211. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  212. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  213. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  214. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  215. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  216. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  217. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  218. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  219. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  220. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  221. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  222. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  223. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  224. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  225. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  226. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  227. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  228. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/__init__.py +0 -0
  229. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  230. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  231. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  232. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  233. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/position.py +0 -0
  234. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  235. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/position_state.py +0 -0
  236. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/position_util.py +0 -0
  237. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  238. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  239. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  240. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  241. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  242. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  243. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  244. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  245. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  246. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/state.py +0 -0
  247. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/__init__.py +0 -0
  248. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  249. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  250. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  251. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/trade.py +0 -0
  252. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  253. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  254. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  255. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  256. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  257. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  258. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  259. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  260. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  261. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  262. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  263. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  264. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  265. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/signals/__init__.py +0 -0
  266. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/signals/channel/__init__.py +0 -0
  267. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  268. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  269. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/signals/channel/signal_producer.py +0 -0
  270. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/signals/signal_creation.py +0 -0
  271. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  272. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/signals/util.py +0 -0
  273. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/__init__.py +0 -0
  274. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/abstract_storage.py +0 -0
  275. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/candles_storage.py +0 -0
  276. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/orders_storage.py +0 -0
  277. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/portfolio_storage.py +0 -0
  278. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/storage_manager.py +0 -0
  279. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/trades_storage.py +0 -0
  280. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/transactions_storage.py +0 -0
  281. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/util.py +0 -0
  282. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/supervisors/__init__.py +0 -0
  283. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  284. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  285. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/__init__.py +0 -0
  286. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/config_util.py +0 -0
  287. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/initializable.py +0 -0
  288. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/initialization_util.py +0 -0
  289. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/simulator_updater_utils.py +0 -0
  290. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/test_tools/__init__.py +0 -0
  291. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  292. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  293. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  294. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  295. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/requirements.txt +0 -0
  296. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/setup.cfg +0 -0
  297. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/setup.py +0 -0
  298. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/__init__.py +0 -0
  299. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_channels.py +0 -0
  300. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_exchange.py +0 -0
  301. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_modes.py +0 -0
  302. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_orders.py +0 -0
  303. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_portfolio.py +0 -0
  304. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_profitability.py +0 -0
  305. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_symbol_data.py +0 -0
  306. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_trader.py +0 -0
  307. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_trades.py +0 -0
  308. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/cli/__init__.py +0 -0
  309. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/__init__.py +0 -0
  310. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/contracts/__init__.py +0 -0
  311. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  312. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  313. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/funding/__init__.py +0 -0
  314. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  315. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/kline/__init__.py +0 -0
  316. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  317. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/ohlcv/__init__.py +0 -0
  318. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  319. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  320. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/order_book/__init__.py +0 -0
  321. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  322. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/prices/__init__.py +0 -0
  323. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  324. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  325. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/recent_trades/__init__.py +0 -0
  326. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  327. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  328. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/ticker/__init__.py +0 -0
  329. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  330. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/__init__.py +0 -0
  331. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/connectors/__init__.py +0 -0
  332. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  333. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  334. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  335. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/implementations/__init__.py +0 -0
  336. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  337. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  338. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/test_abstract_exchange.py +0 -0
  339. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  340. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/test_exchange_builder.py +0 -0
  341. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/test_exchange_config_data.py +0 -0
  342. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/test_exchange_factory.py +0 -0
  343. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/test_exchange_manager.py +0 -0
  344. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/test_exchange_simulator.py +0 -0
  345. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/test_exchanges.py +0 -0
  346. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/traders/__init__.py +0 -0
  347. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/traders/test_trader.py +0 -0
  348. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/types/__init__.py +0 -0
  349. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  350. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/util/__init__.py +0 -0
  351. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  352. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/util/test_exchange_util.py +0 -0
  353. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/__init__.py +0 -0
  354. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  355. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  356. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  357. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  358. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/test_abstract_mode_consumer.py +0 -0
  359. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/test_abstract_trading_mode.py +0 -0
  360. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/test_modes_util.py +0 -0
  361. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/__init__.py +0 -0
  362. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/__init__.py +0 -0
  363. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/groups/__init__.py +0 -0
  364. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  365. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  366. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  367. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/__init__.py +0 -0
  368. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  369. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  370. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  371. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  372. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/test_order_state.py +0 -0
  373. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  374. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  375. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  376. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  377. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  378. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/test_order_adapter.py +0 -0
  379. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/test_order_factory.py +0 -0
  380. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/test_order_util.py +0 -0
  381. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/test_orders_manager.py +0 -0
  382. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  383. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/__init__.py +0 -0
  384. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  385. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  386. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  387. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  388. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  389. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  390. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  391. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  392. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/market/__init__.py +0 -0
  393. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  394. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  395. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  396. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  397. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  398. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  399. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/__init__.py +0 -0
  400. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  401. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  402. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  403. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  404. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/history/__init__.py +0 -0
  405. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  406. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  407. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/test_asset.py +0 -0
  408. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  409. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  410. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  411. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  412. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  413. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/types/__init__.py +0 -0
  414. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  415. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  416. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  417. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/__init__.py +0 -0
  418. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/channel/__init__.py +0 -0
  419. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/states/__init__.py +0 -0
  420. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/test_position.py +0 -0
  421. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/test_position_factory.py +0 -0
  422. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/test_positions_manager.py +0 -0
  423. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/types/__init__.py +0 -0
  424. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  425. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  426. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/trades/__init__.py +0 -0
  427. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/trades/test_trade_factory.py +0 -0
  428. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/trades/test_trade_manager.py +0 -0
  429. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  430. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/trades/test_trade_util.py +0 -0
  431. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/transactions/__init__.py +0 -0
  432. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  433. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  434. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/signals/__init__.py +0 -0
  435. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  436. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/signals/test_util.py +0 -0
  437. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/test_utils/__init__.py +0 -0
  438. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/test_utils/order_util.py +0 -0
  439. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/test_utils/random_numbers.py +0 -0
  440. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/util/__init__.py +0 -0
  441. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/util/test_config_util.py +0 -0
  442. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/__init__.py +0 -0
  443. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/__init__.py +0 -0
  444. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
  445. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  446. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  447. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_binance.py +0 -0
  448. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  449. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_bingx.py +0 -0
  450. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  451. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_bitget.py +0 -0
  452. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  453. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_bitso.py +0 -0
  454. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  455. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_bybit.py +0 -0
  456. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  457. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  458. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_coinex.py +0 -0
  459. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  460. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_gateio.py +0 -0
  461. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  462. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  463. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_htx.py +0 -0
  464. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_kraken.py +0 -0
  465. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  466. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  467. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_mexc.py +0 -0
  468. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_ndax.py +0 -0
  469. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  470. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_okx.py +0 -0
  471. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  472. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_phemex.py +0 -0
  473. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  474. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_upbit.py +0 -0
  475. {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [2.4.62] - 2024-03-15
8
+ ### Added
9
+ - [ScriptingKeywords] price offsets
10
+
11
+ ## [2.4.61] - 2024-03-12
12
+ ### Fixed
13
+ - [Orders] chained orders quantity after fees decimals
14
+
7
15
  ## [2.4.60] - 2024-03-12
8
16
  ### Updated
9
17
  - [TradingModes] add exchange order ids to cancel_symbol_open_orders
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.60
3
+ Version: 2.4.62
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.60](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.62](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)
@@ -139,6 +139,8 @@ octobot_trading/modes/script_keywords/basic_keywords/__init__.py
139
139
  octobot_trading/modes/script_keywords/basic_keywords/account_balance.py
140
140
  octobot_trading/modes/script_keywords/basic_keywords/amount.py
141
141
  octobot_trading/modes/script_keywords/basic_keywords/configuration.py
142
+ octobot_trading/modes/script_keywords/basic_keywords/position.py
143
+ octobot_trading/modes/script_keywords/basic_keywords/price.py
142
144
  octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py
143
145
  octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py
144
146
  octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py
@@ -349,6 +351,8 @@ tests/modes/script_keywords/__init__.py
349
351
  tests/modes/script_keywords/basic_keywords/__init__.py
350
352
  tests/modes/script_keywords/basic_keywords/test_account_balance.py
351
353
  tests/modes/script_keywords/basic_keywords/test_amount.py
354
+ tests/modes/script_keywords/basic_keywords/test_position.py
355
+ tests/modes/script_keywords/basic_keywords/test_price.py
352
356
  tests/modes/script_keywords/dsl/__init__.py
353
357
  tests/modes/script_keywords/dsl/test_quantity.py
354
358
  tests/personal_data/__init__.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.60
3
+ Version: 2.4.62
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.60](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.62](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.60](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.62](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.60" # major.minor.revision
18
+ VERSION = "2.4.62" # major.minor.revision
@@ -35,6 +35,10 @@ from octobot_trading.modes.script_keywords.basic_keywords import (
35
35
  set_leverage,
36
36
  set_partial_take_profit_stop_loss,
37
37
  get_amount_from_input_amount,
38
+ get_price_with_offset,
39
+ get_position,
40
+ average_open_pos_entry,
41
+ is_in_one_way_position_mode,
38
42
  total_account_balance,
39
43
  available_account_balance,
40
44
  adapt_amount_to_holdings,
@@ -67,6 +71,10 @@ __all__ = [
67
71
  "set_leverage",
68
72
  "set_partial_take_profit_stop_loss",
69
73
  "get_amount_from_input_amount",
74
+ "get_price_with_offset",
75
+ "get_position",
76
+ "average_open_pos_entry",
77
+ "is_in_one_way_position_mode",
70
78
  "total_account_balance",
71
79
  "available_account_balance",
72
80
  "adapt_amount_to_holdings",
@@ -36,6 +36,16 @@ from octobot_trading.modes.script_keywords.basic_keywords.amount import (
36
36
  get_amount_from_input_amount,
37
37
  )
38
38
 
39
+ from octobot_trading.modes.script_keywords.basic_keywords.price import (
40
+ get_price_with_offset,
41
+ )
42
+
43
+ from octobot_trading.modes.script_keywords.basic_keywords.position import (
44
+ get_position,
45
+ average_open_pos_entry,
46
+ is_in_one_way_position_mode,
47
+ )
48
+
39
49
  from octobot_trading.modes.script_keywords.basic_keywords.account_balance import (
40
50
  total_account_balance,
41
51
  available_account_balance,
@@ -71,6 +81,10 @@ __all__ = [
71
81
  "set_leverage",
72
82
  "set_partial_take_profit_stop_loss",
73
83
  "get_amount_from_input_amount",
84
+ "get_price_with_offset",
85
+ "get_position",
86
+ "average_open_pos_entry",
87
+ "is_in_one_way_position_mode",
74
88
  "total_account_balance",
75
89
  "available_account_balance",
76
90
  "adapt_amount_to_holdings",
@@ -0,0 +1,58 @@
1
+ # Drakkar-Software OctoBot-Trading
2
+ # Copyright (c) Drakkar-Software, All rights reserved.
3
+ #
4
+ # This library is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 3.0 of the License, or (at your option) any later version.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library.
16
+
17
+ import octobot_trading.constants as trading_constants
18
+ import octobot_trading.enums as trading_enums
19
+ import octobot_trading.errors as trading_errors
20
+
21
+
22
+ def get_position(context, symbol=None, side=trading_enums.PositionSide.BOTH.value):
23
+ return context.exchange_manager.exchange_personal_data.positions_manager.get_symbol_position(
24
+ symbol or context.symbol,
25
+ _get_position_side(context, side)
26
+ )
27
+
28
+
29
+ async def average_open_pos_entry(context, side=trading_enums.PositionSide.LONG.value):
30
+ if context.exchange_manager.is_future:
31
+ return get_position(context, context.symbol, side).entry_price
32
+ elif context.exchange_manager.is_margin:
33
+ return trading_constants.ZERO
34
+ else:
35
+ return trading_constants.ZERO
36
+
37
+
38
+ def _get_position_side(ctx, side):
39
+ if is_in_one_way_position_mode(ctx):
40
+ return trading_enums.PositionSide.BOTH
41
+
42
+ # hedge mode
43
+ if side == trading_enums.PositionSide.LONG.value:
44
+ return trading_enums.PositionSide.LONG
45
+ elif side == trading_enums.PositionSide.SHORT.value:
46
+ return trading_enums.PositionSide.SHORT
47
+ elif side == trading_enums.PositionSide.BOTH.value:
48
+ raise trading_errors.InvalidArgumentError(
49
+ "average_open_pos_entry: both sides are not implemented yet for hedged mode"
50
+ )
51
+ else:
52
+ raise trading_errors.InvalidArgumentError(
53
+ 'average_open_pos_entry: side needs to be "long", "short" or "both"'
54
+ )
55
+
56
+
57
+ def is_in_one_way_position_mode(ctx):
58
+ return ctx.exchange_manager.exchange.get_pair_future_contract(ctx.symbol).is_one_way_position_mode()
@@ -0,0 +1,64 @@
1
+ # Drakkar-Software OctoBot-Trading
2
+ # Copyright (c) Drakkar-Software, All rights reserved.
3
+ #
4
+ # This library is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 3.0 of the License, or (at your option) any later version.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library.
16
+ import octobot_trading.errors as errors
17
+ import octobot_trading.constants as constants
18
+ import octobot_trading.personal_data as personal_data
19
+ import octobot_trading.modes.script_keywords.dsl as dsl
20
+ import octobot_trading.modes.script_keywords.basic_keywords.position as position
21
+
22
+
23
+ async def get_price_with_offset(context, offset_input, use_delta_type_as_flat_value=False, side=None):
24
+ if offset_input is None:
25
+ raise errors.InvalidArgumentError("price or offset is required")
26
+ offset_type, offset_value = dsl.parse_quantity(offset_input)
27
+
28
+ # when use_delta_type_as_flat_value is True, consider a simple price input as a flat target instead of an offset
29
+ is_delta_type_considered_as_flat = offset_type is dsl.QuantityType.DELTA and use_delta_type_as_flat_value
30
+
31
+ if offset_type is dsl.QuantityType.DELTA_EXPLICIT or (
32
+ offset_type is dsl.QuantityType.DELTA and not is_delta_type_considered_as_flat
33
+ ):
34
+ current_price_val = await personal_data.get_up_to_date_price(
35
+ context.exchange_manager, context.symbol, timeout=constants.ORDER_DATA_FETCHING_TIMEOUT
36
+ )
37
+ # offset should be negative when wanting to buy bellow current price
38
+ computed_price = current_price_val + offset_value
39
+
40
+ elif offset_type is dsl.QuantityType.PERCENT:
41
+ current_price_val = await personal_data.get_up_to_date_price(
42
+ context.exchange_manager, context.symbol, timeout=constants.ORDER_DATA_FETCHING_TIMEOUT
43
+ )
44
+ computed_price = current_price_val * (constants.ONE + (offset_value / constants.ONE_HUNDRED))
45
+
46
+ elif offset_type is dsl.QuantityType.ENTRY_PERCENT:
47
+ average_open_pos_entry_val = await position.average_open_pos_entry(context, side)
48
+ computed_price = average_open_pos_entry_val * (constants.ONE + (offset_value / constants.ONE_HUNDRED))
49
+
50
+ elif offset_type is dsl.QuantityType.ENTRY:
51
+ average_open_pos_entry_val = await position.average_open_pos_entry(context, side)
52
+ computed_price = average_open_pos_entry_val + offset_value
53
+
54
+ elif is_delta_type_considered_as_flat or offset_type is dsl.QuantityType.FLAT:
55
+ computed_price = offset_value
56
+ else:
57
+ raise errors.InvalidArgumentError(
58
+ f"'{offset_input}' is not supported. "
59
+ f"Make sure to use a supported syntax for price, supported parameters are: "
60
+ f"1.2, -0.222, -0.222d, @65100, 5%, e5%, e500"
61
+ )
62
+
63
+ symbol_market = context.exchange_manager.exchange.get_market_status(context.symbol, with_fixer=False)
64
+ return personal_data.decimal_adapt_price(symbol_market, computed_price)
@@ -19,6 +19,7 @@ import enum
19
19
 
20
20
  class QuantityType(enum.Enum):
21
21
  DELTA = ""
22
+ DELTA_EXPLICIT = "d"
22
23
  DELTA_QUOTE = "q"
23
24
  DELTA_BASE = "b"
24
25
  PERCENT = "%"
@@ -29,7 +29,7 @@ class OrdersProducer(exchanges_channel.ExchangeChannelProducer):
29
29
 
30
30
  async def perform(self, orders, is_from_bot=False, are_closed=False):
31
31
  try:
32
- self.logger.debug(f"Received order update for {len(orders)} orders.")
32
+ self.logger.debug(f"Received order update for {len(orders)} {'closed' if are_closed else ''} orders.")
33
33
  has_new_order = False
34
34
  waiting_complete_init_orders = []
35
35
  symbols = set()
@@ -25,6 +25,7 @@ import octobot_trading.enums as enums
25
25
  import octobot_trading.errors as errors
26
26
  import octobot_trading.personal_data.orders.states as orders_states
27
27
  import octobot_trading.personal_data.orders.order_util as order_util
28
+ import octobot_trading.personal_data.orders.decimal_order_adapter as decimal_order_adapter
28
29
  import octobot_trading.util as util
29
30
 
30
31
 
@@ -476,11 +477,15 @@ class Order(util.Initializable):
476
477
  logger = logging.get_logger(self.get_logger_name())
477
478
  fees_str = f"Paid {self.quantity_currency} fees: {relevant_fees_amount}, " \
478
479
  f"initial order size: {self.origin_quantity}"
479
- if relevant_fees_amount > self.origin_quantity:
480
+ if relevant_fees_amount >= self.origin_quantity:
480
481
  logger.error(f"Impossible to update chained order amount according to triggering order fees: "
481
482
  f"fees are larger than then chained order size. {fees_str}")
482
483
  return False
483
- self.origin_quantity -= relevant_fees_amount
484
+ self.origin_quantity = decimal_order_adapter.decimal_adapt_quantity(
485
+ self.exchange_manager.exchange.get_market_status(self.symbol, with_fixer=False),
486
+ self.origin_quantity - relevant_fees_amount
487
+ )
488
+ fees_str = f"{fees_str}, updated size: {self.origin_quantity}"
484
489
  logger.debug(f"Updating chained order quantity with triggering order fees. {fees_str}")
485
490
  return True
486
491
 
@@ -64,6 +64,7 @@ async def mock_context(backtesting_trader):
64
64
  mock.Mock(),
65
65
  )
66
66
  context.signal_builder = mock.Mock()
67
+ context.is_trading_signal_emitter = mock.Mock(return_value=False)
67
68
  context.orders_writer = mock.Mock(log_many=mock.AsyncMock())
68
69
  portfolio_manager = exchange_manager.exchange_personal_data.portfolio_manager
69
70
  # init portfolio with 0.5 BTC, 20 ETH and 30000 USDT and only 0.1 available BTC
@@ -0,0 +1,53 @@
1
+ # Drakkar-Software OctoBot-Trading
2
+ # Copyright (c) Drakkar-Software, All rights reserved.
3
+ #
4
+ # This library is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 3.0 of the License, or (at your option) any later version.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library.
16
+ import pytest
17
+ import mock
18
+ import decimal
19
+
20
+ import octobot_trading.modes.script_keywords as script_keywords
21
+ import octobot_trading.modes.script_keywords.basic_keywords.position as position
22
+ import octobot_trading.enums as enums
23
+ import octobot_trading.constants as constants
24
+
25
+ from tests import event_loop
26
+ from tests.modes.script_keywords import mock_context
27
+ from tests.exchanges import backtesting_trader, \
28
+ backtesting_config, backtesting_exchange_manager, fake_backtesting
29
+
30
+
31
+ # All test coroutines will be treated as marked.
32
+ pytestmark = pytest.mark.asyncio
33
+
34
+
35
+ @pytest.mark.parametrize("backtesting_config", ["USDT"], indirect=["backtesting_config"])
36
+ async def test_average_open_pos_entry(mock_context):
37
+ mock_context.exchange_manager.is_future = False
38
+ with mock.patch.object(position, "get_position",
39
+ mock.Mock(return_value=(mock.Mock(entry_price=decimal.Decimal("40000"))))) \
40
+ as get_position_mock:
41
+ mock_context.symbol = "ETH/USDT"
42
+ assert await script_keywords.average_open_pos_entry(mock_context, enums.TradeOrderSide.BUY.value) == \
43
+ constants.ZERO
44
+ mock_context.exchange_manager.is_future = True
45
+ mock_context.symbol = "ETH/USDT"
46
+ assert await script_keywords.average_open_pos_entry(mock_context, enums.TradeOrderSide.BUY.value) == \
47
+ decimal.Decimal("40000")
48
+ get_position_mock.assert_called_once_with(mock_context, "ETH/USDT", enums.TradeOrderSide.BUY.value)
49
+ get_position_mock.reset_mock()
50
+ mock_context.symbol = "BTC/USDT"
51
+ assert await script_keywords.average_open_pos_entry(mock_context, enums.TradeOrderSide.BUY.value) == \
52
+ decimal.Decimal("40000")
53
+ get_position_mock.assert_called_once_with(mock_context, "BTC/USDT", enums.TradeOrderSide.BUY.value)
@@ -0,0 +1,135 @@
1
+ # Drakkar-Software OctoBot-Trading
2
+ # Copyright (c) Drakkar-Software, All rights reserved.
3
+ #
4
+ # This library is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 3.0 of the License, or (at your option) any later version.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library.
16
+ import pytest
17
+ import mock
18
+ import decimal
19
+
20
+ import octobot_trading.modes.script_keywords as script_keywords
21
+ import octobot_trading.modes.script_keywords.dsl as dsl
22
+ import octobot_trading.modes.script_keywords.basic_keywords.position as position
23
+ import octobot_trading.personal_data as personal_data
24
+ import octobot_trading.errors as errors
25
+ import octobot_trading.constants as constants
26
+ from octobot_trading.enums import ExchangeConstantsMarketStatusColumns as Ecmsc
27
+
28
+ from tests import event_loop
29
+ from tests.modes.script_keywords import null_context
30
+
31
+ # All test coroutines will be treated as marked.
32
+ pytestmark = pytest.mark.asyncio
33
+
34
+
35
+ async def test_get_price_with_offset(null_context):
36
+ null_context.symbol = "blop/plop"
37
+ null_context.exchange_manager = mock.Mock(
38
+ exchange=mock.Mock(
39
+ get_market_status=mock.Mock(return_value={
40
+ Ecmsc.PRECISION.value: {
41
+ Ecmsc.PRECISION_PRICE.value: 2
42
+ }
43
+ })
44
+ )
45
+ )
46
+
47
+ with pytest.raises(errors.InvalidArgumentError):
48
+ await script_keywords.get_price_with_offset(null_context, "1sdsqdq")
49
+
50
+ with mock.patch.object(personal_data, "get_up_to_date_price", mock.AsyncMock(return_value=200)) \
51
+ as current_price_mock:
52
+ with mock.patch.object(dsl, "parse_quantity",
53
+ mock.Mock(return_value=(script_keywords.QuantityType.DELTA, decimal.Decimal(10)))) \
54
+ as parse_quantity_mock:
55
+ assert await script_keywords.get_price_with_offset(null_context, 10) == decimal.Decimal(210)
56
+ current_price_mock.assert_called_once_with(
57
+ null_context.exchange_manager, null_context.symbol, timeout=constants.ORDER_DATA_FETCHING_TIMEOUT
58
+ )
59
+ parse_quantity_mock.assert_called_once_with(10)
60
+ null_context.exchange_manager.exchange.get_market_status.assert_called_once_with(
61
+ "blop/plop", with_fixer=False
62
+ )
63
+ current_price_mock.reset_mock()
64
+ parse_quantity_mock.reset_mock()
65
+
66
+ assert await script_keywords.get_price_with_offset(null_context, 10, use_delta_type_as_flat_value=True) \
67
+ == decimal.Decimal(10)
68
+ current_price_mock.assert_not_called()
69
+ parse_quantity_mock.assert_called_once_with(10)
70
+ current_price_mock.reset_mock()
71
+ parse_quantity_mock.reset_mock()
72
+
73
+ with mock.patch.object(dsl, "parse_quantity",
74
+ mock.Mock(return_value=(script_keywords.QuantityType.DELTA_EXPLICIT, decimal.Decimal(10)))) \
75
+ as parse_quantity_mock:
76
+ assert await script_keywords.get_price_with_offset(null_context, 10) == decimal.Decimal(210)
77
+ current_price_mock.assert_called_once_with(
78
+ null_context.exchange_manager, null_context.symbol, timeout=constants.ORDER_DATA_FETCHING_TIMEOUT
79
+ )
80
+ parse_quantity_mock.assert_called_once_with(10)
81
+ current_price_mock.reset_mock()
82
+ parse_quantity_mock.reset_mock()
83
+
84
+ # DELTA_EXPLICIT ignores use_delta_type_as_flat_value
85
+ assert await script_keywords.get_price_with_offset(null_context, 10, use_delta_type_as_flat_value=True) \
86
+ == decimal.Decimal(210)
87
+ current_price_mock.assert_called_once_with(
88
+ null_context.exchange_manager, null_context.symbol, timeout=constants.ORDER_DATA_FETCHING_TIMEOUT
89
+ )
90
+ parse_quantity_mock.assert_called_once_with(10)
91
+ current_price_mock.reset_mock()
92
+ parse_quantity_mock.reset_mock()
93
+
94
+ with mock.patch.object(
95
+ dsl, "parse_quantity",
96
+ mock.Mock(return_value=(script_keywords.QuantityType.DELTA, decimal.Decimal("10.333333")))
97
+ ) as parse_quantity_mock:
98
+ assert await script_keywords.get_price_with_offset(
99
+ null_context, 10.333333, use_delta_type_as_flat_value=True
100
+ ) == decimal.Decimal("10.33") # rounded according to precision
101
+ current_price_mock.assert_not_called()
102
+ parse_quantity_mock.assert_called_once_with(10.333333)
103
+ current_price_mock.reset_mock()
104
+ parse_quantity_mock.reset_mock()
105
+
106
+ with mock.patch.object(dsl, "parse_quantity",
107
+ mock.Mock(return_value=(script_keywords.QuantityType.PERCENT, decimal.Decimal(-99)))):
108
+ assert await script_keywords.get_price_with_offset(null_context, 10) == decimal.Decimal(2)
109
+
110
+ with mock.patch.object(dsl, "parse_quantity",
111
+ mock.Mock(return_value=(script_keywords.QuantityType.PERCENT, decimal.Decimal(1000)))):
112
+ assert await script_keywords.get_price_with_offset(null_context, 10) == decimal.Decimal(2200)
113
+
114
+ with mock.patch.object(position, "average_open_pos_entry", mock.AsyncMock(return_value=500)) \
115
+ as average_open_pos_entry_mock:
116
+ with mock.patch.object(dsl, "parse_quantity",
117
+ mock.Mock(return_value=(script_keywords.QuantityType.ENTRY_PERCENT, decimal.Decimal(-50)))):
118
+ assert await script_keywords.get_price_with_offset(null_context, 10, side="sell") == decimal.Decimal(250)
119
+ average_open_pos_entry_mock.assert_called_once_with(null_context, "sell")
120
+
121
+ with mock.patch.object(position, "average_open_pos_entry", mock.AsyncMock(return_value=500)) \
122
+ as average_open_pos_entry_mock:
123
+ with mock.patch.object(dsl, "parse_quantity",
124
+ mock.Mock(return_value=(script_keywords.QuantityType.ENTRY, decimal.Decimal(50)))):
125
+ assert await script_keywords.get_price_with_offset(null_context, 10, side="sell") == decimal.Decimal(550)
126
+ average_open_pos_entry_mock.assert_called_once()
127
+
128
+ with mock.patch.object(dsl, "parse_quantity",
129
+ mock.Mock(return_value=(script_keywords.QuantityType.FLAT, decimal.Decimal(50)))):
130
+ assert await script_keywords.get_price_with_offset(null_context, 10) == decimal.Decimal(50)
131
+
132
+ with mock.patch.object(dsl, "parse_quantity",
133
+ mock.Mock(return_value=(script_keywords.QuantityType.UNKNOWN, decimal.Decimal(-50)))):
134
+ with pytest.raises(errors.InvalidArgumentError):
135
+ await script_keywords.get_price_with_offset(null_context, 10)
@@ -27,6 +27,12 @@ def test_parse_quantity_types():
27
27
  assert script_keywords.parse_quantity(1.366666663347877) == \
28
28
  (script_keywords.QuantityType.DELTA, decimal.Decimal("1.366666663347877"))
29
29
  assert script_keywords.parse_quantity("-10") == (script_keywords.QuantityType.DELTA, decimal.Decimal(-10))
30
+
31
+ assert script_keywords.parse_quantity("-10d") == (script_keywords.QuantityType.DELTA_EXPLICIT, decimal.Decimal(-10))
32
+ assert script_keywords.parse_quantity("d-10") == (script_keywords.QuantityType.DELTA_EXPLICIT, decimal.Decimal(-10))
33
+ assert script_keywords.parse_quantity("d+10") == (script_keywords.QuantityType.DELTA_EXPLICIT, decimal.Decimal(10))
34
+ assert script_keywords.parse_quantity("d10") == (script_keywords.QuantityType.DELTA_EXPLICIT, decimal.Decimal(10))
35
+
30
36
  assert script_keywords.parse_quantity("-10b") == (script_keywords.QuantityType.DELTA_BASE, decimal.Decimal(-10))
31
37
 
32
38
  assert script_keywords.parse_quantity("q") == (script_keywords.QuantityType.DELTA_QUOTE, None)
@@ -339,6 +339,63 @@ async def test_trigger_chained_orders(trader_simulator):
339
339
  create_as_chained_order_mock.assert_called_once_with(order_mock_1)
340
340
 
341
341
 
342
+ def test_update_quantity_with_order_fees(trader_simulator):
343
+ config, exchange_manager_inst, trader_inst = trader_simulator
344
+
345
+ base_order = personal_data.Order(trader_inst)
346
+ base_order.symbol = "BTC/USDT"
347
+
348
+ other_order = personal_data.Order(trader_inst)
349
+ other_order.symbol = base_order.symbol
350
+ other_order.origin_quantity = decimal.Decimal(1)
351
+
352
+ # case 1: quantity_currency is not the amount unit: nothing changes
353
+ base_order.fee = {
354
+ enums.FeePropertyColumns.CURRENCY.value: "USDT",
355
+ enums.FeePropertyColumns.COST.value: decimal.Decimal("1")
356
+ }
357
+ other_order.quantity_currency = "BTC"
358
+ assert other_order.update_quantity_with_order_fees(base_order) is True
359
+ assert other_order.origin_quantity == decimal.Decimal(1) # nothing changed
360
+
361
+ # case 2: quantity_currency is the amount unit: other_order quantity is reduced
362
+ base_order.fee = {
363
+ enums.FeePropertyColumns.CURRENCY.value: "BTC",
364
+ enums.FeePropertyColumns.COST.value: decimal.Decimal("0.1")
365
+ }
366
+ other_order.quantity_currency = "BTC"
367
+ assert other_order.update_quantity_with_order_fees(base_order) is True
368
+ assert other_order.origin_quantity == decimal.Decimal("0.9") # 1 - 0.1
369
+ other_order.origin_quantity = decimal.Decimal(1)
370
+
371
+ # case 3: quantity_currency is the amount unit and is too large: return False
372
+ base_order.fee = {
373
+ enums.FeePropertyColumns.CURRENCY.value: "BTC",
374
+ enums.FeePropertyColumns.COST.value: decimal.Decimal("1")
375
+ }
376
+ other_order.quantity_currency = "BTC"
377
+ assert other_order.update_quantity_with_order_fees(base_order) is False
378
+ assert other_order.origin_quantity == decimal.Decimal(1) # nothing changed
379
+ base_order.fee = {
380
+ enums.FeePropertyColumns.CURRENCY.value: "BTC",
381
+ enums.FeePropertyColumns.COST.value: decimal.Decimal("1.1")
382
+ }
383
+ other_order.quantity_currency = "BTC"
384
+ assert other_order.update_quantity_with_order_fees(base_order) is False
385
+ assert other_order.origin_quantity == decimal.Decimal(1) # nothing changed
386
+
387
+ # case 4: quantity_currency is the amount unit: other_order quantity is reduced and adapted
388
+ base_order.fee = {
389
+ enums.FeePropertyColumns.CURRENCY.value: "BTC",
390
+ enums.FeePropertyColumns.COST.value: decimal.Decimal("0.111111111111111111111111")
391
+ }
392
+ other_order.quantity_currency = "BTC"
393
+ assert other_order.update_quantity_with_order_fees(base_order) is True
394
+ # 1 - 0.111111111111111111111111 with truncated digits
395
+ assert other_order.origin_quantity == decimal.Decimal("0.88888")
396
+ other_order.origin_quantity = decimal.Decimal(1)
397
+
398
+
342
399
  async def test_update_from_order(trader_simulator):
343
400
  config, exchange_manager_inst, trader_inst = trader_simulator
344
401