OctoBot-Trading 2.4.209__tar.gz → 2.4.211__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.
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/CHANGELOG.md +11 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/OctoBot_Trading.egg-info/requires.txt +1 -1
- {OctoBot-Trading-2.4.209/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.211}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/README.md +1 -1
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/api/orders.py +16 -7
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/enums.py +5 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/traders/trader.py +68 -42
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/__init__.py +2 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/abstract_trading_mode.py +30 -17
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/channel/abstract_mode_consumer.py +12 -2
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/channel/abstract_mode_producer.py +21 -8
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/channel/mode.py +7 -2
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/modes_util.py +30 -6
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +1 -1
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/price.py +1 -1
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +4 -4
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +2 -1
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/order.py +4 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/signals/__init__.py +8 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/signals/signal_creation.py +24 -16
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/signals/trading_signal_bundle_builder.py +40 -19
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/signals/util.py +66 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/requirements.txt +1 -1
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/traders/test_trader.py +4 -2
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/modes/test_abstract_mode_consumer.py +10 -5
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/modes/test_abstract_trading_mode.py +3 -3
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/modes/test_modes_util.py +30 -8
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/signals/test_util.py +143 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/LICENSE +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/api/contracts.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/api/exchange.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/constants.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/errors.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/config/exchange_credentials_data.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/config/proxy_config.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/connectors/util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/util/exchange_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/util/symbol_details.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/mode_activity.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/mode_config.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/active_order_swap_strategies/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/active_order_swap_strategies/active_order_swap_strategy.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/active_order_swap_strategies/stop_first_active_order_swap_strategy.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/active_order_swap_strategies/take_profit_first_active_order_swap_strategy.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/groups/trailing_on_filled_tp_balanced_order_group.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/order_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/trailing_profiles/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/trailing_profiles/filled_take_profit_trailing_profile.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/trailing_profiles/trailing_price_step.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile_types.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/triggers/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/triggers/base_trigger.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/triggers/price_trigger.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/resolved_orders_portfolio_delta.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/sub_portfolio_data.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/position.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/storage/orders_storage.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/util/test_tools/exchange_data.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/setup.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/connectors/ccxt/test_ccxt_client_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/connectors/test_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/test_exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/exchanges/util/test_exchange_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/active_order_swap_strategies/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/active_order_swap_strategies/test_active_order_swap_strategy.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/active_order_swap_strategies/test_stop_first_active_order_swap_strategy.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/active_order_swap_strategies/test_take_profit_first_active_order_swap_strategy.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/groups/test_trailing_on_filled_tp_balanced_order_group.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/test_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/test_order_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/trailing_profiles/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/trailing_profiles/test_filled_take_profit_trailing_profile.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/trailing_profiles/test_trailing_profile_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/triggers/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/triggers/test_base_trigger.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/triggers/test_price_trigger.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/test_portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/test_sub_portfolio_data.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/trades/test_trade_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/trades/test_trade_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_ascendex.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_binance.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bingx.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bitget.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bithumb.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bitmart.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bitmex.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bitso.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bybit.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_coinbase.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_coinex.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_gateio.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_hollaex.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_htx.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_hyperliquid.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_kraken.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_kucoin.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_mexc.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_ndax.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_okcoin.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_okx.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_phemex.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_poloniex.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_upbit.py +0 -0
- {OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,17 @@ 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.211] - 2025-08-24
|
8
|
+
### Added
|
9
|
+
[Signals] add dependencies
|
10
|
+
|
11
|
+
## [2.4.210] - 2025-08-22
|
12
|
+
### Added
|
13
|
+
[TradingModes] add get_trading_modes_of_this_type_on_this_matrix
|
14
|
+
### Updated
|
15
|
+
[Orders] handle get_computed_fee on cleared orders
|
16
|
+
[Keywords] make price and amount parsing errors more detailed
|
17
|
+
|
7
18
|
## [2.4.209] - 2025-08-21
|
8
19
|
### Updated
|
9
20
|
[Portfolio] consider order fees in delta when from exchange
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.211
|
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.
|
19
|
+
# OctoBot-Trading [2.4.211](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
|
20
20
|
[](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
|
[](https://pypi.python.org/pypi/OctoBot-Trading/)
|
22
22
|
[](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.
|
3
|
+
Version: 2.4.211
|
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.
|
19
|
+
# OctoBot-Trading [2.4.211](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
|
20
20
|
[](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
|
[](https://pypi.python.org/pypi/OctoBot-Trading/)
|
22
22
|
[](https://coveralls.io/github/Drakkar-Software/OctoBot-Trading?branch=master)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# OctoBot-Trading [2.4.
|
1
|
+
# OctoBot-Trading [2.4.211](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
|
2
2
|
[](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
|
[](https://pypi.python.org/pypi/OctoBot-Trading/)
|
4
4
|
[](https://coveralls.io/github/Drakkar-Software/OctoBot-Trading?branch=master)
|
@@ -14,8 +14,10 @@
|
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library.
|
16
16
|
import decimal
|
17
|
+
import typing
|
17
18
|
|
18
19
|
import octobot_commons.logging as logging
|
20
|
+
import octobot_commons.signals as signals
|
19
21
|
|
20
22
|
import octobot_trading.personal_data as personal_data
|
21
23
|
import octobot_trading.enums
|
@@ -32,7 +34,7 @@ async def create_order(exchange_manager,
|
|
32
34
|
quantity: float,
|
33
35
|
price: float,
|
34
36
|
wait_for_creation=True,
|
35
|
-
creation_timeout=
|
37
|
+
creation_timeout=constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT) -> personal_data.Order:
|
36
38
|
return await exchange_manager.trader.create_order(
|
37
39
|
exchange_manager.trader.create_order_instance(order_type=order_type,
|
38
40
|
symbol=symbol,
|
@@ -56,17 +58,24 @@ def get_pending_creation_orders(exchange_manager) -> list:
|
|
56
58
|
return exchange_manager.exchange_personal_data.orders_manager.pending_creation_orders
|
57
59
|
|
58
60
|
|
59
|
-
async def cancel_all_open_orders(exchange_manager, emit_trading_signals=True) -> bool:
|
61
|
+
async def cancel_all_open_orders(exchange_manager, emit_trading_signals=True) -> tuple[bool, list]:
|
60
62
|
return await exchange_manager.trader.cancel_all_open_orders(emit_trading_signals=emit_trading_signals)
|
61
63
|
|
62
64
|
|
63
|
-
async def cancel_all_open_orders_with_currency(
|
64
|
-
|
65
|
+
async def cancel_all_open_orders_with_currency(
|
66
|
+
exchange_manager, currency, emit_trading_signals=True, dependencies=None
|
67
|
+
) -> tuple[bool, signals.SignalDependencies]:
|
68
|
+
return await exchange_manager.trader.cancel_all_open_orders_with_currency(
|
69
|
+
currency, emit_trading_signals=emit_trading_signals, dependencies=dependencies
|
70
|
+
)
|
65
71
|
|
66
72
|
|
67
|
-
async def cancel_order_with_id(
|
68
|
-
|
69
|
-
|
73
|
+
async def cancel_order_with_id(
|
74
|
+
exchange_manager, order_id, emit_trading_signals=True, wait_for_cancelling=True, dependencies=None
|
75
|
+
) -> tuple[bool, typing.Optional[signals.SignalDependencies]]:
|
76
|
+
return await exchange_manager.trader.cancel_order_with_id(
|
77
|
+
order_id, emit_trading_signals=emit_trading_signals, wait_for_cancelling=wait_for_cancelling, dependencies=dependencies
|
78
|
+
)
|
70
79
|
|
71
80
|
|
72
81
|
def get_order_exchange_name(order) -> str:
|
@@ -593,6 +593,11 @@ class TradingSignalOrdersActions(enum.Enum):
|
|
593
593
|
CANCEL = "cancel"
|
594
594
|
|
595
595
|
|
596
|
+
class TradingSignalDependencies(enum.Enum):
|
597
|
+
ORDER_ID = "order_id"
|
598
|
+
POSITION_SYMBOL = "position_symbol"
|
599
|
+
|
600
|
+
|
596
601
|
class TradingSignalPositionsActions(enum.Enum):
|
597
602
|
EDIT = "edit"
|
598
603
|
|
{OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/exchanges/traders/trader.py
RENAMED
@@ -20,6 +20,7 @@ import typing
|
|
20
20
|
|
21
21
|
import octobot_commons.logging as logging
|
22
22
|
import octobot_commons.html_util as html_util
|
23
|
+
import octobot_commons.signals as commons_signals
|
23
24
|
import octobot_commons.constants
|
24
25
|
|
25
26
|
import octobot_trading.personal_data.orders.order_factory as order_factory
|
@@ -142,7 +143,8 @@ class Trader(util.Initializable):
|
|
142
143
|
async def create_artificial_order(
|
143
144
|
self, order_type, symbol, current_price, quantity, price, reduce_only, close_position,
|
144
145
|
emit_trading_signals=False, wait_for_creation=True,
|
145
|
-
creation_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT
|
146
|
+
creation_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT,
|
147
|
+
dependencies: typing.Optional[commons_signals.SignalDependencies] = None
|
146
148
|
):
|
147
149
|
"""
|
148
150
|
Creates an OctoBot managed order (managed orders example: stop loss that is not published on the exchange and
|
@@ -164,7 +166,8 @@ class Trader(util.Initializable):
|
|
164
166
|
emit_trading_signals and signals.should_emit_trading_signal(self.exchange_manager),
|
165
167
|
order,
|
166
168
|
wait_for_creation=wait_for_creation,
|
167
|
-
creation_timeout=creation_timeout
|
169
|
+
creation_timeout=creation_timeout,
|
170
|
+
dependencies=dependencies
|
168
171
|
)
|
169
172
|
|
170
173
|
async def edit_order(self, order,
|
@@ -435,7 +438,7 @@ class Trader(util.Initializable):
|
|
435
438
|
|
436
439
|
async def update_order_as_active(
|
437
440
|
self, order, params: dict = None, wait_for_creation=True, raise_all_creation_error=False,
|
438
|
-
creation_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT
|
441
|
+
creation_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT,
|
439
442
|
):
|
440
443
|
if not self.enable_inactive_orders:
|
441
444
|
self.logger.error(f"Can't update order as active when {self.enable_inactive_orders=}.")
|
@@ -512,17 +515,17 @@ class Trader(util.Initializable):
|
|
512
515
|
return False
|
513
516
|
is_order_refreshing = order.is_refreshing()
|
514
517
|
if order_status is enums.OrderStatus.CANCELED:
|
515
|
-
order.status =
|
518
|
+
order.status = enums.OrderStatus.CANCELED
|
516
519
|
self.logger.debug(f"Successfully cancelled order {order}")
|
517
520
|
elif order_status is enums.OrderStatus.PENDING_CANCEL:
|
518
|
-
order.status =
|
521
|
+
order.status = enums.OrderStatus.PENDING_CANCEL
|
519
522
|
self.logger.debug(f"Order cancel in progress for {order}")
|
520
523
|
else:
|
521
|
-
order.status =
|
524
|
+
order.status = enums.OrderStatus.CANCELED
|
522
525
|
|
523
526
|
if not is_order_refreshing:
|
524
527
|
# don't override state if order is already refreshing (most likely from open orders updater)
|
525
|
-
await order.on_cancel(force_cancel=order.status is
|
528
|
+
await order.on_cancel(force_cancel=order.status is enums.OrderStatus.CANCELED,
|
526
529
|
is_from_exchange_data=False,
|
527
530
|
ignored_order=ignored_order)
|
528
531
|
if wait_for_cancelling and (order.is_refreshing() or order.is_pending()):
|
@@ -618,7 +621,7 @@ class Trader(util.Initializable):
|
|
618
621
|
for order in orders_to_cancel:
|
619
622
|
await order.lock.acquire()
|
620
623
|
if self.simulate or order.is_self_managed():
|
621
|
-
order.status =
|
624
|
+
order.status = enums.OrderStatus.CANCELED
|
622
625
|
else:
|
623
626
|
cancel_on_exchange = True
|
624
627
|
if cancel_on_exchange:
|
@@ -657,16 +660,19 @@ class Trader(util.Initializable):
|
|
657
660
|
await order.state.wait_for_terminate(cancelling_timeout)
|
658
661
|
self.logger.debug(f"Completed order cancelling, order: {order}")
|
659
662
|
|
660
|
-
async def cancel_order_with_id(
|
661
|
-
|
662
|
-
|
663
|
+
async def cancel_order_with_id(
|
664
|
+
self, exchange_order_id, emit_trading_signals=False,
|
665
|
+
wait_for_cancelling=True,
|
666
|
+
cancelling_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT,
|
667
|
+
dependencies: typing.Optional[commons_signals.SignalDependencies] = None
|
668
|
+
) -> tuple[bool, typing.Optional[commons_signals.SignalDependencies]]:
|
663
669
|
"""
|
664
670
|
Gets order matching order_id from the OrderManager and calls self.cancel_order() on it
|
665
671
|
:param exchange_order_id: Exchange id of the order to cancel
|
666
672
|
:param emit_trading_signals: when true, trading signals will be emitted
|
667
673
|
:param wait_for_cancelling: when True, always make sure the order is completely cancelled before returning.
|
668
674
|
:param cancelling_timeout: time before raising a timeout error when waiting for an order cancel
|
669
|
-
:return: True if cancel is successful, False if order is not found or cancellation failed
|
675
|
+
:return: (True if cancel is successful, False if order is not found or cancellation failed, dependency_id)
|
670
676
|
"""
|
671
677
|
try:
|
672
678
|
order = self.exchange_manager.exchange_personal_data.orders_manager.get_order(exchange_order_id)
|
@@ -677,17 +683,20 @@ class Trader(util.Initializable):
|
|
677
683
|
order,
|
678
684
|
wait_for_cancelling=wait_for_cancelling,
|
679
685
|
cancelling_timeout=cancelling_timeout,
|
686
|
+
dependencies=dependencies
|
680
687
|
)
|
681
688
|
except KeyError:
|
682
|
-
return False
|
689
|
+
return False, None
|
683
690
|
|
684
|
-
async def cancel_open_orders(
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
+
async def cancel_open_orders(
|
692
|
+
self, symbol, cancel_loaded_orders=True, side=None,
|
693
|
+
emit_trading_signals=False,
|
694
|
+
wait_for_cancelling=True,
|
695
|
+
cancelling_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT,
|
696
|
+
since: typing.Union[int, float] = octobot_trading.constants.NO_DATA_LIMIT,
|
697
|
+
until: typing.Union[int, float] = octobot_trading.constants.NO_DATA_LIMIT,
|
698
|
+
dependencies: typing.Optional[commons_signals.SignalDependencies] = None
|
699
|
+
) -> tuple[bool, list]:
|
691
700
|
"""
|
692
701
|
Should be called only if the goal is to cancel all open orders for a given symbol
|
693
702
|
:param symbol: The symbol to cancel all orders on
|
@@ -708,12 +717,14 @@ class Trader(util.Initializable):
|
|
708
717
|
(cancel_loaded_orders or order.is_from_this_octobot):
|
709
718
|
try:
|
710
719
|
async with signals.remote_signal_publisher(self.exchange_manager, order.symbol, emit_trading_signals):
|
711
|
-
cancelled = await signals.cancel_order(
|
720
|
+
cancelled, _ = await signals.cancel_order(
|
712
721
|
self.exchange_manager,
|
713
722
|
emit_trading_signals and signals.should_emit_trading_signal(self.exchange_manager),
|
714
723
|
order,
|
715
724
|
wait_for_cancelling=wait_for_cancelling,
|
716
|
-
cancelling_timeout=cancelling_timeout,
|
725
|
+
cancelling_timeout=cancelling_timeout,
|
726
|
+
dependencies=dependencies
|
727
|
+
)
|
717
728
|
if cancelled:
|
718
729
|
cancelled_orders.append(order)
|
719
730
|
all_cancelled = cancelled and all_cancelled
|
@@ -725,7 +736,7 @@ class Trader(util.Initializable):
|
|
725
736
|
self, currency, emit_trading_signals=False,
|
726
737
|
wait_for_cancelling=True,
|
727
738
|
cancelling_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT
|
728
|
-
) -> bool:
|
739
|
+
) -> tuple[bool, commons_signals.SignalDependencies]:
|
729
740
|
"""
|
730
741
|
Should be called only if the goal is to cancel all open orders for each traded symbol containing the
|
731
742
|
given currency.
|
@@ -737,48 +748,59 @@ class Trader(util.Initializable):
|
|
737
748
|
"""
|
738
749
|
all_cancelled = True
|
739
750
|
symbols = util.get_pairs(self.config, currency, enabled_only=True)
|
751
|
+
cancelled_dependencies = commons_signals.SignalDependencies()
|
740
752
|
if symbols:
|
741
753
|
for symbol in symbols:
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
754
|
+
new_all_cancelled, cancelled_orders = await self.cancel_open_orders(
|
755
|
+
symbol, emit_trading_signals=emit_trading_signals,
|
756
|
+
wait_for_cancelling=wait_for_cancelling,
|
757
|
+
cancelling_timeout=cancelling_timeout
|
758
|
+
)
|
759
|
+
all_cancelled = new_all_cancelled and all_cancelled
|
760
|
+
cancelled_dependencies.extend(signals.get_orders_dependencies(cancelled_orders))
|
761
|
+
return all_cancelled, cancelled_dependencies
|
747
762
|
|
748
763
|
async def cancel_all_open_orders(
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
764
|
+
self, emit_trading_signals=False,
|
765
|
+
wait_for_cancelling=True,
|
766
|
+
cancelling_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT,
|
767
|
+
dependencies: typing.Optional[commons_signals.SignalDependencies] = None
|
768
|
+
) -> tuple[bool, commons_signals.SignalDependencies]:
|
753
769
|
"""
|
754
770
|
Cancel all open orders registered on this bot.
|
755
771
|
:param emit_trading_signals: when true, trading signals will be emitted
|
756
772
|
:param wait_for_cancelling: when True, always make sure the order is completely cancelled before returning.
|
757
773
|
:param cancelling_timeout: time before raising a timeout error when waiting for an order cancel
|
758
|
-
:return: True if all orders got cancelled, False if an error occurred
|
774
|
+
:return: (True if all orders got cancelled, False if an error occurred and dependencies)
|
759
775
|
"""
|
760
776
|
all_cancelled = True
|
777
|
+
dependencies = commons_signals.SignalDependencies()
|
761
778
|
for order in self.exchange_manager.exchange_personal_data.orders_manager.get_open_orders():
|
762
779
|
if not order.is_cancelled():
|
763
780
|
try:
|
764
781
|
async with signals.remote_signal_publisher(
|
765
782
|
self.exchange_manager, order.symbol, emit_trading_signals
|
766
783
|
):
|
767
|
-
|
784
|
+
cancelled, new_dependencies = await signals.cancel_order(
|
768
785
|
self.exchange_manager,
|
769
786
|
emit_trading_signals and signals.should_emit_trading_signal(self.exchange_manager),
|
770
787
|
order,
|
771
788
|
wait_for_cancelling=wait_for_cancelling,
|
772
|
-
cancelling_timeout=cancelling_timeout,
|
789
|
+
cancelling_timeout=cancelling_timeout,
|
790
|
+
dependencies=dependencies
|
791
|
+
)
|
792
|
+
if cancelled:
|
793
|
+
dependencies.extend(new_dependencies)
|
794
|
+
all_cancelled = cancelled and all_cancelled
|
773
795
|
except (errors.OrderCancelError, errors.UnexpectedExchangeSideOrderStateError) as err:
|
774
796
|
self.logger.warning(f"Skipping order cancel: {err} ({err.__class__.__name__})")
|
775
797
|
all_cancelled = False
|
776
|
-
return all_cancelled
|
798
|
+
return all_cancelled, dependencies
|
777
799
|
|
778
800
|
async def _sell_everything(self, symbol, inverted, timeout=None):
|
779
801
|
created_orders = []
|
780
|
-
order_type =
|
781
|
-
if inverted else
|
802
|
+
order_type = enums.TraderOrderType.BUY_MARKET \
|
803
|
+
if inverted else enums.TraderOrderType.SELL_MARKET
|
782
804
|
async with self.exchange_manager.exchange_personal_data.portfolio_manager.portfolio.lock:
|
783
805
|
current_symbol_holding, current_market_quantity, _, price, symbol_market = \
|
784
806
|
await order_util.get_pre_order_data(self.exchange_manager, symbol, timeout=timeout)
|
@@ -839,9 +861,12 @@ class Trader(util.Initializable):
|
|
839
861
|
Positions
|
840
862
|
"""
|
841
863
|
|
842
|
-
async def close_position(
|
843
|
-
|
844
|
-
|
864
|
+
async def close_position(
|
865
|
+
self, position, limit_price=None, timeout=1, emit_trading_signals=False,
|
866
|
+
wait_for_creation=True,
|
867
|
+
creation_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT,
|
868
|
+
dependencies: typing.Optional[commons_signals.SignalDependencies] = None
|
869
|
+
):
|
845
870
|
"""
|
846
871
|
Creates a close position order
|
847
872
|
:param position: the position to close
|
@@ -885,7 +910,8 @@ class Trader(util.Initializable):
|
|
885
910
|
emit_trading_signals and signals.should_emit_trading_signal(self.exchange_manager),
|
886
911
|
current_order,
|
887
912
|
wait_for_creation=wait_for_creation,
|
888
|
-
creation_timeout=creation_timeout
|
913
|
+
creation_timeout=creation_timeout,
|
914
|
+
dependencies=dependencies
|
889
915
|
)
|
890
916
|
created_orders.append(order)
|
891
917
|
return created_orders
|
@@ -72,6 +72,7 @@ from octobot_trading.modes.modes_util import (
|
|
72
72
|
get_instantly_filled_limit_order_adapted_price,
|
73
73
|
get_instantly_filled_limit_order_adapted_price_and_quantity,
|
74
74
|
notify_portfolio_optimization_complete,
|
75
|
+
get_trading_modes_of_this_type_on_this_matrix,
|
75
76
|
)
|
76
77
|
|
77
78
|
__all__ = [
|
@@ -102,4 +103,5 @@ __all__ = [
|
|
102
103
|
"get_instantly_filled_limit_order_adapted_price",
|
103
104
|
"get_instantly_filled_limit_order_adapted_price_and_quantity",
|
104
105
|
"notify_portfolio_optimization_complete",
|
106
|
+
"get_trading_modes_of_this_type_on_this_matrix",
|
105
107
|
]
|
{OctoBot-Trading-2.4.209 → OctoBot-Trading-2.4.211}/octobot_trading/modes/abstract_trading_mode.py
RENAMED
@@ -24,6 +24,7 @@ import octobot_commons.enums as common_enums
|
|
24
24
|
import octobot_commons.logging as logging
|
25
25
|
import octobot_commons.tentacles_management as abstract_tentacle
|
26
26
|
import octobot_commons.configuration
|
27
|
+
import octobot_commons.signals as commons_signals
|
27
28
|
|
28
29
|
import async_channel.constants as channel_constants
|
29
30
|
import async_channel.channels as channels
|
@@ -563,20 +564,27 @@ class AbstractTradingMode(abstract_tentacle.AbstractTentacle):
|
|
563
564
|
as signal_builder:
|
564
565
|
yield signal_builder
|
565
566
|
|
566
|
-
async def create_order(
|
567
|
-
|
568
|
-
|
567
|
+
async def create_order(
|
568
|
+
self, order, loaded: bool = False, params: dict = None,
|
569
|
+
wait_for_creation=True, creation_timeout=constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT,
|
570
|
+
dependencies: typing.Optional[commons_signals.SignalDependencies] = None
|
571
|
+
):
|
569
572
|
return await signals.create_order(
|
570
573
|
self.exchange_manager, self.should_emit_trading_signal(), order,
|
571
574
|
loaded=loaded, params=params,
|
572
|
-
wait_for_creation=wait_for_creation, creation_timeout=creation_timeout
|
575
|
+
wait_for_creation=wait_for_creation, creation_timeout=creation_timeout,
|
576
|
+
dependencies=dependencies
|
573
577
|
)
|
574
578
|
|
575
|
-
async def cancel_order(
|
579
|
+
async def cancel_order(
|
580
|
+
self, order, ignored_order: object = None, wait_for_cancelling: bool = True,
|
581
|
+
dependencies: typing.Optional[commons_signals.SignalDependencies] = None
|
582
|
+
) -> tuple[bool, commons_signals.SignalDependencies]:
|
576
583
|
return await signals.cancel_order(
|
577
584
|
self.exchange_manager, self.should_emit_trading_signal(), order,
|
578
585
|
ignored_order=ignored_order,
|
579
|
-
wait_for_cancelling=wait_for_cancelling
|
586
|
+
wait_for_cancelling=wait_for_cancelling,
|
587
|
+
dependencies=dependencies
|
580
588
|
)
|
581
589
|
|
582
590
|
async def cancel_all_orders(
|
@@ -584,36 +592,41 @@ class AbstractTradingMode(abstract_tentacle.AbstractTentacle):
|
|
584
592
|
symbol: str,
|
585
593
|
allow_single_order_cancel_fallback: bool,
|
586
594
|
wait_for_cancelling: bool = True,
|
587
|
-
cancelling_timeout: float = constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT
|
595
|
+
cancelling_timeout: float = constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT,
|
588
596
|
) -> bool:
|
589
597
|
# todo send signals when implementation will be necessary
|
590
598
|
return await self.exchange_manager.trader.cancel_all_orders(
|
591
599
|
symbol,
|
592
600
|
allow_single_order_cancel_fallback,
|
593
601
|
wait_for_cancelling=wait_for_cancelling,
|
594
|
-
cancelling_timeout=cancelling_timeout
|
602
|
+
cancelling_timeout=cancelling_timeout,
|
595
603
|
)
|
596
604
|
|
597
|
-
async def edit_order(
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
605
|
+
async def edit_order(
|
606
|
+
self, order,
|
607
|
+
edited_quantity: decimal.Decimal = None,
|
608
|
+
edited_price: decimal.Decimal = None,
|
609
|
+
edited_stop_price: decimal.Decimal = None,
|
610
|
+
edited_current_price: decimal.Decimal = None,
|
611
|
+
params: dict = None,
|
612
|
+
dependencies: typing.Optional[commons_signals.SignalDependencies] = None
|
613
|
+
) -> bool:
|
603
614
|
return await signals.edit_order(
|
604
615
|
self.exchange_manager, self.should_emit_trading_signal(), order,
|
605
616
|
edited_quantity=edited_quantity,
|
606
617
|
edited_price=edited_price,
|
607
618
|
edited_stop_price=edited_stop_price,
|
608
619
|
edited_current_price=edited_current_price,
|
609
|
-
params=params
|
620
|
+
params=params,
|
621
|
+
dependencies=dependencies
|
610
622
|
)
|
611
623
|
|
612
624
|
async def set_leverage(
|
613
|
-
self, symbol: str, side: typing.Optional[enums.PositionSide], leverage: decimal.Decimal
|
625
|
+
self, symbol: str, side: typing.Optional[enums.PositionSide], leverage: decimal.Decimal,
|
626
|
+
dependencies: typing.Optional[commons_signals.SignalDependencies] = None
|
614
627
|
) -> bool:
|
615
628
|
return await signals.set_leverage(
|
616
|
-
self.exchange_manager, self.should_emit_trading_signal(), symbol, side, leverage
|
629
|
+
self.exchange_manager, self.should_emit_trading_signal(), symbol, side, leverage, dependencies=dependencies
|
617
630
|
)
|
618
631
|
|
619
632
|
async def get_additional_metadata(self, is_backtesting):
|
@@ -15,7 +15,9 @@
|
|
15
15
|
# You should have received a copy of the GNU Lesser General Public
|
16
16
|
# License along with this library.
|
17
17
|
import asyncio
|
18
|
+
import typing
|
18
19
|
|
20
|
+
import octobot_commons.signals as commons_signals
|
19
21
|
import octobot_commons.symbols as symbol_util
|
20
22
|
import octobot_commons.constants as commons_constants
|
21
23
|
|
@@ -30,6 +32,9 @@ from octobot_trading.enums import ExchangeConstantsMarketStatusColumns as Ecmsc
|
|
30
32
|
|
31
33
|
|
32
34
|
class AbstractTradingModeConsumer(modes_channel.ModeChannelConsumer):
|
35
|
+
CREATE_ORDER_DATA_PARAM = "data"
|
36
|
+
CREATE_ORDER_DEPENDENCIES_PARAM = "dependencies"
|
37
|
+
|
33
38
|
def __init__(self, trading_mode):
|
34
39
|
super().__init__()
|
35
40
|
self.trading_mode = trading_mode
|
@@ -56,10 +61,15 @@ class AbstractTradingModeConsumer(modes_channel.ModeChannelConsumer):
|
|
56
61
|
self.exchange_manager = None
|
57
62
|
self.previous_call_error_per_symbol = None
|
58
63
|
|
59
|
-
async def internal_callback(
|
64
|
+
async def internal_callback(
|
65
|
+
self, trading_mode_name, cryptocurrency, symbol, time_frame, final_note, state,
|
66
|
+
data, dependencies: typing.Optional[commons_signals.SignalDependencies] = None
|
67
|
+
):
|
60
68
|
# creates a new order (or multiple split orders), always check self.can_create_order() first.
|
61
69
|
try:
|
62
|
-
await self.create_order_if_possible(
|
70
|
+
await self.create_order_if_possible(
|
71
|
+
symbol, final_note, state, data=data, dependencies=dependencies
|
72
|
+
)
|
63
73
|
self.previous_call_error_per_symbol[symbol] = None
|
64
74
|
except errors.MissingMinimalExchangeTradeVolume as err:
|
65
75
|
self.previous_call_error_per_symbol[symbol] = err
|
@@ -27,6 +27,7 @@ import octobot_commons.logging as logging
|
|
27
27
|
import octobot_commons.databases as databases
|
28
28
|
import octobot_commons.configuration as commons_configuration
|
29
29
|
import octobot_commons.asyncio_tools as asyncio_tools
|
30
|
+
import octobot_commons.signals as commons_signals
|
30
31
|
|
31
32
|
import octobot_trading.enums as enums
|
32
33
|
import octobot_trading.constants as constants
|
@@ -400,17 +401,21 @@ class AbstractTradingModeProducer(modes_channel.ModeChannelProducer):
|
|
400
401
|
"""
|
401
402
|
raise NotImplementedError("set_final_eval not implemented")
|
402
403
|
|
403
|
-
async def submit_trading_evaluation(
|
404
|
-
|
405
|
-
|
406
|
-
|
404
|
+
async def submit_trading_evaluation(
|
405
|
+
self, cryptocurrency, symbol, time_frame,
|
406
|
+
final_note=constants.ZERO,
|
407
|
+
state=enums.EvaluatorStates.NEUTRAL,
|
408
|
+
data=None,
|
409
|
+
dependencies: typing.Optional[commons_signals.SignalDependencies] = None
|
410
|
+
) -> None:
|
407
411
|
await self.send(trading_mode_name=self.trading_mode.get_name(),
|
408
412
|
cryptocurrency=cryptocurrency,
|
409
413
|
symbol=symbol,
|
410
414
|
time_frame=time_frame,
|
411
415
|
final_note=final_note,
|
412
416
|
state=state.value,
|
413
|
-
data=data if data is not None else {}
|
417
|
+
data=data if data is not None else {},
|
418
|
+
dependencies=dependencies)
|
414
419
|
|
415
420
|
@classmethod
|
416
421
|
def get_should_cancel_loaded_orders(cls) -> bool:
|
@@ -420,13 +425,17 @@ class AbstractTradingModeProducer(modes_channel.ModeChannelProducer):
|
|
420
425
|
"""
|
421
426
|
raise NotImplementedError("get_should_cancel_loaded_orders not implemented")
|
422
427
|
|
423
|
-
async def cancel_symbol_open_orders(
|
428
|
+
async def cancel_symbol_open_orders(
|
429
|
+
self, symbol, side=None, tag=None, exchange_order_ids=None,
|
430
|
+
dependencies: typing.Optional[commons_signals.SignalDependencies] = None
|
431
|
+
) -> tuple[bool, commons_signals.SignalDependencies]:
|
424
432
|
"""
|
425
433
|
Cancel all symbol open orders
|
426
434
|
"""
|
427
435
|
cancel_loaded_orders = self.get_should_cancel_loaded_orders()
|
428
436
|
cancelled = False
|
429
437
|
failed_to_cancel = False
|
438
|
+
cancelled_dependencies = commons_signals.SignalDependencies()
|
430
439
|
if self.exchange_manager.trader.is_enabled:
|
431
440
|
for order in self.exchange_manager.exchange_personal_data.orders_manager.get_open_orders(
|
432
441
|
symbol=symbol, tag=tag
|
@@ -438,15 +447,19 @@ class AbstractTradingModeProducer(modes_channel.ModeChannelProducer):
|
|
438
447
|
and (exchange_order_ids is None or (order.exchange_order_id in exchange_order_ids))
|
439
448
|
):
|
440
449
|
try:
|
441
|
-
|
450
|
+
is_cancelled, new_dependencies = await self.trading_mode.cancel_order(
|
451
|
+
order, dependencies=dependencies
|
452
|
+
)
|
453
|
+
if is_cancelled:
|
442
454
|
cancelled = True
|
455
|
+
cancelled_dependencies.extend(new_dependencies)
|
443
456
|
else:
|
444
457
|
failed_to_cancel = True
|
445
458
|
except errors.OctoBotExchangeError as err:
|
446
459
|
# do not propagate exchange error when canceling order
|
447
460
|
self.logger.exception(err, True, f"Error when cancelling order [{order}]: {err}")
|
448
461
|
failed_to_cancel = True
|
449
|
-
return cancelled and not failed_to_cancel
|
462
|
+
return (cancelled and not failed_to_cancel), cancelled_dependencies or None
|
450
463
|
|
451
464
|
def all_databases(self):
|
452
465
|
provider = databases.RunDatabasesProvider.instance()
|
@@ -14,8 +14,11 @@
|
|
14
14
|
#
|
15
15
|
# You should have received a copy of the GNU Lesser General Public
|
16
16
|
# License along with this library.
|
17
|
+
import typing
|
18
|
+
|
17
19
|
import async_channel.constants as channel_constants
|
18
20
|
import async_channel.enums as channel_enums
|
21
|
+
import octobot_commons.signals as commons_signals
|
19
22
|
|
20
23
|
import octobot_trading.exchange_channel as exchanges_channel
|
21
24
|
import octobot_trading.constants as constants
|
@@ -33,7 +36,8 @@ class ModeChannelProducer(exchanges_channel.ExchangeChannelProducer):
|
|
33
36
|
cryptocurrency=channel_constants.CHANNEL_WILDCARD,
|
34
37
|
symbol=channel_constants.CHANNEL_WILDCARD,
|
35
38
|
time_frame=None,
|
36
|
-
data=None
|
39
|
+
data=None,
|
40
|
+
dependencies: typing.Optional[commons_signals.SignalDependencies] = None):
|
37
41
|
for consumer in self.channel.get_filtered_consumers(trading_mode_name=trading_mode_name,
|
38
42
|
state=state,
|
39
43
|
cryptocurrency=cryptocurrency,
|
@@ -46,7 +50,8 @@ class ModeChannelProducer(exchanges_channel.ExchangeChannelProducer):
|
|
46
50
|
"cryptocurrency": cryptocurrency,
|
47
51
|
"symbol": symbol,
|
48
52
|
"time_frame": time_frame,
|
49
|
-
"data": data
|
53
|
+
"data": data,
|
54
|
+
"dependencies": dependencies
|
50
55
|
})
|
51
56
|
|
52
57
|
|