OctoBot-Trading 2.4.148__tar.gz → 2.4.150__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.148 → OctoBot-Trading-2.4.150}/CHANGELOG.md +8 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.148/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.150}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/README.md +1 -1
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/__init__.py +2 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/contracts.py +6 -2
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/errors.py +18 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/contracts/contract_factory.py +2 -2
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/contracts/future_contract.py +10 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/contracts/margin_contract.py +3 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/config/exchange_config_data.py +2 -2
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/config/proxy_config.py +2 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +1 -1
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +30 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +31 -10
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/implementations/exchange_simulator.py +2 -1
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/abstract_trading_mode.py +8 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/channel/abstract_mode_consumer.py +7 -1
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/exchange_personal_data.py +17 -5
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/orders_manager.py +4 -3
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/position.py +4 -1
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/trades_manager.py +1 -1
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/test_tools/exchanges_test_tools.py +35 -17
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +76 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/LICENSE +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/OctoBot_Trading.egg-info/requires.txt +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/exchange.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/constants.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/enums.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/traders/trader.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/util/exchange_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/util/symbol_details.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/mode_activity.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/mode_config.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/modes_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/order_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/signals/signal_creation.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/signals/util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/orders_storage.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/test_tools/exchange_data.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/requirements.txt +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/setup.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/test_exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/traders/test_trader.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/exchanges/util/test_exchange_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/test_abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/modes/test_modes_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/test_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/test_order_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/trades/test_trade_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/trades/test_trade_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/signals/test_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_ascendex.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_binance.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bingx.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bitget.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bithumb.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bitmart.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bitmex.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bitso.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bybit.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_coinbase.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_coinex.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_gateio.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_hollaex.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_htx.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_kraken.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_kucoin.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_mexc.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_ndax.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_okcoin.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_okx.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_phemex.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_poloniex.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_upbit.py +0 -0
- {OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [2.4.150] - 2025-01-27
|
8
|
+
### Added
|
9
|
+
[Proxy] Proxy related errors and prefixes
|
10
|
+
|
11
|
+
## [2.4.149] - 2025-01-22
|
12
|
+
### Added
|
13
|
+
[PersonalData] add get_trade_or_open_order and improve typing
|
14
|
+
|
7
15
|
## [2.4.148] - 2025-01-20
|
8
16
|
### Added
|
9
17
|
[Exchanges] support custom domains
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.150
|
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.150](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.150
|
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.150](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.150](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)
|
@@ -33,6 +33,12 @@ class MissingMinimalExchangeTradeVolume(OctoBotExchangeError):
|
|
33
33
|
"""
|
34
34
|
|
35
35
|
|
36
|
+
class ExchangeProxyError(OctoBotExchangeError):
|
37
|
+
"""
|
38
|
+
Raised when an issue related to an exchange proxy is encountered
|
39
|
+
"""
|
40
|
+
|
41
|
+
|
36
42
|
class TradingModeIncompatibility(Exception):
|
37
43
|
"""
|
38
44
|
Raised when a trading mode is incompatible with the current situation
|
@@ -224,6 +230,18 @@ class UnhandledContractError(Exception):
|
|
224
230
|
"""
|
225
231
|
|
226
232
|
|
233
|
+
class UnsupportedContractConfigurationError(Exception):
|
234
|
+
"""
|
235
|
+
Raised when a contract configuration is not supported
|
236
|
+
"""
|
237
|
+
|
238
|
+
|
239
|
+
class UnsupportedHedgeContractError(UnsupportedContractConfigurationError):
|
240
|
+
"""
|
241
|
+
Raised when a hedge contract configuration is not supported
|
242
|
+
"""
|
243
|
+
|
244
|
+
|
227
245
|
class TooManyOpenPositionError(Exception):
|
228
246
|
"""
|
229
247
|
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
|
{OctoBot-Trading-2.4.148 → OctoBot-Trading-2.4.150}/octobot_trading/exchanges/config/proxy_config.py
RENAMED
@@ -32,6 +32,8 @@ class ProxyConfig:
|
|
32
32
|
aiohttp_trust_env: bool = octobot_trading.constants.ENABLE_EXCHANGE_HTTP_PROXY_FROM_ENV
|
33
33
|
# if set, will be called when exchange stops
|
34
34
|
stop_proxy_callback: typing.Optional[typing.Callable] = None
|
35
|
+
# if set, returns the last url given to a callback method that return "True", meaning the last url that used a proxy
|
36
|
+
get_last_proxied_request_url: typing.Optional[typing.Callable] = None
|
35
37
|
|
36
38
|
@classmethod
|
37
39
|
def default_env_var_config(cls):
|
@@ -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.
|
@@ -408,3 +408,33 @@ def _use_request_counter(identifier: str, ccxt_client: async_ccxt.Exchange):
|
|
408
408
|
|
409
409
|
def ccxt_exchange_class_factory(exchange_name):
|
410
410
|
return getattr(async_ccxt, exchange_name)
|
411
|
+
|
412
|
+
def reraise_with_proxy_prefix_if_relevant(ccxt_connector, cause_error: Exception, raised_error: typing.Optional[Exception]):
|
413
|
+
if was_latest_request_proxied(ccxt_connector):
|
414
|
+
raised = raised_error or cause_error
|
415
|
+
raise raised.__class__(f"[Proxied request] {raised}") from cause_error
|
416
|
+
|
417
|
+
|
418
|
+
def was_latest_request_proxied(ccxt_connector) -> bool:
|
419
|
+
if not (
|
420
|
+
ccxt_connector.exchange_manager.proxy_config
|
421
|
+
and ccxt_connector.exchange_manager.proxy_config.get_last_proxied_request_url
|
422
|
+
):
|
423
|
+
return False
|
424
|
+
last_proxied_request_url = ccxt_connector.exchange_manager.proxy_config.get_last_proxied_request_url()
|
425
|
+
last_client_request_url = ccxt_connector.client.last_request_url
|
426
|
+
# if last requests are matching: it was proxied
|
427
|
+
return last_proxied_request_url == last_client_request_url
|
428
|
+
|
429
|
+
|
430
|
+
def get_proxy_error_if_any(error: Exception) -> typing.Optional[Exception]:
|
431
|
+
if isinstance(error, (aiohttp.ClientProxyConnectionError, aiohttp.ClientHttpProxyError)):
|
432
|
+
return error
|
433
|
+
max_depth = 10
|
434
|
+
depth = 1
|
435
|
+
cause_error = error
|
436
|
+
while (cause_error := getattr(cause_error, "__cause__", None)) and depth < max_depth:
|
437
|
+
if isinstance(cause_error, (aiohttp.ClientProxyConnectionError, aiohttp.ClientHttpProxyError)):
|
438
|
+
return cause_error
|
439
|
+
depth += 1
|
440
|
+
return None
|
@@ -989,6 +989,21 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
989
989
|
# 15 pairs, each on 3 time frames
|
990
990
|
return 45
|
991
991
|
|
992
|
+
def raise_or_prefix_proxy_error_if_relevant(self, cause_error: Exception, raised_error: typing.Optional[Exception]):
|
993
|
+
"""
|
994
|
+
Will raise octobot_trading.errors.ExchangeProxyError when the error is linked to a proxy
|
995
|
+
server of configuration issue.
|
996
|
+
Will re-raise a "[Proxied request] " prefix given error message if relevant, otherwise will just raise the error
|
997
|
+
"""
|
998
|
+
if proxy_error := ccxt_client_util.get_proxy_error_if_any(cause_error):
|
999
|
+
raise octobot_trading.errors.ExchangeProxyError(proxy_error) from cause_error
|
1000
|
+
# when api key is wrong or proxy is unavailable
|
1001
|
+
ccxt_client_util.reraise_with_proxy_prefix_if_relevant(self, cause_error, raised_error)
|
1002
|
+
# reraise_with_proxy_prefix_if_relevant did not raise, raise the error as is
|
1003
|
+
if raised_error is None:
|
1004
|
+
raise cause_error
|
1005
|
+
raise raised_error from cause_error
|
1006
|
+
|
992
1007
|
def log_ddos_error(self, error):
|
993
1008
|
self.logger.error(
|
994
1009
|
f"DDoSProtection triggered [{html_util.get_html_summary_if_relevant(error)} ({error.__class__.__name__})]. "
|
@@ -1003,26 +1018,32 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
1003
1018
|
def error_describer(self):
|
1004
1019
|
try:
|
1005
1020
|
yield
|
1006
|
-
except ccxt.DDoSProtection as
|
1021
|
+
except ccxt.DDoSProtection as err:
|
1007
1022
|
# raised upon rate limit issues, last response data might have details on what is happening
|
1008
|
-
if self.exchange_manager.exchange.should_log_on_ddos_exception(
|
1009
|
-
self.log_ddos_error(
|
1023
|
+
if self.exchange_manager.exchange.should_log_on_ddos_exception(err):
|
1024
|
+
self.log_ddos_error(err)
|
1010
1025
|
raise
|
1011
1026
|
except ccxt.InvalidNonce as err:
|
1012
1027
|
# use 2 index to get the caller of the context manager
|
1013
1028
|
caller_function_name = inspect.stack()[2].function
|
1014
1029
|
exchanges.log_time_sync_error(self.logger, self.name, err, caller_function_name)
|
1015
1030
|
raise octobot_trading.errors.FailedRequest(html_util.get_html_summary_if_relevant(err)) from err
|
1016
|
-
except ccxt.RequestTimeout as
|
1031
|
+
except ccxt.RequestTimeout as err:
|
1017
1032
|
raise octobot_trading.errors.FailedRequest(
|
1018
|
-
f"Request timeout: {html_util.get_html_summary_if_relevant(
|
1019
|
-
) from
|
1033
|
+
f"Request timeout: {html_util.get_html_summary_if_relevant(err)}"
|
1034
|
+
) from err
|
1020
1035
|
except ccxt.AuthenticationError as err:
|
1021
|
-
|
1036
|
+
self.raise_or_prefix_proxy_error_if_relevant(
|
1037
|
+
err,
|
1038
|
+
octobot_trading.errors.AuthenticationError(html_util.get_html_summary_if_relevant(err))
|
1039
|
+
)
|
1022
1040
|
except ccxt.ExchangeNotAvailable as err:
|
1023
|
-
|
1024
|
-
|
1025
|
-
|
1041
|
+
self.raise_or_prefix_proxy_error_if_relevant(
|
1042
|
+
err,
|
1043
|
+
octobot_trading.errors.FailedRequest(
|
1044
|
+
f"Failed to execute request: {err.__class__.__name__}: {html_util.get_html_summary_if_relevant(err)}"
|
1045
|
+
)
|
1046
|
+
)
|
1026
1047
|
except ccxt.ExchangeError as err:
|
1027
1048
|
if self.exchange_manager.exchange.is_authentication_error(err):
|
1028
1049
|
# ensure this is not an unhandled authentication error
|
@@ -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.148 → OctoBot-Trading-2.4.150}/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)
|
@@ -116,13 +116,19 @@ async def add_symbols_details(
|
|
116
116
|
) -> exchange_data_import.ExchangeData:
|
117
117
|
|
118
118
|
await ensure_symbol_markets(exchange_manager, reload=reload_markets, market_filter=market_filter)
|
119
|
-
|
120
|
-
_update_ohlcv(
|
121
|
-
exchange_manager,
|
119
|
+
if len(symbols) == 1:
|
120
|
+
await _update_ohlcv(
|
121
|
+
exchange_manager, next(iter(symbols)), time_frame, exchange_data,
|
122
122
|
history_size, start_time, end_time, close_price_only, include_latest_candle
|
123
123
|
)
|
124
|
-
|
125
|
-
|
124
|
+
else:
|
125
|
+
await asyncio.gather(*(
|
126
|
+
_update_ohlcv(
|
127
|
+
exchange_manager, symbol, time_frame, exchange_data,
|
128
|
+
history_size, start_time, end_time, close_price_only, include_latest_candle
|
129
|
+
)
|
130
|
+
for symbol in symbols
|
131
|
+
))
|
126
132
|
return exchange_data
|
127
133
|
|
128
134
|
|
@@ -202,11 +208,13 @@ async def get_open_orders(
|
|
202
208
|
ignore_unsupported_orders: bool = True,
|
203
209
|
) -> list:
|
204
210
|
open_orders = []
|
205
|
-
|
206
211
|
symbols = symbols or [market.symbol for market in exchange_data.markets]
|
207
|
-
|
208
|
-
_get_open_orders(exchange_manager,
|
209
|
-
|
212
|
+
if len(symbols) == 1:
|
213
|
+
await _get_open_orders(exchange_manager, next(iter(symbols)), open_orders, ignore_unsupported_orders)
|
214
|
+
else:
|
215
|
+
await asyncio.gather(*(
|
216
|
+
_get_open_orders(exchange_manager, symbol, open_orders, ignore_unsupported_orders) for symbol in symbols
|
217
|
+
))
|
210
218
|
return open_orders
|
211
219
|
|
212
220
|
|
@@ -235,10 +243,13 @@ async def get_cancelled_orders(
|
|
235
243
|
) -> list:
|
236
244
|
cancelled_orders = []
|
237
245
|
symbols = symbols or [market.symbol for market in exchange_data.markets]
|
238
|
-
|
239
|
-
_get_cancelled_orders(exchange_manager,
|
240
|
-
|
241
|
-
|
246
|
+
if len(symbols) == 1:
|
247
|
+
await _get_cancelled_orders(exchange_manager, next(iter(symbols)), cancelled_orders, ignore_unsupported_orders)
|
248
|
+
else:
|
249
|
+
await asyncio.gather(*(
|
250
|
+
_get_cancelled_orders(exchange_manager, symbol, cancelled_orders, ignore_unsupported_orders)
|
251
|
+
for symbol in symbols
|
252
|
+
))
|
242
253
|
return cancelled_orders
|
243
254
|
|
244
255
|
|
@@ -257,10 +268,13 @@ async def get_trades(
|
|
257
268
|
) -> list:
|
258
269
|
trades = []
|
259
270
|
symbols = symbols or [market.symbol for market in exchange_data.markets]
|
260
|
-
|
261
|
-
_get_trades(exchange_manager,
|
262
|
-
|
263
|
-
|
271
|
+
if len(symbols) == 1:
|
272
|
+
await _get_trades(exchange_manager, next(iter(symbols)), trades)
|
273
|
+
else:
|
274
|
+
await asyncio.gather(*(
|
275
|
+
_get_trades(exchange_manager, symbol, trades)
|
276
|
+
for symbol in symbols
|
277
|
+
))
|
264
278
|
return trades
|
265
279
|
|
266
280
|
|
@@ -307,6 +321,10 @@ async def create_orders(
|
|
307
321
|
order_creation_timeout: float,
|
308
322
|
price_by_symbol: dict[str, float],
|
309
323
|
) -> list:
|
324
|
+
if len(orders) == 1:
|
325
|
+
return [
|
326
|
+
await _create_order(exchange_manager, next(iter(orders)), order_creation_timeout, price_by_symbol)
|
327
|
+
]
|
310
328
|
return await asyncio.gather(*(
|
311
329
|
_create_order(exchange_manager, order_dict, order_creation_timeout, price_by_symbol)
|
312
330
|
for order_dict in orders
|