OctoBot-Trading 2.4.97__tar.gz → 2.4.98__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.97 → OctoBot-Trading-2.4.98}/CHANGELOG.md +5 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.97/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.98}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/README.md +1 -1
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/abstract_exchange.py +3 -1
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/config/exchange_config_data.py +6 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +1 -1
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +1 -1
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/exchange_builder.py +12 -2
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/exchange_factory.py +23 -12
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/exchange_manager.py +2 -2
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/implementations/exchange_simulator.py +9 -4
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/types/rest_exchange.py +14 -5
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/util/exchange_util.py +28 -15
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/abstract_trading_mode.py +7 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/trades/channel/trades_updater.py +22 -18
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/trades/trades_manager.py +18 -6
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/__init__.py +15 -9
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/implementations/test_default_rest_exchange.py +1 -1
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/test_abstract_exchange.py +1 -1
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/test_exchange_config_data.py +1 -1
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/test_exchange_manager.py +1 -1
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/test_exchanges.py +9 -9
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/traders/test_trader.py +1 -1
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/util/test_exchange_util.py +12 -12
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/modes/test_abstract_mode_consumer.py +1 -1
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/test_order_factory.py +1 -1
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/trades/test_trade_factory.py +1 -1
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/__init__.py +1 -1
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/LICENSE +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/OctoBot_Trading.egg-info/requires.txt +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/api/contracts.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/api/exchange.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/constants.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/enums.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/errors.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/traders/trader.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/util/symbol_details.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/mode_activity.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/mode_config.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/modes_util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/order_util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/position.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/signals/signal_creation.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/signals/util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/storage/orders_storage.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/util/test_tools/exchange_data.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/requirements.txt +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/setup.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/modes/test_modes_util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/test_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/test_order_util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/trades/test_trade_util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/signals/test_util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_ascendex.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_binance.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_bingx.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_bitget.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_bithumb.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_bitmart.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_bitso.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_bybit.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_coinbase.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_coinex.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_gateio.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_hollaex.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_htx.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_kraken.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_kucoin.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_mexc.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_ndax.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_okcoin.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_okx.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_phemex.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_poloniex.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_upbit.py +0 -0
- {OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,11 @@ 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.98] - 2024-08-16
|
8
|
+
### Added
|
9
|
+
- [Exchanges] exchange_config_by_exchange in init
|
10
|
+
- [Trades] option to ignore cancelled orders
|
11
|
+
|
7
12
|
## [2.4.97] - 2024-08-14
|
8
13
|
### Added
|
9
14
|
- [Exchanges] cancel_all_orders
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.98
|
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.98](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.98
|
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.98](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.98](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)
|
{OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/abstract_exchange.py
RENAMED
@@ -72,7 +72,7 @@ class AbstractExchange(tentacles_management.AbstractTentacle):
|
|
72
72
|
}
|
73
73
|
ACCOUNTS = {}
|
74
74
|
|
75
|
-
def __init__(self, config, exchange_manager):
|
75
|
+
def __init__(self, config, exchange_manager, exchange_config_by_exchange: typing.Optional[dict[str, dict]]):
|
76
76
|
super().__init__()
|
77
77
|
self.config = config
|
78
78
|
self.exchange_manager = exchange_manager
|
@@ -97,6 +97,8 @@ class AbstractExchange(tentacles_management.AbstractTentacle):
|
|
97
97
|
|
98
98
|
self._creating_exchange_order_descriptions = set()
|
99
99
|
|
100
|
+
if exchange_config_by_exchange and self.get_name() in exchange_config_by_exchange:
|
101
|
+
self.tentacle_config = exchange_config_by_exchange[self.get_name()]
|
100
102
|
if self.exchange_manager.tentacles_setup_config is not None:
|
101
103
|
self.load_user_inputs_from_class(self.exchange_manager.tentacles_setup_config, self.tentacle_config)
|
102
104
|
|
@@ -68,6 +68,9 @@ class ExchangeConfig(util.Initializable):
|
|
68
68
|
# periodic updaters that should always be started for this configuration
|
69
69
|
self.forced_updater_channels = set()
|
70
70
|
|
71
|
+
# When False, cancelled orders won't be saved in trades history
|
72
|
+
self.is_saving_cancelled_orders_as_trade = True
|
73
|
+
|
71
74
|
self.backtesting_exchange_config = None
|
72
75
|
|
73
76
|
async def initialize_impl(self):
|
@@ -150,6 +153,9 @@ class ExchangeConfig(util.Initializable):
|
|
150
153
|
def add_forced_updater_channels(self, channel: set[str]):
|
151
154
|
self.forced_updater_channels.update(channel)
|
152
155
|
|
156
|
+
def set_is_saving_cancelled_orders_as_trade(self, value: bool):
|
157
|
+
self.is_saving_cancelled_orders_as_trade = value
|
158
|
+
|
153
159
|
async def add_watched_symbols(self, symbols):
|
154
160
|
new_valid_symbols = [
|
155
161
|
symbol
|
@@ -50,7 +50,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
50
50
|
def __init__(
|
51
51
|
self, config, exchange_manager, adapter_class=None, additional_config=None, rest_name=None, force_auth=False
|
52
52
|
):
|
53
|
-
super().__init__(config, exchange_manager)
|
53
|
+
super().__init__(config, exchange_manager, None)
|
54
54
|
self.client = None
|
55
55
|
self.exchange_type = None
|
56
56
|
self.adapter = self.get_adapter_class(adapter_class)(self)
|
@@ -35,7 +35,7 @@ import octobot_trading.exchanges.util as util
|
|
35
35
|
|
36
36
|
class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
|
37
37
|
def __init__(self, config, exchange_manager, backtesting, adapter_class=None):
|
38
|
-
super().__init__(config, exchange_manager)
|
38
|
+
super().__init__(config, exchange_manager, None)
|
39
39
|
self.backtesting = backtesting
|
40
40
|
self.allowed_time_lag = constants.DEFAULT_BACKTESTING_TIME_LAG
|
41
41
|
self.adapter = self.get_adapter_class(adapter_class)(self)
|
{OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/exchange_builder.py
RENAMED
@@ -37,6 +37,7 @@ class ExchangeBuilder:
|
|
37
37
|
self._is_using_trading_modes: bool = True
|
38
38
|
self._matrix_id: str = None
|
39
39
|
self.trading_config_by_trading_mode: dict = None
|
40
|
+
self.exchange_config_by_exchange: dict = None
|
40
41
|
self.auto_start_trading_modes: bool = True
|
41
42
|
|
42
43
|
async def build(self):
|
@@ -61,10 +62,12 @@ class ExchangeBuilder:
|
|
61
62
|
if self._is_using_trading_modes:
|
62
63
|
trading_mode_class = modes.get_activated_trading_mode(self.exchange_manager.tentacles_setup_config)
|
63
64
|
# handle exchange related requirements if the activated trading mode has any
|
64
|
-
self._register_trading_modes_requirements(
|
65
|
+
self._register_trading_modes_requirements(
|
66
|
+
trading_mode_class, self.exchange_manager.tentacles_setup_config
|
67
|
+
)
|
65
68
|
|
66
69
|
self._ensure_exchange_compatibility()
|
67
|
-
await self.exchange_manager.initialize()
|
70
|
+
await self.exchange_manager.initialize(exchange_config_by_exchange=self.exchange_config_by_exchange)
|
68
71
|
# add exchange to be able to use it
|
69
72
|
exchanges.Exchanges.instance().add_exchange(self.exchange_manager, self._matrix_id)
|
70
73
|
|
@@ -110,6 +113,9 @@ class ExchangeBuilder:
|
|
110
113
|
self.exchange_manager.exchange_config.add_forced_updater_channels(
|
111
114
|
trading_mode_class.get_forced_updater_channels()
|
112
115
|
)
|
116
|
+
self.exchange_manager.exchange_config.set_is_saving_cancelled_orders_as_trade(
|
117
|
+
not trading_mode_class.is_ignoring_cancelled_orders_trades()
|
118
|
+
)
|
113
119
|
|
114
120
|
async def _build_trading_modes_if_required(self, trading_mode_class):
|
115
121
|
if self._is_using_trading_modes:
|
@@ -270,6 +276,10 @@ class ExchangeBuilder:
|
|
270
276
|
self.trading_config_by_trading_mode = trading_config_by_trading_mode
|
271
277
|
return self
|
272
278
|
|
279
|
+
def use_exchange_config_by_exchange(self, exchange_config_by_exchange: typing.Optional[dict[str, dict]]):
|
280
|
+
self.exchange_config_by_exchange = exchange_config_by_exchange
|
281
|
+
return self
|
282
|
+
|
273
283
|
def set_auto_start_trading_modes(self, auto_start_trading_modes):
|
274
284
|
self.auto_start_trading_modes = auto_start_trading_modes
|
275
285
|
return self
|
{OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/exchange_factory.py
RENAMED
@@ -14,6 +14,7 @@
|
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library.
|
16
16
|
import asyncio
|
17
|
+
import typing
|
17
18
|
|
18
19
|
import trading_backend
|
19
20
|
|
@@ -22,7 +23,7 @@ import octobot_trading.errors as errors
|
|
22
23
|
import octobot_trading.exchanges as exchanges
|
23
24
|
|
24
25
|
|
25
|
-
async def create_exchanges(exchange_manager):
|
26
|
+
async def create_exchanges(exchange_manager, exchange_config_by_exchange: typing.Optional[dict[str, dict]]):
|
26
27
|
if exchange_manager.is_sandboxed and not exchange_manager.exchange_only:
|
27
28
|
exchange_manager.logger.info(f"Using sandbox exchange for {exchange_manager.exchange_name}")
|
28
29
|
|
@@ -32,7 +33,7 @@ async def create_exchanges(exchange_manager):
|
|
32
33
|
exchange_manager.load_constants()
|
33
34
|
else:
|
34
35
|
# real : create a rest or websocket exchange instance
|
35
|
-
await create_real_exchange(exchange_manager)
|
36
|
+
await create_real_exchange(exchange_manager, exchange_config_by_exchange)
|
36
37
|
exchange_manager.load_constants()
|
37
38
|
await initialize_real_exchange(exchange_manager)
|
38
39
|
|
@@ -47,12 +48,13 @@ async def create_exchanges(exchange_manager):
|
|
47
48
|
exchange_manager.is_ready = True
|
48
49
|
|
49
50
|
|
50
|
-
async def create_real_exchange(exchange_manager) -> None:
|
51
|
+
async def create_real_exchange(exchange_manager, exchange_config_by_exchange: typing.Optional[dict[str, dict]]) -> None:
|
51
52
|
"""
|
52
53
|
Create and initialize real REST exchange
|
53
54
|
:param exchange_manager: the related exchange manager
|
55
|
+
:param exchange_config_by_exchange: optional exchange configurations
|
54
56
|
"""
|
55
|
-
await _create_rest_exchange(exchange_manager)
|
57
|
+
await _create_rest_exchange(exchange_manager, exchange_config_by_exchange)
|
56
58
|
try:
|
57
59
|
await exchange_manager.exchange.initialize()
|
58
60
|
_create_exchange_backend(exchange_manager)
|
@@ -62,7 +64,7 @@ async def create_real_exchange(exchange_manager) -> None:
|
|
62
64
|
except errors.AuthenticationError:
|
63
65
|
exchange_manager.logger.error("Authentication error, retrying without authentication...")
|
64
66
|
exchange_manager.without_auth = True
|
65
|
-
await create_real_exchange(exchange_manager)
|
67
|
+
await create_real_exchange(exchange_manager, exchange_config_by_exchange)
|
66
68
|
return
|
67
69
|
|
68
70
|
|
@@ -112,12 +114,14 @@ async def _is_supporting_octobot() -> bool:
|
|
112
114
|
return False
|
113
115
|
|
114
116
|
|
115
|
-
async def _create_rest_exchange(
|
117
|
+
async def _create_rest_exchange(
|
118
|
+
exchange_manager, exchange_config_by_exchange: typing.Optional[dict[str, dict]]
|
119
|
+
) -> None:
|
116
120
|
"""
|
117
121
|
create REST based on ccxt exchange
|
118
122
|
:param exchange_manager: the related exchange manager
|
119
123
|
"""
|
120
|
-
await _search_and_create_rest_exchange(exchange_manager)
|
124
|
+
await _search_and_create_rest_exchange(exchange_manager, exchange_config_by_exchange)
|
121
125
|
|
122
126
|
if not exchange_manager.exchange:
|
123
127
|
raise Exception(f"Can't create an exchange instance that match the exchange configuration ({exchange_manager})")
|
@@ -139,16 +143,23 @@ async def init_simulated_exchange(exchange_manager):
|
|
139
143
|
await exchange_manager.exchange.create_backtesting_exchange_producers()
|
140
144
|
|
141
145
|
|
142
|
-
async def _search_and_create_rest_exchange(
|
146
|
+
async def _search_and_create_rest_exchange(
|
147
|
+
exchange_manager, exchange_config_by_exchange: typing.Optional[dict[str, dict]]
|
148
|
+
) -> None:
|
143
149
|
"""
|
144
150
|
Create a rest exchange if a RestExchange matching class is found
|
145
151
|
:param exchange_manager: the related exchange manager
|
146
152
|
"""
|
147
|
-
rest_exchange_class = exchanges.get_rest_exchange_class(
|
148
|
-
|
153
|
+
rest_exchange_class = exchanges.get_rest_exchange_class(
|
154
|
+
exchange_manager.exchange_name, exchange_manager.tentacles_setup_config, exchange_config_by_exchange
|
155
|
+
)
|
149
156
|
if rest_exchange_class:
|
150
|
-
|
151
|
-
|
157
|
+
if rest_exchange_class.HAS_FETCHED_DETAILS:
|
158
|
+
await rest_exchange_class.fetch_exchange_config(exchange_config_by_exchange, exchange_manager)
|
159
|
+
exchange_manager.exchange = rest_exchange_class(
|
160
|
+
config=exchange_manager.config, exchange_manager=exchange_manager,
|
161
|
+
exchange_config_by_exchange=exchange_config_by_exchange
|
162
|
+
)
|
152
163
|
|
153
164
|
|
154
165
|
def _initialize_simulator_time_frames(exchange_manager):
|
{OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/exchange_manager.py
RENAMED
@@ -85,8 +85,8 @@ class ExchangeManager(util.Initializable):
|
|
85
85
|
|
86
86
|
self.debug_info = {}
|
87
87
|
|
88
|
-
async def initialize_impl(self):
|
89
|
-
await exchanges.create_exchanges(self)
|
88
|
+
async def initialize_impl(self, exchange_config_by_exchange: typing.Optional[dict[str, dict]]):
|
89
|
+
await exchanges.create_exchanges(self, exchange_config_by_exchange)
|
90
90
|
if self.is_storage_enabled():
|
91
91
|
await self.storage_manager.initialize()
|
92
92
|
|
@@ -13,6 +13,8 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library.
|
16
|
+
import typing
|
17
|
+
|
16
18
|
import octobot_trading.constants as constants
|
17
19
|
import octobot_trading.exchanges.util as exchange_util
|
18
20
|
import octobot_trading.exchanges.connectors.simulator.exchange_simulator_connector as exchange_simulator_connector
|
@@ -22,12 +24,15 @@ import octobot_trading.exchanges.types.rest_exchange as rest_exchange
|
|
22
24
|
class ExchangeSimulator(rest_exchange.RestExchange):
|
23
25
|
DEFAULT_CONNECTOR_CLASS = exchange_simulator_connector.ExchangeSimulatorConnector
|
24
26
|
|
25
|
-
def __init__(
|
27
|
+
def __init__(
|
28
|
+
self, config, exchange_manager, backtesting,
|
29
|
+
exchange_config_by_exchange: typing.Optional[dict[str, dict]] = None
|
30
|
+
):
|
26
31
|
self.backtesting = backtesting
|
27
32
|
self.exchange_importers = []
|
28
33
|
self.exchange_tentacle_class = None
|
29
34
|
self.exchange_tentacle = None
|
30
|
-
super().__init__(config, exchange_manager)
|
35
|
+
super().__init__(config, exchange_manager, exchange_config_by_exchange)
|
31
36
|
|
32
37
|
def _create_connector(self, config, exchange_manager, connector_class):
|
33
38
|
return (connector_class or self.DEFAULT_CONNECTOR_CLASS)(
|
@@ -41,7 +46,7 @@ class ExchangeSimulator(rest_exchange.RestExchange):
|
|
41
46
|
await super().initialize_impl()
|
42
47
|
self.exchange_importers = self.connector.exchange_importers
|
43
48
|
self.exchange_tentacle_class = exchange_util.get_rest_exchange_class(
|
44
|
-
self.exchange_manager.exchange_name, self.exchange_manager.tentacles_setup_config
|
49
|
+
self.exchange_manager.exchange_name, self.exchange_manager.tentacles_setup_config, None
|
45
50
|
)
|
46
51
|
if self.connector.should_adapt_market_statuses():
|
47
52
|
await self._init_exchange_tentacle()
|
@@ -54,7 +59,7 @@ class ExchangeSimulator(rest_exchange.RestExchange):
|
|
54
59
|
# initialize a locale exchange_tentacle to be able to access adapters for market statuses
|
55
60
|
if self.exchange_tentacle_class:
|
56
61
|
self.exchange_tentacle = self.exchange_tentacle_class(
|
57
|
-
self.exchange_manager.config, self.exchange_manager
|
62
|
+
self.exchange_manager.config, self.exchange_manager, None
|
58
63
|
)
|
59
64
|
finally:
|
60
65
|
self.exchange_manager.ignore_config = origin_ignore_config
|
{OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/types/rest_exchange.py
RENAMED
@@ -108,10 +108,13 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
108
108
|
|
109
109
|
DEFAULT_CONNECTOR_CLASS = ccxt_connector.CCXTConnector
|
110
110
|
|
111
|
-
def __init__(
|
112
|
-
|
111
|
+
def __init__(
|
112
|
+
self, config, exchange_manager, exchange_config_by_exchange: typing.Optional[dict[str, dict]],
|
113
|
+
connector_class=None
|
114
|
+
):
|
115
|
+
super().__init__(config, exchange_manager, exchange_config_by_exchange)
|
113
116
|
if self.HAS_FETCHED_DETAILS:
|
114
|
-
self.
|
117
|
+
self._apply_fetched_details(config, exchange_manager)
|
115
118
|
self.connector = self._create_connector(config, exchange_manager, connector_class)
|
116
119
|
self.pair_contracts = {}
|
117
120
|
|
@@ -938,8 +941,14 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
938
941
|
"""
|
939
942
|
Auto fetched and filled exchanges
|
940
943
|
"""
|
941
|
-
def
|
942
|
-
raise NotImplementedError("
|
944
|
+
def _apply_fetched_details(self, config, exchange_manager):
|
945
|
+
raise NotImplementedError("_apply_fetched_details is not implemented")
|
946
|
+
|
947
|
+
@classmethod
|
948
|
+
async def fetch_exchange_config(
|
949
|
+
cls, exchange_config_by_exchange: typing.Optional[dict[str, dict]], exchange_manager
|
950
|
+
):
|
951
|
+
raise NotImplementedError("fetch_exchange_config")
|
943
952
|
|
944
953
|
@staticmethod
|
945
954
|
def supported_autofill_exchanges(tentacle_config):
|
{OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/exchanges/util/exchange_util.py
RENAMED
@@ -37,13 +37,20 @@ import octobot_trading.exchanges.exchange_details as exchange_details
|
|
37
37
|
import octobot_trading.exchanges.exchange_builder as exchange_builder
|
38
38
|
|
39
39
|
|
40
|
-
def get_rest_exchange_class(
|
41
|
-
|
40
|
+
def get_rest_exchange_class(
|
41
|
+
exchange_name: str, tentacles_setup_config, exchange_config_by_exchange: typing.Optional[dict[str, dict]]
|
42
|
+
):
|
43
|
+
return search_exchange_class_from_exchange_name(
|
44
|
+
exchanges_types.RestExchange, exchange_name, tentacles_setup_config, exchange_config_by_exchange
|
45
|
+
)
|
42
46
|
|
43
47
|
|
44
|
-
def search_exchange_class_from_exchange_name(
|
45
|
-
|
46
|
-
|
48
|
+
def search_exchange_class_from_exchange_name(
|
49
|
+
exchange_class, exchange_name, tentacles_setup_config, exchange_config_by_exchange, enable_default=False
|
50
|
+
):
|
51
|
+
exchange_class = get_exchange_class_from_name(
|
52
|
+
exchange_class, exchange_name, tentacles_setup_config, exchange_config_by_exchange, enable_default
|
53
|
+
)
|
47
54
|
if exchange_class is not None:
|
48
55
|
return exchange_class
|
49
56
|
if enable_default:
|
@@ -59,8 +66,10 @@ def search_exchange_class_from_exchange_name(exchange_class, exchange_name,
|
|
59
66
|
return exchanges_implementations.DefaultRestExchange
|
60
67
|
|
61
68
|
|
62
|
-
def get_exchange_class_from_name(
|
63
|
-
|
69
|
+
def get_exchange_class_from_name(
|
70
|
+
exchange_parent_class, exchange_name, tentacles_setup_config, exchange_config_by_exchange,
|
71
|
+
enable_default_implementation, strict_name_matching=False
|
72
|
+
):
|
64
73
|
for exchange_candidate in tentacles_management.get_all_classes_from_parent(exchange_parent_class):
|
65
74
|
try:
|
66
75
|
if _is_exchange_candidate_matching(
|
@@ -75,19 +84,21 @@ def get_exchange_class_from_name(exchange_parent_class, exchange_name, tentacles
|
|
75
84
|
# As we are searching for an exchange_type specific subclass
|
76
85
|
# We should ignore classes that raises NotImplementedError
|
77
86
|
pass
|
78
|
-
auto_filled_exchanges = _get_auto_filled_exchanges(tentacles_setup_config)
|
87
|
+
auto_filled_exchanges = _get_auto_filled_exchanges(tentacles_setup_config, exchange_config_by_exchange)
|
79
88
|
if exchange_name in auto_filled_exchanges:
|
80
89
|
return auto_filled_exchanges[exchange_name][0]
|
81
90
|
return None
|
82
91
|
|
83
92
|
|
84
|
-
def _get_auto_filled_exchanges(tentacles_setup_config):
|
93
|
+
def _get_auto_filled_exchanges(tentacles_setup_config, exchange_config_by_exchange: typing.Optional[dict[str, dict]]):
|
85
94
|
auto_filled_exchanges = {}
|
86
95
|
for exchange_candidate in _get_auto_filled_exchanges_tentacles():
|
87
96
|
if tentacles_setup_config is None:
|
88
97
|
# tentacles_setup_config is required for auto-filled exchanges
|
89
98
|
continue
|
90
|
-
config =
|
99
|
+
config = exchange_config_by_exchange[exchange_candidate.get_name()] if (
|
100
|
+
exchange_config_by_exchange and exchange_candidate.get_name() in exchange_config_by_exchange
|
101
|
+
) else api.get_tentacle_config(
|
91
102
|
tentacles_setup_config, exchange_candidate
|
92
103
|
)
|
93
104
|
for exchange_name in exchange_candidate.supported_autofill_exchanges(config):
|
@@ -96,7 +107,7 @@ def _get_auto_filled_exchanges(tentacles_setup_config):
|
|
96
107
|
|
97
108
|
|
98
109
|
def get_auto_filled_exchange_names(tentacles_setup_config):
|
99
|
-
return list(_get_auto_filled_exchanges(tentacles_setup_config))
|
110
|
+
return list(_get_auto_filled_exchanges(tentacles_setup_config, None))
|
100
111
|
|
101
112
|
|
102
113
|
def _get_auto_filled_exchanges_tentacles():
|
@@ -111,7 +122,7 @@ async def get_exchange_details(
|
|
111
122
|
exchange_name, is_autofilled, tentacles_setup_config, aiohttp_session
|
112
123
|
) -> exchange_details.ExchangeDetails:
|
113
124
|
if is_autofilled:
|
114
|
-
auto_filled_exchanges = _get_auto_filled_exchanges(tentacles_setup_config)
|
125
|
+
auto_filled_exchanges = _get_auto_filled_exchanges(tentacles_setup_config, None)
|
115
126
|
if exchange_name in auto_filled_exchanges:
|
116
127
|
return await auto_filled_exchanges[exchange_name][0].get_autofilled_exchange_details(
|
117
128
|
aiohttp_session, auto_filled_exchanges[exchange_name][1], exchange_name
|
@@ -208,7 +219,7 @@ def get_enabled_exchanges(config):
|
|
208
219
|
async def get_local_exchange_manager(
|
209
220
|
exchange_name: str, exchange_config: dict, tentacles_setup_config,
|
210
221
|
is_sandboxed: bool, ignore_config=False, builder=None, use_cached_markets=True,
|
211
|
-
is_broker_enabled: bool = False,
|
222
|
+
is_broker_enabled: bool = False, exchange_config_by_exchange: typing.Optional[dict[str, dict]] = None,
|
212
223
|
market_filter: typing.Union[None, typing.Callable[[dict], bool]] = None
|
213
224
|
):
|
214
225
|
exchange_type = exchange_config.get(common_constants.CONFIG_EXCHANGE_TYPE, get_default_exchange_type(exchange_name))
|
@@ -220,6 +231,7 @@ async def get_local_exchange_manager(
|
|
220
231
|
.is_checking_credentials(False) \
|
221
232
|
.is_sandboxed(is_sandboxed) \
|
222
233
|
.is_using_exchange_type(exchange_type) \
|
234
|
+
.use_exchange_config_by_exchange(exchange_config_by_exchange) \
|
223
235
|
.is_exchange_only() \
|
224
236
|
.is_rest_only() \
|
225
237
|
.is_broker_enabled(is_broker_enabled) \
|
@@ -344,9 +356,10 @@ def get_default_exchange_type(exchange_name):
|
|
344
356
|
return common_constants.DEFAULT_EXCHANGE_TYPE
|
345
357
|
|
346
358
|
|
347
|
-
def get_supported_exchange_types(exchange_name, tentacles_setup_config):
|
359
|
+
def get_supported_exchange_types(exchange_name, tentacles_setup_config, exchange_config_by_exchange=None):
|
348
360
|
exchange_class = get_exchange_class_from_name(
|
349
|
-
exchanges_types.RestExchange, exchange_name, tentacles_setup_config,
|
361
|
+
exchanges_types.RestExchange, exchange_name, tentacles_setup_config,
|
362
|
+
exchange_config_by_exchange, False, strict_name_matching=True
|
350
363
|
)
|
351
364
|
if exchange_class is None:
|
352
365
|
# default
|
{OctoBot-Trading-2.4.97 → OctoBot-Trading-2.4.98}/octobot_trading/modes/abstract_trading_mode.py
RENAMED
@@ -179,6 +179,13 @@ class AbstractTradingMode(abstract_tentacle.AbstractTentacle):
|
|
179
179
|
"""
|
180
180
|
return True
|
181
181
|
|
182
|
+
@classmethod
|
183
|
+
def is_ignoring_cancelled_orders_trades(cls) -> bool:
|
184
|
+
"""
|
185
|
+
:return: True if trades created by cancelled orders should be ignored and not stored in trades manager
|
186
|
+
"""
|
187
|
+
return False
|
188
|
+
|
182
189
|
@classmethod
|
183
190
|
def get_parent_trading_mode_classes(cls, higher_parent_class_limit=None) -> list:
|
184
191
|
return [
|
@@ -45,7 +45,7 @@ class TradesUpdater(trades_channel.TradesProducer):
|
|
45
45
|
"""
|
46
46
|
The default trade history update refresh time in seconds
|
47
47
|
"""
|
48
|
-
TRADES_REFRESH_TIME =
|
48
|
+
TRADES_REFRESH_TIME = 5 * commons_constants.MINUTE_TO_SECONDS
|
49
49
|
|
50
50
|
DEPENDENCIES_TIMEOUT = 5 * commons_constants.MINUTE_TO_SECONDS
|
51
51
|
|
@@ -57,6 +57,7 @@ class TradesUpdater(trades_channel.TradesProducer):
|
|
57
57
|
async def init_trade_history(self):
|
58
58
|
try:
|
59
59
|
await self.fetch_and_push()
|
60
|
+
self._set_all_initialized()
|
60
61
|
await asyncio.sleep(self.TRADES_REFRESH_TIME)
|
61
62
|
except errors.NotSupported:
|
62
63
|
self.logger.warning(f"{self.channel.exchange_manager.exchange_name} is not supporting updates")
|
@@ -65,12 +66,18 @@ class TradesUpdater(trades_channel.TradesProducer):
|
|
65
66
|
self.logger.error(f"Fail to initialize trade history : {e}")
|
66
67
|
|
67
68
|
async def fetch_and_push(self):
|
69
|
+
self.logger.debug(
|
70
|
+
f"Updating {self.channel.exchange_manager.exchange_config.traded_symbol_pairs} trades history"
|
71
|
+
)
|
68
72
|
for symbol in self.channel.exchange_manager.exchange_config.traded_symbol_pairs:
|
69
|
-
trades
|
73
|
+
if trades := await self.channel.exchange_manager.exchange.get_my_recent_trades(
|
70
74
|
symbol=symbol,
|
71
|
-
limit=self.MAX_OLD_TRADES_TO_FETCH
|
72
|
-
|
75
|
+
limit=self.MAX_OLD_TRADES_TO_FETCH
|
76
|
+
):
|
73
77
|
await self.push(trades)
|
78
|
+
|
79
|
+
def _set_all_initialized(self):
|
80
|
+
for symbol in self.channel.exchange_manager.exchange_config.traded_symbol_pairs:
|
74
81
|
if not self._is_initialized_event_set:
|
75
82
|
self._set_initialized_event(symbol)
|
76
83
|
self._is_initialized_event_set = True
|
@@ -98,20 +105,17 @@ class TradesUpdater(trades_channel.TradesProducer):
|
|
98
105
|
)
|
99
106
|
await self.init_trade_history()
|
100
107
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
# self.logger.error(f"Fail to update trades : {e}")
|
113
|
-
#
|
114
|
-
# await asyncio.sleep(self.TRADES_REFRESH_TIME)
|
108
|
+
if self.channel.exchange_manager.exchange_config.has_forced_updater(self.CHANNEL_NAME):
|
109
|
+
await self._run_update_loop()
|
110
|
+
|
111
|
+
async def _run_update_loop(self):
|
112
|
+
while not self.should_stop and not self.channel.is_paused:
|
113
|
+
try:
|
114
|
+
await self.fetch_and_push()
|
115
|
+
except Exception as e:
|
116
|
+
self.logger.error(f"Fail to update trades : {e}")
|
117
|
+
|
118
|
+
await asyncio.sleep(self.TRADES_REFRESH_TIME)
|
115
119
|
|
116
120
|
async def resume(self) -> None:
|
117
121
|
"""
|
@@ -50,22 +50,34 @@ class TradesManager(util.Initializable):
|
|
50
50
|
self._reset_trades()
|
51
51
|
await self._load_trades_history(reset)
|
52
52
|
|
53
|
-
def upsert_trade(self, trade_id, raw_trade):
|
53
|
+
def upsert_trade(self, trade_id: str, raw_trade: dict) -> bool:
|
54
54
|
if trade_id not in self.trades:
|
55
55
|
created_trade = personal_data.create_trade_instance_from_raw(self.trader, raw_trade)
|
56
56
|
if created_trade:
|
57
57
|
if trade_id in self.trades:
|
58
58
|
self.logger.debug(f"Replacement of an existing trade: {self.trades[trade_id].to_dict()} "
|
59
59
|
f"by {created_trade.to_dict()} on id: {trade_id}")
|
60
|
-
self.
|
61
|
-
self._check_trades_size()
|
62
|
-
return True
|
60
|
+
return self._add_trade_if_relevant(trade_id, created_trade)
|
63
61
|
return False
|
64
62
|
|
65
63
|
def upsert_trade_instance(self, trade):
|
66
64
|
if trade.trade_id not in self.trades:
|
67
|
-
self.
|
68
|
-
|
65
|
+
self._add_trade_if_relevant(trade.trade_id, trade)
|
66
|
+
|
67
|
+
def _add_trade_if_relevant(self, trade_id: str, trade) -> bool:
|
68
|
+
if (
|
69
|
+
trade.status is enums.OrderStatus.CANCELED
|
70
|
+
and not self.trader.exchange_manager.exchange_config.is_saving_cancelled_orders_as_trade
|
71
|
+
):
|
72
|
+
self.logger.debug(
|
73
|
+
f"Cancelled order not added in trades history: {trade.trade_type.name} {trade.origin_quantity} "
|
74
|
+
f"{trade.symbol} at {trade.origin_price}"
|
75
|
+
)
|
76
|
+
return False
|
77
|
+
self.trades[trade_id] = trade
|
78
|
+
self._check_trades_size()
|
79
|
+
return True
|
80
|
+
|
69
81
|
|
70
82
|
def has_closing_trade_with_exchange_order_id(self, exchange_order_id) -> bool:
|
71
83
|
for trade in self.get_trades(exchange_order_id=exchange_order_id):
|