OctoBot-Trading 2.4.112__tar.gz → 2.4.114__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.112 → OctoBot-Trading-2.4.114}/CHANGELOG.md +8 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.112/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.114}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/README.md +1 -1
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/constants.py +1 -1
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/errors.py +6 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +5 -2
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/exchange_manager.py +2 -2
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/traders/trader.py +14 -6
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/channel/orders.py +11 -7
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/channel/orders_updater.py +3 -3
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/order_state.py +35 -13
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/states/cancel_order_state.py +10 -4
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/states/fill_order_state.py +7 -2
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +3 -1
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +4 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/position_state.py +1 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/state.py +10 -1
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/trades/trades_manager.py +4 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/LICENSE +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/OctoBot_Trading.egg-info/requires.txt +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/api/contracts.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/api/exchange.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/enums.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/util/exchange_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/util/symbol_details.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/mode_activity.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/mode_config.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/modes_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/order_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/position.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/signals/signal_creation.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/signals/util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/storage/orders_storage.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/util/test_tools/exchange_data.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/requirements.txt +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/setup.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/test_exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/traders/test_trader.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/exchanges/util/test_exchange_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/modes/test_abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/modes/test_modes_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/test_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/test_order_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/trades/test_trade_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/trades/test_trade_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/signals/test_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_ascendex.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_binance.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_bingx.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_bitget.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_bithumb.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_bitmart.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_bitso.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_bybit.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_coinbase.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_coinex.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_gateio.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_hollaex.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_htx.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_kraken.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_kucoin.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_mexc.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_ndax.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_okcoin.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_okx.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_phemex.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_poloniex.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_upbit.py +0 -0
- {OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,14 @@ 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.114] - 2024-10-02
|
8
|
+
### Updated
|
9
|
+
[Exchanges] handle creds with " or ' leading/trailing chars
|
10
|
+
|
11
|
+
## [2.4.113] - 2024-10-02
|
12
|
+
### Added
|
13
|
+
[Orders] improve canceled & filled order error recovery
|
14
|
+
|
7
15
|
## [2.4.112] - 2024-09-18
|
8
16
|
### Added
|
9
17
|
[API] compute_base_and_quote_volume
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.114
|
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.114](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.114
|
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.114](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.114](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)
|
@@ -189,7 +189,7 @@ BALANCE_CHANNEL = "Balance"
|
|
189
189
|
BALANCE_PROFITABILITY_CHANNEL = "BalanceProfitability"
|
190
190
|
POSITIONS_CHANNEL = "Positions"
|
191
191
|
INDIVIDUAL_ORDER_SYNC_TIMEOUT = 1 * commons_constants.MINUTE_TO_SECONDS
|
192
|
-
MAX_TRADES_COUNT = int(os.getenv("MAX_TRADES_COUNT", "
|
192
|
+
MAX_TRADES_COUNT = int(os.getenv("MAX_TRADES_COUNT", "10000")) # larger values can use a large part of ram
|
193
193
|
|
194
194
|
# History
|
195
195
|
DEFAULT_SAVED_HISTORICAL_TIMEFRAMES = [commons_enums.TimeFrames.ONE_DAY]
|
@@ -51,6 +51,12 @@ class OrderCancelError(Exception):
|
|
51
51
|
"""
|
52
52
|
|
53
53
|
|
54
|
+
class OrderNotFoundOnCancelError(OrderCancelError):
|
55
|
+
"""
|
56
|
+
Raised upon a failed order cancel because order is not found
|
57
|
+
"""
|
58
|
+
|
59
|
+
|
54
60
|
class UnexpectedExchangeSideOrderStateError(Exception):
|
55
61
|
"""
|
56
62
|
Raised when an order is in an unexpected state when fetched from exchange
|
@@ -654,8 +654,11 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
654
654
|
# get a cancelled order).
|
655
655
|
return enums.OrderStatus.CANCELED
|
656
656
|
except ccxt.OrderNotFound as e:
|
657
|
-
self.logger.debug(
|
658
|
-
|
657
|
+
self.logger.debug(
|
658
|
+
f"Trying to cancel order with id {exchange_order_id} but order was not found. It might have "
|
659
|
+
f"already been cancelled or be filled."
|
660
|
+
)
|
661
|
+
raise octobot_trading.errors.OrderNotFoundOnCancelError(e) from e
|
659
662
|
except (ccxt.NotSupported, octobot_trading.errors.NotSupported) as e:
|
660
663
|
raise octobot_trading.errors.NotSupported(e) from e
|
661
664
|
except Exception as e:
|
{OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/exchange_manager.py
RENAMED
@@ -311,10 +311,10 @@ class ExchangeManager(util.Initializable):
|
|
311
311
|
return (
|
312
312
|
configuration.decrypt_element_if_possible(
|
313
313
|
common_constants.CONFIG_EXCHANGE_KEY, config_exchange, None
|
314
|
-
).strip(
|
314
|
+
).strip(' "').strip("'"), # remove leading and trailing ", ' and whitespaces if any
|
315
315
|
configuration.decrypt_element_if_possible(
|
316
316
|
common_constants.CONFIG_EXCHANGE_SECRET, config_exchange, None
|
317
|
-
).strip(
|
317
|
+
).strip(' "').strip("'"), # remove leading and trailing ", ' and whitespaces if any
|
318
318
|
configuration.decrypt_element_if_possible(
|
319
319
|
common_constants.CONFIG_EXCHANGE_PASSWORD, config_exchange, None
|
320
320
|
),
|
{OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchanges/traders/trader.py
RENAMED
@@ -369,8 +369,9 @@ class Trader(util.Initializable):
|
|
369
369
|
wait_for_cancelling, cancelling_timeout)
|
370
370
|
return False
|
371
371
|
|
372
|
-
async def _handle_order_cancellation(
|
373
|
-
|
372
|
+
async def _handle_order_cancellation(
|
373
|
+
self, order, ignored_order, wait_for_cancelling: bool, cancelling_timeout: float
|
374
|
+
) -> bool:
|
374
375
|
success = True
|
375
376
|
if order.is_waiting_for_chained_trigger:
|
376
377
|
# order will just never get created
|
@@ -386,17 +387,19 @@ class Trader(util.Initializable):
|
|
386
387
|
)
|
387
388
|
except errors.NotSupported:
|
388
389
|
raise
|
389
|
-
except (errors.OrderCancelError, Exception) as
|
390
|
+
except (errors.OrderCancelError, Exception) as inner_err:
|
390
391
|
# retry to cancel order
|
391
|
-
self.logger.
|
392
|
+
self.logger.info(
|
393
|
+
f"Failed to cancel order ({inner_err} {inner_err.__class__.__name__}), retrying"
|
394
|
+
)
|
392
395
|
order_status = await self.exchange_manager.exchange.cancel_order(
|
393
396
|
order.exchange_order_id, order.symbol, order.order_type
|
394
397
|
)
|
395
398
|
except errors.OrderCancelError as err:
|
396
399
|
if await self._handle_order_cancel_error(order, err, wait_for_cancelling, cancelling_timeout):
|
397
400
|
return True
|
398
|
-
except Exception as
|
399
|
-
self.logger.exception(
|
401
|
+
except Exception as err:
|
402
|
+
self.logger.exception(err, True, f"Failed to cancel order {order}")
|
400
403
|
return False
|
401
404
|
if order_status is enums.OrderStatus.CANCELED:
|
402
405
|
order.status = octobot_trading.enums.OrderStatus.CANCELED
|
@@ -446,6 +449,11 @@ class Trader(util.Initializable):
|
|
446
449
|
await self._wait_for_order_cancel(order, cancelling_timeout)
|
447
450
|
return True
|
448
451
|
elif order.is_open():
|
452
|
+
if isinstance(err, errors.OrderNotFoundOnCancelError):
|
453
|
+
raise errors.OrderNotFoundOnCancelError(
|
454
|
+
f"Tried to cancel an order that can't be found, it might be cancelled or filled already ({err}). "
|
455
|
+
f"Order: {order}"
|
456
|
+
) from err
|
449
457
|
raise errors.OpenOrderError(
|
450
458
|
f"Order is open, but can't be cancelled. This is unexpected. Order: {order}"
|
451
459
|
) from err
|
@@ -29,7 +29,7 @@ class OrdersProducer(exchanges_channel.ExchangeChannelProducer):
|
|
29
29
|
|
30
30
|
async def perform(self, orders, is_from_bot=False, are_closed=False):
|
31
31
|
try:
|
32
|
-
self.logger.debug(f"Received order update for {len(orders)} {'closed' if are_closed else ''}orders.")
|
32
|
+
self.logger.debug(f"Received order update for {len(orders)} {'closed' if are_closed else ''} orders.")
|
33
33
|
has_new_order = False
|
34
34
|
waiting_complete_init_orders = []
|
35
35
|
symbols = set()
|
@@ -245,8 +245,10 @@ class OrdersProducer(exchanges_channel.ExchangeChannelProducer):
|
|
245
245
|
)
|
246
246
|
)
|
247
247
|
if missing_exchange_order_ids:
|
248
|
-
self.logger.
|
249
|
-
|
248
|
+
self.logger.info(
|
249
|
+
f"{len(missing_exchange_order_ids)} open orders are missing on exchange, "
|
250
|
+
f"synchronizing with exchange (exchange ids: {missing_exchange_order_ids})..."
|
251
|
+
)
|
250
252
|
synchronize_tasks = []
|
251
253
|
for missing_order_id in missing_exchange_order_ids:
|
252
254
|
try:
|
@@ -254,11 +256,13 @@ class OrdersProducer(exchanges_channel.ExchangeChannelProducer):
|
|
254
256
|
get_order(None, exchange_order_id=missing_order_id)
|
255
257
|
if order_to_update.state is not None:
|
256
258
|
# catch exception not to prevent multiple synchronize to be cancelled in asyncio.gather
|
257
|
-
synchronize_tasks.append(
|
258
|
-
|
259
|
+
synchronize_tasks.append(
|
260
|
+
order_to_update.state.synchronize(force_synchronization=True, catch_exception=True)
|
261
|
+
)
|
259
262
|
except KeyError:
|
260
|
-
self.logger.error(
|
261
|
-
|
263
|
+
self.logger.error(
|
264
|
+
f"Order with id {missing_order_id} could not be synchronized: missing from order manager"
|
265
|
+
)
|
262
266
|
await asyncio.gather(*synchronize_tasks)
|
263
267
|
|
264
268
|
async def send(
|
@@ -194,17 +194,17 @@ class OrdersUpdater(orders_channel.OrdersProducer):
|
|
194
194
|
:return: True if the order was updated
|
195
195
|
"""
|
196
196
|
exchange_name = self.channel.exchange_manager.exchange_name
|
197
|
-
self.logger.
|
197
|
+
self.logger.info(f"Requested update for {order} on {exchange_name}")
|
198
198
|
raw_order = await self.channel.exchange_manager.exchange.get_order(order.exchange_order_id, order.symbol)
|
199
199
|
|
200
200
|
if raw_order is not None:
|
201
|
-
self.logger.
|
201
|
+
self.logger.info(f"Received update for {order} on {exchange_name}: {raw_order}")
|
202
202
|
|
203
203
|
await self.channel.exchange_manager.exchange_personal_data.handle_order_update_from_raw(
|
204
204
|
order.exchange_order_id, raw_order, should_notify=should_notify
|
205
205
|
)
|
206
206
|
else:
|
207
|
-
self.logger.
|
207
|
+
self.logger.info(f"Can't received update for {order} on {exchange_name}: received order is None")
|
208
208
|
|
209
209
|
async def stop(self) -> None:
|
210
210
|
"""
|
@@ -13,6 +13,7 @@
|
|
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 asyncio
|
16
17
|
|
17
18
|
import octobot_commons.logging as logging
|
18
19
|
|
@@ -24,6 +25,8 @@ import octobot_trading.personal_data.state as state_class
|
|
24
25
|
|
25
26
|
|
26
27
|
class OrderState(state_class.State):
|
28
|
+
MAX_SYNCHRONIZATION_ATTEMPTS = -1 # implement self._force_final_state() when this is enabled
|
29
|
+
|
27
30
|
def __init__(self, order, is_from_exchange_data, enable_associated_orders_creation=True):
|
28
31
|
super().__init__(is_from_exchange_data)
|
29
32
|
|
@@ -59,6 +62,12 @@ class OrderState(state_class.State):
|
|
59
62
|
"""
|
60
63
|
return False
|
61
64
|
|
65
|
+
def is_max_synchronization_attempts_reached(self) -> bool:
|
66
|
+
"""
|
67
|
+
:return: True if the MAX_SYNCHRONIZATION_ATTEMPTS is set and has been reached
|
68
|
+
"""
|
69
|
+
return -1 < self.__class__.MAX_SYNCHRONIZATION_ATTEMPTS <= self.synchronization_attempts
|
70
|
+
|
62
71
|
def get_logger(self):
|
63
72
|
"""
|
64
73
|
:return: the order logger
|
@@ -98,27 +107,40 @@ class OrderState(state_class.State):
|
|
98
107
|
self.order = new_order
|
99
108
|
self.order.state = self
|
100
109
|
|
110
|
+
def _force_final_state(self):
|
111
|
+
raise NotImplementedError("_force_final_state is not implemented")
|
112
|
+
|
101
113
|
async def _synchronize_with_exchange(self, force_synchronization: bool = False) -> None:
|
102
114
|
"""
|
103
115
|
Ask OrdersChannel Internal producer to refresh the order from the exchange
|
104
116
|
:param force_synchronization: When True, for the update of the order from the exchange
|
105
117
|
:return: the result of OrdersProducer.update_order_from_exchange()
|
106
118
|
"""
|
107
|
-
|
108
|
-
self.ensure_not_cleared(self.order)
|
119
|
+
if self.is_max_synchronization_attempts_reached():
|
109
120
|
self.get_logger().info(
|
110
|
-
f"
|
111
|
-
|
112
|
-
await exchange_channel.get_chan(
|
113
|
-
octobot_trading.constants.ORDERS_CHANNEL,
|
114
|
-
self.order.exchange_manager.id
|
115
|
-
).get_internal_producer().update_order_from_exchange(
|
116
|
-
order=self.order,
|
117
|
-
wait_for_refresh=True,
|
118
|
-
force_job_execution=force_synchronization,
|
121
|
+
f"Forcing {self.__class__.__name__} final state after {self.MAX_SYNCHRONIZATION_ATTEMPTS} "
|
122
|
+
f"synchronization attempts for order {self.order}"
|
119
123
|
)
|
120
|
-
|
121
|
-
|
124
|
+
self._force_final_state()
|
125
|
+
asyncio.create_task(self.on_refresh_successful())
|
126
|
+
else:
|
127
|
+
try:
|
128
|
+
self.ensure_not_cleared(self.order)
|
129
|
+
self.get_logger().info(
|
130
|
+
f"Synchronizing [{self._underlying_refreshed_state.value}] order {self.order} "
|
131
|
+
f"with {self.order.exchange_manager.exchange_name} exchange"
|
132
|
+
)
|
133
|
+
self.synchronization_attempts += 1
|
134
|
+
await exchange_channel.get_chan(
|
135
|
+
octobot_trading.constants.ORDERS_CHANNEL,
|
136
|
+
self.order.exchange_manager.id
|
137
|
+
).get_internal_producer().update_order_from_exchange(
|
138
|
+
order=self.order,
|
139
|
+
wait_for_refresh=True,
|
140
|
+
force_job_execution=force_synchronization,
|
141
|
+
)
|
142
|
+
except octobot_trading.errors.InvalidOrderState:
|
143
|
+
self.get_logger().debug(f"Skipping exchange synchronisation as order has already been closed.")
|
122
144
|
|
123
145
|
async def wait_for_next_state(self, timeout) -> None:
|
124
146
|
# terminate is called at the end of the state for most order states
|
@@ -22,6 +22,8 @@ import octobot_trading.personal_data.orders.states.order_state_factory as order_
|
|
22
22
|
|
23
23
|
|
24
24
|
class CancelOrderState(order_state.OrderState):
|
25
|
+
MAX_SYNCHRONIZATION_ATTEMPTS = 5
|
26
|
+
|
25
27
|
def __init__(self, order, is_from_exchange_data, enable_associated_orders_creation=True):
|
26
28
|
super().__init__(
|
27
29
|
order, is_from_exchange_data, enable_associated_orders_creation=enable_associated_orders_creation
|
@@ -32,8 +34,7 @@ class CancelOrderState(order_state.OrderState):
|
|
32
34
|
|
33
35
|
async def initialize_impl(self, forced=False, ignored_order=None) -> None:
|
34
36
|
if forced:
|
35
|
-
self.
|
36
|
-
self.order.status = enums.OrderStatus.CANCELED
|
37
|
+
self._force_final_state()
|
37
38
|
|
38
39
|
if self.order.order_group and self.enable_associated_orders_creation:
|
39
40
|
await self.order.order_group.on_cancel(self.order, ignored_orders=[ignored_order])
|
@@ -52,6 +53,10 @@ class CancelOrderState(order_state.OrderState):
|
|
52
53
|
def is_status_cancelled(self) -> bool:
|
53
54
|
return not self.is_status_pending() and self.order.status in constants.CANCEL_ORDER_STATUS_SCOPE
|
54
55
|
|
56
|
+
def _force_final_state(self):
|
57
|
+
self.state = enums.OrderStates.CANCELED
|
58
|
+
self.order.status = enums.OrderStatus.CANCELED
|
59
|
+
|
55
60
|
def allows_new_status(self, status) -> bool:
|
56
61
|
"""
|
57
62
|
Don't allow going from canceling to open
|
@@ -68,8 +73,9 @@ class CancelOrderState(order_state.OrderState):
|
|
68
73
|
if not self.has_already_been_synchronized_once:
|
69
74
|
# If we want to sync this state, it means the order is being canceled by the exchange but is not
|
70
75
|
# fully canceled yet. Giving some time to the exchange before re-requesting it.
|
71
|
-
self.get_logger().
|
72
|
-
|
76
|
+
self.get_logger().info(
|
77
|
+
f"{self.__class__.__name__} still pending, synchronizing in {self.PENDING_REFRESH_INTERVAL}s"
|
78
|
+
)
|
73
79
|
await asyncio.sleep(self.PENDING_REFRESH_INTERVAL)
|
74
80
|
await super()._synchronize_with_exchange(force_synchronization=force_synchronization)
|
75
81
|
|
@@ -21,6 +21,8 @@ import octobot_trading.personal_data.orders.states.order_state_factory as order_
|
|
21
21
|
|
22
22
|
|
23
23
|
class FillOrderState(order_state.OrderState):
|
24
|
+
MAX_SYNCHRONIZATION_ATTEMPTS = 5
|
25
|
+
|
24
26
|
def __init__(self, order, is_from_exchange_data, enable_associated_orders_creation=True):
|
25
27
|
super().__init__(
|
26
28
|
order, is_from_exchange_data, enable_associated_orders_creation=enable_associated_orders_creation
|
@@ -34,10 +36,13 @@ class FillOrderState(order_state.OrderState):
|
|
34
36
|
|
35
37
|
async def initialize_impl(self, forced=False) -> None:
|
36
38
|
if forced:
|
37
|
-
self.
|
38
|
-
self.order.status = enums.OrderStatus.FILLED
|
39
|
+
self._force_final_state()
|
39
40
|
return await super().initialize_impl()
|
40
41
|
|
42
|
+
def _force_final_state(self):
|
43
|
+
self.state = enums.OrderStates.FILLED
|
44
|
+
self.order.status = enums.OrderStatus.FILLED
|
45
|
+
|
41
46
|
def is_pending(self) -> bool:
|
42
47
|
return self.state is enums.OrderStates.FILLING
|
43
48
|
|
@@ -47,11 +47,13 @@ class PendingCreationOrderState(order_state.OrderState):
|
|
47
47
|
# open orders refresh.
|
48
48
|
self.ensure_not_cleared(self.order)
|
49
49
|
self.get_logger().info(
|
50
|
-
f"Synchronizing
|
50
|
+
f"Synchronizing [{self._underlying_refreshed_state.value}] order {self.order} "
|
51
|
+
f"with {self.order.exchange_manager.exchange_name} exchange"
|
51
52
|
)
|
52
53
|
while self.order.is_pending_creation() \
|
53
54
|
and time.time() - t0 < octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT:
|
54
55
|
iteration += 1
|
56
|
+
self.synchronization_attempts += 1
|
55
57
|
await exchange_channel.get_chan(
|
56
58
|
octobot_trading.constants.ORDERS_CHANNEL,
|
57
59
|
self.order.exchange_manager.id
|
@@ -192,6 +192,10 @@ class HistoricalPortfolioValueManager(util.Initializable):
|
|
192
192
|
|
193
193
|
def _add_historical_portfolio_value(self, timestamp, value_by_currency):
|
194
194
|
if len(self.historical_portfolio_value) >= self.max_history_size:
|
195
|
+
self.logger.info(
|
196
|
+
f"Clearing oldest historical portfolio value as the maximum historical values ({self.max_history_size}) "
|
197
|
+
f"has been reached"
|
198
|
+
)
|
195
199
|
# remove the oldest element
|
196
200
|
self.historical_portfolio_value.popitem(0)
|
197
201
|
self.historical_portfolio_value[timestamp] = \
|
@@ -61,6 +61,7 @@ class PositionState(state_class.State):
|
|
61
61
|
:param force_synchronization: When True, for the update of the position from the exchange
|
62
62
|
:return: the result of PositionsProducer.update_position_from_exchange()
|
63
63
|
"""
|
64
|
+
self.synchronization_attempts += 1
|
64
65
|
return self.position.exchange_manager.exchange_personal_data.positions_manager.\
|
65
66
|
refresh_real_trader_position(self.position, force_job_execution=force_synchronization)
|
66
67
|
|
@@ -29,7 +29,10 @@ class State(util.Initializable):
|
|
29
29
|
super().__init__()
|
30
30
|
|
31
31
|
# default state
|
32
|
-
self.state = enums.States.UNKNOWN
|
32
|
+
self.state: enums.States = enums.States.UNKNOWN
|
33
|
+
|
34
|
+
# state when refreshing, is only indicative and can be outdated du to avoid concurrency issues
|
35
|
+
self._underlying_refreshed_state: enums.States = enums.States.UNKNOWN
|
33
36
|
|
34
37
|
# if this state has been created from exchange data or OctoBot internal mechanism
|
35
38
|
self.is_from_exchange_data = is_from_exchange_data
|
@@ -43,6 +46,9 @@ class State(util.Initializable):
|
|
43
46
|
# set at True after synchronize has been called
|
44
47
|
self.has_already_been_synchronized_once = False
|
45
48
|
|
49
|
+
# how many times this state has been synchronized
|
50
|
+
self.synchronization_attempts = 0
|
51
|
+
|
46
52
|
def is_pending(self) -> bool:
|
47
53
|
"""
|
48
54
|
:return: True if the state is pending for update
|
@@ -179,6 +185,8 @@ class State(util.Initializable):
|
|
179
185
|
async def refresh_operation(self):
|
180
186
|
self.get_logger().debug("Starting refresh_operation")
|
181
187
|
previous_state = self.state
|
188
|
+
# don't rely on self._underlying_refreshed_state only to avoid concurrency issues (use local variable instead)
|
189
|
+
self._underlying_refreshed_state = previous_state
|
182
190
|
async with self.lock:
|
183
191
|
self.state = enums.States.REFRESHING
|
184
192
|
try:
|
@@ -187,6 +195,7 @@ class State(util.Initializable):
|
|
187
195
|
async with self.lock:
|
188
196
|
if self.state is enums.States.REFRESHING:
|
189
197
|
self.state = previous_state
|
198
|
+
self._underlying_refreshed_state = enums.States.UNKNOWN
|
190
199
|
self.get_logger().debug("Completed refresh_operation")
|
191
200
|
|
192
201
|
async def _synchronize_with_exchange(self, force_synchronization: bool = False) -> None:
|
@@ -184,6 +184,10 @@ class TradesManager(util.Initializable):
|
|
184
184
|
self.logger.exception(err, True, f"Error when loading local trade history {err}")
|
185
185
|
|
186
186
|
def _remove_oldest_trades(self, nb_to_remove):
|
187
|
+
self.logger.info(
|
188
|
+
f"Clearing the {nb_to_remove} oldest historical trades as the maximum count of trades ("
|
189
|
+
f"{self.MAX_TRADES_COUNT}) has been reached"
|
190
|
+
)
|
187
191
|
for _ in range(nb_to_remove):
|
188
192
|
self.trades.popitem(last=False)
|
189
193
|
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/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
|
{OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/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.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/kline/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/ohlcv/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.112 → OctoBot-Trading-2.4.114}/octobot_trading/exchange_data/prices/__init__.py
RENAMED
File without changes
|
File without changes
|