OctoBot-Trading 2.4.123__tar.gz → 2.4.124__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.123 → OctoBot-Trading-2.4.124}/CHANGELOG.md +5 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.123/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.124}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/README.md +1 -1
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/errors.py +24 -11
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/types/rest_exchange.py +34 -7
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/modes_util.py +61 -47
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/modes/test_modes_util.py +40 -5
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/LICENSE +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/OctoBot_Trading.egg-info/requires.txt +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/api/contracts.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/api/exchange.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/constants.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/enums.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/config/proxy_config.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/traders/trader.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/util/exchange_util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/util/symbol_details.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/mode_activity.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/mode_config.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/order_util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/position.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/signals/signal_creation.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/signals/util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/storage/orders_storage.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/util/test_tools/exchange_data.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/requirements.txt +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/setup.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/test_exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/traders/test_trader.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/exchanges/util/test_exchange_util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/modes/test_abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/test_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/test_order_util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/trades/test_trade_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/trades/test_trade_util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/signals/test_util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_ascendex.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_binance.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_bingx.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_bitget.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_bithumb.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_bitmart.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_bitso.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_bybit.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_coinbase.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_coinex.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_gateio.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_hollaex.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_htx.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_kraken.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_kucoin.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_mexc.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_ndax.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_okcoin.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_okx.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_phemex.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_poloniex.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/tests_additional/real_exchanges/test_upbit.py +0 -0
- {OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/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.124] - 2024-11-17
|
8
|
+
### Updated
|
9
|
+
[Exchanges] Handle limit order in converter
|
10
|
+
[Exchanges] Handle more ccxt missed orders
|
11
|
+
|
7
12
|
## [2.4.123] - 2024-11-16
|
8
13
|
### Updated
|
9
14
|
[Requirements] Bump cachetools and make version more flexible
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.124
|
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.124](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.124
|
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.124](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.124](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)
|
@@ -15,13 +15,19 @@
|
|
15
15
|
# License along with this library.
|
16
16
|
|
17
17
|
|
18
|
-
class
|
18
|
+
class OctoBotExchangeError(Exception):
|
19
|
+
"""
|
20
|
+
Parent class of local exceptions raised when communicating with exchanges
|
21
|
+
"""
|
22
|
+
|
23
|
+
|
24
|
+
class MissingFunds(OctoBotExchangeError):
|
19
25
|
"""
|
20
26
|
Raised upon placing an order while having insufficient funds
|
21
27
|
"""
|
22
28
|
|
23
29
|
|
24
|
-
class MissingMinimalExchangeTradeVolume(
|
30
|
+
class MissingMinimalExchangeTradeVolume(OctoBotExchangeError):
|
25
31
|
"""
|
26
32
|
Raised when a new order is impossible to create due to exchange minimal funds restrictions
|
27
33
|
"""
|
@@ -33,19 +39,19 @@ class TradingModeIncompatibility(Exception):
|
|
33
39
|
"""
|
34
40
|
|
35
41
|
|
36
|
-
class OrderCreationError(
|
42
|
+
class OrderCreationError(OctoBotExchangeError):
|
37
43
|
"""
|
38
44
|
Raised upon a failed order creation
|
39
45
|
"""
|
40
46
|
|
41
47
|
|
42
|
-
class OrderEditError(
|
48
|
+
class OrderEditError(OctoBotExchangeError):
|
43
49
|
"""
|
44
50
|
Raised upon a failed order edition
|
45
51
|
"""
|
46
52
|
|
47
53
|
|
48
|
-
class OrderCancelError(
|
54
|
+
class OrderCancelError(OctoBotExchangeError):
|
49
55
|
"""
|
50
56
|
Raised upon a failed order cancel
|
51
57
|
"""
|
@@ -93,37 +99,44 @@ class NotSupported(Exception):
|
|
93
99
|
"""
|
94
100
|
|
95
101
|
|
96
|
-
class FailedRequest(
|
102
|
+
class FailedRequest(OctoBotExchangeError):
|
97
103
|
"""
|
98
104
|
Raised upon a failed request on an exchange API
|
99
105
|
"""
|
100
106
|
|
101
107
|
|
102
|
-
class RateLimitExceeded(
|
108
|
+
class RateLimitExceeded(OctoBotExchangeError):
|
103
109
|
"""
|
104
110
|
Raised upon an exchange API rate limit error
|
105
111
|
"""
|
106
112
|
|
107
113
|
|
108
|
-
class UnavailableOrderTypeForMarketError(
|
114
|
+
class UnavailableOrderTypeForMarketError(OctoBotExchangeError):
|
109
115
|
"""
|
110
116
|
Raised when an exchange refuses to create a given type of order that should normally be supported
|
111
117
|
"""
|
112
118
|
|
113
119
|
|
114
|
-
class AuthenticationError(
|
120
|
+
class AuthenticationError(OctoBotExchangeError):
|
115
121
|
"""
|
116
122
|
Raised when an exchange failed to authenticate
|
117
123
|
"""
|
118
124
|
|
119
125
|
|
120
|
-
class
|
126
|
+
class ExchangeInternalSyncError(OctoBotExchangeError):
|
127
|
+
"""
|
128
|
+
Raised when an exchange is returning an error due to its internal sync process
|
129
|
+
(ex: when an order is filled but portfolio has not yet been updated)
|
130
|
+
"""
|
131
|
+
|
132
|
+
|
133
|
+
class ExchangeCompliancyError(OctoBotExchangeError):
|
121
134
|
"""
|
122
135
|
Raised when an exchange failed to execute the given request because of compliance rules for the current user account
|
123
136
|
"""
|
124
137
|
|
125
138
|
|
126
|
-
class ExchangeAccountSymbolPermissionError(
|
139
|
+
class ExchangeAccountSymbolPermissionError(OctoBotExchangeError):
|
127
140
|
"""
|
128
141
|
Raised when an exchange failed to execute the given request because of allowed traded symbols
|
129
142
|
on the current user account
|
{OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchanges/types/rest_exchange.py
RENAMED
@@ -104,6 +104,10 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
104
104
|
EXCHANGE_PERMISSION_ERRORS: typing.List[typing.Iterable[str]] = []
|
105
105
|
# text content of errors due to account compliancy issues
|
106
106
|
EXCHANGE_COMPLIANCY_ERRORS: typing.List[typing.Iterable[str]] = []
|
107
|
+
# text content of errors due to exchange internal synch (like when portfolio is not yet up to date after a trade)
|
108
|
+
EXCHANGE_INTERNAL_SYNC_ERRORS: typing.List[typing.Iterable[str]] = []
|
109
|
+
# text content of errors due to missing fnuds when creating an order (when not identified as such by ccxt)
|
110
|
+
EXCHANGE_MISSING_FUNDS_ERRORS: typing.List[typing.Iterable[str]] = []
|
107
111
|
# text content of errors due to exchange local account permissions (ex: accounts from X country can't trade XYZ)
|
108
112
|
# text content of errors due to traded assets for account
|
109
113
|
EXCHANGE_ACCOUNT_TRADED_SYMBOL_PERMISSION_ERRORS: typing.List[typing.Iterable[str]] = []
|
@@ -209,15 +213,18 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
209
213
|
quantity, price, stop_price, side,
|
210
214
|
current_price, params)
|
211
215
|
|
216
|
+
def _on_missing_funds_err(self, err, order_type, symbol, quantity, price, stop_price):
|
217
|
+
self.log_order_creation_error(err, order_type, symbol, quantity, price, stop_price)
|
218
|
+
if self.__class__.PRINT_DEBUG_LOGS:
|
219
|
+
self.logger.warning(str(err))
|
220
|
+
raise errors.MissingFunds(err) from err
|
221
|
+
|
212
222
|
@contextlib.asynccontextmanager
|
213
223
|
async def _order_operation(self, order_type, symbol, quantity, price, stop_price):
|
214
224
|
try:
|
215
225
|
yield
|
216
226
|
except ccxt.InsufficientFunds as e:
|
217
|
-
self.
|
218
|
-
if self.__class__.PRINT_DEBUG_LOGS:
|
219
|
-
self.logger.warning(str(e))
|
220
|
-
raise errors.MissingFunds(e) from e
|
227
|
+
self._on_missing_funds_err(e, order_type, symbol, quantity, price, stop_price)
|
221
228
|
except ccxt.NotSupported as err:
|
222
229
|
raise errors.NotSupported from err
|
223
230
|
except (errors.AuthenticationError, ccxt.AuthenticationError) as err:
|
@@ -237,7 +244,8 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
237
244
|
if self.should_log_on_ddos_exception(e):
|
238
245
|
self.connector.log_ddos_error(e)
|
239
246
|
raise errors.FailedRequest(f"Failed to order operation: {e.__class__.__name__} {e}") from e
|
240
|
-
except errors.
|
247
|
+
except errors.OctoBotExchangeError:
|
248
|
+
# custom error: forward it
|
241
249
|
raise
|
242
250
|
except Exception as e:
|
243
251
|
if not self.is_market_open_for_order_type(symbol, order_type):
|
@@ -311,9 +319,18 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
311
319
|
raise errors.ExchangeAccountSymbolPermissionError(
|
312
320
|
f"Error when creating {symbol} {order_type} order on {self.exchange_manager.exchange_name}: {err}"
|
313
321
|
) from err
|
322
|
+
if self.is_exchange_internal_sync_error(err):
|
323
|
+
raise errors.ExchangeInternalSyncError(
|
324
|
+
f"Error when handling order {err}. Exchange is refusing this order request because of sync error "
|
325
|
+
f"({err})."
|
326
|
+
) from err
|
327
|
+
if self.is_missing_funds_error(err):
|
328
|
+
self._on_missing_funds_err(err, order_type, symbol, quantity, price, stop_price)
|
314
329
|
# can be raised when exchange precision/limits rules change
|
315
|
-
self.logger.
|
316
|
-
|
330
|
+
self.logger.warning(
|
331
|
+
f"Failed to create order ({err}) : order_type: {order_type}, symbol: {symbol}. "
|
332
|
+
f"This might be due to an update on {self.name} market rules. Fetching updated rules."
|
333
|
+
)
|
317
334
|
await self.connector.load_symbol_markets(reload=True, market_filter=self.exchange_manager.market_filter)
|
318
335
|
# retry order creation with updated markets (ccxt will use the updated market values)
|
319
336
|
return await self._create_specific_order(order_type, symbol, quantity, price=price,
|
@@ -948,6 +965,16 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
948
965
|
return exchanges_util.is_error_on_this_type(error, self.EXCHANGE_COMPLIANCY_ERRORS)
|
949
966
|
return False
|
950
967
|
|
968
|
+
def is_exchange_internal_sync_error(self, error: BaseException) -> bool:
|
969
|
+
if self.EXCHANGE_INTERNAL_SYNC_ERRORS:
|
970
|
+
return exchanges_util.is_error_on_this_type(error, self.EXCHANGE_INTERNAL_SYNC_ERRORS)
|
971
|
+
return False
|
972
|
+
|
973
|
+
def is_missing_funds_error(self, error: BaseException) -> bool:
|
974
|
+
if self.EXCHANGE_MISSING_FUNDS_ERRORS:
|
975
|
+
return exchanges_util.is_error_on_this_type(error, self.EXCHANGE_MISSING_FUNDS_ERRORS)
|
976
|
+
return False
|
977
|
+
|
951
978
|
def is_exchange_account_traded_symbol_permission_error(self, error: BaseException) -> bool:
|
952
979
|
if self.EXCHANGE_ACCOUNT_TRADED_SYMBOL_PERMISSION_ERRORS:
|
953
980
|
return exchanges_util.is_error_on_this_type(error, self.EXCHANGE_ACCOUNT_TRADED_SYMBOL_PERMISSION_ERRORS)
|
@@ -92,57 +92,71 @@ async def convert_asset_to_target_asset(
|
|
92
92
|
tickers = tickers or {}
|
93
93
|
portfolio = trading_mode.exchange_manager.exchange_personal_data.portfolio_manager.portfolio.portfolio
|
94
94
|
if asset in portfolio and portfolio[asset].available:
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
trading_mode.logger.warning(
|
100
|
-
f"Impossible to convert {asset} into {target_asset}: no associated trading pair "
|
101
|
-
f"on {trading_mode.exchange_manager.exchange_name}"
|
102
|
-
)
|
103
|
-
return created_orders
|
95
|
+
created_orders.extend(
|
96
|
+
await convert_with_market_or_limit_order(trading_mode, asset, target_asset, tickers, asset_amount)
|
97
|
+
)
|
98
|
+
return created_orders
|
104
99
|
|
105
|
-
# get symbol price
|
106
|
-
price_base = asset
|
107
|
-
price_target = target_asset
|
108
|
-
if order_type is trading_enums.TraderOrderType.BUY_MARKET:
|
109
|
-
price_base = target_asset
|
110
|
-
price_target = asset
|
111
100
|
|
112
|
-
|
113
|
-
|
101
|
+
async def convert_with_market_or_limit_order(
|
102
|
+
trading_mode, asset: str, target_asset: str, tickers: dict, asset_amount=None
|
103
|
+
) -> list:
|
104
|
+
# get symbol of the order
|
105
|
+
symbol, order_type = _get_associated_symbol_and_order_type(trading_mode, asset, target_asset)
|
106
|
+
if symbol is None:
|
107
|
+
# can't convert asset into target_asset
|
108
|
+
trading_mode.logger.warning(
|
109
|
+
f"Impossible to convert {asset} into {target_asset}: no associated trading pair "
|
110
|
+
f"on {trading_mode.exchange_manager.exchange_name}"
|
114
111
|
)
|
112
|
+
return []
|
115
113
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
114
|
+
# get symbol price
|
115
|
+
price_base = asset
|
116
|
+
price_target = target_asset
|
117
|
+
if order_type is trading_enums.TraderOrderType.BUY_MARKET:
|
118
|
+
price_base = target_asset
|
119
|
+
price_target = asset
|
120
|
+
|
121
|
+
price = trading_personal_data.get_asset_price_from_converter_or_tickers(
|
122
|
+
trading_mode.exchange_manager, price_base, price_target, symbol, tickers
|
123
|
+
)
|
124
|
+
|
125
|
+
if not price:
|
126
|
+
# can't get price, should not happen as symbol is in client_symbols
|
127
|
+
trading_mode.logger.error(
|
128
|
+
f"Impossible to convert {asset} into {target_asset}: {symbol} ticker can't be fetched"
|
129
|
+
)
|
130
|
+
return []
|
131
|
+
|
132
|
+
if trading_personal_data.get_trade_order_type(order_type) is not trading_enums.TradeOrderType.MARKET:
|
133
|
+
# can't use market orders: use limit orders with price a bit under the current price to instant fill it.
|
134
|
+
price = get_instantly_filled_limit_order_adapted_price(price, order_type)
|
135
|
+
|
136
|
+
# get order quantity
|
137
|
+
quantity = _get_available_or_target_quantity(trading_mode, symbol, order_type, price, asset_amount)
|
138
|
+
symbol_market = trading_mode.exchange_manager.exchange.get_market_status(symbol, with_fixer=False)
|
139
|
+
created_orders = []
|
140
|
+
for order_quantity, order_price in \
|
141
|
+
trading_personal_data.decimal_check_and_adapt_order_details_if_necessary(
|
142
|
+
quantity,
|
143
|
+
price,
|
144
|
+
symbol_market
|
145
|
+
):
|
146
|
+
# create order
|
147
|
+
order = trading_personal_data.create_order_instance(
|
148
|
+
trader=trading_mode.exchange_manager.trader,
|
149
|
+
order_type=order_type,
|
150
|
+
symbol=symbol,
|
151
|
+
current_price=price,
|
152
|
+
quantity=order_quantity,
|
153
|
+
price=order_price
|
154
|
+
)
|
155
|
+
initialized_order = await trading_mode.create_order(order)
|
156
|
+
if isinstance(initialized_order, trading_personal_data.LimitOrder) and initialized_order.simulated:
|
157
|
+
# on simulator, this order should be instantly filled now as its price is meant to be instantly filled
|
158
|
+
await initialized_order.on_fill()
|
159
|
+
created_orders.append(initialized_order)
|
146
160
|
return created_orders
|
147
161
|
|
148
162
|
|
@@ -17,10 +17,12 @@ import mock
|
|
17
17
|
import pytest
|
18
18
|
import decimal
|
19
19
|
|
20
|
+
import octobot_commons.asyncio_tools as asyncio_tools
|
20
21
|
import octobot_trading.constants as constants
|
21
22
|
import octobot_trading.enums as trading_enums
|
22
23
|
import octobot_trading.personal_data as trading_personal_data
|
23
24
|
import octobot_trading.modes.modes_util as modes_util
|
25
|
+
import octobot_trading.signals as signals
|
24
26
|
|
25
27
|
from tests.exchanges import backtesting_trader, backtesting_config, backtesting_exchange_manager, fake_backtesting
|
26
28
|
from tests import event_loop
|
@@ -130,6 +132,10 @@ async def test_convert_asset_to_target_asset(backtesting_trader):
|
|
130
132
|
assert order.symbol == "BTC/USDT"
|
131
133
|
assert order.origin_quantity == decimal.Decimal(10)
|
132
134
|
assert order.created_last_price == decimal.Decimal(30000)
|
135
|
+
# market order is instantly filled
|
136
|
+
assert order.is_filled()
|
137
|
+
assert order.filled_price == order.origin_price
|
138
|
+
assert order.filled_quantity > constants.ZERO
|
133
139
|
trading_mode.create_order.assert_called_once()
|
134
140
|
trading_mode.create_order.reset_mock()
|
135
141
|
is_market_open_for_order_type_mock.assert_called_once_with(
|
@@ -142,8 +148,9 @@ async def test_convert_asset_to_target_asset(backtesting_trader):
|
|
142
148
|
order = orders[0]
|
143
149
|
assert order.order_type == trading_enums.TraderOrderType.BUY_MARKET
|
144
150
|
assert order.symbol == "BTC/USDT"
|
145
|
-
assert order.origin_quantity == decimal.Decimal("
|
151
|
+
assert order.origin_quantity == decimal.Decimal("10.03333333")
|
146
152
|
assert order.created_last_price == decimal.Decimal(30000)
|
153
|
+
assert order.is_filled()
|
147
154
|
trading_mode.create_order.assert_called_once()
|
148
155
|
trading_mode.create_order.reset_mock()
|
149
156
|
|
@@ -153,6 +160,8 @@ async def test_convert_asset_to_target_asset(backtesting_trader):
|
|
153
160
|
trading_enums.ExchangeConstantsTickersColumns.CLOSE.value: decimal.Decimal(1500)
|
154
161
|
}
|
155
162
|
|
163
|
+
# reset portfolio
|
164
|
+
portfolio["USDT"] = trading_personal_data.SpotAsset("USDT", decimal.Decimal(1000), decimal.Decimal(1000))
|
156
165
|
orders = await modes_util.convert_asset_to_target_asset(trading_mode, "USDT", "ETH", tickers)
|
157
166
|
assert len(orders) == 1
|
158
167
|
order = orders[0]
|
@@ -160,15 +169,17 @@ async def test_convert_asset_to_target_asset(backtesting_trader):
|
|
160
169
|
assert order.symbol == "ETH/USDT"
|
161
170
|
assert order.origin_quantity == decimal.Decimal("0.66666666")
|
162
171
|
assert order.created_last_price == decimal.Decimal(1500)
|
172
|
+
assert order.is_filled()
|
163
173
|
trading_mode.create_order.assert_called_once()
|
164
174
|
trading_mode.create_order.reset_mock()
|
165
175
|
|
176
|
+
portfolio["ETH"] = trading_personal_data.SpotAsset("ETH", constants.ZERO, constants.ZERO)
|
166
177
|
orders = await modes_util.convert_asset_to_target_asset(trading_mode, "ETH", "USDT", tickers)
|
167
178
|
# no ETH in portfolio
|
168
179
|
assert orders == []
|
169
180
|
trading_mode.create_order.assert_not_called()
|
170
181
|
|
171
|
-
portfolio["ETH"] = trading_personal_data.
|
182
|
+
portfolio["ETH"] = trading_personal_data.SpotAsset("ETH", constants.ONE, constants.ONE)
|
172
183
|
orders = await modes_util.convert_asset_to_target_asset(trading_mode, "ETH", "USDT", tickers)
|
173
184
|
assert len(orders) == 1
|
174
185
|
order = orders[0]
|
@@ -176,10 +187,12 @@ async def test_convert_asset_to_target_asset(backtesting_trader):
|
|
176
187
|
assert order.symbol == "ETH/USDT"
|
177
188
|
assert order.origin_quantity == decimal.Decimal("1")
|
178
189
|
assert order.created_last_price == decimal.Decimal(1500)
|
190
|
+
assert order.is_filled()
|
179
191
|
trading_mode.create_order.assert_called_once()
|
180
192
|
trading_mode.create_order.reset_mock()
|
181
193
|
|
182
194
|
# with amount param
|
195
|
+
portfolio["ETH"] = trading_personal_data.SpotAsset("ETH", decimal.Decimal("2"), decimal.Decimal("2"))
|
183
196
|
orders = await modes_util.convert_asset_to_target_asset(
|
184
197
|
trading_mode, "ETH", "USDT", tickers, asset_amount=decimal.Decimal(2)
|
185
198
|
)
|
@@ -189,6 +202,7 @@ async def test_convert_asset_to_target_asset(backtesting_trader):
|
|
189
202
|
assert order.symbol == "ETH/USDT"
|
190
203
|
assert order.origin_quantity == decimal.Decimal(2)
|
191
204
|
assert order.created_last_price == decimal.Decimal(1500)
|
205
|
+
assert order.is_filled()
|
192
206
|
trading_mode.create_order.assert_called_once()
|
193
207
|
trading_mode.create_order.reset_mock()
|
194
208
|
|
@@ -201,6 +215,7 @@ async def test_convert_asset_to_target_asset(backtesting_trader):
|
|
201
215
|
assert order.symbol == "ETH/USDT"
|
202
216
|
assert order.origin_quantity == decimal.Decimal("0.3")
|
203
217
|
assert order.created_last_price == decimal.Decimal(1500)
|
218
|
+
assert order.is_filled()
|
204
219
|
trading_mode.create_order.assert_called_once()
|
205
220
|
trading_mode.create_order.reset_mock()
|
206
221
|
|
@@ -213,6 +228,7 @@ async def test_convert_asset_to_target_asset(backtesting_trader):
|
|
213
228
|
assert order.symbol == "ETH/USDT"
|
214
229
|
assert order.origin_quantity == decimal.Decimal("0.66666666")
|
215
230
|
assert order.created_last_price == decimal.Decimal(1500)
|
231
|
+
assert order.is_filled()
|
216
232
|
trading_mode.create_order.assert_called_once()
|
217
233
|
trading_mode.create_order.reset_mock()
|
218
234
|
|
@@ -220,10 +236,12 @@ async def test_convert_asset_to_target_asset(backtesting_trader):
|
|
220
236
|
fees = {
|
221
237
|
trading_enums.FeePropertyColumns.COST.value: "2",
|
222
238
|
trading_enums.FeePropertyColumns.CURRENCY.value: "USDT",
|
239
|
+
trading_enums.FeePropertyColumns.IS_FROM_EXCHANGE.value: True,
|
223
240
|
}
|
224
241
|
with mock.patch.object(exchange_manager.exchange, "get_trade_fee", mock.Mock(return_value=fees)) \
|
225
242
|
as get_trade_fee_mock:
|
226
243
|
# cast 1: enough funds in pf to cover fees
|
244
|
+
portfolio["USDT"] = trading_personal_data.SpotAsset("USDT", decimal.Decimal(1000), decimal.Decimal(1000))
|
227
245
|
orders = await modes_util.convert_asset_to_target_asset(
|
228
246
|
trading_mode, "USDT", "ETH", tickers, asset_amount=decimal.Decimal(450)
|
229
247
|
)
|
@@ -233,12 +251,14 @@ async def test_convert_asset_to_target_asset(backtesting_trader):
|
|
233
251
|
assert order.symbol == "ETH/USDT"
|
234
252
|
assert order.origin_quantity == decimal.Decimal("0.3")
|
235
253
|
assert order.created_last_price == decimal.Decimal(1500)
|
236
|
-
|
254
|
+
assert order.is_filled()
|
255
|
+
assert get_trade_fee_mock.call_count == 4
|
237
256
|
get_trade_fee_mock.reset_mock()
|
238
257
|
trading_mode.create_order.assert_called_once()
|
239
258
|
trading_mode.create_order.reset_mock()
|
240
259
|
|
241
260
|
# cast 2: reduce amount to cover fees
|
261
|
+
portfolio["USDT"] = trading_personal_data.SpotAsset("USDT", decimal.Decimal(1000), decimal.Decimal(1000))
|
242
262
|
orders = await modes_util.convert_asset_to_target_asset(
|
243
263
|
trading_mode, "USDT", "ETH", tickers, asset_amount=decimal.Decimal(1000)
|
244
264
|
)
|
@@ -248,7 +268,8 @@ async def test_convert_asset_to_target_asset(backtesting_trader):
|
|
248
268
|
assert order.symbol == "ETH/USDT"
|
249
269
|
assert order.origin_quantity == decimal.Decimal("0.66400000") # lower than 0.66666666 when fees is 0 USDT
|
250
270
|
assert order.created_last_price == decimal.Decimal(1500)
|
251
|
-
|
271
|
+
assert order.is_filled()
|
272
|
+
assert get_trade_fee_mock.call_count == 4
|
252
273
|
trading_mode.create_order.assert_called_once()
|
253
274
|
trading_mode.create_order.reset_mock()
|
254
275
|
|
@@ -264,6 +285,7 @@ async def test_convert_asset_to_target_asset(backtesting_trader):
|
|
264
285
|
mock.Mock(side_effect=_is_market_open_for_order_type)
|
265
286
|
) as is_market_open_for_order_type_mock:
|
266
287
|
# cast 1: buying
|
288
|
+
portfolio["USDT"] = trading_personal_data.SpotAsset("USDT", decimal.Decimal(1000), decimal.Decimal(1000))
|
267
289
|
orders = await modes_util.convert_asset_to_target_asset(
|
268
290
|
trading_mode, "USDT", "ETH", tickers, asset_amount=decimal.Decimal(450)
|
269
291
|
)
|
@@ -278,6 +300,10 @@ async def test_convert_asset_to_target_asset(backtesting_trader):
|
|
278
300
|
)
|
279
301
|
assert order.origin_price == adapted_price
|
280
302
|
assert order.created_last_price == adapted_price
|
303
|
+
# limit order is designed to be instantly filled, on simulator it should be filled
|
304
|
+
assert order.is_filled()
|
305
|
+
assert order.filled_price == order.origin_price
|
306
|
+
assert order.filled_quantity > constants.ZERO
|
281
307
|
assert is_market_open_for_order_type_mock.call_count == 2
|
282
308
|
assert is_market_open_for_order_type_mock.mock_calls[0].args == \
|
283
309
|
("ETH/USDT", trading_enums.TraderOrderType.BUY_MARKET)
|
@@ -288,6 +314,7 @@ async def test_convert_asset_to_target_asset(backtesting_trader):
|
|
288
314
|
trading_mode.create_order.reset_mock()
|
289
315
|
|
290
316
|
# cast 2: selling
|
317
|
+
portfolio["USDT"] = trading_personal_data.SpotAsset("USDT", decimal.Decimal(2), decimal.Decimal(2))
|
291
318
|
orders = await modes_util.convert_asset_to_target_asset(
|
292
319
|
trading_mode, "ETH", "USDT", tickers, asset_amount=decimal.Decimal(2)
|
293
320
|
)
|
@@ -301,6 +328,9 @@ async def test_convert_asset_to_target_asset(backtesting_trader):
|
|
301
328
|
)
|
302
329
|
assert order.origin_price == adapted_price
|
303
330
|
assert order.created_last_price == adapted_price
|
331
|
+
assert order.is_filled()
|
332
|
+
assert order.filled_price == order.origin_price
|
333
|
+
assert order.filled_quantity > constants.ZERO
|
304
334
|
assert is_market_open_for_order_type_mock.call_count == 2
|
305
335
|
assert is_market_open_for_order_type_mock.mock_calls[0].args == \
|
306
336
|
("ETH/USDT", trading_enums.TraderOrderType.SELL_MARKET)
|
@@ -312,7 +342,12 @@ async def test_convert_asset_to_target_asset(backtesting_trader):
|
|
312
342
|
|
313
343
|
|
314
344
|
def _get_trading_mode(exchange_manager):
|
345
|
+
async def _create_order(order):
|
346
|
+
return await signals.create_order(
|
347
|
+
exchange_manager, False, order
|
348
|
+
)
|
349
|
+
|
315
350
|
return mock.Mock(
|
316
351
|
exchange_manager=exchange_manager,
|
317
|
-
create_order=mock.AsyncMock(side_effect=
|
352
|
+
create_order=mock.AsyncMock(side_effect=_create_order)
|
318
353
|
)
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/OctoBot_Trading.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.123 → OctoBot-Trading-2.4.124}/octobot_trading/exchange_data/kline/__init__.py
RENAMED
File without changes
|