OctoBot-Trading 2.4.147__tar.gz → 2.4.149__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.147 → OctoBot-Trading-2.4.149}/CHANGELOG.md +9 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.147/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.149}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/README.md +1 -1
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/__init__.py +2 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/contracts.py +6 -2
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/errors.py +12 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/contracts/contract_factory.py +2 -2
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/contracts/future_contract.py +10 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/contracts/margin_contract.py +3 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/config/exchange_config_data.py +2 -2
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +1 -1
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +49 -5
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +1 -1
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/implementations/exchange_simulator.py +2 -1
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/types/rest_exchange.py +5 -1
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/abstract_trading_mode.py +8 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/channel/abstract_mode_consumer.py +7 -1
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/exchange_personal_data.py +17 -5
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/orders_manager.py +4 -3
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/position.py +4 -1
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/trades_manager.py +1 -1
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +4 -7
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/LICENSE +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/OctoBot_Trading.egg-info/requires.txt +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/exchange.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/constants.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/enums.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/config/proxy_config.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/traders/trader.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/util/exchange_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/util/symbol_details.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/mode_activity.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/mode_config.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/modes_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/order_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/signals/signal_creation.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/signals/util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/orders_storage.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/test_tools/exchange_data.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/requirements.txt +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/setup.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/test_exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/traders/test_trader.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/exchanges/util/test_exchange_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/test_abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/modes/test_modes_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/test_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/test_order_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/trades/test_trade_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/trades/test_trade_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/signals/test_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_ascendex.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_binance.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bingx.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bitget.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bithumb.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bitmart.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bitmex.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bitso.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bybit.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_coinbase.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_coinex.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_gateio.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_hollaex.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_htx.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_kraken.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_kucoin.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_mexc.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_ndax.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_okcoin.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_okx.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_phemex.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_poloniex.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_upbit.py +0 -0
- {OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [2.4.149] - 2025-01-22
|
8
|
+
### Added
|
9
|
+
[PersonalData] add get_trade_or_open_order and improve typing
|
10
|
+
|
11
|
+
## [2.4.148] - 2025-01-20
|
12
|
+
### Added
|
13
|
+
[Exchanges] support custom domains
|
14
|
+
[Exchanges] add INCLUDE_DISABLED_SYMBOLS_IN_AVAILABLE_SYMBOLS
|
15
|
+
|
7
16
|
## [2.4.147] - 2025-01-13
|
8
17
|
### Fixed
|
9
18
|
[Exchange] properly propagate ExchangeOrderCancelError
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.149
|
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.149](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.149
|
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.149](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.149](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)
|
@@ -209,6 +209,7 @@ from octobot_trading.api.contracts import (
|
|
209
209
|
is_perpetual_future_contract,
|
210
210
|
get_pair_contracts,
|
211
211
|
is_handled_contract,
|
212
|
+
ensure_supported_contract_configuration,
|
212
213
|
has_pair_future_contract,
|
213
214
|
update_pair_contract,
|
214
215
|
load_pair_contract,
|
@@ -386,6 +387,7 @@ __all__ = [
|
|
386
387
|
"is_perpetual_future_contract",
|
387
388
|
"get_pair_contracts",
|
388
389
|
"is_handled_contract",
|
390
|
+
"ensure_supported_contract_configuration",
|
389
391
|
"has_pair_future_contract",
|
390
392
|
"update_pair_contract",
|
391
393
|
"load_pair_contract",
|
@@ -34,6 +34,10 @@ def is_handled_contract(contract) -> bool:
|
|
34
34
|
return contract.is_handled_contract()
|
35
35
|
|
36
36
|
|
37
|
+
def ensure_supported_contract_configuration(exchange_manager, pair: str):
|
38
|
+
get_pair_contracts(exchange_manager)[pair].ensure_supported_configuration()
|
39
|
+
|
40
|
+
|
37
41
|
def has_pair_future_contract(exchange_manager, pair: str) -> bool:
|
38
42
|
return exchange_manager.exchange.has_pair_future_contract(pair)
|
39
43
|
|
@@ -47,6 +51,6 @@ def load_pair_contract(exchange_manager, contract_dict: dict):
|
|
47
51
|
|
48
52
|
|
49
53
|
def create_default_future_contract(
|
50
|
-
pair: str, leverage: decimal.Decimal, contract_type: enums.FutureContractType
|
54
|
+
pair: str, leverage: decimal.Decimal, contract_type: enums.FutureContractType, position_mode: enums.PositionMode
|
51
55
|
) -> exchange_data.FutureContract:
|
52
|
-
return exchange_data.create_default_future_contract(pair, leverage, contract_type)
|
56
|
+
return exchange_data.create_default_future_contract(pair, leverage, contract_type, position_mode)
|
@@ -224,6 +224,18 @@ class UnhandledContractError(Exception):
|
|
224
224
|
"""
|
225
225
|
|
226
226
|
|
227
|
+
class UnsupportedContractConfigurationError(Exception):
|
228
|
+
"""
|
229
|
+
Raised when a contract configuration is not supported
|
230
|
+
"""
|
231
|
+
|
232
|
+
|
233
|
+
class UnsupportedHedgeContractError(UnsupportedContractConfigurationError):
|
234
|
+
"""
|
235
|
+
Raised when a hedge contract configuration is not supported
|
236
|
+
"""
|
237
|
+
|
238
|
+
|
227
239
|
class TooManyOpenPositionError(Exception):
|
228
240
|
"""
|
229
241
|
Raised when changing future contract attributes without closing positions first
|
@@ -79,7 +79,7 @@ def update_future_contract_from_dict(exchange_manager, contract: dict) -> bool:
|
|
79
79
|
|
80
80
|
|
81
81
|
def create_default_future_contract(
|
82
|
-
pair: str, leverage: decimal.Decimal, contract_type: enums.FutureContractType
|
82
|
+
pair: str, leverage: decimal.Decimal, contract_type: enums.FutureContractType, position_mode: enums.PositionMode
|
83
83
|
) -> future_contract.FutureContract:
|
84
84
|
return future_contract.FutureContract(
|
85
85
|
pair=pair,
|
@@ -88,7 +88,7 @@ def create_default_future_contract(
|
|
88
88
|
contract_type=contract_type,
|
89
89
|
maximum_leverage=constants.DEFAULT_SYMBOL_MAX_LEVERAGE,
|
90
90
|
current_leverage=leverage,
|
91
|
-
position_mode=
|
91
|
+
position_mode=position_mode,
|
92
92
|
maintenance_margin_rate=constants.DEFAULT_SYMBOL_MAINTENANCE_MARGIN_RATE
|
93
93
|
)
|
94
94
|
|
@@ -17,6 +17,7 @@ import octobot_commons.logging as logging
|
|
17
17
|
|
18
18
|
import octobot_trading.enums as enums
|
19
19
|
import octobot_trading.constants as constants
|
20
|
+
import octobot_trading.errors as errors
|
20
21
|
|
21
22
|
import octobot_trading.exchange_data.contracts.margin_contract as margin_contract
|
22
23
|
|
@@ -95,6 +96,15 @@ class FutureContract(margin_contract.MarginContract):
|
|
95
96
|
# unhandled / unknown contracts have None in self.contract_type
|
96
97
|
return self.contract_type is not None
|
97
98
|
|
99
|
+
def ensure_supported_configuration(self):
|
100
|
+
"""
|
101
|
+
will raise on unsupported configuration
|
102
|
+
"""
|
103
|
+
if not self.is_one_way_position_mode():
|
104
|
+
raise errors.UnsupportedHedgeContractError(
|
105
|
+
f"{self.position_mode.value} position mode ({self.pair}) is not supported"
|
106
|
+
)
|
107
|
+
|
98
108
|
def update_from_position(self, raw_position) -> bool:
|
99
109
|
changed = super().update_from_position(raw_position)
|
100
110
|
leverage = raw_position.get(enums.ExchangeConstantsPositionColumns.LEVERAGE.value, None)
|
@@ -78,6 +78,9 @@ class MarginContract:
|
|
78
78
|
"""
|
79
79
|
return True
|
80
80
|
|
81
|
+
def ensure_supported_configuration(self):
|
82
|
+
pass
|
83
|
+
|
81
84
|
def update_from_position(self, raw_position) -> bool:
|
82
85
|
changed = False
|
83
86
|
margin_type = raw_position.get(enums.ExchangeConstantsPositionColumns.MARGIN_TYPE.value, None)
|
@@ -206,7 +206,7 @@ class ExchangeConfig(util.Initializable):
|
|
206
206
|
# add to global traded pairs
|
207
207
|
if is_enabled:
|
208
208
|
if not self.traded_cryptocurrencies[cryptocurrency]:
|
209
|
-
self._logger.
|
209
|
+
self._logger.warning(
|
210
210
|
f"{self.exchange_manager.exchange_name} is not supporting any {cryptocurrency} trading pair"
|
211
211
|
f" from the current configuration.")
|
212
212
|
traded_symbol_pairs_set = traded_symbol_pairs_set.union(
|
@@ -249,7 +249,7 @@ class ExchangeConfig(util.Initializable):
|
|
249
249
|
additional_details = f" Exchange sandbox is enabled, please make sure this pair is traded on " \
|
250
250
|
f" the {self.exchange_manager.exchange_name} sandbox as sandboxes " \
|
251
251
|
f"usually only support a subset of the real exchange's pairs."
|
252
|
-
self._logger.
|
252
|
+
self._logger.warning(f"{self.exchange_manager.exchange_name} is not supporting the "
|
253
253
|
f"{symbol} trading pair.{additional_details}")
|
254
254
|
|
255
255
|
@staticmethod
|
@@ -289,7 +289,7 @@ class CCXTAdapter(adapters.AbstractAdapter):
|
|
289
289
|
if side == enums.PositionSide.LONG.value else enums.PositionSide.SHORT
|
290
290
|
log_func = self.logger.debug
|
291
291
|
if is_empty:
|
292
|
-
log_func = self.logger.
|
292
|
+
log_func = self.logger.warning
|
293
293
|
log_func(f"Unhandled {symbol} position mode ({position_mode.value}). This position can't be traded.")
|
294
294
|
else:
|
295
295
|
# One way position use BOTH side as there is always only one position per symbol.
|
@@ -14,6 +14,7 @@
|
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library.
|
16
16
|
import asyncio
|
17
|
+
import os
|
17
18
|
import aiohttp
|
18
19
|
import copy
|
19
20
|
import logging
|
@@ -66,7 +67,7 @@ def create_client(
|
|
66
67
|
client = instantiate_exchange(
|
67
68
|
exchange_class,
|
68
69
|
_get_client_config(
|
69
|
-
options, headers, additional_config,
|
70
|
+
exchange_class, options, headers, additional_config,
|
70
71
|
api_key=key, secret=secret, password=password, uid=uid,
|
71
72
|
auth_token=auth_token, auth_token_header_prefix=auth_token_header_prefix
|
72
73
|
),
|
@@ -80,7 +81,7 @@ def create_client(
|
|
80
81
|
else:
|
81
82
|
client = instantiate_exchange(
|
82
83
|
exchange_class,
|
83
|
-
_get_client_config(options, headers, additional_config),
|
84
|
+
_get_client_config(exchange_class, options, headers, additional_config),
|
84
85
|
exchange_manager.exchange_name,
|
85
86
|
exchange_manager.proxy_config,
|
86
87
|
allow_request_counter=allow_request_counter
|
@@ -128,7 +129,10 @@ def get_unauthenticated_exchange(
|
|
128
129
|
exchange_class, options, headers, additional_config, identifier: str, proxy_config: proxy_config_import.ProxyConfig
|
129
130
|
) -> async_ccxt.Exchange:
|
130
131
|
return instantiate_exchange(
|
131
|
-
exchange_class,
|
132
|
+
exchange_class,
|
133
|
+
_get_client_config(exchange_class, options, headers, additional_config),
|
134
|
+
identifier,
|
135
|
+
proxy_config
|
132
136
|
)
|
133
137
|
|
134
138
|
|
@@ -303,7 +307,7 @@ def _use_proxy_if_necessary(client, proxy_config: proxy_config_import.ProxyConfi
|
|
303
307
|
|
304
308
|
|
305
309
|
def _get_client_config(
|
306
|
-
options, headers, additional_config,
|
310
|
+
exchange_class, options, headers, additional_config,
|
307
311
|
api_key=None, secret=None, password=None, uid=None,
|
308
312
|
auth_token=None, auth_token_header_prefix=None
|
309
313
|
):
|
@@ -324,10 +328,50 @@ def _get_client_config(
|
|
324
328
|
config['password'] = password
|
325
329
|
if uid is not None:
|
326
330
|
config['uid'] = uid
|
327
|
-
config.update(additional_config or {})
|
331
|
+
config.update({**_get_custom_domain_config(exchange_class), **(additional_config or {})})
|
328
332
|
return config
|
329
333
|
|
330
334
|
|
335
|
+
def _get_custom_domain_config(exchange_class):
|
336
|
+
old, new = _get_replaced_custom_domains(exchange_class)
|
337
|
+
if not (old and new):
|
338
|
+
return {}
|
339
|
+
if url_config := exchange_class().describe()[ccxt_enums.ExchangeColumns.URLS.value]:
|
340
|
+
commons_logging.get_logger(__name__).info(
|
341
|
+
f"Using custom domain for {exchange_class.__name__}: {old} is replaced by {new}"
|
342
|
+
)
|
343
|
+
return {
|
344
|
+
ccxt_enums.ExchangeColumns.URLS.value: _get_patched_url_config(url_config, old, new)
|
345
|
+
}
|
346
|
+
return {}
|
347
|
+
|
348
|
+
|
349
|
+
def _get_replaced_custom_domains(exchange_class):
|
350
|
+
identifier = exchange_class.__name__.upper()
|
351
|
+
if custom_domain := os.getenv(f"{identifier}_CUSTOM_DOMAIN"):
|
352
|
+
split = custom_domain.split(":")
|
353
|
+
if len(split) == 2:
|
354
|
+
return split[0], split[1]
|
355
|
+
else:
|
356
|
+
commons_logging.get_logger(__name__).error(
|
357
|
+
f"Invalid {identifier} custom domain config. Expected syntax is to_replace_domain:updated_domain "
|
358
|
+
f"Example: MEXC_CUSTOM_DOMAIN=mexc.com:mexc.co"
|
359
|
+
)
|
360
|
+
return None, None
|
361
|
+
|
362
|
+
|
363
|
+
def _get_patched_url_config(url_config: dict, old: str, new: str):
|
364
|
+
updated_config = {}
|
365
|
+
for key, val in url_config.items():
|
366
|
+
if isinstance(val, dict):
|
367
|
+
updated_config[key] = _get_patched_url_config(val, old, new)
|
368
|
+
elif isinstance(val, str):
|
369
|
+
updated_config[key] = val.replace(old, new)
|
370
|
+
else:
|
371
|
+
updated_config[key] = val
|
372
|
+
return updated_config
|
373
|
+
|
374
|
+
|
331
375
|
def _use_request_counter(identifier: str, ccxt_client: async_ccxt.Exchange):
|
332
376
|
"""
|
333
377
|
Replaces the given exchange async session by an aiohttp_util.CounterClientSession
|
@@ -125,7 +125,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
125
125
|
)
|
126
126
|
|
127
127
|
# initialize symbols and timeframes
|
128
|
-
self.symbols = self.
|
128
|
+
self.symbols = self.exchange_manager.exchange.get_all_available_symbols(active_only=True)
|
129
129
|
self.time_frames = self.get_client_time_frames()
|
130
130
|
|
131
131
|
except (ccxt.ExchangeNotAvailable, ccxt.RequestTimeout) as e:
|
@@ -161,7 +161,8 @@ class ExchangeSimulator(rest_exchange.RestExchange):
|
|
161
161
|
contract = contract_factory.create_default_future_contract(
|
162
162
|
pair,
|
163
163
|
constants.DEFAULT_SYMBOL_LEVERAGE,
|
164
|
-
self.exchange_manager.exchange_config.backtesting_exchange_config.future_contract_type
|
164
|
+
self.exchange_manager.exchange_config.backtesting_exchange_config.future_contract_type,
|
165
|
+
constants.DEFAULT_SYMBOL_POSITION_MODE
|
165
166
|
)
|
166
167
|
return self.create_pair_contract(
|
167
168
|
contract.pair,
|
{OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchanges/types/rest_exchange.py
RENAMED
@@ -51,6 +51,8 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
51
51
|
# set True when get_fixed_market_status should adapt amounts for contract size
|
52
52
|
# (amounts are in not kept as contract size with OctoBot)
|
53
53
|
ADAPT_MARKET_STATUS_FOR_CONTRACT_SIZE = False
|
54
|
+
# set True when disabled symbols should still be considered (ex: mexc with its temporary api trading disabled symbols)
|
55
|
+
INCLUDE_DISABLED_SYMBOLS_IN_AVAILABLE_SYMBOLS = False
|
54
56
|
REQUIRE_ORDER_FEES_FROM_TRADES = False # set True when get_order is not giving fees on closed orders and fees
|
55
57
|
# should be fetched using recent trades.
|
56
58
|
REQUIRE_CLOSED_ORDERS_FROM_RECENT_TRADES = False # set True when get_closed_orders is not supported
|
@@ -731,7 +733,9 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
731
733
|
"""
|
732
734
|
:return: the list of all symbols supported by the exchange
|
733
735
|
"""
|
734
|
-
return self.connector.get_client_symbols(
|
736
|
+
return self.connector.get_client_symbols(
|
737
|
+
active_only=False if self.INCLUDE_DISABLED_SYMBOLS_IN_AVAILABLE_SYMBOLS else active_only
|
738
|
+
)
|
735
739
|
|
736
740
|
async def get_all_tradable_symbols(self, active_only=True) -> set[str]:
|
737
741
|
"""
|
{OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/modes/abstract_trading_mode.py
RENAMED
@@ -33,6 +33,7 @@ import octobot_tentacles_manager.configuration as tm_configuration
|
|
33
33
|
|
34
34
|
import octobot_trading.constants as constants
|
35
35
|
import octobot_trading.enums as enums
|
36
|
+
import octobot_trading.errors as errors
|
36
37
|
import octobot_trading.exchange_channel as exchanges_channel
|
37
38
|
import octobot_trading.modes.modes_factory as modes_factory
|
38
39
|
import octobot_trading.modes.channel.abstract_mode_producer as abstract_mode_producer
|
@@ -535,6 +536,13 @@ class AbstractTradingMode(abstract_tentacle.AbstractTentacle):
|
|
535
536
|
common_constants.DEFAULT_IGNORED_VALUE
|
536
537
|
)
|
537
538
|
|
539
|
+
def ensure_supported(self, symbol):
|
540
|
+
if self.exchange_manager.is_future:
|
541
|
+
try:
|
542
|
+
self.exchange_manager.exchange.pair_contracts[symbol].ensure_supported_configuration()
|
543
|
+
except KeyError:
|
544
|
+
raise errors.ContractExistsError(f"Missing contract for {symbol}")
|
545
|
+
|
538
546
|
@contextlib.asynccontextmanager
|
539
547
|
async def remote_signal_publisher(self, symbol: str):
|
540
548
|
async with signals.remote_signal_publisher(self.exchange_manager, symbol, self.should_emit_trading_signal()) \
|
@@ -63,6 +63,9 @@ class AbstractTradingModeConsumer(modes_channel.ModeChannelConsumer):
|
|
63
63
|
f"Future contract symbols contain the settlement currency after ':'. "
|
64
64
|
f"Example: use BTC/USDT:USDT for linear BTC/USDT contracts and "
|
65
65
|
f"BTC/USD:BTC for inverse BTC/USD contracts.")
|
66
|
+
except (errors.InvalidPositionSide, errors.UnsupportedContractConfigurationError) as err:
|
67
|
+
self.previous_call_error_per_symbol[symbol] = err
|
68
|
+
self.logger.error(f"Impossible to create {symbol} order: {err}.")
|
66
69
|
except errors.OrderCreationError as err:
|
67
70
|
self.previous_call_error_per_symbol[symbol] = err
|
68
71
|
self.logger.info(f"Failed {symbol} order creation on: {self.exchange_manager.exchange_name} "
|
@@ -114,7 +117,10 @@ class AbstractTradingModeConsumer(modes_channel.ModeChannelConsumer):
|
|
114
117
|
if await self.can_create_order(symbol, state):
|
115
118
|
try:
|
116
119
|
return await self.create_new_orders(symbol, final_note, state, **kwargs)
|
117
|
-
except (
|
120
|
+
except (
|
121
|
+
errors.MissingMinimalExchangeTradeVolume, errors.OrderCreationError,
|
122
|
+
errors.InvalidPositionSide, errors.UnsupportedContractConfigurationError
|
123
|
+
):
|
118
124
|
raise
|
119
125
|
except errors.MissingFunds:
|
120
126
|
try:
|
@@ -15,6 +15,7 @@
|
|
15
15
|
# License along with this library.
|
16
16
|
import asyncio
|
17
17
|
import uuid
|
18
|
+
import typing
|
18
19
|
|
19
20
|
import octobot_commons.logging as logging
|
20
21
|
|
@@ -28,6 +29,7 @@ import octobot_trading.personal_data.orders.orders_manager as orders_manager
|
|
28
29
|
import octobot_trading.personal_data.orders.order as order_import
|
29
30
|
import octobot_trading.personal_data.orders.orders_storage_operations as orders_storage_operations
|
30
31
|
import octobot_trading.personal_data.trades.trades_manager as trades_manager
|
32
|
+
import octobot_trading.personal_data.trades.trade as trade_import
|
31
33
|
import octobot_trading.personal_data.transactions.transactions_manager as transactions_manager
|
32
34
|
import octobot_trading.personal_data.transactions.transaction_factory as transaction_factory
|
33
35
|
import octobot_trading.util as util
|
@@ -44,11 +46,11 @@ class ExchangePersonalData(util.Initializable):
|
|
44
46
|
self.trader = None
|
45
47
|
self.exchange = None
|
46
48
|
|
47
|
-
self.portfolio_manager = None
|
48
|
-
self.trades_manager = None
|
49
|
-
self.orders_manager = None
|
50
|
-
self.positions_manager = None
|
51
|
-
self.transactions_manager = None
|
49
|
+
self.portfolio_manager: portfolio_manager.PortfolioManager = None
|
50
|
+
self.trades_manager: trades_manager.TradesManager = None
|
51
|
+
self.orders_manager: orders_manager.OrdersManager = None
|
52
|
+
self.positions_manager: positions_manager.PositionsManager = None
|
53
|
+
self.transactions_manager: transactions_manager.TransactionsManager = None
|
52
54
|
|
53
55
|
async def initialize_impl(self):
|
54
56
|
self.trader = self.exchange_manager.trader
|
@@ -361,6 +363,16 @@ class ExchangePersonalData(util.Initializable):
|
|
361
363
|
except ValueError as e:
|
362
364
|
self.logger.error(f"Failed to send position update notification : {e}")
|
363
365
|
|
366
|
+
def get_trade_or_open_order(self, order_id: str) -> (
|
367
|
+
typing.Optional[trade_import.Trade], typing.Optional[order_import.Order]
|
368
|
+
):
|
369
|
+
trade = self.trades_manager.get_trade_from_order_id(order_id)
|
370
|
+
try:
|
371
|
+
order = self.orders_manager.get_order(order_id)
|
372
|
+
except KeyError:
|
373
|
+
order = None
|
374
|
+
return trade, order
|
375
|
+
|
364
376
|
async def stop(self):
|
365
377
|
if self.portfolio_manager is not None:
|
366
378
|
await self.portfolio_manager.stop()
|
@@ -27,6 +27,7 @@ import octobot_trading.errors as errors
|
|
27
27
|
import octobot_trading.personal_data.orders.order as order_class
|
28
28
|
import octobot_trading.personal_data.orders.order_factory as order_factory
|
29
29
|
import octobot_trading.personal_data.orders.order_util as order_util
|
30
|
+
import octobot_trading.personal_data.orders.order_group as order_group_import
|
30
31
|
|
31
32
|
|
32
33
|
class OrdersManager(util.Initializable):
|
@@ -38,10 +39,10 @@ class OrdersManager(util.Initializable):
|
|
38
39
|
self.trader = trader
|
39
40
|
self.orders_initialized = False
|
40
41
|
self.enable_order_auto_synchronization = True
|
41
|
-
self.orders = collections.OrderedDict()
|
42
|
-
self.order_groups = {}
|
42
|
+
self.orders: collections.OrderedDict[str, order_class.Order] = collections.OrderedDict()
|
43
|
+
self.order_groups: dict[str, order_group_import.OrderGroup] = {}
|
43
44
|
# orders that are expected from exchange but have not yet been fetched: will be removed when fetched
|
44
|
-
self.pending_creation_orders = []
|
45
|
+
self.pending_creation_orders: list[order_class.Order] = []
|
45
46
|
# if this the orders manager completed the initial exchange orders sync phase (only on real trader)
|
46
47
|
self.are_exchange_orders_initialized = self.trader.simulate
|
47
48
|
|
@@ -746,6 +746,9 @@ class Position(util.Initializable):
|
|
746
746
|
def update_from_raw(self, raw_position):
|
747
747
|
symbol = str(raw_position.get(enums.ExchangeConstantsPositionColumns.SYMBOL.value, None))
|
748
748
|
currency, market = self.exchange_manager.get_exchange_quote_and_base(symbol)
|
749
|
+
position_id = (
|
750
|
+
self.position_id or raw_position.get(enums.ExchangeConstantsPositionColumns.LOCAL_ID.value) or symbol
|
751
|
+
)
|
749
752
|
# side is managed locally, do not parse it
|
750
753
|
return self._update(
|
751
754
|
symbol=symbol,
|
@@ -763,7 +766,7 @@ class Position(util.Initializable):
|
|
763
766
|
auto_deposit_margin=raw_position.get(
|
764
767
|
enums.ExchangeConstantsPositionColumns.AUTO_DEPOSIT_MARGIN.value, False
|
765
768
|
),
|
766
|
-
position_id=
|
769
|
+
position_id=position_id,
|
767
770
|
exchange_position_id=str(raw_position.get(enums.ExchangeConstantsPositionColumns.ID.value, None) or symbol),
|
768
771
|
timestamp=raw_position.get(enums.ExchangeConstantsPositionColumns.TIMESTAMP.value, 0),
|
769
772
|
unrealized_pnl=raw_position.get(enums.ExchangeConstantsPositionColumns.UNREALIZED_PNL.value,
|
@@ -36,7 +36,7 @@ class TradesManager(util.Initializable):
|
|
36
36
|
self.logger = logging.get_logger(self.__class__.__name__)
|
37
37
|
self.trader = trader
|
38
38
|
self.trades_initialized = False
|
39
|
-
self.trades = collections.OrderedDict()
|
39
|
+
self.trades: collections.OrderedDict[str, personal_data.Trade] = collections.OrderedDict()
|
40
40
|
|
41
41
|
async def initialize_impl(self):
|
42
42
|
await self.reload_history(False)
|
@@ -62,7 +62,7 @@ async def test_initialize_impl_with_none_symbols_and_timeframes(ccxt_connector):
|
|
62
62
|
with patch.object(ccxt_connector, 'client', new=MockCCXT()) as mocked_ccxt, \
|
63
63
|
patch.object(ccxt_connector, '_ensure_auth', new=mock.AsyncMock()) as _ensure_auth_mock:
|
64
64
|
await ccxt_connector.initialize_impl()
|
65
|
-
assert ccxt_connector.symbols ==
|
65
|
+
assert len(ccxt_connector.symbols) == 171 # all enabled symbols
|
66
66
|
assert ccxt_connector.time_frames == set()
|
67
67
|
assert mocked_ccxt.set_markets_calls in ([[]], []) # depends on call order
|
68
68
|
_ensure_auth_mock.assert_called_once()
|
@@ -90,7 +90,7 @@ async def test_initialize_impl_with_empty_symbols_and_timeframes(ccxt_connector)
|
|
90
90
|
with patch.object(ccxt_connector, 'client', new=MockCCXT()) as mocked_ccxt, \
|
91
91
|
patch.object(ccxt_connector, '_ensure_auth', new=mock.AsyncMock()) as _ensure_auth_mock:
|
92
92
|
await ccxt_connector.initialize_impl()
|
93
|
-
assert ccxt_connector.symbols ==
|
93
|
+
assert len(ccxt_connector.symbols) == 171 # all enabled symbols
|
94
94
|
assert ccxt_connector.time_frames == set()
|
95
95
|
assert mocked_ccxt.set_markets_calls in ([[]], []) # depends on call order
|
96
96
|
_ensure_auth_mock.assert_called_once()
|
@@ -127,12 +127,9 @@ async def test_initialize_impl(ccxt_connector):
|
|
127
127
|
|
128
128
|
with patch.object(ccxt_connector, 'client', new=MockCCXT()) as mocked_ccxt, \
|
129
129
|
patch.object(ccxt_connector, '_ensure_auth', new=mock.AsyncMock()) as _ensure_auth_mock:
|
130
|
+
ccxt_connector.exchange_manager.exchange.INCLUDE_DISABLED_SYMBOLS_IN_AVAILABLE_SYMBOLS = True
|
130
131
|
await ccxt_connector.initialize_impl()
|
131
|
-
assert ccxt_connector.symbols ==
|
132
|
-
"BTC/USDT",
|
133
|
-
"ETH/USDT",
|
134
|
-
"ETH/BTC",
|
135
|
-
}
|
132
|
+
assert len(ccxt_connector.symbols) == 541 # all enabled + diasabled symbols
|
136
133
|
assert ccxt_connector.time_frames == {
|
137
134
|
"1h",
|
138
135
|
"2h",
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/OctoBot_Trading.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/kline/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.147 → OctoBot-Trading-2.4.149}/octobot_trading/exchange_data/ohlcv/__init__.py
RENAMED
File without changes
|
File without changes
|