OctoBot-Trading 2.4.134__tar.gz → 2.4.137__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 (479) hide show
  1. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/CHANGELOG.md +10 -0
  2. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.134/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.137}/PKG-INFO +2 -2
  4. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/README.md +1 -1
  5. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/__init__.py +1 -1
  6. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/channel/abstract_mode_consumer.py +2 -1
  7. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/order.py +1 -1
  8. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/order_util.py +3 -0
  9. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/position.py +6 -6
  10. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/util/test_tools/exchanges_test_tools.py +116 -83
  11. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/test_order_util.py +20 -0
  12. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/positions/test_position.py +16 -4
  13. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/LICENSE +0 -0
  14. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/MANIFEST.in +0 -0
  15. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
  16. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  17. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  18. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/OctoBot_Trading.egg-info/requires.txt +0 -0
  19. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  20. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/api/__init__.py +0 -0
  21. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/api/channels.py +0 -0
  22. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/api/contracts.py +0 -0
  23. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/api/exchange.py +0 -0
  24. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/api/modes.py +0 -0
  25. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/api/orders.py +0 -0
  26. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/api/portfolio.py +0 -0
  27. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/api/positions.py +0 -0
  28. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/api/profitability.py +0 -0
  29. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/api/storage.py +0 -0
  30. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/api/symbol_data.py +0 -0
  31. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/api/trader.py +0 -0
  32. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/api/trades.py +0 -0
  33. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/constants.py +0 -0
  34. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/enums.py +0 -0
  35. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/errors.py +0 -0
  36. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_channel.py +0 -0
  37. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/__init__.py +0 -0
  38. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  39. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  40. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  41. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  42. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  43. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  44. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  45. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  46. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  47. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  48. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  49. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  50. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  51. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  52. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  53. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  54. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  55. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  56. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  57. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  58. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  59. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  60. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  61. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  62. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  63. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  64. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  65. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  66. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  67. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  68. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  69. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  70. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  71. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  72. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  73. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  74. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  75. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  76. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  77. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  78. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  79. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  80. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  81. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  82. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  83. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  84. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  85. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  86. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  87. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  88. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  89. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/__init__.py +0 -0
  90. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  91. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  92. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  93. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  94. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/config/__init__.py +0 -0
  95. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  96. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  97. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/config/proxy_config.py +0 -0
  98. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  99. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  100. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
  101. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
  102. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  103. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +0 -0
  104. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  105. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  106. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  107. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  108. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  109. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  110. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  111. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/exchange_builder.py +0 -0
  112. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/exchange_channels.py +0 -0
  113. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/exchange_details.py +0 -0
  114. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/exchange_factory.py +0 -0
  115. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/exchange_manager.py +0 -0
  116. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  117. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/exchanges.py +0 -0
  118. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  119. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  120. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  121. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  122. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/traders/__init__.py +0 -0
  123. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/traders/trader.py +0 -0
  124. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  125. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/types/__init__.py +0 -0
  126. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
  127. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  128. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/util/__init__.py +0 -0
  129. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  130. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/util/exchange_util.py +0 -0
  131. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  132. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  133. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/__init__.py +0 -0
  134. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/abstract_trading_mode.py +0 -0
  135. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/channel/__init__.py +0 -0
  136. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  137. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/channel/mode.py +0 -0
  138. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/mode_activity.py +0 -0
  139. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/mode_config.py +0 -0
  140. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/modes_factory.py +0 -0
  141. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/modes_util.py +0 -0
  142. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  143. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  144. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  145. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  146. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  147. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  148. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  149. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  150. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  151. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  152. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  153. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  154. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  155. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  156. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  157. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  158. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/octobot_channel_consumer.py +0 -0
  159. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/__init__.py +0 -0
  160. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  161. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/__init__.py +0 -0
  162. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  163. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  164. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  165. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  166. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  167. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  168. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  169. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  170. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  171. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  172. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  173. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/order_group.py +0 -0
  174. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/order_state.py +0 -0
  175. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  176. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  177. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  178. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  179. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  180. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  181. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  182. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  183. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  184. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  185. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  186. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  187. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  188. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  189. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  190. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  191. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  192. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  193. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  194. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  195. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  196. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  197. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  198. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  199. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  200. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  201. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  202. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  203. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  204. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  205. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  206. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  207. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  208. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  209. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  210. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  211. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  212. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  213. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  214. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  215. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  216. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  217. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  218. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  219. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  220. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  221. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  222. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  223. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  224. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  225. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  226. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  227. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  228. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  229. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/__init__.py +0 -0
  230. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  231. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  232. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  233. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  234. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  235. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/position_state.py +0 -0
  236. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/position_util.py +0 -0
  237. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  238. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  239. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  240. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  241. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  242. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  243. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  244. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  245. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  246. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/state.py +0 -0
  247. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/trades/__init__.py +0 -0
  248. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  249. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  250. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  251. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/trades/trade.py +0 -0
  252. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  253. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  254. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  255. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  256. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  257. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  258. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  259. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  260. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  261. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  262. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  263. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  264. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  265. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/signals/__init__.py +0 -0
  266. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/signals/channel/__init__.py +0 -0
  267. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  268. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  269. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/signals/channel/signal_producer.py +0 -0
  270. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/signals/signal_creation.py +0 -0
  271. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  272. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/signals/util.py +0 -0
  273. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/storage/__init__.py +0 -0
  274. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/storage/abstract_storage.py +0 -0
  275. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/storage/candles_storage.py +0 -0
  276. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/storage/orders_storage.py +0 -0
  277. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/storage/portfolio_storage.py +0 -0
  278. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/storage/storage_manager.py +0 -0
  279. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/storage/trades_storage.py +0 -0
  280. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/storage/transactions_storage.py +0 -0
  281. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/storage/util.py +0 -0
  282. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/supervisors/__init__.py +0 -0
  283. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  284. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  285. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/util/__init__.py +0 -0
  286. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/util/config_util.py +0 -0
  287. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/util/initializable.py +0 -0
  288. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/util/initialization_util.py +0 -0
  289. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/util/simulator_updater_utils.py +0 -0
  290. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/util/test_tools/__init__.py +0 -0
  291. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/util/test_tools/exchange_data.py +0 -0
  292. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  293. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  294. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/requirements.txt +0 -0
  295. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/setup.cfg +0 -0
  296. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/setup.py +0 -0
  297. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/api/__init__.py +0 -0
  298. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/api/test_channels.py +0 -0
  299. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/api/test_exchange.py +0 -0
  300. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/api/test_modes.py +0 -0
  301. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/api/test_orders.py +0 -0
  302. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/api/test_portfolio.py +0 -0
  303. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/api/test_profitability.py +0 -0
  304. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/api/test_symbol_data.py +0 -0
  305. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/api/test_trader.py +0 -0
  306. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/api/test_trades.py +0 -0
  307. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/cli/__init__.py +0 -0
  308. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/__init__.py +0 -0
  309. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/contracts/__init__.py +0 -0
  310. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  311. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  312. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/funding/__init__.py +0 -0
  313. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  314. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/kline/__init__.py +0 -0
  315. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  316. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/ohlcv/__init__.py +0 -0
  317. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  318. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  319. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/order_book/__init__.py +0 -0
  320. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  321. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/prices/__init__.py +0 -0
  322. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  323. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  324. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/recent_trades/__init__.py +0 -0
  325. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  326. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  327. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/ticker/__init__.py +0 -0
  328. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  329. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/__init__.py +0 -0
  330. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/connectors/__init__.py +0 -0
  331. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  332. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  333. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  334. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/implementations/__init__.py +0 -0
  335. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  336. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  337. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/test_abstract_exchange.py +0 -0
  338. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  339. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/test_exchange_builder.py +0 -0
  340. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/test_exchange_config_data.py +0 -0
  341. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/test_exchange_factory.py +0 -0
  342. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/test_exchange_manager.py +0 -0
  343. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/test_exchange_simulator.py +0 -0
  344. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/test_exchanges.py +0 -0
  345. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/traders/__init__.py +0 -0
  346. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/traders/test_trader.py +0 -0
  347. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/types/__init__.py +0 -0
  348. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  349. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/util/__init__.py +0 -0
  350. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  351. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/exchanges/util/test_exchange_util.py +0 -0
  352. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/modes/__init__.py +0 -0
  353. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/modes/script_keywords/__init__.py +0 -0
  354. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  355. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  356. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  357. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  358. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  359. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  360. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  361. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/modes/test_abstract_mode_consumer.py +0 -0
  362. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/modes/test_abstract_trading_mode.py +0 -0
  363. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/modes/test_modes_util.py +0 -0
  364. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/__init__.py +0 -0
  365. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/__init__.py +0 -0
  366. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/groups/__init__.py +0 -0
  367. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  368. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  369. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  370. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/states/__init__.py +0 -0
  371. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  372. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  373. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  374. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  375. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/states/test_order_state.py +0 -0
  376. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  377. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  378. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  379. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  380. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  381. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/test_order.py +0 -0
  382. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/test_order_adapter.py +0 -0
  383. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/test_order_factory.py +0 -0
  384. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/test_orders_manager.py +0 -0
  385. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  386. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/types/__init__.py +0 -0
  387. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  388. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  389. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  390. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  391. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  392. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  393. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  394. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  395. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/types/market/__init__.py +0 -0
  396. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  397. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  398. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  399. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  400. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  401. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  402. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/__init__.py +0 -0
  403. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  404. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  405. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  406. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  407. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/history/__init__.py +0 -0
  408. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  409. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  410. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/test_asset.py +0 -0
  411. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  412. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  413. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  414. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  415. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  416. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/types/__init__.py +0 -0
  417. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  418. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  419. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  420. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/positions/__init__.py +0 -0
  421. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/positions/channel/__init__.py +0 -0
  422. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/positions/states/__init__.py +0 -0
  423. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/positions/test_position_factory.py +0 -0
  424. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/positions/test_positions_manager.py +0 -0
  425. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/positions/types/__init__.py +0 -0
  426. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  427. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  428. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/trades/__init__.py +0 -0
  429. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/trades/test_trade_factory.py +0 -0
  430. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/trades/test_trade_manager.py +0 -0
  431. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  432. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/trades/test_trade_util.py +0 -0
  433. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/transactions/__init__.py +0 -0
  434. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  435. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  436. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/signals/__init__.py +0 -0
  437. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  438. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/signals/test_util.py +0 -0
  439. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/test_utils/__init__.py +0 -0
  440. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/test_utils/order_util.py +0 -0
  441. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/test_utils/random_numbers.py +0 -0
  442. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/util/__init__.py +0 -0
  443. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests/util/test_config_util.py +0 -0
  444. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/__init__.py +0 -0
  445. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/__init__.py +0 -0
  446. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
  447. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  448. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  449. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_binance.py +0 -0
  450. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  451. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_bingx.py +0 -0
  452. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  453. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_bitget.py +0 -0
  454. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  455. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_bitmart.py +0 -0
  456. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_bitmex.py +0 -0
  457. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_bitso.py +0 -0
  458. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  459. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_bybit.py +0 -0
  460. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  461. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  462. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_coinex.py +0 -0
  463. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  464. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_gateio.py +0 -0
  465. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  466. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  467. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_htx.py +0 -0
  468. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_kraken.py +0 -0
  469. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  470. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  471. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_mexc.py +0 -0
  472. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_ndax.py +0 -0
  473. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  474. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_okx.py +0 -0
  475. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  476. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_phemex.py +0 -0
  477. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  478. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/tests_additional/real_exchanges/test_upbit.py +0 -0
  479. {OctoBot-Trading-2.4.134 → OctoBot-Trading-2.4.137}/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.137] - 2023-12-27
8
+ ### Updated
9
+ [Orders] handle reduce only in test tools and in register_chained_order
10
+
11
+ ## [2.4.136] - 2023-12-25
12
+ ### Updated
13
+ [Positions] dont update entry price on empty positions
14
+ ### Fixed
15
+ [Orders] fix reduce only
16
+
7
17
  ## [2.4.134] - 2023-12-21
8
18
  ### Added
9
19
  [Orders] add is_stop_trade_order_type
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.134
3
+ Version: 2.4.137
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.134](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.137](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
20
20
  [![Codacy Badge](https://api.codacy.com/project/badge/Grade/903b6b22bceb4661b608a86fea655f69)](https://app.codacy.com/gh/Drakkar-Software/OctoBot-Trading?utm_source=github.com&utm_medium=referral&utm_content=Drakkar-Software/OctoBot-Trading&utm_campaign=Badge_Grade_Dashboard)
21
21
  [![PyPI](https://img.shields.io/pypi/v/OctoBot-Trading.svg)](https://pypi.python.org/pypi/OctoBot-Trading/)
22
22
  [![Coverage Status](https://coveralls.io/repos/github/Drakkar-Software/OctoBot-Trading/badge.svg?branch=master)](https://coveralls.io/github/Drakkar-Software/OctoBot-Trading?branch=master)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.134
3
+ Version: 2.4.137
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.134](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.137](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.134](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.137](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.134" # major.minor.revision
18
+ VERSION = "2.4.137" # major.minor.revision
@@ -251,7 +251,7 @@ class AbstractTradingModeConsumer(modes_channel.ModeChannelConsumer):
251
251
  return position.state.is_active()
252
252
 
253
253
  async def register_chained_order(
254
- self, main_order, price, order_type, side, quantity=None, allow_bundling=True, tag=None
254
+ self, main_order, price, order_type, side, quantity=None, allow_bundling=True, tag=None, reduce_only=False
255
255
  ) -> tuple:
256
256
  chained_order = personal_data.create_order_instance(
257
257
  trader=self.exchange_manager.trader,
@@ -262,6 +262,7 @@ class AbstractTradingModeConsumer(modes_channel.ModeChannelConsumer):
262
262
  price=price,
263
263
  side=side,
264
264
  associated_entry_id=main_order.order_id,
265
+ reduce_only=reduce_only,
265
266
  tag=tag,
266
267
  )
267
268
  params = {}
@@ -820,7 +820,7 @@ class Order(util.Initializable):
820
820
  f"{chained_order}"
821
821
  f"{self.order_type.name if self.order_type is not None else 'Unknown'} | "
822
822
  f"Price : {str(self.origin_price)} | "
823
- f"Quantity : {str(self.origin_quantity)} | "
823
+ f"Quantity : {str(self.origin_quantity)}{' (Reduce only)' if self.reduce_only else ''} | "
824
824
  f"State : {self.state.state.value if self.state is not None else 'Unknown'} | "
825
825
  f"id : {self.order_id}{tag} "
826
826
  f"exchange id: {self.exchange_order_id}")
@@ -274,6 +274,9 @@ def get_futures_max_order_size(exchange_manager, symbol, side, current_price, re
274
274
  symbol,
275
275
  enums.PositionSide.BOTH
276
276
  )
277
+ if reduce_only and current_position.is_idle():
278
+ # can't reduce an empty position
279
+ return constants.ZERO, False
277
280
  # ensure max position order size is taken into account
278
281
  new_position_side = current_position.side
279
282
  if new_position_side is enums.PositionSide.UNKNOWN:
@@ -240,7 +240,7 @@ class Position(util.Initializable):
240
240
  try:
241
241
  with self.update_or_restore():
242
242
  if mark_price is not None:
243
- self._update_mark_price(mark_price)
243
+ self._update_mark_price(mark_price, force_entry_check=bool(update_size or update_margin))
244
244
  if update_margin is not None:
245
245
  self._update_size_from_margin(update_margin)
246
246
  if update_size is not None:
@@ -265,27 +265,27 @@ class Position(util.Initializable):
265
265
  self._on_size_update(size_update, realised_pnl_update, self.unrealized_pnl, False)
266
266
  await self.close()
267
267
 
268
- def _update_mark_price(self, mark_price, check_liquidation=True):
268
+ def _update_mark_price(self, mark_price, check_liquidation=True, force_entry_check=False):
269
269
  """
270
270
  Updates position mark_price and triggers size related attributes update
271
271
  :param mark_price: the update mark_price
272
272
  """
273
273
  self.mark_price = mark_price
274
- self._update_prices_if_necessary(mark_price)
274
+ self._update_prices_if_necessary(mark_price, force_entry_check=force_entry_check)
275
275
  if check_liquidation:
276
276
  self._check_for_liquidation()
277
277
  if not self.is_idle() and self.exchange_manager.is_simulated:
278
278
  self.update_value()
279
279
  self.update_pnl()
280
280
 
281
- def _update_prices_if_necessary(self, mark_price):
281
+ def _update_prices_if_necessary(self, mark_price, force_entry_check=False):
282
282
  """
283
283
  Update the position entry price and mark price when their value is 0 or when the position is new
284
284
  :param mark_price: the current mark_price
285
285
  """
286
286
  if self.mark_price == constants.ZERO:
287
287
  self.mark_price = mark_price
288
- if self.entry_price == constants.ZERO:
288
+ if self.entry_price == constants.ZERO and (force_entry_check or not self.is_idle()):
289
289
  self.entry_price = mark_price
290
290
 
291
291
  def _update_size_from_margin(self, margin_update):
@@ -320,7 +320,7 @@ class Position(util.Initializable):
320
320
  """
321
321
  # consider the order filled price as the current reference price for pnl computation
322
322
  # do not check liquidation as our position might be closed by this order
323
- self._update_mark_price(order.filled_price, check_liquidation=False)
323
+ self._update_mark_price(order.filled_price, check_liquidation=False, force_entry_check=True)
324
324
 
325
325
  # get size to close to check if closing
326
326
  size_to_close = self.get_quantity_to_close()
@@ -78,6 +78,35 @@ async def stop_test_exchange_manager(exchange_manager_instance: exchanges.Exchan
78
78
  # let updaters gracefully shutdown
79
79
  await asyncio_tools.wait_asyncio_next_cycle()
80
80
 
81
+ async def _update_ohlcv(
82
+ exchange_manager, symbol: str, time_frame: str, exchange_data: exchange_data_import.ExchangeData,
83
+ history_size=1, start_time=0, end_time=0, close_price_only=False,
84
+ include_latest_candle=True
85
+ ):
86
+ parsed_tf = common_enums.TimeFrames(time_frame)
87
+ if start_time == 0:
88
+ ohlcvs = await exchange_manager.exchange.get_symbol_prices(symbol, parsed_tf, limit=history_size)
89
+ else:
90
+ ohlcvs = []
91
+ async for ohlcv in exchanges.get_historical_ohlcv(
92
+ exchange_manager, symbol, parsed_tf, start_time * 1000, (end_time or time.time()) * 1000,
93
+ request_retry_timeout=BASE_TIMEOUT
94
+ ):
95
+ ohlcvs.extend(ohlcv)
96
+ if not include_latest_candle:
97
+ ohlcvs = ohlcvs[:-1]
98
+ details = exchange_data_import.MarketDetails(
99
+ symbol=symbol,
100
+ time_frame=time_frame,
101
+ close=[ohlcv[common_enums.PriceIndexes.IND_PRICE_CLOSE.value] for ohlcv in ohlcvs],
102
+ open=[ohlcv[common_enums.PriceIndexes.IND_PRICE_OPEN.value] for ohlcv in ohlcvs] if not close_price_only else [],
103
+ high=[ohlcv[common_enums.PriceIndexes.IND_PRICE_HIGH.value] for ohlcv in ohlcvs] if not close_price_only else [],
104
+ low=[ohlcv[common_enums.PriceIndexes.IND_PRICE_LOW.value] for ohlcv in ohlcvs] if not close_price_only else [],
105
+ volume=[ohlcv[common_enums.PriceIndexes.IND_PRICE_VOL.value] for ohlcv in ohlcvs] if not close_price_only else [],
106
+ time=[ohlcv[common_enums.PriceIndexes.IND_PRICE_TIME.value] for ohlcv in ohlcvs],
107
+ )
108
+ exchange_data.markets.append(details)
109
+
81
110
 
82
111
  async def add_symbols_details(
83
112
  exchange_manager, symbols: list, time_frame: str, exchange_data: exchange_data_import.ExchangeData,
@@ -85,34 +114,15 @@ async def add_symbols_details(
85
114
  include_latest_candle=True, reload_markets=False,
86
115
  market_filter: typing.Union[None, typing.Callable[[dict], bool]] = None
87
116
  ) -> exchange_data_import.ExchangeData:
88
- parsed_tf = common_enums.TimeFrames(time_frame)
89
-
90
- async def _update_ohlcv(symbol):
91
- if start_time == 0:
92
- ohlcvs = await exchange_manager.exchange.get_symbol_prices(symbol, parsed_tf, limit=history_size)
93
- else:
94
- ohlcvs = []
95
- async for ohlcv in exchanges.get_historical_ohlcv(
96
- exchange_manager, symbol, parsed_tf, start_time * 1000, (end_time or time.time()) * 1000,
97
- request_retry_timeout=BASE_TIMEOUT
98
- ):
99
- ohlcvs.extend(ohlcv)
100
- if not include_latest_candle:
101
- ohlcvs = ohlcvs[:-1]
102
- details = exchange_data_import.MarketDetails(
103
- symbol=symbol,
104
- time_frame=time_frame,
105
- close=[ohlcv[common_enums.PriceIndexes.IND_PRICE_CLOSE.value] for ohlcv in ohlcvs],
106
- open=[ohlcv[common_enums.PriceIndexes.IND_PRICE_OPEN.value] for ohlcv in ohlcvs] if not close_price_only else [],
107
- high=[ohlcv[common_enums.PriceIndexes.IND_PRICE_HIGH.value] for ohlcv in ohlcvs] if not close_price_only else [],
108
- low=[ohlcv[common_enums.PriceIndexes.IND_PRICE_LOW.value] for ohlcv in ohlcvs] if not close_price_only else [],
109
- volume=[ohlcv[common_enums.PriceIndexes.IND_PRICE_VOL.value] for ohlcv in ohlcvs] if not close_price_only else [],
110
- time=[ohlcv[common_enums.PriceIndexes.IND_PRICE_TIME.value] for ohlcv in ohlcvs],
111
- )
112
- exchange_data.markets.append(details)
113
117
 
114
118
  await ensure_symbol_markets(exchange_manager, reload=reload_markets, market_filter=market_filter)
115
- await asyncio.gather(*(_update_ohlcv(symbol) for symbol in symbols))
119
+ await asyncio.gather(*(
120
+ _update_ohlcv(
121
+ exchange_manager, symbol, time_frame, exchange_data,
122
+ history_size, start_time, end_time, close_price_only, include_latest_candle
123
+ )
124
+ for symbol in symbols
125
+ ))
116
126
  return exchange_data
117
127
 
118
128
 
@@ -135,6 +145,16 @@ async def get_portfolio(exchange_manager, as_float=False, clear_empty=True) -> d
135
145
  }
136
146
 
137
147
 
148
+ async def _get_open_orders(exchange_manager, symbol: str, open_orders: list):
149
+ orders = await exchange_manager.exchange.get_open_orders(symbol=symbol)
150
+ open_orders.extend(
151
+ personal_data.create_order_instance_from_raw(
152
+ exchange_manager.trader, order, force_open_or_pending_creation=True
153
+ ).to_dict()
154
+ for order in orders
155
+ )
156
+
157
+
138
158
  async def get_open_orders(
139
159
  exchange_manager,
140
160
  exchange_data: exchange_data_import.ExchangeData,
@@ -142,17 +162,10 @@ async def get_open_orders(
142
162
  ) -> list:
143
163
  open_orders = []
144
164
 
145
- async def _get_orders(symbol):
146
- orders = await exchange_manager.exchange.get_open_orders(symbol=symbol)
147
- open_orders.extend(
148
- personal_data.create_order_instance_from_raw(
149
- exchange_manager.trader, order, force_open_or_pending_creation=True
150
- ).to_dict()
151
- for order in orders
152
- )
153
-
154
165
  symbols = symbols or [market.symbol for market in exchange_data.markets]
155
- await asyncio.gather(*(_get_orders(symbol) for symbol in symbols))
166
+ await asyncio.gather(*(
167
+ _get_open_orders(exchange_manager, symbol, open_orders) for symbol in symbols
168
+ ))
156
169
  return open_orders
157
170
 
158
171
 
@@ -164,79 +177,99 @@ async def get_order(
164
177
  return await exchange_manager.exchange.get_order(exchange_order_id, symbol=symbol)
165
178
 
166
179
 
180
+ async def _get_cancelled_orders(exchange_manager, symbol: str, cancelled_orders: list):
181
+ orders = await exchange_manager.exchange.get_cancelled_orders(symbol=symbol)
182
+ cancelled_orders.extend(
183
+ personal_data.create_order_instance_from_raw(
184
+ exchange_manager.trader, order, force_open_or_pending_creation=False
185
+ ).to_dict()
186
+ for order in orders
187
+ )
188
+
189
+
167
190
  async def get_cancelled_orders(
168
191
  exchange_manager,
169
192
  exchange_data: exchange_data_import.ExchangeData,
170
193
  symbols: list = None
171
194
  ) -> list:
172
195
  cancelled_orders = []
173
-
174
- async def _get_orders(symbol):
175
- orders = await exchange_manager.exchange.get_cancelled_orders(symbol=symbol)
176
- cancelled_orders.extend(
177
- personal_data.create_order_instance_from_raw(
178
- exchange_manager.trader, order, force_open_or_pending_creation=False
179
- ).to_dict()
180
- for order in orders
181
- )
182
-
183
196
  symbols = symbols or [market.symbol for market in exchange_data.markets]
184
- await asyncio.gather(*(_get_orders(symbol) for symbol in symbols))
197
+ await asyncio.gather(*(
198
+ _get_cancelled_orders(exchange_manager, symbol, cancelled_orders) for symbol in symbols
199
+ ))
185
200
  return cancelled_orders
186
201
 
187
202
 
203
+ async def _get_trades(exchange_manager, symbol: str, trades: list):
204
+ row_trades = await exchange_manager.exchange.get_my_recent_trades(symbol=symbol)
205
+ trades.extend(
206
+ personal_data.create_trade_instance_from_raw(exchange_manager.trader, raw_trade).to_dict()
207
+ for raw_trade in row_trades
208
+ )
209
+
210
+
188
211
  async def get_trades(
189
212
  exchange_manager,
190
213
  exchange_data: exchange_data_import.ExchangeData,
191
214
  symbols: list = None
192
215
  ) -> list:
193
216
  trades = []
194
-
195
- async def _get_trades(symbol):
196
- row_trades = await exchange_manager.exchange.get_my_recent_trades(symbol=symbol)
197
- trades.extend(
198
- personal_data.create_trade_instance_from_raw(exchange_manager.trader, raw_trade).to_dict()
199
- for raw_trade in row_trades
200
- )
201
-
202
217
  symbols = symbols or [market.symbol for market in exchange_data.markets]
203
- await asyncio.gather(*(_get_trades(symbol) for symbol in symbols))
218
+ await asyncio.gather(*(
219
+ _get_trades(exchange_manager, symbol, trades)
220
+ for symbol in symbols
221
+ ))
204
222
  return trades
205
223
 
206
224
 
207
- async def create_orders(
225
+ async def _create_order(
208
226
  exchange_manager,
209
- orders: list,
227
+ order_dict: dict,
210
228
  order_creation_timeout: float,
211
229
  price_by_symbol: dict[str, float],
212
- ) -> list:
213
- async def _create_order(order_dict) -> personal_data.Order:
214
- symbol = order_dict[enums.ExchangeConstantsOrderColumns.SYMBOL.value]
215
- side, order_type = personal_data.parse_order_type(order_dict)
216
- created_order = await exchange_manager.exchange.create_order(
217
- order_type,
218
- symbol,
219
- decimal.Decimal(str(order_dict[enums.ExchangeConstantsOrderColumns.AMOUNT.value])),
220
- price=decimal.Decimal(str(order_dict[enums.ExchangeConstantsOrderColumns.PRICE.value])),
221
- side=side,
222
- current_price=price_by_symbol[symbol],
223
- reduce_only=order_dict[enums.ExchangeConstantsOrderColumns.REDUCE_ONLY.value],
230
+ ) -> typing.Optional[personal_data.Order]:
231
+ symbol = order_dict[enums.ExchangeConstantsOrderColumns.SYMBOL.value]
232
+ side, order_type = personal_data.parse_order_type(order_dict)
233
+ order_params = exchange_manager.exchange.get_order_additional_params(
234
+ personal_data.create_order_instance_from_raw(
235
+ exchange_manager.trader, order_dict, force_open_or_pending_creation=True
224
236
  )
225
- # is private, to use in tests context only
226
- order = personal_data.create_order_instance_from_raw(
227
- exchange_manager.trader, created_order, force_open_or_pending_creation=True
228
- ) if created_order else None
229
- if not order:
230
- return order
231
- if order.status is enums.OrderStatus.PENDING_CREATION and order_creation_timeout > 0:
232
- try:
233
- return await wait_for_other_status(order, order_creation_timeout)
234
- except TimeoutError as err:
235
- logging.get_logger(order.get_logger_name()).error(f"Created order can't be fetched: {err}")
236
- return None
237
+ )
238
+ created_order = await exchange_manager.exchange.create_order(
239
+ order_type,
240
+ symbol,
241
+ decimal.Decimal(str(order_dict[enums.ExchangeConstantsOrderColumns.AMOUNT.value])),
242
+ price=decimal.Decimal(str(order_dict[enums.ExchangeConstantsOrderColumns.PRICE.value])),
243
+ side=side,
244
+ current_price=price_by_symbol[symbol],
245
+ reduce_only=order_dict[enums.ExchangeConstantsOrderColumns.REDUCE_ONLY.value],
246
+ params=order_params
247
+ )
248
+ # is private, to use in tests context only
249
+ order = personal_data.create_order_instance_from_raw(
250
+ exchange_manager.trader, created_order, force_open_or_pending_creation=True
251
+ ) if created_order else None
252
+ if not order:
237
253
  return order
254
+ if order.status is enums.OrderStatus.PENDING_CREATION and order_creation_timeout > 0:
255
+ try:
256
+ return await wait_for_other_status(order, order_creation_timeout)
257
+ except TimeoutError as err:
258
+ logging.get_logger(order.get_logger_name()).error(f"Created order can't be fetched: {err}")
259
+ return None
260
+ return order
261
+
238
262
 
239
- return await asyncio.gather(*(_create_order(order_dict) for order_dict in orders))
263
+ async def create_orders(
264
+ exchange_manager,
265
+ orders: list,
266
+ order_creation_timeout: float,
267
+ price_by_symbol: dict[str, float],
268
+ ) -> list:
269
+ return await asyncio.gather(*(
270
+ _create_order(exchange_manager, order_dict, order_creation_timeout, price_by_symbol)
271
+ for order_dict in orders
272
+ ))
240
273
 
241
274
 
242
275
  async def wait_for_other_status(order: personal_data.Order, timeout) -> personal_data.Order:
@@ -327,12 +327,32 @@ async def test_get_futures_max_order_size(future_trader_simulator_with_default_l
327
327
  exchange_manager_inst, symbol, enums.TradeOrderSide.BUY,
328
328
  decimal.Decimal("37000"), False, l2_current_symbol_holding, l2_market_quantity
329
329
  ) == (decimal.Decimal('0.1346503937177512307045985802'), True)
330
+ # reduce only (position is empty)
331
+ assert personal_data.get_futures_max_order_size(
332
+ exchange_manager_inst, symbol, enums.TradeOrderSide.BUY,
333
+ decimal.Decimal("37000"), True, l2_current_symbol_holding, l2_market_quantity
334
+ ) == (constants.ZERO, False)
330
335
 
331
336
  # with short position
332
337
  assert personal_data.get_futures_max_order_size(
333
338
  exchange_manager_inst, symbol, enums.TradeOrderSide.SELL,
334
339
  decimal.Decimal("37000"), False, l2_current_symbol_holding, l2_market_quantity
335
340
  ) == (decimal.Decimal('0.1345431452958334678764786291'), True)
341
+ # reduce only (position is empty)
342
+ assert personal_data.get_futures_max_order_size(
343
+ exchange_manager_inst, symbol, enums.TradeOrderSide.SELL,
344
+ decimal.Decimal("37000"), True, l2_current_symbol_holding, l2_market_quantity
345
+ ) == (constants.ZERO, False)
346
+
347
+ # reduce only (position is NOT empty)
348
+ position = exchange_manager_inst.exchange_personal_data.positions_manager.get_symbol_positions(symbol)[0]
349
+ await position.update(mark_price=decimal.Decimal(37000), update_margin=decimal.Decimal(4))
350
+ position_size = position.size
351
+ assert position_size == decimal.Decimal("0.0005405405405405405405405405405")
352
+ assert personal_data.get_futures_max_order_size(
353
+ exchange_manager_inst, symbol, enums.TradeOrderSide.SELL,
354
+ decimal.Decimal("37000"), True, l2_current_symbol_holding, l2_market_quantity
355
+ ) == (position_size, False)
336
356
 
337
357
 
338
358
  @pytest.mark.asyncio
@@ -78,6 +78,7 @@ async def test_update_margin_linear(btc_usdt_future_trader_simulator_with_defaul
78
78
  assert position_inst.mark_price == constants.ZERO
79
79
  assert position_inst.initial_margin == constants.ZERO
80
80
  assert position_inst.size == constants.ZERO
81
+ assert position_inst.quantity == constants.ZERO
81
82
  assert position_inst.creation_time > 0
82
83
  initial_creation_time = 123
83
84
  # force changing creation time
@@ -86,16 +87,18 @@ async def test_update_margin_linear(btc_usdt_future_trader_simulator_with_defaul
86
87
  await position_inst.update(mark_price=constants.ONE, update_margin=decimal.Decimal(5))
87
88
  assert position_inst.mark_price == constants.ONE
88
89
  assert position_inst.initial_margin == decimal.Decimal(5)
90
+ assert position_inst.entry_price == constants.ONE
89
91
  assert position_inst.margin == decimal.Decimal("5.0300") # initial margin + closing fees
90
92
  assert position_inst.size == decimal.Decimal(50)
91
93
  # creation time got updated: site changed
92
94
  assert initial_creation_time != position_inst.creation_time
93
95
  updated_creation_time = position_inst.creation_time
94
96
 
95
- await position_inst.update(mark_price=constants.ONE, update_margin=-decimal.Decimal(3))
96
- assert position_inst.mark_price == constants.ONE
97
+ await position_inst.update(mark_price=decimal.Decimal("1.1"), update_margin=-decimal.Decimal(3))
98
+ assert position_inst.mark_price == decimal.Decimal("1.1")
97
99
  assert position_inst.initial_margin == decimal.Decimal(2)
98
- assert position_inst.margin == decimal.Decimal("2.0120")
100
+ assert position_inst.entry_price == constants.ONE # did not change
101
+ assert position_inst.margin == decimal.Decimal("2.01320")
99
102
  assert position_inst.size == decimal.Decimal(20)
100
103
  # creation time did not get updated
101
104
  assert updated_creation_time == position_inst.creation_time
@@ -113,16 +116,25 @@ async def test_update_margin_inverse(btc_usdt_future_trader_simulator_with_defau
113
116
 
114
117
  await position_inst.update(mark_price=constants.ONE, update_margin=decimal.Decimal(8) / constants.ONE_HUNDRED)
115
118
  assert position_inst.mark_price == constants.ONE
119
+ assert position_inst.entry_price == constants.ONE
116
120
  assert position_inst.initial_margin == decimal.Decimal('0.08')
117
121
  assert position_inst.margin == decimal.Decimal("0.080288") # initial margin + closing fees
118
122
  assert position_inst.size == decimal.Decimal('0.4')
119
123
 
120
124
  await position_inst.update(mark_price=constants.ONE, update_margin=-constants.ONE / constants.ONE_HUNDRED)
121
125
  assert position_inst.mark_price == constants.ONE
122
- assert position_inst.initial_margin == decimal.Decimal('0.07')
126
+ assert position_inst.entry_price == constants.ONE # did not change
127
+ assert position_inst.initial_margin == decimal.Decimal('0.07') # - 0.01
123
128
  assert position_inst.margin == decimal.Decimal("0.070252")
124
129
  assert position_inst.size == decimal.Decimal('0.35')
125
130
 
131
+ await position_inst.update(mark_price=decimal.Decimal("0.9"), update_margin=-constants.ONE / constants.ONE_HUNDRED)
132
+ assert position_inst.mark_price == decimal.Decimal("0.9")
133
+ assert position_inst.entry_price == constants.ONE # did not change
134
+ assert position_inst.initial_margin == decimal.Decimal('0.06') # - 0.01
135
+ assert position_inst.margin == decimal.Decimal("0.06024")
136
+ assert position_inst.size == decimal.Decimal('0.3')
137
+
126
138
 
127
139
  async def test_update_entry_price_when_switching_side_on_one_way(btc_usdt_future_trader_simulator_with_default_linear):
128
140
  config, exchange_manager_inst, trader_inst, default_contract, position_inst = btc_usdt_future_trader_simulator_with_default_linear