OctoBot-Trading 2.4.124__tar.gz → 2.4.125__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.124 → OctoBot-Trading-2.4.125}/CHANGELOG.md +4 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/OctoBot_Trading.egg-info/requires.txt +1 -1
- {OctoBot-Trading-2.4.124/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.125}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/README.md +1 -1
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/funding/channel/funding_updater.py +3 -1
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/kline/channel/kline_updater.py +7 -2
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +7 -1
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +5 -2
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/prices/channel/prices_updater.py +3 -1
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +12 -2
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +8 -2
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/abstract_exchange.py +8 -3
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +53 -23
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/types/rest_exchange.py +31 -16
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/types/websocket_exchange.py +7 -3
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/abstract_trading_mode.py +31 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/channel/orders_updater.py +2 -1
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +11 -3
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/channel/positions_updater.py +14 -3
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/trades/channel/trades_updater.py +3 -2
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/requirements.txt +1 -1
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/LICENSE +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/api/contracts.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/api/exchange.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/constants.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/enums.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/errors.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/config/proxy_config.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/traders/trader.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/util/exchange_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/util/symbol_details.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/mode_activity.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/mode_config.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/modes_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/order_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/position.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/signals/signal_creation.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/signals/util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/storage/orders_storage.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/util/test_tools/exchange_data.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/setup.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/test_exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/traders/test_trader.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/exchanges/util/test_exchange_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/modes/test_abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/modes/test_modes_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/test_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/test_order_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/trades/test_trade_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/trades/test_trade_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/signals/test_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_ascendex.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_binance.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_bingx.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_bitget.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_bithumb.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_bitmart.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_bitso.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_bybit.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_coinbase.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_coinex.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_gateio.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_hollaex.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_htx.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_kraken.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_kucoin.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_mexc.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_ndax.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_okcoin.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_okx.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_phemex.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_poloniex.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/tests_additional/real_exchanges/test_upbit.py +0 -0
- {OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/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.125] - 2023-11-23
|
8
|
+
### Added
|
9
|
+
[TradingMode] historical config
|
10
|
+
|
7
11
|
## [2.4.124] - 2024-11-17
|
8
12
|
### Updated
|
9
13
|
[Exchanges] Handle limit order in converter
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.125
|
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.125](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.125
|
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.125](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.125](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)
|
@@ -19,6 +19,7 @@ import typing
|
|
19
19
|
|
20
20
|
import octobot_commons.async_job as async_job
|
21
21
|
import octobot_commons.constants as common_constants
|
22
|
+
import octobot_commons.html_util as html_util
|
22
23
|
|
23
24
|
import octobot_trading.exchange_data.funding.channel.funding as funding_channel
|
24
25
|
import octobot_trading.exchanges.exchange_websocket_factory as exchange_websocket_factory
|
@@ -109,7 +110,8 @@ class FundingUpdater(funding_channel.FundingProducer):
|
|
109
110
|
self.logger.exception(
|
110
111
|
e,
|
111
112
|
True,
|
112
|
-
f"Fail to update funding rate on {self.channel.exchange_manager.exchange.name} for {symbol} :
|
113
|
+
f"Fail to update funding rate on {self.channel.exchange_manager.exchange.name} for {symbol} : "
|
114
|
+
f"{html_util.get_html_summary_if_relevant(e)}"
|
113
115
|
)
|
114
116
|
return None
|
115
117
|
|
@@ -17,8 +17,9 @@
|
|
17
17
|
import asyncio
|
18
18
|
import time
|
19
19
|
|
20
|
-
import
|
20
|
+
import octobot_commons.html_util as html_util
|
21
21
|
|
22
|
+
import octobot_trading.errors as errors
|
22
23
|
import octobot_trading.constants as constants
|
23
24
|
import octobot_trading.exchange_data.kline.channel.kline as kline_channel
|
24
25
|
import octobot_trading.enums as enums
|
@@ -82,7 +83,11 @@ class KlineUpdater(kline_channel.KlineProducer):
|
|
82
83
|
self.logger.warning(f"{self.channel.exchange_manager.exchange_name} is not supporting updates")
|
83
84
|
await self.pause()
|
84
85
|
except Exception as e:
|
85
|
-
self.logger.exception(
|
86
|
+
self.logger.exception(
|
87
|
+
e,
|
88
|
+
True,
|
89
|
+
f"Failed to update kline data in {time_frame} : {html_util.get_html_summary_if_relevant(e)}"
|
90
|
+
)
|
86
91
|
|
87
92
|
async def resume(self) -> None:
|
88
93
|
await super().resume()
|
@@ -20,6 +20,7 @@ import decimal
|
|
20
20
|
|
21
21
|
import octobot_commons.constants as common_constants
|
22
22
|
import octobot_commons.enums as common_enums
|
23
|
+
import octobot_commons.html_util as html_util
|
23
24
|
|
24
25
|
import octobot_trading.errors as errors
|
25
26
|
import octobot_trading.constants as constants
|
@@ -244,7 +245,12 @@ class OHLCVUpdater(ohlcv_channel.OHLCVProducer):
|
|
244
245
|
f"{self.channel.exchange_manager.exchange_name} is not supporting updates")
|
245
246
|
await self.pause()
|
246
247
|
except Exception as e:
|
247
|
-
self.logger.exception(
|
248
|
+
self.logger.exception(
|
249
|
+
e,
|
250
|
+
True,
|
251
|
+
f"Failed to update ohlcv data for {pair} on {time_frame} : "
|
252
|
+
f"{html_util.get_html_summary_if_relevant(e)}"
|
253
|
+
)
|
248
254
|
await asyncio.sleep(self.OHLCV_ON_ERROR_TIME)
|
249
255
|
|
250
256
|
async def _refresh_current_candle(self, time_frame, pair, candles, last_candle,
|
@@ -16,8 +16,9 @@
|
|
16
16
|
# License along with this library.
|
17
17
|
import asyncio
|
18
18
|
|
19
|
-
import
|
19
|
+
import octobot_commons.html_util as html_util
|
20
20
|
|
21
|
+
import octobot_trading.errors as errors
|
21
22
|
import octobot_trading.exchange_channel as exchanges_channel
|
22
23
|
import octobot_trading.constants as constants
|
23
24
|
import octobot_trading.exchange_data.order_book.channel.order_book as order_book_channel
|
@@ -67,7 +68,9 @@ class OrderBookUpdater(order_book_channel.OrderBookProducer):
|
|
67
68
|
self.logger.warning(f"{self.channel.exchange_manager.exchange_name} is not supporting updates")
|
68
69
|
await self.pause()
|
69
70
|
except Exception as e:
|
70
|
-
self.logger.exception(
|
71
|
+
self.logger.exception(
|
72
|
+
e, True, f"Fail to update order book : {html_util.get_html_summary_if_relevant(e)}"
|
73
|
+
)
|
71
74
|
|
72
75
|
async def parse_order_book_ticker(self, pair, asks, bids):
|
73
76
|
"""
|
@@ -16,6 +16,8 @@
|
|
16
16
|
import asyncio
|
17
17
|
import decimal
|
18
18
|
|
19
|
+
import octobot_commons.html_util as html_util
|
20
|
+
|
19
21
|
import octobot_trading.errors as errors
|
20
22
|
import octobot_trading.exchange_channel as exchanges_channel
|
21
23
|
import octobot_trading.constants as constants
|
@@ -135,7 +137,7 @@ class MarkPriceUpdater(prices_channel.MarkPriceProducer):
|
|
135
137
|
except (errors.NotSupported, NotImplementedError) as ne:
|
136
138
|
raise ne
|
137
139
|
except Exception as e:
|
138
|
-
self.logger.exception(e, True, f"Fail to update funding rate : {e}")
|
140
|
+
self.logger.exception(e, True, f"Fail to update funding rate : {html_util.get_html_summary_if_relevant(e)}")
|
139
141
|
return None
|
140
142
|
|
141
143
|
async def push_funding_rate(self, symbol, funding_rate):
|
@@ -16,6 +16,8 @@
|
|
16
16
|
# License along with this library.
|
17
17
|
import asyncio
|
18
18
|
|
19
|
+
import octobot_commons.html_util as html_util
|
20
|
+
|
19
21
|
import octobot_trading.errors as errors
|
20
22
|
import octobot_trading.exchange_data.recent_trades.channel.recent_trade as recent_trade_channel
|
21
23
|
import octobot_trading.constants as constants
|
@@ -40,7 +42,11 @@ class RecentTradeUpdater(recent_trade_channel.RecentTradeProducer):
|
|
40
42
|
await self.push(pair, recent_trades)
|
41
43
|
await asyncio.sleep(self.refresh_time)
|
42
44
|
except Exception as e:
|
43
|
-
self.logger.exception(
|
45
|
+
self.logger.exception(
|
46
|
+
e,
|
47
|
+
True,
|
48
|
+
f"Fail to initialize recent trades : {html_util.get_html_summary_if_relevant(e)}"
|
49
|
+
)
|
44
50
|
|
45
51
|
async def start(self):
|
46
52
|
refresh_threshold = self.channel.exchange_manager.get_rest_pairs_refresh_threshold()
|
@@ -76,7 +82,11 @@ class RecentTradeUpdater(recent_trade_channel.RecentTradeProducer):
|
|
76
82
|
self.logger.warning(f"{self.channel.exchange_manager.exchange_name} is not supporting updates")
|
77
83
|
await self.pause()
|
78
84
|
except Exception as e:
|
79
|
-
self.logger.exception(
|
85
|
+
self.logger.exception(
|
86
|
+
e,
|
87
|
+
True,
|
88
|
+
f"Fail to update recent trades : {html_util.get_html_summary_if_relevant(e)}"
|
89
|
+
)
|
80
90
|
|
81
91
|
async def resume(self) -> None:
|
82
92
|
await super().resume()
|
@@ -17,6 +17,8 @@
|
|
17
17
|
import asyncio
|
18
18
|
import contextlib
|
19
19
|
|
20
|
+
import octobot_commons.html_util as html_util
|
21
|
+
|
20
22
|
import octobot_trading.errors as errors
|
21
23
|
import octobot_trading.constants as constants
|
22
24
|
import octobot_trading.exchange_data.ticker.channel.ticker as ticker_channel
|
@@ -60,13 +62,17 @@ class TickerUpdater(ticker_channel.TickerProducer):
|
|
60
62
|
self.logger.warning(f"{self.channel.exchange_manager.exchange_name} is not supporting updates")
|
61
63
|
await self.pause()
|
62
64
|
except Exception as e:
|
63
|
-
self.logger.exception(
|
65
|
+
self.logger.exception(
|
66
|
+
e,
|
67
|
+
True,
|
68
|
+
f"Fail to update ticker : {html_util.get_html_summary_if_relevant(e)}"
|
69
|
+
)
|
64
70
|
|
65
71
|
async def _fetch_ticker(self, pair):
|
66
72
|
try:
|
67
73
|
await self.fetch_and_push_pair(pair)
|
68
74
|
except errors.FailedRequest as e:
|
69
|
-
self.logger.warning(
|
75
|
+
self.logger.warning(html_util.get_html_summary_if_relevant(e))
|
70
76
|
# avoid spamming on disconnected situation
|
71
77
|
await asyncio.sleep(constants.DEFAULT_FAILED_REQUEST_RETRY_TIME)
|
72
78
|
|
{OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/abstract_exchange.py
RENAMED
@@ -24,6 +24,7 @@ import octobot_commons.enums as common_enums
|
|
24
24
|
import octobot_commons.logging as logging
|
25
25
|
import octobot_commons.timestamp_util as timestamp_util
|
26
26
|
import octobot_commons.tentacles_management as tentacles_management
|
27
|
+
import octobot_commons.html_util as html_util
|
27
28
|
|
28
29
|
import octobot_trading.constants
|
29
30
|
import octobot_trading.enums as enums
|
@@ -513,7 +514,8 @@ class AbstractExchange(tentacles_management.AbstractTentacle):
|
|
513
514
|
latest_error = err
|
514
515
|
latest_request_url = self.get_latest_request_url()
|
515
516
|
self.logger.debug(
|
516
|
-
f"Request retrier failed for {request_func.__name__}({args} {kwargs})
|
517
|
+
f"Request retrier failed for {request_func.__name__}({args} {kwargs}) "
|
518
|
+
f"(attempt {attempt}) ({html_util.get_html_summary_if_relevant(err)})"
|
517
519
|
)
|
518
520
|
if time.time() - last_request_time < minimal_interval:
|
519
521
|
await asyncio.sleep(minimal_interval)
|
@@ -722,11 +724,14 @@ class AbstractExchange(tentacles_management.AbstractTentacle):
|
|
722
724
|
def log_order_creation_error(self, error, order_type, symbol, quantity, price, stop_price):
|
723
725
|
order_desc = f"order_type: {order_type}, symbol: {symbol}, quantity: {str(quantity)}, price: {str(price)}," \
|
724
726
|
f" stop_price: {str(stop_price)}"
|
725
|
-
self.logger.error(
|
727
|
+
self.logger.error(
|
728
|
+
f"Failed to create order : {error.__class__.__name__} {html_util.get_html_summary_if_relevant(error)}: "
|
729
|
+
f"({order_desc})"
|
730
|
+
)
|
726
731
|
|
727
732
|
def handle_token_error(self, error):
|
728
733
|
self.logger.error(f"Exchange configuration is invalid : please check your configuration ! "
|
729
|
-
f"({error.__class__.__name__}: {error})")
|
734
|
+
f"({error.__class__.__name__}: {html_util.get_html_summary_if_relevant(error)})")
|
730
735
|
|
731
736
|
@contextlib.contextmanager
|
732
737
|
def creating_order(
|
@@ -23,6 +23,7 @@ import inspect
|
|
23
23
|
import octobot_commons.enums
|
24
24
|
import octobot_commons.logging
|
25
25
|
import octobot_commons.symbols as commons_symbols
|
26
|
+
import octobot_commons.html_util as html_util
|
26
27
|
|
27
28
|
import octobot_trading
|
28
29
|
import octobot_trading.constants as constants
|
@@ -50,7 +51,7 @@ def _retried_failed_network_request(func):
|
|
50
51
|
return resp
|
51
52
|
except ccxt.RequestTimeout as err:
|
52
53
|
octobot_commons.logging.get_logger(f"_retried_failed_network_request").warning(
|
53
|
-
f"{func.__name__} raised {err} ({err.__class__.__name__}) "
|
54
|
+
f"{func.__name__} raised {html_util.get_html_summary_if_relevant(err)} ({err.__class__.__name__}) "
|
54
55
|
f"[attempts {i+1}/{constants.FAILED_NETWORK_REQUEST_RETRY_ATTEMPTS}]."
|
55
56
|
)
|
56
57
|
if i < constants.FAILED_NETWORK_REQUEST_RETRY_ATTEMPTS - 1:
|
@@ -162,7 +163,8 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
162
163
|
ccxt_client_util.set_markets_cache(self.client)
|
163
164
|
except ccxt.ExchangeNotAvailable as err:
|
164
165
|
raise octobot_trading.errors.FailedRequest(
|
165
|
-
f"Failed to load_symbol_markets: {err.__class__.__name__}
|
166
|
+
f"Failed to load_symbol_markets: {err.__class__.__name__} "
|
167
|
+
f"on {html_util.get_html_summary_if_relevant(err)}"
|
166
168
|
) from err
|
167
169
|
except ccxt.ExchangeError:
|
168
170
|
# includes AuthenticationError but also auth error not identified as such by ccxt
|
@@ -269,7 +271,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
269
271
|
except ccxt.NotSupported:
|
270
272
|
raise octobot_trading.errors.NotSupported
|
271
273
|
except Exception as e:
|
272
|
-
self.logger.error(f"Fail to get market status of {symbol}: {e}")
|
274
|
+
self.logger.error(f"Fail to get market status of {symbol}: {html_util.get_html_summary_if_relevant(e)}")
|
273
275
|
return {}
|
274
276
|
|
275
277
|
@ccxt_client_util.converted_ccxt_common_errors
|
@@ -301,7 +303,8 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
301
303
|
raise octobot_trading.errors.NotSupported
|
302
304
|
except ccxt.BaseError as e:
|
303
305
|
raise octobot_trading.errors.FailedRequest(
|
304
|
-
f"Failed to get_symbol_prices of {symbol} on {time_frame.value}: {e.__class__.__name__}
|
306
|
+
f"Failed to get_symbol_prices of {symbol} on {time_frame.value}: {e.__class__.__name__} "
|
307
|
+
f"{html_util.get_html_summary_if_relevant(e)}"
|
305
308
|
) from e
|
306
309
|
|
307
310
|
@ccxt_client_util.converted_ccxt_common_errors
|
@@ -319,7 +322,9 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
319
322
|
except ccxt.NotSupported:
|
320
323
|
raise octobot_trading.errors.NotSupported
|
321
324
|
except ccxt.BaseError as e:
|
322
|
-
raise octobot_trading.errors.FailedRequest(
|
325
|
+
raise octobot_trading.errors.FailedRequest(
|
326
|
+
f"Failed to get_kline_price {html_util.get_html_summary_if_relevant(e)}"
|
327
|
+
)
|
323
328
|
|
324
329
|
# return up to ten bidasks on each side of the order book stack
|
325
330
|
@ccxt_client_util.converted_ccxt_common_errors
|
@@ -332,7 +337,9 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
332
337
|
except ccxt.NotSupported:
|
333
338
|
raise octobot_trading.errors.NotSupported
|
334
339
|
except ccxt.BaseError as e:
|
335
|
-
raise octobot_trading.errors.FailedRequest(
|
340
|
+
raise octobot_trading.errors.FailedRequest(
|
341
|
+
f"Failed to get_order_book {html_util.get_html_summary_if_relevant(e)}"
|
342
|
+
)
|
336
343
|
|
337
344
|
# return bidasks on each side of the order book stack for each given symbol
|
338
345
|
@ccxt_client_util.converted_ccxt_common_errors
|
@@ -354,7 +361,9 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
354
361
|
except ccxt.NotSupported:
|
355
362
|
raise octobot_trading.errors.NotSupported
|
356
363
|
except ccxt.BaseError as e:
|
357
|
-
raise octobot_trading.errors.FailedRequest(
|
364
|
+
raise octobot_trading.errors.FailedRequest(
|
365
|
+
f"Failed to get_order_books {html_util.get_html_summary_if_relevant(e)}"
|
366
|
+
)
|
358
367
|
|
359
368
|
@ccxt_client_util.converted_ccxt_common_errors
|
360
369
|
async def get_recent_trades(self, symbol: str, limit: int = 50, **kwargs: dict) -> typing.Optional[list]:
|
@@ -366,7 +375,9 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
366
375
|
except ccxt.NotSupported:
|
367
376
|
raise octobot_trading.errors.NotSupported
|
368
377
|
except ccxt.BaseError as e:
|
369
|
-
raise octobot_trading.errors.FailedRequest(
|
378
|
+
raise octobot_trading.errors.FailedRequest(
|
379
|
+
f"Failed to get_recent_trades {html_util.get_html_summary_if_relevant(e)}"
|
380
|
+
)
|
370
381
|
|
371
382
|
# A price ticker contains statistics for a particular market/symbol for some period of time in recent past (24h)
|
372
383
|
@ccxt_client_util.converted_ccxt_common_errors
|
@@ -379,7 +390,9 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
379
390
|
except ccxt.NotSupported:
|
380
391
|
raise octobot_trading.errors.NotSupported
|
381
392
|
except ccxt.BaseError as e:
|
382
|
-
raise octobot_trading.errors.FailedRequest(
|
393
|
+
raise octobot_trading.errors.FailedRequest(
|
394
|
+
f"Failed to get_price_ticker {html_util.get_html_summary_if_relevant(e)}"
|
395
|
+
)
|
383
396
|
|
384
397
|
@ccxt_client_util.converted_ccxt_common_errors
|
385
398
|
async def get_all_currencies_price_ticker(self, **kwargs: dict) -> typing.Optional[dict[str, dict]]:
|
@@ -394,7 +407,9 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
394
407
|
except ccxt.NotSupported:
|
395
408
|
raise octobot_trading.errors.NotSupported
|
396
409
|
except ccxt.BaseError as e:
|
397
|
-
raise octobot_trading.errors.FailedRequest(
|
410
|
+
raise octobot_trading.errors.FailedRequest(
|
411
|
+
f"Failed to get_all_currencies_price_ticker {html_util.get_html_summary_if_relevant(e)}"
|
412
|
+
)
|
398
413
|
|
399
414
|
# ORDERS
|
400
415
|
@ccxt_client_util.converted_ccxt_common_errors
|
@@ -413,14 +428,16 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
413
428
|
pass
|
414
429
|
except ccxt.NotSupported as e:
|
415
430
|
# some exchanges are throwing this error when an order is cancelled (ex: coinbase pro)
|
416
|
-
raise octobot_trading.errors.NotSupported(
|
431
|
+
raise octobot_trading.errors.NotSupported(
|
432
|
+
html_util.get_html_summary_if_relevant(e)
|
433
|
+
) from e
|
417
434
|
except ccxt.ExchangeError as e:
|
418
435
|
if self.exchange_manager.exchange.is_order_not_found_error(e):
|
419
436
|
# when an OrderNotFound error should have been raised but is not for some reason
|
420
437
|
pass
|
421
438
|
else:
|
422
439
|
# something went wrong and ccxt did not expect it
|
423
|
-
raise octobot_trading.errors.FailedRequest(e) from e
|
440
|
+
raise octobot_trading.errors.FailedRequest(html_util.get_html_summary_if_relevant(e)) from e
|
424
441
|
else:
|
425
442
|
# When fetch_order is not supported, uses get_open_orders or get_closed_orders and extract order id
|
426
443
|
for method in (self.get_open_orders, self.get_closed_orders):
|
@@ -625,7 +642,10 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
625
642
|
raise octobot_trading.errors.NotSupported(e) from e
|
626
643
|
except Exception as e:
|
627
644
|
self.logger.exception(
|
628
|
-
e,
|
645
|
+
e,
|
646
|
+
True,
|
647
|
+
f"Unexpected error when cancelling all {symbol} orders | "
|
648
|
+
f"{html_util.get_html_summary_if_relevant(e)} ({e.__class__.__name__})"
|
629
649
|
)
|
630
650
|
raise e
|
631
651
|
|
@@ -660,12 +680,20 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
660
680
|
f"Trying to cancel order with id {exchange_order_id} but order was not found. It might have "
|
661
681
|
f"already been cancelled or be filled."
|
662
682
|
)
|
663
|
-
raise octobot_trading.errors.OrderNotFoundOnCancelError(
|
683
|
+
raise octobot_trading.errors.OrderNotFoundOnCancelError(
|
684
|
+
html_util.get_html_summary_if_relevant(e)
|
685
|
+
) from e
|
664
686
|
except (ccxt.NotSupported, octobot_trading.errors.NotSupported) as e:
|
665
|
-
raise octobot_trading.errors.NotSupported(
|
687
|
+
raise octobot_trading.errors.NotSupported(
|
688
|
+
html_util.get_html_summary_if_relevant(e)
|
689
|
+
) from e
|
666
690
|
except Exception as e:
|
667
|
-
self.logger.exception(
|
668
|
-
|
691
|
+
self.logger.exception(
|
692
|
+
e,
|
693
|
+
True,
|
694
|
+
f"Unexpected error when cancelling order with exchange id: "
|
695
|
+
f"{exchange_order_id} failed to cancel | {html_util.get_html_summary_if_relevant(e)} "
|
696
|
+
f"({e.__class__.__name__})")
|
669
697
|
raise e
|
670
698
|
|
671
699
|
@ccxt_client_util.converted_ccxt_common_errors
|
@@ -786,7 +814,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
786
814
|
except ccxt.NotSupported:
|
787
815
|
raise octobot_trading.errors.NotSupported
|
788
816
|
except Exception as e:
|
789
|
-
self.logger.error(f"Fees data for {symbol} was not found ({e})")
|
817
|
+
self.logger.error(f"Fees data for {symbol} was not found ({html_util.get_html_summary_if_relevant(e)})")
|
790
818
|
return {
|
791
819
|
enums.ExchangeConstantsMarketPropertyColumns.TAKER.value: constants.CONFIG_DEFAULT_FEES,
|
792
820
|
enums.ExchangeConstantsMarketPropertyColumns.MAKER.value: constants.CONFIG_DEFAULT_FEES,
|
@@ -929,7 +957,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
929
957
|
|
930
958
|
def log_ddos_error(self, error):
|
931
959
|
self.logger.error(
|
932
|
-
f"DDoSProtection triggered [{error} ({error.__class__.__name__})]. "
|
960
|
+
f"DDoSProtection triggered [{html_util.get_html_summary_if_relevant(error)} ({error.__class__.__name__})]. "
|
933
961
|
f"Last response headers: {self.client.last_response_headers} "
|
934
962
|
f"Last json response: {self.client.last_json_response}"
|
935
963
|
)
|
@@ -950,14 +978,16 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
950
978
|
# use 2 index to get the caller of the context manager
|
951
979
|
caller_function_name = inspect.stack()[2].function
|
952
980
|
exchanges.log_time_sync_error(self.logger, self.name, err, caller_function_name)
|
953
|
-
raise octobot_trading.errors.FailedRequest(err) from err
|
981
|
+
raise octobot_trading.errors.FailedRequest(html_util.get_html_summary_if_relevant(err)) from err
|
954
982
|
except ccxt.RequestTimeout as e:
|
955
|
-
raise octobot_trading.errors.FailedRequest(
|
983
|
+
raise octobot_trading.errors.FailedRequest(
|
984
|
+
f"Request timeout: {html_util.get_html_summary_if_relevant(e)}"
|
985
|
+
) from e
|
956
986
|
except ccxt.AuthenticationError as err:
|
957
|
-
raise octobot_trading.errors.AuthenticationError(err) from err
|
987
|
+
raise octobot_trading.errors.AuthenticationError(html_util.get_html_summary_if_relevant(err)) from err
|
958
988
|
except ccxt.ExchangeError as err:
|
959
989
|
if self.exchange_manager.exchange.is_authentication_error(err):
|
960
990
|
# ensure this is not an unhandled authentication error
|
961
|
-
raise octobot_trading.errors.AuthenticationError(err) from err
|
991
|
+
raise octobot_trading.errors.AuthenticationError(html_util.get_html_summary_if_relevant(err)) from err
|
962
992
|
# otherwise just forward exception
|
963
993
|
raise
|
{OctoBot-Trading-2.4.124 → OctoBot-Trading-2.4.125}/octobot_trading/exchanges/types/rest_exchange.py
RENAMED
@@ -18,12 +18,13 @@ import decimal
|
|
18
18
|
import typing
|
19
19
|
import copy
|
20
20
|
import asyncio
|
21
|
-
import traceback
|
22
|
-
import sys
|
21
|
+
# import traceback # uncomment for debugging in tests
|
22
|
+
# import sys # uncomment for debugging in tests
|
23
23
|
|
24
24
|
import ccxt.async_support as ccxt
|
25
25
|
import octobot_commons.enums as commons_enums
|
26
26
|
import octobot_commons.tree as commons_tree
|
27
|
+
import octobot_commons.html_util as html_util
|
27
28
|
|
28
29
|
from octobot_commons import number_util
|
29
30
|
|
@@ -217,7 +218,7 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
217
218
|
self.log_order_creation_error(err, order_type, symbol, quantity, price, stop_price)
|
218
219
|
if self.__class__.PRINT_DEBUG_LOGS:
|
219
220
|
self.logger.warning(str(err))
|
220
|
-
raise errors.MissingFunds(err) from err
|
221
|
+
raise errors.MissingFunds(html_util.get_html_summary_if_relevant(err)) from err
|
221
222
|
|
222
223
|
@contextlib.asynccontextmanager
|
223
224
|
async def _order_operation(self, order_type, symbol, quantity, price, stop_price):
|
@@ -230,7 +231,8 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
230
231
|
except (errors.AuthenticationError, ccxt.AuthenticationError) as err:
|
231
232
|
# invalid api key or missing trading rights
|
232
233
|
raise errors.AuthenticationError(
|
233
|
-
f"Error when handling order {err}.
|
234
|
+
f"Error when handling order {html_util.get_html_summary_if_relevant(err)}. "
|
235
|
+
f"Please make sure that trading permissions are on for this API key."
|
234
236
|
) from err
|
235
237
|
except ccxt.DDoSProtection as e:
|
236
238
|
# ccxt.DDoSProtection: raised upon rate limit issues,
|
@@ -239,33 +241,42 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
239
241
|
if self.is_api_permission_error(e):
|
240
242
|
# invalid api key or missing trading rights
|
241
243
|
raise errors.AuthenticationError(
|
242
|
-
f"Error when handling order {e}.
|
244
|
+
f"Error when handling order {html_util.get_html_summary_if_relevant(e)}. "
|
245
|
+
f"Please make sure that trading permissions are on for this API key."
|
243
246
|
) from e
|
244
247
|
if self.should_log_on_ddos_exception(e):
|
245
248
|
self.connector.log_ddos_error(e)
|
246
|
-
raise errors.FailedRequest(
|
249
|
+
raise errors.FailedRequest(
|
250
|
+
f"Failed to order operation: {e.__class__.__name__} {html_util.get_html_summary_if_relevant(e)}"
|
251
|
+
) from e
|
247
252
|
except errors.OctoBotExchangeError:
|
248
253
|
# custom error: forward it
|
249
254
|
raise
|
250
255
|
except Exception as e:
|
251
256
|
if not self.is_market_open_for_order_type(symbol, order_type):
|
252
257
|
raise errors.UnavailableOrderTypeForMarketError(
|
253
|
-
f"Error when handling order {e}. "
|
258
|
+
f"Error when handling order {html_util.get_html_summary_if_relevant(e)}. "
|
254
259
|
f"Exchange currently refuses to create orders of type {order_type} on {symbol}."
|
255
260
|
) from e
|
256
261
|
if self.is_api_permission_error(e):
|
257
262
|
# invalid api key or missing trading rights
|
258
263
|
raise errors.AuthenticationError(
|
259
|
-
f"Error when handling order {e}.
|
264
|
+
f"Error when handling order {html_util.get_html_summary_if_relevant(e)}. "
|
265
|
+
f"Please make sure that trading permissions are on for this API key."
|
260
266
|
) from e
|
261
267
|
if self.is_exchange_rules_compliancy_error(e):
|
262
268
|
raise errors.ExchangeCompliancyError(
|
263
|
-
f"Error when handling order {e}.
|
269
|
+
f"Error when handling order {html_util.get_html_summary_if_relevant(e)}. "
|
270
|
+
f"Exchange is refusing this order request on this account because "
|
264
271
|
f"of its compliancy requirements."
|
265
272
|
) from e
|
266
273
|
self.log_order_creation_error(e, order_type, symbol, quantity, price, stop_price)
|
267
|
-
print(traceback.format_exc(), file=sys.stderr)
|
268
|
-
self.logger.exception(
|
274
|
+
# print(traceback.format_exc(), file=sys.stderr) # uncomment for debugging in tests
|
275
|
+
self.logger.exception(
|
276
|
+
e,
|
277
|
+
False,
|
278
|
+
f"Unexpected error during order operation: {html_util.get_html_summary_if_relevant(e)}"
|
279
|
+
)
|
269
280
|
|
270
281
|
async def _verify_order(self, created_order, order_type, symbol, price, side, get_order_params=None):
|
271
282
|
# some exchanges are not returning the full order details on creation: fetch it if necessary
|
@@ -309,7 +320,8 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
309
320
|
if self.is_exchange_account_traded_symbol_permission_error(err):
|
310
321
|
# exchange won't let this order create: raise
|
311
322
|
raise errors.ExchangeAccountSymbolPermissionError(
|
312
|
-
f"Error when creating {symbol} {order_type} order on
|
323
|
+
f"Error when creating {symbol} {order_type} order on "
|
324
|
+
f"{self.exchange_manager.exchange_name}: {html_util.get_html_summary_if_relevant(err)}"
|
313
325
|
) from err
|
314
326
|
# otherwise propagate exception: this is not a situation to retry
|
315
327
|
raise
|
@@ -317,18 +329,21 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
317
329
|
if self.is_exchange_account_traded_symbol_permission_error(err):
|
318
330
|
# exchange won't let this order create: raise
|
319
331
|
raise errors.ExchangeAccountSymbolPermissionError(
|
320
|
-
f"Error when creating {symbol} {order_type} order on {self.exchange_manager.exchange_name}:
|
332
|
+
f"Error when creating {symbol} {order_type} order on {self.exchange_manager.exchange_name}: "
|
333
|
+
f"{html_util.get_html_summary_if_relevant(err)}"
|
321
334
|
) from err
|
322
335
|
if self.is_exchange_internal_sync_error(err):
|
323
336
|
raise errors.ExchangeInternalSyncError(
|
324
|
-
f"Error when handling
|
325
|
-
f"
|
337
|
+
f"Error when handling {symbol} {order_type} order. "
|
338
|
+
f"Exchange is refusing this order request because of sync error "
|
339
|
+
f"({html_util.get_html_summary_if_relevant(err)})."
|
326
340
|
) from err
|
327
341
|
if self.is_missing_funds_error(err):
|
328
342
|
self._on_missing_funds_err(err, order_type, symbol, quantity, price, stop_price)
|
329
343
|
# can be raised when exchange precision/limits rules change
|
330
344
|
self.logger.warning(
|
331
|
-
f"Failed to create order ({err}) :
|
345
|
+
f"Failed to create order ({html_util.get_html_summary_if_relevant(err)}) : "
|
346
|
+
f"order_type: {order_type}, symbol: {symbol}. "
|
332
347
|
f"This might be due to an update on {self.name} market rules. Fetching updated rules."
|
333
348
|
)
|
334
349
|
await self.connector.load_symbol_markets(reload=True, market_filter=self.exchange_manager.market_filter)
|
@@ -17,6 +17,8 @@ import asyncio
|
|
17
17
|
import sys
|
18
18
|
import concurrent.futures as futures
|
19
19
|
|
20
|
+
import octobot_commons.html_util as html_util
|
21
|
+
|
20
22
|
import octobot_commons.thread_util as thread_util
|
21
23
|
import octobot_trading.constants
|
22
24
|
import octobot_trading.enums
|
@@ -156,7 +158,9 @@ class WebSocketExchange(abstract_websocket.AbstractWebsocketExchange):
|
|
156
158
|
|
157
159
|
self.is_websocket_running = True
|
158
160
|
except ValueError as e:
|
159
|
-
self.logger.error(
|
161
|
+
self.logger.error(
|
162
|
+
f"Failed to start websocket on {self.exchange_name} : {html_util.get_html_summary_if_relevant(e)}"
|
163
|
+
)
|
160
164
|
|
161
165
|
if self.websocket_connectors and not self.is_websocket_running:
|
162
166
|
self.logger.debug(f"{self.exchange_manager.exchange_name.title()}'s "
|
@@ -200,7 +204,7 @@ class WebSocketExchange(abstract_websocket.AbstractWebsocketExchange):
|
|
200
204
|
for websocket in self.websocket_connectors:
|
201
205
|
await websocket.stop()
|
202
206
|
except Exception as e:
|
203
|
-
self.logger.error(f"Error when stopping sockets : {e}")
|
207
|
+
self.logger.error(f"Error when stopping sockets : {html_util.get_html_summary_if_relevant(e)}")
|
204
208
|
|
205
209
|
async def close_sockets(self):
|
206
210
|
"""
|
@@ -210,7 +214,7 @@ class WebSocketExchange(abstract_websocket.AbstractWebsocketExchange):
|
|
210
214
|
for websocket in self.websocket_connectors:
|
211
215
|
await websocket.close()
|
212
216
|
except Exception as e:
|
213
|
-
self.logger.error(f"Error when closing sockets : {e}")
|
217
|
+
self.logger.error(f"Error when closing sockets : {html_util.get_html_summary_if_relevant(e)}")
|
214
218
|
for websocket_task in self.websocket_connectors_tasks:
|
215
219
|
websocket_task.cancel()
|
216
220
|
if sys.version_info.minor >= 9:
|