OctoBot-Trading 2.4.140__tar.gz → 2.4.141__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.140 → OctoBot-Trading-2.4.141}/CHANGELOG.md +4 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.140/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.141}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/README.md +1 -1
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/api/__init__.py +2 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/api/contracts.py +4 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/enums.py +14 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/errors.py +6 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/contracts/margin_contract.py +12 -5
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/traders/trader.py +7 -5
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/types/rest_exchange.py +6 -1
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/abstract_trading_mode.py +8 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +1 -2
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/signals/__init__.py +2 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/signals/signal_creation.py +14 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/signals/trading_signal_bundle_builder.py +103 -33
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/signals/util.py +15 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/signals/test_trading_signal_bundle_builder.py +157 -20
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/LICENSE +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/OctoBot_Trading.egg-info/requires.txt +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/api/exchange.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/constants.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/config/proxy_config.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/util/exchange_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/util/symbol_details.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/mode_activity.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/mode_config.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/modes_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/order_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/position.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/storage/orders_storage.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/util/test_tools/exchange_data.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/requirements.txt +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/setup.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/test_exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/traders/test_trader.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/exchanges/util/test_exchange_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/modes/test_abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/modes/test_modes_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/test_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/test_order_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/trades/test_trade_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/trades/test_trade_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/signals/test_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_ascendex.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_binance.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_bingx.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_bitget.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_bithumb.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_bitmart.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_bitmex.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_bitso.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_bybit.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_coinbase.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_coinex.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_gateio.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_hollaex.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_htx.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_kraken.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_kucoin.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_mexc.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_ndax.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_okcoin.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_okx.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_phemex.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_poloniex.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_upbit.py +0 -0
- {OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,10 @@ 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.141] - 2025-01-05
|
8
|
+
### Added
|
9
|
+
[TradingSignals] add positions and leverage update
|
10
|
+
|
7
11
|
## [2.4.140] - 2025-01-03
|
8
12
|
### Updated
|
9
13
|
[Positions] properly clear closed positions
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.141
|
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.141](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.141
|
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.141](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.141](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)
|
@@ -210,6 +210,7 @@ from octobot_trading.api.contracts import (
|
|
210
210
|
get_pair_contracts,
|
211
211
|
is_handled_contract,
|
212
212
|
has_pair_future_contract,
|
213
|
+
update_pair_contract,
|
213
214
|
load_pair_contract,
|
214
215
|
create_default_future_contract,
|
215
216
|
)
|
@@ -386,6 +387,7 @@ __all__ = [
|
|
386
387
|
"get_pair_contracts",
|
387
388
|
"is_handled_contract",
|
388
389
|
"has_pair_future_contract",
|
390
|
+
"update_pair_contract",
|
389
391
|
"load_pair_contract",
|
390
392
|
"create_default_future_contract",
|
391
393
|
"set_is_exclusively_using_exchange_position_details",
|
@@ -38,6 +38,10 @@ def has_pair_future_contract(exchange_manager, pair: str) -> bool:
|
|
38
38
|
return exchange_manager.exchange.has_pair_future_contract(pair)
|
39
39
|
|
40
40
|
|
41
|
+
def update_pair_contract(exchange_manager, pair: str, leverage: decimal.Decimal):
|
42
|
+
get_pair_contracts(exchange_manager)[pair].current_leverage = leverage
|
43
|
+
|
44
|
+
|
41
45
|
def load_pair_contract(exchange_manager, contract_dict: dict):
|
42
46
|
exchange_data.update_future_contract_from_dict(exchange_manager, contract_dict)
|
43
47
|
|
@@ -521,6 +521,7 @@ class TradingSignalAttrs(enum.Enum):
|
|
521
521
|
|
522
522
|
class TradingSignalTopics(enum.Enum):
|
523
523
|
ORDERS = "orders"
|
524
|
+
POSITIONS = "positions"
|
524
525
|
PORTFOLIO = "portfolio"
|
525
526
|
|
526
527
|
|
@@ -559,6 +560,15 @@ class TradingSignalOrdersAttrs(enum.Enum):
|
|
559
560
|
UPDATE_WITH_TRIGGERING_ORDER_FEES = "update_with_triggering_order_fees"
|
560
561
|
|
561
562
|
|
563
|
+
class TradingSignalPositionsAttrs(enum.Enum):
|
564
|
+
EXCHANGE = "exchange"
|
565
|
+
EXCHANGE_TYPE = "exchange_type"
|
566
|
+
STRATEGY = "strategy"
|
567
|
+
SYMBOL = "symbol"
|
568
|
+
SIDE = "side"
|
569
|
+
LEVERAGE = "leverage"
|
570
|
+
|
571
|
+
|
562
572
|
class TradingSignalOrdersActions(enum.Enum):
|
563
573
|
CREATE = "create"
|
564
574
|
ADD_TO_GROUP = "add_to_group"
|
@@ -566,6 +576,10 @@ class TradingSignalOrdersActions(enum.Enum):
|
|
566
576
|
CANCEL = "cancel"
|
567
577
|
|
568
578
|
|
579
|
+
class TradingSignalPositionsActions(enum.Enum):
|
580
|
+
EDIT = "edit"
|
581
|
+
|
582
|
+
|
569
583
|
class StoredOrdersAttr(enum.Enum):
|
570
584
|
GROUP = "gr"
|
571
585
|
GROUP_ID = "gi"
|
@@ -272,6 +272,12 @@ class OrderDescriptionNotFoundError(Exception):
|
|
272
272
|
"""
|
273
273
|
|
274
274
|
|
275
|
+
class PositionDescriptionNotFoundError(Exception):
|
276
|
+
"""
|
277
|
+
Raised when a position description is not found
|
278
|
+
"""
|
279
|
+
|
280
|
+
|
275
281
|
class AdapterError(Exception):
|
276
282
|
"""
|
277
283
|
Raised when an error occurs in an adapter
|
@@ -13,6 +13,8 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library.
|
16
|
+
import decimal
|
17
|
+
|
16
18
|
import octobot_commons.logging as logging
|
17
19
|
|
18
20
|
import octobot_trading.enums as enums
|
@@ -24,12 +26,12 @@ class MarginContract:
|
|
24
26
|
contract_size=constants.ONE,
|
25
27
|
maximum_leverage=constants.ONE,
|
26
28
|
current_leverage=constants.ONE):
|
27
|
-
self.pair = pair
|
29
|
+
self.pair: str = pair
|
28
30
|
self.margin_type = margin_type
|
29
31
|
|
30
|
-
self.contract_size = contract_size
|
31
|
-
self.maximum_leverage = maximum_leverage
|
32
|
-
self.current_leverage = current_leverage
|
32
|
+
self.contract_size: decimal.Decimal = contract_size
|
33
|
+
self.maximum_leverage: decimal.Decimal = maximum_leverage
|
34
|
+
self.current_leverage: decimal.Decimal = current_leverage
|
33
35
|
|
34
36
|
self.risk_limit = {}
|
35
37
|
|
@@ -47,7 +49,12 @@ class MarginContract:
|
|
47
49
|
:param new_leverage: the leverage value to check
|
48
50
|
:return: True if valid
|
49
51
|
"""
|
50
|
-
|
52
|
+
dec_leverage = decimal.Decimal(str(new_leverage))
|
53
|
+
return (
|
54
|
+
constants.ZERO < dec_leverage
|
55
|
+
if self.maximum_leverage is None
|
56
|
+
else constants.ZERO < dec_leverage <= self.maximum_leverage
|
57
|
+
)
|
51
58
|
|
52
59
|
def set_current_leverage(self, new_leverage):
|
53
60
|
"""
|
{OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/traders/trader.py
RENAMED
@@ -779,13 +779,16 @@ class Trader(util.Initializable):
|
|
779
779
|
async with self.exchange_manager.exchange_personal_data.portfolio_manager.portfolio.lock:
|
780
780
|
await self.exchange_manager.exchange_personal_data.handle_portfolio_update_from_withdrawal(amount, currency)
|
781
781
|
|
782
|
-
async def set_leverage(
|
782
|
+
async def set_leverage(
|
783
|
+
self, symbol: str, side: typing.Optional[enums.PositionSide], leverage: decimal.Decimal
|
784
|
+
) -> bool:
|
783
785
|
"""
|
784
786
|
Updates the symbol contract leverage
|
785
787
|
Can raise InvalidLeverageValue if leverage value is not matching requirements
|
786
788
|
:param symbol: the symbol to update
|
787
789
|
:param side: the side to update (TODO)
|
788
790
|
:param leverage: the new leverage value
|
791
|
+
:return True if leverage changed
|
789
792
|
"""
|
790
793
|
contract = self.exchange_manager.exchange.get_pair_future_contract(symbol)
|
791
794
|
if not contract.check_leverage_update(leverage):
|
@@ -793,12 +796,11 @@ class Trader(util.Initializable):
|
|
793
796
|
f"but maximal value is {contract.maximum_leverage}")
|
794
797
|
if contract.current_leverage != leverage:
|
795
798
|
if not self.simulate:
|
796
|
-
await self.exchange_manager.exchange.set_symbol_leverage(
|
797
|
-
symbol=symbol,
|
798
|
-
leverage=leverage
|
799
|
-
)
|
799
|
+
await self.exchange_manager.exchange.set_symbol_leverage(symbol, float(leverage))
|
800
800
|
self.logger.info(f"Switching {symbol} leverage from {contract.current_leverage} to {leverage}")
|
801
801
|
contract.set_current_leverage(leverage)
|
802
|
+
return True
|
803
|
+
return False
|
802
804
|
|
803
805
|
async def set_symbol_take_profit_stop_loss_mode(self, symbol, new_mode: enums.TakeProfitStopLossMode):
|
804
806
|
"""
|
{OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/exchanges/types/rest_exchange.py
RENAMED
@@ -102,6 +102,8 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
102
102
|
CAN_HAVE_DELAYED_CANCELLED_ORDERS = False
|
103
103
|
# Set True when the "limit" param when fetching order books is taken into account
|
104
104
|
SUPPORTS_CUSTOM_LIMIT_ORDER_BOOK_FETCH = False
|
105
|
+
# Set False when the leverage value is set via something else that a set_leverage api (from orders for example)
|
106
|
+
UPDATE_LEVERAGE_FROM_API = True
|
105
107
|
|
106
108
|
# text content of errors due to orders not found errors
|
107
109
|
EXCHANGE_ORDER_NOT_FOUND_ERRORS: typing.List[typing.Iterable[str]] = []
|
@@ -934,7 +936,10 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
934
936
|
:param leverage: the leverage
|
935
937
|
:return: the update result
|
936
938
|
"""
|
937
|
-
|
939
|
+
if self.UPDATE_LEVERAGE_FROM_API:
|
940
|
+
return await self.connector.set_symbol_leverage(leverage=leverage, symbol=symbol, **kwargs)
|
941
|
+
# nothing to do when UPDATE_LEVERAGE_FROM_API is False
|
942
|
+
return None
|
938
943
|
|
939
944
|
async def set_symbol_margin_type(self, symbol: str, isolated: bool, **kwargs: dict):
|
940
945
|
"""
|
{OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/modes/abstract_trading_mode.py
RENAMED
@@ -17,6 +17,7 @@ import abc
|
|
17
17
|
import contextlib
|
18
18
|
import decimal
|
19
19
|
import copy
|
20
|
+
import typing
|
20
21
|
|
21
22
|
import octobot_commons.constants as common_constants
|
22
23
|
import octobot_commons.enums as common_enums
|
@@ -585,6 +586,13 @@ class AbstractTradingMode(abstract_tentacle.AbstractTentacle):
|
|
585
586
|
params=params
|
586
587
|
)
|
587
588
|
|
589
|
+
async def set_leverage(
|
590
|
+
self, symbol: str, side: typing.Optional[enums.PositionSide], leverage: decimal.Decimal
|
591
|
+
) -> bool:
|
592
|
+
return await signals.set_leverage(
|
593
|
+
self.exchange_manager, self.should_emit_trading_signal(), symbol, side, leverage
|
594
|
+
)
|
595
|
+
|
588
596
|
async def get_additional_metadata(self, is_backtesting):
|
589
597
|
"""
|
590
598
|
Override if necessary
|
@@ -42,9 +42,8 @@ async def user_select_emit_trading_signals(ctx, identifier, def_val=False) -> bo
|
|
42
42
|
return is_emitting_signals
|
43
43
|
|
44
44
|
|
45
|
-
async def set_leverage(ctx, leverage):
|
45
|
+
async def set_leverage(ctx, leverage, side=None):
|
46
46
|
if ctx.exchange_manager.is_future:
|
47
|
-
side = None
|
48
47
|
try:
|
49
48
|
await ctx.exchange_manager.trader.set_leverage(ctx.symbol, side, decimal.Decimal(str(leverage)))
|
50
49
|
except errors.ContractExistsError as e:
|
{OctoBot-Trading-2.4.140 → OctoBot-Trading-2.4.141}/octobot_trading/signals/signal_creation.py
RENAMED
@@ -15,10 +15,12 @@
|
|
15
15
|
# License along with this library.
|
16
16
|
import decimal
|
17
17
|
import contextlib
|
18
|
+
import typing
|
18
19
|
|
19
20
|
import octobot_trading.modes.script_keywords as script_keywords
|
20
21
|
import octobot_trading.personal_data.orders as orders
|
21
22
|
import octobot_trading.constants as constants
|
23
|
+
import octobot_trading.enums as enums
|
22
24
|
import octobot_trading.signals.trading_signal_bundle_builder as trading_signal_bundle_builder
|
23
25
|
|
24
26
|
import octobot_commons.logging as logging
|
@@ -141,3 +143,15 @@ async def edit_order(
|
|
141
143
|
updated_current_price=edited_current_price,
|
142
144
|
)
|
143
145
|
return changed
|
146
|
+
|
147
|
+
|
148
|
+
async def set_leverage(
|
149
|
+
exchange_manager, should_emit_signal, symbol: str, side: typing.Optional[enums.PositionSide],
|
150
|
+
leverage: decimal.Decimal
|
151
|
+
) -> bool:
|
152
|
+
changed = await exchange_manager.trader.set_leverage(symbol, side, leverage)
|
153
|
+
if should_emit_signal and changed:
|
154
|
+
signals.SignalPublisher.instance().get_signal_bundle_builder(symbol).add_leverage_update(
|
155
|
+
symbol, side, leverage, exchange_manager
|
156
|
+
)
|
157
|
+
return changed
|
@@ -13,6 +13,9 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library.
|
16
|
+
import decimal
|
17
|
+
import typing
|
18
|
+
|
16
19
|
import octobot_commons.signals as signals
|
17
20
|
import octobot_trading.signals.util as signal_util
|
18
21
|
import octobot_trading.enums as trading_enums
|
@@ -34,10 +37,20 @@ class TradingSignalBundleBuilder(signals.SignalBundleBuilder):
|
|
34
37
|
|
35
38
|
def sort_signals(self):
|
36
39
|
# https://docs.python.org/3/howto/sorting.html#sort-stability-and-complex-sorts
|
37
|
-
#
|
38
|
-
|
39
|
-
|
40
|
-
|
40
|
+
# sorting rules:
|
41
|
+
# 1. cancelled order signals at the beginning of the list
|
42
|
+
# 2. positions edit (such as changing leverage)
|
43
|
+
# 3. others as is while keeping initial order
|
44
|
+
def _sort_key(signal: signals.Signal):
|
45
|
+
return (
|
46
|
+
0 if (
|
47
|
+
signal.content[trading_enums.TradingSignalCommonsAttrs.ACTION.value] ==
|
48
|
+
trading_enums.TradingSignalOrdersActions.CANCEL.value
|
49
|
+
) else (
|
50
|
+
1 if signal.topic == trading_enums.TradingSignalTopics.POSITIONS.value
|
51
|
+
else 2
|
52
|
+
)
|
53
|
+
)
|
41
54
|
|
42
55
|
self.signals = sorted(self.signals, key=_sort_key)
|
43
56
|
return self
|
@@ -122,6 +135,25 @@ class TradingSignalBundleBuilder(signals.SignalBundleBuilder):
|
|
122
135
|
)
|
123
136
|
)
|
124
137
|
|
138
|
+
def add_leverage_update(
|
139
|
+
self, symbol: str, side: typing.Optional[trading_enums.PositionSide],
|
140
|
+
leverage: decimal.Decimal, exchange_manager
|
141
|
+
):
|
142
|
+
if not self._update_pending_positions(
|
143
|
+
symbol, side, exchange_manager, trading_enums.TradingSignalPositionsActions.EDIT, leverage=leverage
|
144
|
+
):
|
145
|
+
self.register_signal(
|
146
|
+
trading_enums.TradingSignalTopics.POSITIONS.value,
|
147
|
+
signal_util.create_position_signal_content(
|
148
|
+
trading_enums.TradingSignalPositionsActions.EDIT,
|
149
|
+
self.strategy,
|
150
|
+
exchange_manager,
|
151
|
+
symbol,
|
152
|
+
side,
|
153
|
+
leverage
|
154
|
+
)
|
155
|
+
)
|
156
|
+
|
125
157
|
def _update_pending_orders(
|
126
158
|
self, order, exchange_manager,
|
127
159
|
action,
|
@@ -189,47 +221,85 @@ class TradingSignalBundleBuilder(signals.SignalBundleBuilder):
|
|
189
221
|
pass
|
190
222
|
return False
|
191
223
|
|
224
|
+
def _update_pending_positions(self, symbol, side, exchange_manager, action, leverage):
|
225
|
+
try:
|
226
|
+
_, position_description = self._get_position_description_from_local_positions(
|
227
|
+
symbol, side, exchange_manager.exchange_name
|
228
|
+
)
|
229
|
+
if action is trading_enums.TradingSignalPositionsActions.EDIT:
|
230
|
+
# update position edit content
|
231
|
+
position_description[trading_enums.TradingSignalPositionsAttrs.LEVERAGE.value] = float(leverage)
|
232
|
+
return True
|
233
|
+
except trading_errors.PositionDescriptionNotFoundError:
|
234
|
+
pass
|
235
|
+
return False
|
236
|
+
|
192
237
|
def _pack_referenced_orders_together(self):
|
193
238
|
filtered_signals = []
|
194
239
|
order_description_by_seen_group_ids = {}
|
195
240
|
for signal in self.signals:
|
196
241
|
include_signal = True
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
.
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
.
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
order_description_by_seen_group_ids
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
242
|
+
if signal.topic == trading_enums.TradingSignalTopics.ORDERS.value:
|
243
|
+
try:
|
244
|
+
# bundled orders must be sent at the same time as the original order, add them both to the same signal
|
245
|
+
if add_to_order_id := signal.content[trading_enums.TradingSignalOrdersAttrs.BUNDLED_WITH.value]:
|
246
|
+
_, order_description = self._get_order_description_from_local_orders(add_to_order_id)
|
247
|
+
order_description[trading_enums.TradingSignalOrdersAttrs.ADDITIONAL_ORDERS.value]\
|
248
|
+
.append(signal.content)
|
249
|
+
include_signal = False
|
250
|
+
# chained orders must be sent at the same time as the original order, add them both to the same signal
|
251
|
+
elif add_to_order_id := signal.content[trading_enums.TradingSignalOrdersAttrs.CHAINED_TO.value]:
|
252
|
+
_, order_description = self._get_order_description_from_local_orders(add_to_order_id)
|
253
|
+
order_description[trading_enums.TradingSignalOrdersAttrs.ADDITIONAL_ORDERS.value]\
|
254
|
+
.append(signal.content)
|
255
|
+
include_signal = False
|
256
|
+
except trading_errors.OrderDescriptionNotFoundError:
|
257
|
+
# Failed to find the triggering order's associated signal that this order signal should be associated to
|
258
|
+
# in ADDITIONAL_ORDERS.
|
259
|
+
# This can happen when the triggering order has already been sent in a different signal
|
260
|
+
self.logger.debug(f"Skip signal packing for {signal}: triggering order not found in associated signals")
|
261
|
+
# grouped orders must be created before the group is enabled, add them both to the same signal
|
262
|
+
# groups. They might also need to be updated together
|
263
|
+
if (add_to_group_ids := signal.content[trading_enums.TradingSignalOrdersAttrs.GROUP_ID.value]) \
|
264
|
+
and include_signal:
|
265
|
+
if add_to_group_ids in order_description_by_seen_group_ids:
|
266
|
+
order_description_by_seen_group_ids[add_to_group_ids][
|
267
|
+
trading_enums.TradingSignalOrdersAttrs.ADDITIONAL_ORDERS.value].append(signal.content)
|
268
|
+
include_signal = False
|
269
|
+
else:
|
270
|
+
order_description_by_seen_group_ids[add_to_group_ids] = signal.content
|
271
|
+
elif signal.topic == trading_enums.TradingSignalTopics.POSITIONS.value:
|
272
|
+
# nothing to do, signals can be added as is
|
273
|
+
pass
|
274
|
+
else:
|
275
|
+
include_signal = False
|
276
|
+
self.logger.debug(f"Skip signal packing for {signal} ({signal.topic=})")
|
225
277
|
if include_signal:
|
226
278
|
filtered_signals.append(signal)
|
227
279
|
self.signals = filtered_signals
|
228
280
|
|
229
281
|
def _get_order_description_from_local_orders(self, order_id):
|
230
282
|
for index, signal in enumerate(self.signals):
|
231
|
-
if
|
283
|
+
if (
|
284
|
+
signal.topic == trading_enums.TradingSignalTopics.ORDERS.value and
|
285
|
+
signal.content[trading_enums.TradingSignalOrdersAttrs.ORDER_ID.value] == order_id
|
286
|
+
):
|
232
287
|
return index, signal.content
|
233
288
|
raise trading_errors.OrderDescriptionNotFoundError(
|
234
289
|
f"order not found (order_id: {order_id})"
|
235
290
|
)
|
291
|
+
|
292
|
+
def _get_position_description_from_local_positions(self, symbol, side, exchange_name):
|
293
|
+
for index, signal in enumerate(self.signals):
|
294
|
+
side_value = side.value if side else side
|
295
|
+
if (
|
296
|
+
signal.topic == trading_enums.TradingSignalTopics.POSITIONS.value and
|
297
|
+
signal.content[trading_enums.TradingSignalPositionsAttrs.SYMBOL.value] == symbol and
|
298
|
+
signal.content[trading_enums.TradingSignalPositionsAttrs.SIDE.value] == side_value and
|
299
|
+
signal.content[trading_enums.TradingSignalPositionsAttrs.EXCHANGE.value] == exchange_name
|
300
|
+
):
|
301
|
+
return index, signal.content
|
302
|
+
raise trading_errors.PositionDescriptionNotFoundError(
|
303
|
+
f"position not found ({symbol, side, exchange_name})"
|
304
|
+
)
|
305
|
+
|
@@ -71,3 +71,18 @@ def create_order_signal_content(
|
|
71
71
|
None if order.triggered_by is None else order.triggered_by.order_id,
|
72
72
|
trading_enums.TradingSignalOrdersAttrs.ADDITIONAL_ORDERS.value: [],
|
73
73
|
}
|
74
|
+
|
75
|
+
|
76
|
+
def create_position_signal_content(
|
77
|
+
action, strategy, exchange_manager, symbol, side, leverage
|
78
|
+
) -> dict:
|
79
|
+
# only use order.order_id to identify orders in signals (exchange_order_id is local and never shared)
|
80
|
+
return {
|
81
|
+
trading_enums.TradingSignalCommonsAttrs.ACTION.value: action.value,
|
82
|
+
trading_enums.TradingSignalPositionsAttrs.STRATEGY.value: strategy,
|
83
|
+
trading_enums.TradingSignalPositionsAttrs.EXCHANGE.value: exchange_manager.exchange_name,
|
84
|
+
trading_enums.TradingSignalPositionsAttrs.EXCHANGE_TYPE.value: exchanges.get_exchange_type(exchange_manager).value,
|
85
|
+
trading_enums.TradingSignalPositionsAttrs.SYMBOL.value: symbol,
|
86
|
+
trading_enums.TradingSignalPositionsAttrs.SIDE.value: side.value if side else side,
|
87
|
+
trading_enums.TradingSignalPositionsAttrs.LEVERAGE.value: float(leverage),
|
88
|
+
}
|