OctoBot-Trading 2.4.14__tar.gz → 2.4.16__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.14 → OctoBot-Trading-2.4.16}/CHANGELOG.md +10 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/OctoBot_Trading.egg-info/SOURCES.txt +1 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/OctoBot_Trading.egg-info/requires.txt +1 -1
- {OctoBot-Trading-2.4.14/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.16}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/README.md +1 -1
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/config/exchange_config_data.py +3 -2
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +7 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +1 -4
- OctoBot-Trading-2.4.16/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +23 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +33 -2
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/exchange_builder.py +8 -3
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/exchange_manager.py +1 -1
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/implementations/exchange_simulator.py +13 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/types/rest_exchange.py +17 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/util/exchange_util.py +5 -3
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/order_util.py +1 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +12 -2
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/portfolio_manager.py +2 -1
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/test_tools/exchanges_test_tools.py +16 -4
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/requirements.txt +1 -1
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +11 -4
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/LICENSE +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/contracts.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/exchange.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/constants.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/enums.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/errors.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/traders/trader.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/mode_config.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/modes_util.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/position.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/signals/signal_creation.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/signals/util.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/orders_storage.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/test_tools/exchange_data.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/setup.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/test_exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/traders/test_trader.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/exchanges/util/test_exchange_util.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/test_abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/test_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/test_order_util.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/trades/test_trade_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/signals/test_util.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_ascendex.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_binance.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_bitget.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_bithumb.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_bitso.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_bittrex.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_bybit.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_coinbase.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_coinex.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_gateio.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_hollaex.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_huobi.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_huobipro.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_kraken.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_kucoin.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_mexc.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_ndax.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_okcoin.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_okx.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_phemex.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_poloniex.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_upbit.py +0 -0
- {OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,16 @@ 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.16] - 2023-08-14
|
8
|
+
### Fixed
|
9
|
+
- [Exchanges] unwanted market status load
|
10
|
+
|
11
|
+
## [2.4.15] - 2023-08-14
|
12
|
+
### Updated
|
13
|
+
- [Backtesting] handle forced market statuses
|
14
|
+
### Fixed
|
15
|
+
- [Exchanges] randomness in symbols processing
|
16
|
+
|
7
17
|
## [2.4.14] - 2023-08-07
|
8
18
|
### Updated
|
9
19
|
- [PortfolioStorage] update profitability
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.16
|
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.16](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)
|
@@ -105,6 +105,7 @@ octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py
|
|
105
105
|
octobot_trading/exchanges/connectors/ccxt/constants.py
|
106
106
|
octobot_trading/exchanges/connectors/ccxt/enums.py
|
107
107
|
octobot_trading/exchanges/connectors/simulator/__init__.py
|
108
|
+
octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py
|
108
109
|
octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py
|
109
110
|
octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py
|
110
111
|
octobot_trading/exchanges/implementations/__init__.py
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.16
|
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.16](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.16](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)
|
@@ -169,10 +169,11 @@ class ExchangeConfig(util.Initializable):
|
|
169
169
|
traded_symbol_pairs_set = self._set_config_traded_pair(cryptocurrency,
|
170
170
|
traded_symbol_pairs_set,
|
171
171
|
existing_pairs)
|
172
|
-
|
172
|
+
# sort lists to avoid set insert randomness issues
|
173
|
+
self.traded_symbol_pairs = sorted(list(traded_symbol_pairs_set))
|
173
174
|
self.traded_symbols = [
|
174
175
|
octobot_commons.symbols.parse_symbol(symbol)
|
175
|
-
for symbol in
|
176
|
+
for symbol in self.traded_symbol_pairs
|
176
177
|
]
|
177
178
|
|
178
179
|
# only add self.traded_symbol_pairs to watched pairs as not every existing_pairs are being collected
|
@@ -104,6 +104,13 @@ def set_sandbox_mode(exchange_connector, is_sandboxed):
|
|
104
104
|
return None
|
105
105
|
|
106
106
|
|
107
|
+
def set_markets_from_forced_markets(client, forced_markets: list):
|
108
|
+
client.set_markets([
|
109
|
+
client.parse_market(market) if hasattr(client, "parse_market") else market
|
110
|
+
for market in forced_markets
|
111
|
+
])
|
112
|
+
|
113
|
+
|
107
114
|
def get_ccxt_client_login_options(exchange_manager):
|
108
115
|
"""
|
109
116
|
:return: ccxt client login option dict, can be overwritten to custom exchange login
|
@@ -114,10 +114,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
114
114
|
if forced_markets is not None:
|
115
115
|
if forced_markets:
|
116
116
|
# only set markets if there are markets to be set
|
117
|
-
self.client
|
118
|
-
self.client.parse_market(market) if hasattr(self.client, "parse_market") else market
|
119
|
-
for market in forced_markets
|
120
|
-
])
|
117
|
+
ccxt_client_util.set_markets_from_forced_markets(self.client, forced_markets)
|
121
118
|
else:
|
122
119
|
try:
|
123
120
|
await self.client.load_markets(reload=reload)
|
OctoBot-Trading-2.4.16/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# Drakkar-Software OctoBot-Trading
|
2
|
+
# Copyright (c) Drakkar-Software, All rights reserved.
|
3
|
+
#
|
4
|
+
# This library is free software; you can redistribute it and/or
|
5
|
+
# modify it under the terms of the GNU Lesser General Public
|
6
|
+
# License as published by the Free Software Foundation; either
|
7
|
+
# version 3.0 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This library is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU Lesser General Public
|
15
|
+
# License along with this library.
|
16
|
+
import ccxt.async_support
|
17
|
+
import octobot_trading.exchanges.connectors.ccxt.ccxt_client_util as ccxt_client_util
|
18
|
+
|
19
|
+
|
20
|
+
def parse_markets(exchange_name, forced_markets: list) -> dict:
|
21
|
+
client = getattr(ccxt.async_support, exchange_name)()
|
22
|
+
ccxt_client_util.set_markets_from_forced_markets(client, forced_markets)
|
23
|
+
return client.markets
|
@@ -26,8 +26,10 @@ import octobot_commons.constants as commons_constants
|
|
26
26
|
import octobot_trading.exchange_channel as exchange_channel
|
27
27
|
import octobot_trading.constants as constants
|
28
28
|
import octobot_trading.enums as enums
|
29
|
+
import octobot_trading.errors as errors
|
29
30
|
import octobot_trading.exchanges.abstract_exchange as abstract_exchange
|
30
31
|
import octobot_trading.exchanges.connectors.simulator.exchange_simulator_adapter as exchange_simulator_adapter
|
32
|
+
import octobot_trading.exchanges.connectors.simulator.ccxt_client_simulation as ccxt_client_simulation
|
31
33
|
import octobot_trading.exchange_data as exchange_data
|
32
34
|
import octobot_trading.exchanges.util as util
|
33
35
|
|
@@ -44,6 +46,7 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
|
|
44
46
|
self.current_future_candles = {}
|
45
47
|
|
46
48
|
self.is_authenticated = False
|
49
|
+
self._forced_market_statuses: dict = None
|
47
50
|
|
48
51
|
async def initialize_impl(self):
|
49
52
|
self.exchange_importers = self.backtesting.get_importers(importers.ExchangeDataImporter)
|
@@ -61,9 +64,22 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
|
|
61
64
|
# set exchange manager attributes
|
62
65
|
self.exchange_manager.client_symbols = list(self.symbols)
|
63
66
|
|
67
|
+
# init _forced_market_statuses when available
|
68
|
+
if self.exchange_manager.forced_markets is not None:
|
69
|
+
self._init_forced_market_statuses(self.exchange_manager.forced_markets)
|
70
|
+
|
64
71
|
def get_adapter_class(self, adapter_class):
|
65
72
|
return adapter_class or exchange_simulator_adapter.ExchangeSimulatorAdapter
|
66
73
|
|
74
|
+
def _init_forced_market_statuses(self, forced_markets):
|
75
|
+
self._forced_market_statuses = ccxt_client_simulation.parse_markets(
|
76
|
+
self.exchange_manager.exchange_class_string,
|
77
|
+
forced_markets
|
78
|
+
)
|
79
|
+
|
80
|
+
def should_adapt_market_statuses(self) -> bool:
|
81
|
+
return bool(self.exchange_manager.forced_markets)
|
82
|
+
|
67
83
|
@classmethod
|
68
84
|
def load_user_inputs_from_class(cls, tentacles_setup_config, tentacle_config):
|
69
85
|
# no user input in connector
|
@@ -125,6 +141,18 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
|
|
125
141
|
return [backtesting_api.get_data_file_path(importer) for importer in self.exchange_importers]
|
126
142
|
|
127
143
|
def get_market_status(self, symbol, price_example=0, with_fixer=True):
|
144
|
+
if self._forced_market_statuses:
|
145
|
+
try:
|
146
|
+
if with_fixer:
|
147
|
+
return util.ExchangeMarketStatusFixer(
|
148
|
+
self._forced_market_statuses[symbol], price_example
|
149
|
+
).market_status
|
150
|
+
return self._forced_market_statuses[symbol]
|
151
|
+
except KeyError:
|
152
|
+
raise errors.NotSupported
|
153
|
+
return self._get_default_market_status()
|
154
|
+
|
155
|
+
def _get_default_market_status(self):
|
128
156
|
return {
|
129
157
|
# number of decimal digits "after the dot"
|
130
158
|
enums.ExchangeConstantsMarketStatusColumns.PRECISION.value: {
|
@@ -199,8 +227,11 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
|
|
199
227
|
currency, market = symbol_util.parse_symbol(symbol).base_and_quote()
|
200
228
|
fee_currency = currency
|
201
229
|
|
202
|
-
precision = self.get_market_status(
|
203
|
-
|
230
|
+
precision = self.get_market_status(
|
231
|
+
symbol, with_fixer=False
|
232
|
+
)[enums.ExchangeConstantsMarketStatusColumns.PRECISION.value][
|
233
|
+
enums.ExchangeConstantsMarketStatusColumns.PRECISION_PRICE.value
|
234
|
+
]
|
204
235
|
cost = float(number_util.round_into_str_with_max_digits(float(quantity) * rate, precision))
|
205
236
|
|
206
237
|
if util.get_order_side(order_type) == enums.TradeOrderSide.SELL.value:
|
{OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/exchange_builder.py
RENAMED
@@ -34,6 +34,7 @@ class ExchangeBuilder:
|
|
34
34
|
|
35
35
|
self._is_using_trading_modes: bool = True
|
36
36
|
self._matrix_id: str = None
|
37
|
+
self.trading_config_by_trading_mode: dict = None
|
37
38
|
|
38
39
|
async def build(self):
|
39
40
|
"""
|
@@ -115,7 +116,7 @@ class ExchangeBuilder:
|
|
115
116
|
else:
|
116
117
|
self.logger.info(f"{self.exchange_name} exchange is online and won't be trading")
|
117
118
|
|
118
|
-
async def _build_trading_modes(self, trading_mode_class
|
119
|
+
async def _build_trading_modes(self, trading_mode_class):
|
119
120
|
try:
|
120
121
|
self._ensure_trading_mode_compatibility(trading_mode_class)
|
121
122
|
return await modes.create_trading_modes(
|
@@ -123,7 +124,7 @@ class ExchangeBuilder:
|
|
123
124
|
self.exchange_manager,
|
124
125
|
trading_mode_class,
|
125
126
|
self.exchange_manager.bot_id,
|
126
|
-
trading_config_by_trading_mode=trading_config_by_trading_mode
|
127
|
+
trading_config_by_trading_mode=self.trading_config_by_trading_mode
|
127
128
|
)
|
128
129
|
except errors.TradingModeIncompatibility as e:
|
129
130
|
raise e
|
@@ -214,7 +215,7 @@ class ExchangeBuilder:
|
|
214
215
|
self.exchange_manager.exchange_only = True
|
215
216
|
return self
|
216
217
|
|
217
|
-
def has_forced_markets(self, forced_markets:
|
218
|
+
def has_forced_markets(self, forced_markets: list):
|
218
219
|
self.exchange_manager.forced_markets = forced_markets
|
219
220
|
return self
|
220
221
|
|
@@ -246,6 +247,10 @@ class ExchangeBuilder:
|
|
246
247
|
self._matrix_id = matrix_id
|
247
248
|
return self
|
248
249
|
|
250
|
+
def use_trading_config_by_trading_mode(self, trading_config_by_trading_mode):
|
251
|
+
self.trading_config_by_trading_mode = trading_config_by_trading_mode
|
252
|
+
return self
|
253
|
+
|
249
254
|
|
250
255
|
def create_exchange_builder_instance(config, exchange_name):
|
251
256
|
return ExchangeBuilder(config, exchange_name)
|
{OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/exchange_manager.py
RENAMED
@@ -47,7 +47,7 @@ class ExchangeManager(util.Initializable):
|
|
47
47
|
self.is_backtesting: bool = False
|
48
48
|
self.rest_only: bool = False
|
49
49
|
self.ignore_config: bool = False
|
50
|
-
self.forced_markets:
|
50
|
+
self.forced_markets: list = None
|
51
51
|
self.is_spot_only: bool = False
|
52
52
|
self.is_margin: bool = False
|
53
53
|
self.is_future: bool = False
|
@@ -14,6 +14,7 @@
|
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library.
|
16
16
|
import octobot_trading.constants as constants
|
17
|
+
import octobot_trading.exchanges.util as exchange_util
|
17
18
|
import octobot_trading.exchanges.connectors.simulator.exchange_simulator_connector as exchange_simulator_connector
|
18
19
|
import octobot_trading.exchanges.types.rest_exchange as rest_exchange
|
19
20
|
|
@@ -36,6 +37,7 @@ class ExchangeSimulator(rest_exchange.RestExchange):
|
|
36
37
|
|
37
38
|
async def initialize_impl(self):
|
38
39
|
await super().initialize_impl()
|
40
|
+
self._set_market_status_params()
|
39
41
|
self.exchange_importers = self.connector.exchange_importers
|
40
42
|
|
41
43
|
async def stop(self) -> None:
|
@@ -43,6 +45,17 @@ class ExchangeSimulator(rest_exchange.RestExchange):
|
|
43
45
|
self.backtesting = None
|
44
46
|
self.exchange_importers = None
|
45
47
|
|
48
|
+
def _set_market_status_params(self):
|
49
|
+
params_source = rest_exchange.RestExchange
|
50
|
+
if self.connector.should_adapt_market_statuses():
|
51
|
+
params_source = exchange_util.get_rest_exchange_class(
|
52
|
+
self.exchange_manager.exchange_name, None
|
53
|
+
) or params_source
|
54
|
+
# update params
|
55
|
+
self.FIX_MARKET_STATUS = params_source.FIX_MARKET_STATUS
|
56
|
+
self.REMOVE_MARKET_STATUS_PRICE_LIMITS = params_source.REMOVE_MARKET_STATUS_PRICE_LIMITS
|
57
|
+
self.ADAPT_MARKET_STATUS_FOR_CONTRACT_SIZE = params_source.ADAPT_MARKET_STATUS_FOR_CONTRACT_SIZE
|
58
|
+
|
46
59
|
@classmethod
|
47
60
|
def is_supporting_exchange(cls, exchange_candidate_name) -> bool:
|
48
61
|
return exchange_simulator_connector.ExchangeSimulatorConnector.is_supporting_exchange(exchange_candidate_name)
|
{OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/types/rest_exchange.py
RENAMED
@@ -43,6 +43,12 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
43
43
|
ecoc.SIDE.value, ecoc.PRICE.value, ecoc.AMOUNT.value, ecoc.STATUS.value]
|
44
44
|
ORDER_REQUIRED_FIELDS = ORDER_NON_EMPTY_FIELDS + [ecoc.REMAINING.value]
|
45
45
|
PRINT_DEBUG_LOGS = False
|
46
|
+
FIX_MARKET_STATUS = False # set True when get_fixed_market_status should be called when calling get_market_status
|
47
|
+
# set True when get_fixed_market_status should be remove price limits (when limits are invalid)
|
48
|
+
REMOVE_MARKET_STATUS_PRICE_LIMITS = False
|
49
|
+
# set True when get_fixed_market_status should adapt amounts for contract size
|
50
|
+
# (amounts are in not kept as contract size with OctoBot)
|
51
|
+
ADAPT_MARKET_STATUS_FOR_CONTRACT_SIZE = False
|
46
52
|
REQUIRE_ORDER_FEES_FROM_TRADES = False # set True when get_order is not giving fees on closed orders and fees
|
47
53
|
# should be fetched using recent trades.
|
48
54
|
REQUIRE_CLOSED_ORDERS_FROM_RECENT_TRADES = False # set True when get_closed_orders is not supported
|
@@ -357,6 +363,14 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
357
363
|
"""
|
358
364
|
Override using get_fixed_market_status in exchange tentacle if the default market status is not as expected
|
359
365
|
"""
|
366
|
+
if self.FIX_MARKET_STATUS:
|
367
|
+
return self.get_fixed_market_status(
|
368
|
+
symbol,
|
369
|
+
price_example=price_example,
|
370
|
+
with_fixer=with_fixer,
|
371
|
+
remove_price_limits=self.REMOVE_MARKET_STATUS_PRICE_LIMITS,
|
372
|
+
adapt_for_contract_size=self.ADAPT_MARKET_STATUS_FOR_CONTRACT_SIZE
|
373
|
+
)
|
360
374
|
return self.connector.get_market_status(symbol, price_example=price_example, with_fixer=with_fixer)
|
361
375
|
|
362
376
|
def get_fixed_market_status(self, symbol, price_example=None, with_fixer=True, remove_price_limits=False,
|
@@ -424,6 +438,9 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
424
438
|
enums.ExchangeConstantsMarketStatusColumns.PRECISION_AMOUNT.value] = \
|
425
439
|
number_util.get_digits_count(float_size)
|
426
440
|
|
441
|
+
async def get_account_id(self, **kwargs: dict) -> str:
|
442
|
+
raise NotImplementedError(f"get_account_id is not implemented on {self.exchange_manager.exchange_name}")
|
443
|
+
|
427
444
|
async def get_balance(self, **kwargs: dict):
|
428
445
|
return await self.connector.get_balance(**kwargs)
|
429
446
|
|
{OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchanges/util/exchange_util.py
RENAMED
@@ -216,7 +216,7 @@ async def get_local_exchange_manager(
|
|
216
216
|
.is_using_exchange_type(exchange_type) \
|
217
217
|
.is_exchange_only() \
|
218
218
|
.is_rest_only() \
|
219
|
-
.has_forced_markets(forced_markets or
|
219
|
+
.has_forced_markets(forced_markets or []) \
|
220
220
|
.is_ignoring_config(ignore_config) \
|
221
221
|
.disable_trading_mode() \
|
222
222
|
.build()
|
@@ -242,7 +242,7 @@ async def is_compatible_account(exchange_name: str, exchange_config: dict, tenta
|
|
242
242
|
) as local_exchange_manager:
|
243
243
|
backend = trading_backend.exchange_factory.create_exchange_backend(local_exchange_manager.exchange)
|
244
244
|
try:
|
245
|
-
is_compatible, error = await backend.is_valid_account()
|
245
|
+
is_compatible, error = await backend.is_valid_account(always_check_key_rights=True)
|
246
246
|
if not local_exchange_manager.is_spot_only:
|
247
247
|
message = f"Future trading on {exchange_name.capitalize()} requires a supporting account. {error}." \
|
248
248
|
f"Please create a new {exchange_name.capitalize()} account to use futures trading. "
|
@@ -255,13 +255,15 @@ async def is_compatible_account(exchange_name: str, exchange_config: dict, tenta
|
|
255
255
|
return False, False, _get_time_sync_error_message(exchange_name, "backend.is_valid_account")
|
256
256
|
except trading_backend.ExchangeAuthError:
|
257
257
|
return False, False, f"Invalid {exchange_name.capitalize()} authentication details"
|
258
|
+
except trading_backend.APIKeyPermissionsError as err:
|
259
|
+
return False, False, f"Please update your API Key permissions: {err}"
|
258
260
|
except (AttributeError, Exception) as e:
|
259
261
|
return True, False, f"Error when loading exchange account: {e}"
|
260
262
|
|
261
263
|
|
262
264
|
async def get_historical_ohlcv(
|
263
265
|
local_exchange_manager, symbol, time_frame, start_time, end_time,
|
264
|
-
|
266
|
+
request_retry_timeout=constants.HISTORICAL_CANDLES_FETCH_DEFAULT_TIMEOUT
|
265
267
|
):
|
266
268
|
"""
|
267
269
|
Async generator, use as follows:
|
{OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/octobot_trading/personal_data/orders/order_util.py
RENAMED
@@ -399,6 +399,7 @@ async def create_as_chained_order(order):
|
|
399
399
|
order.status = enums.OrderStatus.OPEN
|
400
400
|
# set uninitialized to allow second initialization from create_order
|
401
401
|
order.is_initialized = False
|
402
|
+
order.creation_time = order.exchange_manager.exchange.get_exchange_current_time()
|
402
403
|
await order.trader.create_order(
|
403
404
|
order,
|
404
405
|
loaded=False,
|
@@ -61,7 +61,15 @@ class HistoricalPortfolioValueManager(util.Initializable):
|
|
61
61
|
)
|
62
62
|
self.data_source = data_source or self.__class__.DEFAULT_DATA_SOURCE
|
63
63
|
self.version = version or self.__class__.DEFAULT_DATA_VERSION
|
64
|
-
|
64
|
+
try:
|
65
|
+
self.starting_time = self.portfolio_manager.exchange_manager.exchange.get_exchange_current_time()
|
66
|
+
except AttributeError:
|
67
|
+
if self.portfolio_manager.exchange_manager.is_backtesting and \
|
68
|
+
not self.portfolio_manager.exchange_manager.exchange.connector.exchange_importers:
|
69
|
+
# Can happen on backtesting without datafiles (used in particular setups). Only this case is acceptable
|
70
|
+
self.starting_time = 0
|
71
|
+
else:
|
72
|
+
raise
|
65
73
|
self.last_update_time = self.starting_time
|
66
74
|
self.starting_portfolio = None
|
67
75
|
self.historical_ending_portfolio = None
|
@@ -75,7 +83,9 @@ class HistoricalPortfolioValueManager(util.Initializable):
|
|
75
83
|
"""
|
76
84
|
Reset the portfolio instance
|
77
85
|
"""
|
78
|
-
|
86
|
+
# don't load any previous portfolio value on backtesting
|
87
|
+
if not self.portfolio_manager.exchange_manager.is_backtesting:
|
88
|
+
await self._reload_historical_portfolio_value()
|
79
89
|
|
80
90
|
async def reset_history(self):
|
81
91
|
self.starting_time = self.portfolio_manager.exchange_manager.exchange.get_exchange_current_time()
|
@@ -52,7 +52,8 @@ class PortfolioManager(util.Initializable):
|
|
52
52
|
Reset the portfolio instance
|
53
53
|
"""
|
54
54
|
|
55
|
-
if self.exchange_manager.is_storage_enabled()
|
55
|
+
if (self.exchange_manager.is_storage_enabled() or self.exchange_manager.is_backtesting) \
|
56
|
+
and self.historical_portfolio_value_manager is None:
|
56
57
|
self.historical_portfolio_value_manager = personal_data.HistoricalPortfolioValueManager(self)
|
57
58
|
await self.historical_portfolio_value_manager.initialize()
|
58
59
|
self.set_forced_portfolio_initial_config(
|
@@ -15,6 +15,7 @@
|
|
15
15
|
# License along with this library.
|
16
16
|
import asyncio
|
17
17
|
import decimal
|
18
|
+
import time
|
18
19
|
|
19
20
|
import octobot_commons.asyncio_tools as asyncio_tools
|
20
21
|
import octobot_commons.enums as common_enums
|
@@ -29,6 +30,9 @@ import octobot_trading.personal_data as personal_data
|
|
29
30
|
import octobot_trading.util.test_tools.exchange_data as exchange_data_import
|
30
31
|
|
31
32
|
|
33
|
+
BASE_TIMEOUT = 10
|
34
|
+
|
35
|
+
|
32
36
|
async def create_test_exchange_manager(
|
33
37
|
config: dict,
|
34
38
|
exchange_name: str,
|
@@ -79,11 +83,20 @@ def _update_symbol_market(exchange_manager, market_details: exchange_data_import
|
|
79
83
|
|
80
84
|
async def add_symbols_details(
|
81
85
|
exchange_manager, symbols: list, time_frame: str, exchange_data: exchange_data_import.ExchangeData,
|
82
|
-
history_size=1, forced_markets=None
|
86
|
+
history_size=1, forced_markets=None, start_time=0, end_time=0
|
83
87
|
) -> exchange_data_import.ExchangeData:
|
84
88
|
parsed_tf = common_enums.TimeFrames(time_frame)
|
89
|
+
|
85
90
|
async def _update_ohlcv(symbol):
|
86
|
-
|
91
|
+
if start_time == 0:
|
92
|
+
ohlcvs = await exchange_manager.exchange.get_symbol_prices(symbol, parsed_tf, limit=history_size)
|
93
|
+
else:
|
94
|
+
ohlcvs = []
|
95
|
+
async for ohlcv in exchanges.get_historical_ohlcv(
|
96
|
+
exchange_manager, symbol, parsed_tf, start_time * 1000, (end_time or time.time()) * 1000,
|
97
|
+
request_retry_timeout=BASE_TIMEOUT
|
98
|
+
):
|
99
|
+
ohlcvs.extend(ohlcv)
|
87
100
|
details = exchange_data_import.MarketDetails(
|
88
101
|
symbol=symbol,
|
89
102
|
time_frame=time_frame,
|
@@ -155,10 +168,9 @@ async def create_orders(exchange_manager, exchange_data: exchange_data_import.Ex
|
|
155
168
|
current_price=decimal.Decimal(str(exchange_data.get_price(symbol))),
|
156
169
|
reduce_only=order_dict[enums.ExchangeConstantsOrderColumns.REDUCE_ONLY.value],
|
157
170
|
)
|
158
|
-
# created_order = order_dict
|
159
171
|
# is private, to use in tests context only
|
160
172
|
return personal_data.create_order_instance_from_raw(
|
161
173
|
exchange_manager.trader, created_order, force_open_or_pending_creation=True
|
162
|
-
)
|
174
|
+
) if created_order else None
|
163
175
|
|
164
176
|
return await asyncio.gather(*(_create_order(order_dict) for order_dict in orders))
|
@@ -5,7 +5,7 @@ OctoBot-Backtesting>=1.9, <1.10
|
|
5
5
|
Async-Channel>=2.2, <2.3
|
6
6
|
OctoBot-Commons>=1.9, <1.10
|
7
7
|
OctoBot-Tentacles-Manager>=2.9, <2.10
|
8
|
-
trading-backend>=1.2.
|
8
|
+
trading-backend>=1.2.7
|
9
9
|
|
10
10
|
# Exchange connection requirements
|
11
11
|
ccxt==3.1.52 # always ensure real exchanges tests (in tests_additional and authenticated exchange tests) are passing before changing the ccxt version
|
@@ -53,13 +53,20 @@ async def test_initialize(historical_portfolio_value_manager):
|
|
53
53
|
await historical_portfolio_value_manager.initialize()
|
54
54
|
assert historical_portfolio_value_manager.historical_portfolio_value == sortedcontainers.SortedDict()
|
55
55
|
|
56
|
-
if os.getenv('CYTHON_IGNORE'):
|
57
|
-
return
|
58
56
|
with mock.patch.object(historical_portfolio_value_manager, "_reload_historical_portfolio_value", mock.AsyncMock()) \
|
59
|
-
|
57
|
+
as _reload_historical_portfolio_value_mock:
|
60
58
|
historical_portfolio_value_manager.is_initialized = False
|
61
59
|
await historical_portfolio_value_manager.initialize()
|
62
|
-
_reload_historical_portfolio_value_mock.
|
60
|
+
_reload_historical_portfolio_value_mock.assert_not_called()
|
61
|
+
|
62
|
+
try:
|
63
|
+
historical_portfolio_value_manager.portfolio_manager.exchange_manager.is_backtesting = False
|
64
|
+
historical_portfolio_value_manager.is_initialized = False
|
65
|
+
await historical_portfolio_value_manager.initialize()
|
66
|
+
_reload_historical_portfolio_value_mock.assert_called_once()
|
67
|
+
finally:
|
68
|
+
# restore value
|
69
|
+
historical_portfolio_value_manager.portfolio_manager.exchange_manager.is_backtesting = True
|
63
70
|
|
64
71
|
|
65
72
|
async def test_on_new_value(historical_portfolio_value_manager):
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/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
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.14 → OctoBot-Trading-2.4.16}/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.14 → OctoBot-Trading-2.4.16}/octobot_trading/exchange_data/kline/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|