OctoBot-Trading 2.4.75__tar.gz → 2.4.76__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.75 → OctoBot-Trading-2.4.76}/CHANGELOG.md +6 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.75/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.76}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/README.md +1 -1
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/constants.py +3 -1
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/errors.py +6 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/abstract_exchange.py +7 -1
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/types/rest_exchange.py +11 -6
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/modes_util.py +21 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/modes/test_modes_util.py +58 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/LICENSE +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/OctoBot_Trading.egg-info/requires.txt +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/api/contracts.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/api/exchange.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/enums.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/traders/trader.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/util/exchange_util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/util/symbol_details.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/mode_activity.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/mode_config.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/order_util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/position.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/signals/signal_creation.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/signals/util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/storage/orders_storage.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/util/test_tools/exchange_data.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/requirements.txt +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/setup.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/test_exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/traders/test_trader.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/exchanges/util/test_exchange_util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/modes/test_abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/test_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/test_order_util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/trades/test_trade_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/trades/test_trade_util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/signals/test_util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_ascendex.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_binance.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_bingx.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_bitget.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_bithumb.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_bitso.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_bybit.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_coinbase.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_coinex.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_gateio.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_hollaex.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_htx.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_kraken.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_kucoin.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_mexc.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_ndax.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_okcoin.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_okx.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_phemex.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_poloniex.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_upbit.py +0 -0
- {OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,12 @@ 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.76] - 2024-04-12
|
8
|
+
### Added
|
9
|
+
- [Exchanges] Handle order type open status for symbol
|
10
|
+
### Updated
|
11
|
+
- [Exchanges] Handle portfolio optimization using limit orders
|
12
|
+
|
7
13
|
## [2.4.75] - 2024-04-11
|
8
14
|
### Fixed
|
9
15
|
- [Exchanges] Properly handle order not found errors
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.76
|
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.76](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.76
|
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.76](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.76](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)
|
@@ -42,6 +42,8 @@ ALLOW_SIMULATED_ORDERS_INSTANT_FILL = os_util.parse_boolean_environment_var(
|
|
42
42
|
ORDER_DATA_FETCHING_TIMEOUT = 5 * commons_constants.MINUTE_TO_SECONDS
|
43
43
|
CHAINED_ORDER_PRICE_FETCHING_TIMEOUT = 1 # should be instant or ignored
|
44
44
|
CHAINED_ORDERS_OUTDATED_PRICE_ALLOWANCE = decimal.Decimal("0.005") # allows 0.5% outdated price error
|
45
|
+
# create instantly filled limit orders 0.5% beyond market
|
46
|
+
INSTANT_FILLED_LIMIT_ORDER_PRICE_DELTA = decimal.Decimal("0.005")
|
45
47
|
CREATED_ORDER_FORCED_UPDATE_PERIOD = 5
|
46
48
|
|
47
49
|
# Tentacles
|
@@ -131,7 +133,7 @@ EXCHANGE_PERMISSION_ERRORS: typing.List[typing.Iterable[str]] = [
|
|
131
133
|
|
132
134
|
# coinbase ex: coinbase {"error":"PERMISSION_DENIED",
|
133
135
|
# "error_details":"Missing required scopes","message":"Missing required scopes"}
|
134
|
-
("permission_denied", )
|
136
|
+
("permission_denied", "required scopes"),
|
135
137
|
]
|
136
138
|
|
137
139
|
# text content of errors due to exchange compliancy rules
|
@@ -93,6 +93,12 @@ class FailedRequest(Exception):
|
|
93
93
|
"""
|
94
94
|
|
95
95
|
|
96
|
+
class UnavailableOrderTypeForMarketError(Exception):
|
97
|
+
"""
|
98
|
+
Raised when an exchange refuses to create a given type of order that should normally be supported
|
99
|
+
"""
|
100
|
+
|
101
|
+
|
96
102
|
class AuthenticationError(Exception):
|
97
103
|
"""
|
98
104
|
Raised when an exchange failed to authenticate
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/abstract_exchange.py
RENAMED
@@ -383,7 +383,7 @@ class AbstractExchange(tentacles_management.AbstractTentacle):
|
|
383
383
|
"""
|
384
384
|
raise NotImplementedError("get_bundled_order_parameters is not implemented")
|
385
385
|
|
386
|
-
def is_supported_order_type(self, order_type):
|
386
|
+
def is_supported_order_type(self, order_type: enums.TraderOrderType) -> bool:
|
387
387
|
"""
|
388
388
|
Check if the order type is supported by the current exchange instance
|
389
389
|
Should be used to know if we should simulate this order or create it on the exchange
|
@@ -392,6 +392,12 @@ class AbstractExchange(tentacles_management.AbstractTentacle):
|
|
392
392
|
"""
|
393
393
|
return order_type not in self.get_supported_elements(enums.ExchangeSupportedElements.UNSUPPORTED_ORDERS)
|
394
394
|
|
395
|
+
def is_market_open_for_order_type(self, symbol: str, order_type: enums.TraderOrderType) -> bool:
|
396
|
+
"""
|
397
|
+
Override if necessary
|
398
|
+
"""
|
399
|
+
return True
|
400
|
+
|
395
401
|
def get_trade_fee(self, symbol: str, order_type: enums.TraderOrderType, quantity, price, taker_or_maker):
|
396
402
|
"""
|
397
403
|
Calculates fees resulting to a trade
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/types/rest_exchange.py
RENAMED
@@ -196,30 +196,35 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
196
196
|
self.log_order_creation_error(e, order_type, symbol, quantity, price, stop_price)
|
197
197
|
if self.__class__.PRINT_DEBUG_LOGS:
|
198
198
|
self.logger.warning(str(e))
|
199
|
-
raise errors.MissingFunds(e)
|
200
|
-
except ccxt.NotSupported:
|
201
|
-
raise errors.NotSupported
|
199
|
+
raise errors.MissingFunds(e) from e
|
200
|
+
except ccxt.NotSupported as err:
|
201
|
+
raise errors.NotSupported from err
|
202
202
|
except ccxt.AuthenticationError as err:
|
203
203
|
# invalid api key or missing trading rights
|
204
204
|
raise errors.AuthenticationError(
|
205
205
|
f"Error when handling order {err}. Please make sure that trading permissions are on for this API key."
|
206
|
-
)
|
206
|
+
) from err
|
207
207
|
except ccxt.DDoSProtection as e:
|
208
208
|
# raised upon rate limit issues, last response data might have details on what is happening
|
209
209
|
if self.should_log_on_ddos_exception(e):
|
210
210
|
self.connector.log_ddos_error(e)
|
211
211
|
raise errors.FailedRequest(f"Failed to order operation: {e.__class__.__name__} {e}") from e
|
212
212
|
except Exception as e:
|
213
|
+
if not self.is_market_open_for_order_type(symbol, order_type):
|
214
|
+
raise errors.UnavailableOrderTypeForMarketError(
|
215
|
+
f"Error when handling order {e}. "
|
216
|
+
f"Exchange currently refuses to create orders of type {order_type} on {symbol}."
|
217
|
+
) from e
|
213
218
|
if exchanges_util.is_api_permission_error(e):
|
214
219
|
# invalid api key or missing trading rights
|
215
220
|
raise errors.AuthenticationError(
|
216
221
|
f"Error when handling order {e}. Please make sure that trading permissions are on for this API key."
|
217
|
-
)
|
222
|
+
) from e
|
218
223
|
if exchanges_util.is_exchange_rules_compliancy_error(e):
|
219
224
|
raise errors.ExchangeCompliancyError(
|
220
225
|
f"Error when handling order {e}. Exchange is refusing this order request on this account because "
|
221
226
|
f"of its compliancy requirements."
|
222
|
-
)
|
227
|
+
) from e
|
223
228
|
self.log_order_creation_error(e, order_type, symbol, quantity, price, stop_price)
|
224
229
|
print(traceback.format_exc(), file=sys.stderr)
|
225
230
|
self.logger.exception(e, False, f"Unexpected error during order operation: {e}")
|
@@ -120,6 +120,18 @@ async def convert_asset_to_target_asset(
|
|
120
120
|
)
|
121
121
|
return created_orders
|
122
122
|
|
123
|
+
if trading_personal_data.get_trade_order_type(order_type) is not trading_enums.TradeOrderType.MARKET:
|
124
|
+
# can't use market orders: use limit orders with price a bit under the current price to instant fill it.
|
125
|
+
price_delta = price * constants.INSTANT_FILLED_LIMIT_ORDER_PRICE_DELTA
|
126
|
+
if order_type is trading_enums.TraderOrderType.SELL_LIMIT:
|
127
|
+
price -= price_delta
|
128
|
+
elif order_type is trading_enums.TraderOrderType.BUY_LIMIT:
|
129
|
+
price += price_delta
|
130
|
+
else:
|
131
|
+
trading_mode.logger.error(
|
132
|
+
f"Unhandled order type in convertor limit order price adapter: {order_type}"
|
133
|
+
)
|
134
|
+
|
123
135
|
# get order quantity
|
124
136
|
quantity = _get_available_or_target_quantity(trading_mode, symbol, order_type, price, asset_amount)
|
125
137
|
symbol_market = trading_mode.exchange_manager.exchange.get_market_status(symbol, with_fixer=False)
|
@@ -147,6 +159,15 @@ def _get_associated_symbol_and_order_type(trading_mode, asset: str, target_asset
|
|
147
159
|
symbol, reversed_symbol = exchange_util.get_associated_symbol(trading_mode.exchange_manager, asset, target_asset)
|
148
160
|
order_type = trading_enums.TraderOrderType.BUY_MARKET if reversed_symbol else \
|
149
161
|
trading_enums.TraderOrderType.SELL_MARKET
|
162
|
+
if not trading_mode.exchange_manager.exchange.is_market_open_for_order_type(symbol, order_type):
|
163
|
+
# can't use market orders: use limit orders instead
|
164
|
+
order_type = trading_enums.TraderOrderType.BUY_LIMIT if order_type is trading_enums.TraderOrderType.BUY_MARKET \
|
165
|
+
else trading_enums.TraderOrderType.SELL_LIMIT
|
166
|
+
if not trading_mode.exchange_manager.exchange.is_market_open_for_order_type(symbol, order_type):
|
167
|
+
# can't convert asset: still try with limit orders but it will probably fail
|
168
|
+
trading_mode.logger.error(
|
169
|
+
f"Both market and {order_type} order are currently unsupported. Trying limit orders anyway."
|
170
|
+
)
|
150
171
|
return symbol, order_type
|
151
172
|
|
152
173
|
|
@@ -243,6 +243,64 @@ async def test_convert_asset_to_target_asset(backtesting_trader):
|
|
243
243
|
trading_mode.create_order.assert_called_once()
|
244
244
|
trading_mode.create_order.reset_mock()
|
245
245
|
|
246
|
+
# using limit orders
|
247
|
+
def _is_market_open_for_order_type(symbol: str, order_type: trading_enums.TraderOrderType):
|
248
|
+
return (
|
249
|
+
True if order_type in (trading_enums.TraderOrderType.SELL_LIMIT, trading_enums.TraderOrderType.BUY_LIMIT)
|
250
|
+
else False
|
251
|
+
)
|
252
|
+
|
253
|
+
with mock.patch.object(
|
254
|
+
exchange_manager.exchange, "is_market_open_for_order_type",
|
255
|
+
mock.Mock(side_effect=_is_market_open_for_order_type)
|
256
|
+
) as is_market_open_for_order_type_mock:
|
257
|
+
# cast 1: buying
|
258
|
+
orders = await modes_util.convert_asset_to_target_asset(
|
259
|
+
trading_mode, "USDT", "ETH", tickers, asset_amount=decimal.Decimal(450)
|
260
|
+
)
|
261
|
+
assert len(orders) == 1
|
262
|
+
order = orders[0]
|
263
|
+
assert order.order_type == trading_enums.TraderOrderType.BUY_LIMIT
|
264
|
+
assert order.symbol == "ETH/USDT"
|
265
|
+
# a bit lower than 0.3 because of the price change
|
266
|
+
assert order.origin_quantity == decimal.Decimal("0.29850746")
|
267
|
+
adapted_price = decimal.Decimal(1500) * (
|
268
|
+
constants.ONE + constants.INSTANT_FILLED_LIMIT_ORDER_PRICE_DELTA
|
269
|
+
)
|
270
|
+
assert order.origin_price == adapted_price
|
271
|
+
assert order.created_last_price == adapted_price
|
272
|
+
assert is_market_open_for_order_type_mock.call_count == 2
|
273
|
+
assert is_market_open_for_order_type_mock.mock_calls[0].args == \
|
274
|
+
("ETH/USDT", trading_enums.TraderOrderType.BUY_MARKET)
|
275
|
+
assert is_market_open_for_order_type_mock.mock_calls[1].args == \
|
276
|
+
("ETH/USDT", trading_enums.TraderOrderType.BUY_LIMIT)
|
277
|
+
is_market_open_for_order_type_mock.reset_mock()
|
278
|
+
trading_mode.create_order.assert_called_once()
|
279
|
+
trading_mode.create_order.reset_mock()
|
280
|
+
|
281
|
+
# cast 2: selling
|
282
|
+
orders = await modes_util.convert_asset_to_target_asset(
|
283
|
+
trading_mode, "ETH", "USDT", tickers, asset_amount=decimal.Decimal(2)
|
284
|
+
)
|
285
|
+
assert len(orders) == 1
|
286
|
+
order = orders[0]
|
287
|
+
assert order.order_type == trading_enums.TraderOrderType.SELL_LIMIT
|
288
|
+
assert order.symbol == "ETH/USDT"
|
289
|
+
assert order.origin_quantity == decimal.Decimal("2")
|
290
|
+
adapted_price = decimal.Decimal(1500) * (
|
291
|
+
constants.ONE - constants.INSTANT_FILLED_LIMIT_ORDER_PRICE_DELTA
|
292
|
+
)
|
293
|
+
assert order.origin_price == adapted_price
|
294
|
+
assert order.created_last_price == adapted_price
|
295
|
+
assert is_market_open_for_order_type_mock.call_count == 2
|
296
|
+
assert is_market_open_for_order_type_mock.mock_calls[0].args == \
|
297
|
+
("ETH/USDT", trading_enums.TraderOrderType.SELL_MARKET)
|
298
|
+
assert is_market_open_for_order_type_mock.mock_calls[1].args == \
|
299
|
+
("ETH/USDT", trading_enums.TraderOrderType.SELL_LIMIT)
|
300
|
+
is_market_open_for_order_type_mock.reset_mock()
|
301
|
+
trading_mode.create_order.assert_called_once()
|
302
|
+
trading_mode.create_order.reset_mock()
|
303
|
+
|
246
304
|
|
247
305
|
def _get_trading_mode(exchange_manager):
|
248
306
|
return mock.Mock(
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/OctoBot_Trading.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/funding/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/kline/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/ohlcv/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/prices/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchange_data/ticker/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/adapters/__init__.py
RENAMED
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/config/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/connectors/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/connectors/ccxt/enums.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/exchange_builder.py
RENAMED
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/exchange_channels.py
RENAMED
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/exchange_details.py
RENAMED
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/exchange_factory.py
RENAMED
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/exchange_manager.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/traders/__init__.py
RENAMED
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/traders/trader.py
RENAMED
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/types/__init__.py
RENAMED
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/util/__init__.py
RENAMED
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/util/exchange_util.py
RENAMED
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/util/symbol_details.py
RENAMED
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/exchanges/util/websockets_util.py
RENAMED
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/abstract_trading_mode.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.75 → OctoBot-Trading-2.4.76}/octobot_trading/modes/script_keywords/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|