OctoBot-Trading 2.4.83__tar.gz → 2.4.85__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.83 → OctoBot-Trading-2.4.85}/CHANGELOG.md +8 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.83/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.85}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/README.md +1 -1
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/__init__.py +0 -4
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/exchange.py +0 -8
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/constants.py +7 -14
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/errors.py +7 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/__init__.py +2 -4
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/types/rest_exchange.py +35 -5
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/util/__init__.py +2 -4
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/util/exchange_util.py +17 -9
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/__init__.py +2 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/config_util.py +12 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/test_tools/exchange_data.py +19 -1
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/util/test_exchange_util.py +6 -22
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/LICENSE +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/OctoBot_Trading.egg-info/requires.txt +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/contracts.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/enums.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/traders/trader.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/util/symbol_details.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/mode_activity.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/mode_config.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/modes_util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/order_util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/position.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/signals/signal_creation.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/signals/util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/orders_storage.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/requirements.txt +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/setup.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/test_exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/traders/test_trader.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/test_abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/test_modes_util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/test_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/test_order_util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/trades/test_trade_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/trades/test_trade_util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/signals/test_util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_ascendex.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_binance.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_bingx.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_bitget.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_bithumb.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_bitso.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_bybit.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_coinbase.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_coinex.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_gateio.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_hollaex.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_htx.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_kraken.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_kucoin.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_mexc.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_ndax.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_okcoin.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_okx.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_phemex.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_poloniex.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_upbit.py +0 -0
- {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/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.85] - 2024-05-31
|
8
|
+
### Added
|
9
|
+
- [Exchanges] Fix permission issue false positive
|
10
|
+
|
11
|
+
## [2.4.84] - 2024-05-26
|
12
|
+
### Added
|
13
|
+
- [ExchangeData] IncompatibleAssetDetails
|
14
|
+
|
7
15
|
## [2.4.83] - 2024-05-16
|
8
16
|
### Updated
|
9
17
|
- [Orders] log unparsable orders
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.85
|
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.85](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.85
|
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.85](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.85](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)
|
@@ -120,8 +120,6 @@ from octobot_trading.api.exchange import (
|
|
120
120
|
get_enabled_exchanges_names,
|
121
121
|
get_auto_filled_exchange_names,
|
122
122
|
get_exchange_details,
|
123
|
-
is_api_permission_error,
|
124
|
-
is_exchange_rules_compliancy_error,
|
125
123
|
cancel_ccxt_throttle_task,
|
126
124
|
stop_exchange,
|
127
125
|
)
|
@@ -301,8 +299,6 @@ __all__ = [
|
|
301
299
|
"get_enabled_exchanges_names",
|
302
300
|
"get_auto_filled_exchange_names",
|
303
301
|
"get_exchange_details",
|
304
|
-
"is_api_permission_error",
|
305
|
-
"is_exchange_rules_compliancy_error",
|
306
302
|
"cancel_ccxt_throttle_task",
|
307
303
|
"stop_exchange",
|
308
304
|
"get_trading_modes",
|
@@ -322,14 +322,6 @@ async def get_exchange_details(
|
|
322
322
|
)
|
323
323
|
|
324
324
|
|
325
|
-
def is_api_permission_error(error: BaseException) -> bool:
|
326
|
-
return exchanges.is_api_permission_error(error)
|
327
|
-
|
328
|
-
|
329
|
-
def is_exchange_rules_compliancy_error(error: BaseException) -> bool:
|
330
|
-
return exchanges.is_exchange_rules_compliancy_error(error)
|
331
|
-
|
332
|
-
|
333
325
|
def cancel_ccxt_throttle_task():
|
334
326
|
for task in asyncio.all_tasks():
|
335
327
|
# manually cancel ccxt async throttle task since it apparently can't be cancelled otherwise
|
@@ -126,26 +126,19 @@ SIMULATOR_TESTED_EXCHANGES = sorted(["bitfinex2", "bithumb", "bitstamp", "bittre
|
|
126
126
|
"hitbtc", "kraken", "poloniex", "bitso", "ndax", "upbit",
|
127
127
|
"wavesexchange"])
|
128
128
|
|
129
|
-
# when ccxt is raising ccxt.ExchangeError instead of ccxt.AuthenticationError on api key permissions issue
|
130
|
-
EXCHANGE_PERMISSION_ERRORS: typing.List[typing.Iterable[str]] = [
|
131
|
-
# OKX ex: okx {"msg":"API key doesn't exist","code":"50119"}
|
132
|
-
("api", "key"),
|
133
|
-
|
134
|
-
# Binance ex: DDoSProtection('binance {"code":-2015,"msg":"Invalid API-key, IP, or permissions for action."}')
|
135
|
-
("key", "permissions for action"),
|
136
|
-
|
137
|
-
# coinbase ex: coinbase {"error":"PERMISSION_DENIED",
|
138
|
-
# "error_details":"Missing required scopes","message":"Missing required scopes"}
|
139
|
-
("permission_denied", "required scopes"),
|
140
|
-
("missing required scopes"),
|
141
|
-
]
|
142
|
-
|
143
129
|
# text content of errors due to exchange compliancy rules
|
130
|
+
# Warning: should never be a false positive
|
144
131
|
EXCHANGE_COMPLIANCY_ERRORS: typing.List[typing.Iterable[str]] = [
|
145
132
|
# OKX ex: Trading of this pair or contract is restricted due to local compliance requirements
|
146
133
|
("restricted", "compliance"),
|
147
134
|
]
|
148
135
|
|
136
|
+
# text content of errors due to exchange local account permissions (ex: accounts from X country can't trade XYZ)
|
137
|
+
EXCHANGE_ACCOUNT_TRADED_SYMBOL_PERMISSION_ERRORS: typing.List[typing.Iterable[str]] = [
|
138
|
+
# Binance ex: InvalidOrder binance {"code":-2010,"msg":"This symbol is not permitted for this account."}
|
139
|
+
("symbol", "not permitted", "for this account"),
|
140
|
+
]
|
141
|
+
|
149
142
|
CONFIG_DEFAULT_FEES = 0.001
|
150
143
|
CONFIG_DEFAULT_SIMULATOR_FEES = 0
|
151
144
|
|
@@ -117,6 +117,13 @@ class ExchangeCompliancyError(Exception):
|
|
117
117
|
"""
|
118
118
|
|
119
119
|
|
120
|
+
class ExchangeAccountSymbolPermissionError(Exception):
|
121
|
+
"""
|
122
|
+
Raised when an exchange failed to execute the given request because of allowed traded symbols
|
123
|
+
on the current user account
|
124
|
+
"""
|
125
|
+
|
126
|
+
|
120
127
|
class PortfolioNegativeValueError(Exception):
|
121
128
|
"""
|
122
129
|
Raised when the portfolio is being updated with a negative value
|
@@ -62,6 +62,7 @@ from octobot_trading.exchanges.util import (
|
|
62
62
|
log_time_sync_error,
|
63
63
|
get_partners_explanation_message,
|
64
64
|
get_enabled_exchanges,
|
65
|
+
exchange_error_translator,
|
65
66
|
is_compatible_account,
|
66
67
|
get_historical_ohlcv,
|
67
68
|
get_exchange_type,
|
@@ -76,8 +77,6 @@ from octobot_trading.exchanges.util import (
|
|
76
77
|
get_local_exchange_manager,
|
77
78
|
get_auto_filled_exchange_names,
|
78
79
|
get_exchange_details,
|
79
|
-
is_api_permission_error,
|
80
|
-
is_exchange_rules_compliancy_error,
|
81
80
|
is_error_on_this_type,
|
82
81
|
force_disable_web_socket,
|
83
82
|
check_web_socket_config,
|
@@ -149,6 +148,7 @@ __all__ = [
|
|
149
148
|
"log_time_sync_error",
|
150
149
|
"get_partners_explanation_message",
|
151
150
|
"get_enabled_exchanges",
|
151
|
+
"exchange_error_translator",
|
152
152
|
"is_compatible_account",
|
153
153
|
"get_historical_ohlcv",
|
154
154
|
"get_exchange_type",
|
@@ -163,8 +163,6 @@ __all__ = [
|
|
163
163
|
"get_local_exchange_manager",
|
164
164
|
"get_auto_filled_exchange_names",
|
165
165
|
"get_exchange_details",
|
166
|
-
"is_api_permission_error",
|
167
|
-
"is_exchange_rules_compliancy_error",
|
168
166
|
"is_error_on_this_type",
|
169
167
|
"AbstractExchange",
|
170
168
|
"is_channel_managed_by_websocket",
|
{OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/types/rest_exchange.py
RENAMED
@@ -91,6 +91,14 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
91
91
|
|
92
92
|
# text content of errors due to orders not found errors
|
93
93
|
EXCHANGE_ORDER_NOT_FOUND_ERRORS: typing.List[typing.Iterable[str]] = []
|
94
|
+
# when ccxt is raising ccxt.ExchangeError instead of ccxt.AuthenticationError on api key permissions issue
|
95
|
+
# text content of errors due to api key permissions issues
|
96
|
+
EXCHANGE_PERMISSION_ERRORS: typing.List[typing.Iterable[str]] = []
|
97
|
+
# text content of errors due to account compliancy issues
|
98
|
+
EXCHANGE_COMPLIANCY_ERRORS: typing.List[typing.Iterable[str]] = []
|
99
|
+
# text content of errors due to exchange local account permissions (ex: accounts from X country can't trade XYZ)
|
100
|
+
# text content of errors due to traded assets for account
|
101
|
+
EXCHANGE_ACCOUNT_TRADED_SYMBOL_PERMISSION_ERRORS: typing.List[typing.Iterable[str]] = []
|
94
102
|
|
95
103
|
DEFAULT_CONNECTOR_CLASS = ccxt_connector.CCXTConnector
|
96
104
|
|
@@ -207,7 +215,7 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
207
215
|
except ccxt.DDoSProtection as e:
|
208
216
|
# raised upon rate limit issues, last response data might have details on what is happening
|
209
217
|
# ensure this is not a permission error (can happen on binance)
|
210
|
-
if
|
218
|
+
if self.is_api_permission_error(e):
|
211
219
|
# invalid api key or missing trading rights
|
212
220
|
raise errors.AuthenticationError(
|
213
221
|
f"Error when handling order {e}. Please make sure that trading permissions are on for this API key."
|
@@ -215,18 +223,20 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
215
223
|
if self.should_log_on_ddos_exception(e):
|
216
224
|
self.connector.log_ddos_error(e)
|
217
225
|
raise errors.FailedRequest(f"Failed to order operation: {e.__class__.__name__} {e}") from e
|
226
|
+
except errors.ExchangeAccountSymbolPermissionError:
|
227
|
+
raise
|
218
228
|
except Exception as e:
|
219
229
|
if not self.is_market_open_for_order_type(symbol, order_type):
|
220
230
|
raise errors.UnavailableOrderTypeForMarketError(
|
221
231
|
f"Error when handling order {e}. "
|
222
232
|
f"Exchange currently refuses to create orders of type {order_type} on {symbol}."
|
223
233
|
) from e
|
224
|
-
if
|
234
|
+
if self.is_api_permission_error(e):
|
225
235
|
# invalid api key or missing trading rights
|
226
236
|
raise errors.AuthenticationError(
|
227
237
|
f"Error when handling order {e}. Please make sure that trading permissions are on for this API key."
|
228
238
|
) from e
|
229
|
-
if
|
239
|
+
if self.is_exchange_rules_compliancy_error(e):
|
230
240
|
raise errors.ExchangeCompliancyError(
|
231
241
|
f"Error when handling order {e}. Exchange is refusing this order request on this account because "
|
232
242
|
f"of its compliancy requirements."
|
@@ -273,9 +283,14 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
273
283
|
stop_price=stop_price, side=side,
|
274
284
|
current_price=current_price,
|
275
285
|
reduce_only=reduce_only, params=params)
|
276
|
-
except (ccxt.InvalidOrder, ccxt.BadRequest) as
|
286
|
+
except (ccxt.InvalidOrder, ccxt.BadRequest) as err:
|
287
|
+
if self.is_exchange_account_traded_symbol_permission_error(err):
|
288
|
+
# exchange won't let this order create: raise
|
289
|
+
raise errors.ExchangeAccountSymbolPermissionError(
|
290
|
+
f"Error when creating {symbol} {order_type} order on {self.exchange_manager.exchange_name}: {err}"
|
291
|
+
) from err
|
277
292
|
# can be raised when exchange precision/limits rules change
|
278
|
-
self.logger.debug(f"Failed to create order ({
|
293
|
+
self.logger.debug(f"Failed to create order ({err}) : order_type: {order_type}, symbol: {symbol}. "
|
279
294
|
f"This might be due to an update on {self.name} market rules. Fetching updated rules.")
|
280
295
|
await self.connector.load_symbol_markets(reload=True, market_filter=self.exchange_manager.market_filter)
|
281
296
|
# retry order creation with updated markets (ccxt will use the updated market values)
|
@@ -886,6 +901,21 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
886
901
|
return exchanges_util.is_error_on_this_type(error, self.EXCHANGE_ORDER_NOT_FOUND_ERRORS)
|
887
902
|
return False
|
888
903
|
|
904
|
+
def is_api_permission_error(self, error: BaseException) -> bool:
|
905
|
+
if self.EXCHANGE_PERMISSION_ERRORS:
|
906
|
+
return exchanges_util.is_error_on_this_type(error, self.EXCHANGE_PERMISSION_ERRORS)
|
907
|
+
return False
|
908
|
+
|
909
|
+
def is_exchange_rules_compliancy_error(self, error: BaseException) -> bool:
|
910
|
+
if self.EXCHANGE_COMPLIANCY_ERRORS:
|
911
|
+
return exchanges_util.is_error_on_this_type(error, self.EXCHANGE_COMPLIANCY_ERRORS)
|
912
|
+
return False
|
913
|
+
|
914
|
+
def is_exchange_account_traded_symbol_permission_error(self, error: BaseException) -> bool:
|
915
|
+
if self.EXCHANGE_ACCOUNT_TRADED_SYMBOL_PERMISSION_ERRORS:
|
916
|
+
return exchanges_util.is_error_on_this_type(error, self.EXCHANGE_ACCOUNT_TRADED_SYMBOL_PERMISSION_ERRORS)
|
917
|
+
return False
|
918
|
+
|
889
919
|
"""
|
890
920
|
Auto fetched and filled exchanges
|
891
921
|
"""
|
{OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/util/__init__.py
RENAMED
@@ -31,6 +31,7 @@ from octobot_trading.exchanges.util.exchange_util import (
|
|
31
31
|
get_partners_explanation_message,
|
32
32
|
get_enabled_exchanges,
|
33
33
|
get_local_exchange_manager,
|
34
|
+
exchange_error_translator,
|
34
35
|
is_compatible_account,
|
35
36
|
get_historical_ohlcv,
|
36
37
|
get_exchange_type,
|
@@ -44,8 +45,6 @@ from octobot_trading.exchanges.util.exchange_util import (
|
|
44
45
|
get_exchange_class_from_name,
|
45
46
|
get_auto_filled_exchange_names,
|
46
47
|
get_exchange_details,
|
47
|
-
is_api_permission_error,
|
48
|
-
is_exchange_rules_compliancy_error,
|
49
48
|
is_error_on_this_type,
|
50
49
|
)
|
51
50
|
from octobot_trading.exchanges.util import websockets_util
|
@@ -66,6 +65,7 @@ __all__ = [
|
|
66
65
|
"get_partners_explanation_message",
|
67
66
|
"get_enabled_exchanges",
|
68
67
|
"get_local_exchange_manager",
|
68
|
+
"exchange_error_translator",
|
69
69
|
"is_compatible_account",
|
70
70
|
"get_historical_ohlcv",
|
71
71
|
"get_exchange_type",
|
@@ -79,8 +79,6 @@ __all__ = [
|
|
79
79
|
"get_exchange_class_from_name",
|
80
80
|
"get_auto_filled_exchange_names",
|
81
81
|
"get_exchange_details",
|
82
|
-
"is_api_permission_error",
|
83
|
-
"is_exchange_rules_compliancy_error",
|
84
82
|
"is_error_on_this_type",
|
85
83
|
"force_disable_web_socket",
|
86
84
|
"check_web_socket_config",
|
{OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/util/exchange_util.py
RENAMED
@@ -28,6 +28,7 @@ import octobot_commons.tentacles_management as tentacles_management
|
|
28
28
|
import octobot_tentacles_manager.api as api
|
29
29
|
|
30
30
|
import octobot_trading.enums as enums
|
31
|
+
import octobot_trading.errors as errors
|
31
32
|
import octobot_trading.constants as constants
|
32
33
|
import octobot_trading.exchanges.types as exchanges_types
|
33
34
|
import octobot_trading.exchanges.implementations as exchanges_implementations
|
@@ -228,7 +229,8 @@ async def get_local_exchange_manager(
|
|
228
229
|
.disable_trading_mode() \
|
229
230
|
.build()
|
230
231
|
try:
|
231
|
-
|
232
|
+
with exchange_error_translator(exchange_manager):
|
233
|
+
yield exchange_manager
|
232
234
|
finally:
|
233
235
|
# do not log stopping message
|
234
236
|
logger = exchange_manager.exchange.connector.logger
|
@@ -238,6 +240,20 @@ async def get_local_exchange_manager(
|
|
238
240
|
logger.disable(False)
|
239
241
|
|
240
242
|
|
243
|
+
@contextlib.contextmanager
|
244
|
+
def exchange_error_translator(exchange_manager):
|
245
|
+
try:
|
246
|
+
yield
|
247
|
+
except ccxt.ExchangeError as err:
|
248
|
+
# convert permission and compliancy errors while the exchange manager still exists and can be used
|
249
|
+
if exchange_manager.exchange.is_api_permission_error(err):
|
250
|
+
raise errors.AuthenticationError(f"{err} ({err.__class__})") from err
|
251
|
+
if exchange_manager.exchange.is_exchange_rules_compliancy_error(err):
|
252
|
+
raise errors.ExchangeCompliancyError(f"{err} ({err.__class__})") from err
|
253
|
+
# default raise
|
254
|
+
raise
|
255
|
+
|
256
|
+
|
241
257
|
async def is_compatible_account(exchange_name: str, exchange_config: dict, tentacles_setup_config, is_sandboxed: bool) \
|
242
258
|
-> (bool, bool, str):
|
243
259
|
"""
|
@@ -428,14 +444,6 @@ def get_associated_symbol(exchange_manager, asset: str, target_asset: str) -> (t
|
|
428
444
|
return symbol, is_reversed_symbol
|
429
445
|
|
430
446
|
|
431
|
-
def is_api_permission_error(error: BaseException) -> bool:
|
432
|
-
return is_error_on_this_type(error, constants.EXCHANGE_PERMISSION_ERRORS)
|
433
|
-
|
434
|
-
|
435
|
-
def is_exchange_rules_compliancy_error(error: BaseException) -> bool:
|
436
|
-
return is_error_on_this_type(error, constants.EXCHANGE_COMPLIANCY_ERRORS)
|
437
|
-
|
438
|
-
|
439
447
|
def is_error_on_this_type(error: BaseException, descriptions: typing.List[typing.Iterable[str]]) -> bool:
|
440
448
|
lower_error = str(error).lower()
|
441
449
|
for identifiers in descriptions:
|
@@ -38,6 +38,7 @@ from octobot_trading.util.config_util import (
|
|
38
38
|
is_trader_simulator_enabled,
|
39
39
|
is_trade_history_loading_enabled,
|
40
40
|
is_currency_enabled,
|
41
|
+
is_symbol_disabled,
|
41
42
|
get_symbols,
|
42
43
|
get_symbol_trading_type,
|
43
44
|
get_symbol_types_counts,
|
@@ -59,6 +60,7 @@ __all__ = [
|
|
59
60
|
"is_trader_simulator_enabled",
|
60
61
|
"is_trade_history_loading_enabled",
|
61
62
|
"is_currency_enabled",
|
63
|
+
"is_symbol_disabled",
|
62
64
|
"get_symbols",
|
63
65
|
"get_symbol_trading_type",
|
64
66
|
"get_symbol_types_counts",
|
@@ -52,6 +52,18 @@ def is_currency_enabled(config, currency, default_value) -> bool:
|
|
52
52
|
return default_value
|
53
53
|
|
54
54
|
|
55
|
+
def is_symbol_disabled(config, symbol) -> bool:
|
56
|
+
for currency_details in config[commons_constants.CONFIG_CRYPTO_CURRENCIES].values():
|
57
|
+
for pair in currency_details[commons_constants.CONFIG_CRYPTO_PAIRS]:
|
58
|
+
if (
|
59
|
+
symbol == symbol_util.parse_symbol(pair).base
|
60
|
+
and currency_details.get(commons_constants.CONFIG_ENABLED_OPTION, True) is False
|
61
|
+
):
|
62
|
+
return True
|
63
|
+
return False
|
64
|
+
|
65
|
+
|
66
|
+
|
55
67
|
def get_symbols(config, enabled_only) -> list:
|
56
68
|
if commons_constants.CONFIG_CRYPTO_CURRENCIES in config \
|
57
69
|
and isinstance(config[commons_constants.CONFIG_CRYPTO_CURRENCIES], dict):
|
{OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/test_tools/exchange_data.py
RENAMED
@@ -14,12 +14,20 @@
|
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library.
|
16
16
|
import dataclasses
|
17
|
-
|
17
|
+
import typing
|
18
18
|
|
19
19
|
import octobot_commons.dataclasses
|
20
20
|
import octobot_trading.exchanges
|
21
21
|
|
22
22
|
|
23
|
+
@dataclasses.dataclass
|
24
|
+
class IncompatibleAssetDetails(
|
25
|
+
octobot_commons.dataclasses.FlexibleDataclass, octobot_commons.dataclasses.UpdatableDataclass
|
26
|
+
):
|
27
|
+
symbol: str = ""
|
28
|
+
updated_at: float = 0
|
29
|
+
|
30
|
+
|
23
31
|
@dataclasses.dataclass
|
24
32
|
class ExchangeAuthDetails(octobot_commons.dataclasses.FlexibleDataclass, octobot_commons.dataclasses.UpdatableDataclass):
|
25
33
|
api_key: str = ""
|
@@ -29,6 +37,16 @@ class ExchangeAuthDetails(octobot_commons.dataclasses.FlexibleDataclass, octobot
|
|
29
37
|
sandboxed: bool = False
|
30
38
|
broker_enabled: bool = False
|
31
39
|
encrypted: str = ""
|
40
|
+
exchange_account_id: typing.Union[str, None] = None
|
41
|
+
incompatible_assets: typing.Union[list[IncompatibleAssetDetails], None] = dataclasses.field(default_factory=list)
|
42
|
+
|
43
|
+
# pylint: disable=E1134
|
44
|
+
def __post_init__(self):
|
45
|
+
if self.incompatible_assets and isinstance(self.incompatible_assets[0], dict):
|
46
|
+
self.incompatible_assets = (
|
47
|
+
[IncompatibleAssetDetails.from_dict(asset) for asset in self.incompatible_assets]
|
48
|
+
if self.incompatible_assets else []
|
49
|
+
)
|
32
50
|
|
33
51
|
|
34
52
|
@dataclasses.dataclass
|
{OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/util/test_exchange_util.py
RENAMED
@@ -244,26 +244,10 @@ async def test_get_exchange_details(tentacles_setup_config, supported_exchanges)
|
|
244
244
|
get_tentacle_config_mock.assert_called_once()
|
245
245
|
|
246
246
|
|
247
|
-
def test_is_api_permission_error():
|
248
|
-
with mock.patch.object(exchange_util, "is_error_on_this_type") as is_error_on_this_type_mock:
|
249
|
-
err = Exception("plop")
|
250
|
-
exchanges.is_api_permission_error(err)
|
251
|
-
is_error_on_this_type_mock.assert_called_once_with(
|
252
|
-
err, constants.EXCHANGE_PERMISSION_ERRORS
|
253
|
-
)
|
254
|
-
|
255
|
-
|
256
|
-
def test_is_exchange_rules_compliancy_error():
|
257
|
-
with mock.patch.object(exchange_util, "is_error_on_this_type") as is_error_on_this_type_mock:
|
258
|
-
err = Exception("plop")
|
259
|
-
exchanges.is_exchange_rules_compliancy_error(err)
|
260
|
-
is_error_on_this_type_mock.assert_called_once_with(
|
261
|
-
err, constants.EXCHANGE_COMPLIANCY_ERRORS
|
262
|
-
)
|
263
|
-
|
264
|
-
|
265
247
|
def test_is_error_on_this_type():
|
266
|
-
|
267
|
-
|
268
|
-
assert exchange_util.is_error_on_this_type(Exception("
|
269
|
-
assert exchange_util.is_error_on_this_type(Exception("api"),
|
248
|
+
errors = [("api", "key", "doesn't exist"),]
|
249
|
+
|
250
|
+
assert exchange_util.is_error_on_this_type(Exception("plop"), errors) is False
|
251
|
+
assert exchange_util.is_error_on_this_type(Exception("api key doesn't exist"), errors) is True
|
252
|
+
assert exchange_util.is_error_on_this_type(Exception("api"), errors) is False
|
253
|
+
assert exchange_util.is_error_on_this_type(Exception("api"), errors) is False
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/OctoBot_Trading.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/funding/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/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.83 → OctoBot-Trading-2.4.85}/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.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/prices/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|