OctoBot-Trading 2.4.185__tar.gz → 2.4.187__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.185 → OctoBot-Trading-2.4.187}/CHANGELOG.md +9 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.185/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.187}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/README.md +1 -1
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/constants.py +2 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/enums.py +7 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/errors.py +12 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +21 -15
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +5 -2
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +35 -4
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/exchange_factory.py +4 -3
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/implementations/exchange_simulator.py +8 -2
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/types/rest_exchange.py +12 -1
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/__init__.py +2 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/__init__.py +3 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/order_util.py +22 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/__init__.py +3 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/test_exchange_simulator.py +2 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/test_order_util.py +54 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/real_exchange_tester.py +2 -2
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_hollaex.py +1 -1
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/LICENSE +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/OctoBot_Trading.egg-info/requires.txt +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/contracts.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/exchange.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/config/exchange_credentials_data.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/config/proxy_config.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/traders/trader.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/util/exchange_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/util/symbol_details.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/mode_activity.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/mode_config.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/modes_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/active_order_swap_strategies/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/active_order_swap_strategies/active_order_swap_strategy.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/active_order_swap_strategies/stop_first_active_order_swap_strategy.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/active_order_swap_strategies/take_profit_first_active_order_swap_strategy.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/groups/trailing_on_filled_tp_balanced_order_group.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/trailing_profiles/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/trailing_profiles/filled_take_profit_trailing_profile.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/trailing_profiles/trailing_price_step.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/trailing_profiles/trailing_profile_types.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/triggers/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/triggers/base_trigger.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/triggers/price_trigger.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/sub_portfolio_data.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/position.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/signals/signal_creation.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/signals/util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/orders_storage.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/test_tools/exchange_data.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/requirements.txt +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/setup.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/test_exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/traders/test_trader.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/util/test_exchange_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/test_abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/modes/test_modes_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/active_order_swap_strategies/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/active_order_swap_strategies/test_active_order_swap_strategy.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/active_order_swap_strategies/test_stop_first_active_order_swap_strategy.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/active_order_swap_strategies/test_take_profit_first_active_order_swap_strategy.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/groups/test_trailing_on_filled_tp_balanced_order_group.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/test_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/trailing_profiles/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/trailing_profiles/test_filled_take_profit_trailing_profile.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/trailing_profiles/test_trailing_profile_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/triggers/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/triggers/test_base_trigger.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/triggers/test_price_trigger.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/test_portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/test_sub_portfolio_data.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/trades/test_trade_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/trades/test_trade_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/signals/test_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_ascendex.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_binance.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bingx.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bitget.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bithumb.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bitmart.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bitmex.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bitso.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bybit.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_coinbase.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_coinex.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_gateio.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_htx.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_hyperliquid.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_kraken.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_kucoin.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_mexc.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_ndax.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_okcoin.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_okx.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_phemex.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_poloniex.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_upbit.py +0 -0
- {OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,15 @@ 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.187] - 2025-06-08
|
8
|
+
### Updated
|
9
|
+
[Exchanges] make fees more flexible
|
10
|
+
|
11
|
+
## [2.4.186] - 2025-06-05
|
12
|
+
### Updated
|
13
|
+
[Orders] add ensure_orders_limit
|
14
|
+
[Exchange] add get_max_orders_count
|
15
|
+
|
7
16
|
## [2.4.185] - 2025-06-04
|
8
17
|
### Updated
|
9
18
|
[Exchanges] add supports_api_leverage_update
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.187
|
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.187](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.187
|
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.187](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.187](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)
|
@@ -46,6 +46,8 @@ CHAINED_ORDERS_OUTDATED_PRICE_ALLOWANCE = decimal.Decimal("0.005") # allows 0.5
|
|
46
46
|
# create instantly filled limit orders 0.5% beyond market
|
47
47
|
INSTANT_FILLED_LIMIT_ORDER_PRICE_DELTA = decimal.Decimal("0.005")
|
48
48
|
CREATED_ORDER_FORCED_UPDATE_PERIOD = 5
|
49
|
+
DEFAULT_MAX_DEFAULT_ORDERS_COUNT = 50
|
50
|
+
DEFAULT_MAX_STOP_ORDERS_COUNT = 5
|
49
51
|
|
50
52
|
# Portfolio
|
51
53
|
MAX_PORTFOLIO_SYNC_ATTEMPTS = 1
|
@@ -399,6 +399,13 @@ class ExchangeConstantsMarketPropertyColumns(enum.Enum):
|
|
399
399
|
TAKER = "taker" # trading
|
400
400
|
MAKER = "maker" # trading
|
401
401
|
FEE = "fee" # withdraw
|
402
|
+
FEE_SIDE = "feeSide" # pay fees in the currency you give or get
|
403
|
+
|
404
|
+
|
405
|
+
class ExchangeFeeSides(enum.Enum):
|
406
|
+
GET = "get" # the fee is always in the currency you get
|
407
|
+
GIVE = "give" # the fee is always in the currency you give
|
408
|
+
QUOTE = "quote" # the fee is always in quote currency
|
402
409
|
|
403
410
|
|
404
411
|
class ExchangeConstantsLeveragePropertyColumns(enum.Enum):
|
@@ -63,6 +63,12 @@ class UntradableSymbolError(OrderCreationError):
|
|
63
63
|
"""
|
64
64
|
|
65
65
|
|
66
|
+
class MaxOpenOrderReachedForSymbolError(OrderCreationError):
|
67
|
+
"""
|
68
|
+
Raised when an order can't be created because the maximum amount of orders of this time has been reached
|
69
|
+
"""
|
70
|
+
|
71
|
+
|
66
72
|
class OrderEditError(OctoBotExchangeError):
|
67
73
|
"""
|
68
74
|
Raised upon a failed order edition
|
@@ -348,3 +354,9 @@ class ExhaustedTrailingProfileError(Exception):
|
|
348
354
|
"""
|
349
355
|
Raised when a trailing profile has no new price to produce anymore
|
350
356
|
"""
|
357
|
+
|
358
|
+
|
359
|
+
class MissingFeeDetailsError(Exception):
|
360
|
+
"""
|
361
|
+
Raised when fee info are not available
|
362
|
+
"""
|
@@ -599,8 +599,8 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
599
599
|
|
600
600
|
def _add_stop_loss_price_param(self, params: dict, price: float):
|
601
601
|
params = params or {}
|
602
|
-
if
|
603
|
-
params[
|
602
|
+
if self.exchange_manager.exchange.STOP_LOSS_CREATE_PRICE_PARAM not in params:
|
603
|
+
params[self.exchange_manager.exchange.STOP_LOSS_CREATE_PRICE_PARAM] = price
|
604
604
|
return params
|
605
605
|
|
606
606
|
def _add_edit_stop_loss_price_param(self, params: dict, price: float):
|
@@ -889,19 +889,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
889
889
|
raise RuntimeError(f"Unknown order type: {order_type}")
|
890
890
|
|
891
891
|
def get_trade_fee(self, symbol: str, order_type: enums.TraderOrderType, quantity, price, taker_or_maker):
|
892
|
-
|
893
|
-
enums.TradeOrderType.MARKET
|
894
|
-
if taker_or_maker == enums.ExchangeConstantsMarketPropertyColumns.TAKER.value
|
895
|
-
else enums.TradeOrderType.LIMIT
|
896
|
-
)
|
897
|
-
fees = self.client.calculate_fee(
|
898
|
-
symbol=symbol,
|
899
|
-
type=limit_or_market_order_type.value,
|
900
|
-
side=exchanges.get_order_side(order_type),
|
901
|
-
amount=float(quantity),
|
902
|
-
price=float(price),
|
903
|
-
takerOrMaker=taker_or_maker
|
904
|
-
)
|
892
|
+
fees = self.calculate_fees(symbol, order_type, quantity, price, taker_or_maker)
|
905
893
|
fees[enums.FeePropertyColumns.IS_FROM_EXCHANGE.value] = False
|
906
894
|
fees[enums.FeePropertyColumns.COST.value] = decimal.Decimal(
|
907
895
|
str(fees.get(enums.FeePropertyColumns.COST.value) or 0)
|
@@ -920,6 +908,24 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
920
908
|
fees[enums.FeePropertyColumns.CURRENCY.value] = parsed_symbol.quote
|
921
909
|
return fees
|
922
910
|
|
911
|
+
def calculate_fees(
|
912
|
+
self, symbol: str, order_type: enums.TraderOrderType,
|
913
|
+
quantity: decimal.Decimal, price: decimal.Decimal, taker_or_maker: str
|
914
|
+
):
|
915
|
+
limit_or_market_order_type = (
|
916
|
+
enums.TradeOrderType.MARKET
|
917
|
+
if taker_or_maker == enums.ExchangeConstantsMarketPropertyColumns.TAKER.value
|
918
|
+
else enums.TradeOrderType.LIMIT
|
919
|
+
)
|
920
|
+
return self.client.calculate_fee(
|
921
|
+
symbol=symbol,
|
922
|
+
type=limit_or_market_order_type.value,
|
923
|
+
side=exchanges.get_order_side(order_type),
|
924
|
+
amount=float(quantity),
|
925
|
+
price=float(price),
|
926
|
+
takerOrMaker=taker_or_maker
|
927
|
+
)
|
928
|
+
|
923
929
|
def get_fees(self, symbol):
|
924
930
|
try:
|
925
931
|
return ccxt_client_util.get_fees(self.client.market(symbol))
|
@@ -18,9 +18,12 @@ import decimal
|
|
18
18
|
import octobot_trading.exchanges.connectors.ccxt.ccxt_client_util as ccxt_client_util
|
19
19
|
|
20
20
|
|
21
|
-
def parse_markets(exchange_name, market_filter) -> dict:
|
21
|
+
def parse_markets(exchange_name: str, additional_client_config: dict, market_filter) -> dict:
|
22
22
|
exchange_class = ccxt_client_util.ccxt_exchange_class_factory(exchange_name)
|
23
|
-
config =
|
23
|
+
config = {
|
24
|
+
**additional_client_config,
|
25
|
+
**ccxt_client_util.get_custom_domain_config(exchange_class)
|
26
|
+
}
|
24
27
|
client = exchange_class(config)
|
25
28
|
ccxt_client_util.load_markets_from_cache(client, market_filter)
|
26
29
|
return client.markets
|
@@ -66,17 +66,18 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
|
|
66
66
|
|
67
67
|
# init _forced_market_statuses when allowed
|
68
68
|
if self.exchange_manager.use_cached_markets:
|
69
|
-
self.
|
69
|
+
additional_client_config = await self._get_additional_client_config()
|
70
|
+
self._init_forced_market_statuses(additional_client_config)
|
70
71
|
|
71
72
|
def get_adapter_class(self, adapter_class):
|
72
73
|
return adapter_class or exchange_simulator_adapter.ExchangeSimulatorAdapter
|
73
74
|
|
74
|
-
def _init_forced_market_statuses(self):
|
75
|
+
def _init_forced_market_statuses(self, additional_client_config):
|
75
76
|
def market_filter(market):
|
76
77
|
return market[enums.ExchangeConstantsMarketStatusColumns.SYMBOL.value] in self.symbols
|
77
78
|
|
78
79
|
self._forced_market_statuses = ccxt_client_simulation.parse_markets(
|
79
|
-
self._get_exchange_class_rest_name(), market_filter
|
80
|
+
self._get_exchange_class_rest_name(), additional_client_config, market_filter
|
80
81
|
)
|
81
82
|
|
82
83
|
def _get_exchange_class_rest_name(self):
|
@@ -84,6 +85,21 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
|
|
84
85
|
return self.exchange_manager.exchange.exchange_tentacle_class.get_rest_name(self.exchange_manager)
|
85
86
|
return self.exchange_manager.exchange_class_string
|
86
87
|
|
88
|
+
async def _get_additional_client_config(self) -> dict:
|
89
|
+
if (
|
90
|
+
self.exchange_manager.exchange.exchange_tentacle_class
|
91
|
+
and self.exchange_manager.exchange.exchange_tentacle_class.HAS_FETCHED_DETAILS
|
92
|
+
):
|
93
|
+
await self.exchange_manager.exchange.exchange_tentacle_class.fetch_exchange_config(
|
94
|
+
self.exchange_manager.exchange.exchange_config_by_exchange, self.exchange_manager
|
95
|
+
)
|
96
|
+
return self.exchange_manager.exchange.exchange_tentacle_class.get_custom_url_config(
|
97
|
+
self.exchange_manager.exchange.exchange_config_by_exchange.get(
|
98
|
+
self.exchange_manager.exchange.exchange_tentacle_class.__name__, {}
|
99
|
+
), self.exchange_manager.exchange_name
|
100
|
+
)
|
101
|
+
return {}
|
102
|
+
|
87
103
|
def should_adapt_market_statuses(self) -> bool:
|
88
104
|
return self.exchange_manager.use_cached_markets
|
89
105
|
|
@@ -242,6 +258,17 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
|
|
242
258
|
# 'is_from_exchange': False, // simulated fees
|
243
259
|
# }
|
244
260
|
def get_trade_fee(self, symbol: str, order_type: enums.TraderOrderType, quantity, price, taker_or_maker):
|
261
|
+
fees = self.calculate_fees(symbol, order_type, quantity, price, taker_or_maker)
|
262
|
+
fees[enums.FeePropertyColumns.IS_FROM_EXCHANGE.value] = False
|
263
|
+
fees[enums.FeePropertyColumns.COST.value] = decimal.Decimal(
|
264
|
+
str(fees.get(enums.FeePropertyColumns.COST.value) or 0)
|
265
|
+
)
|
266
|
+
return fees
|
267
|
+
|
268
|
+
def calculate_fees(
|
269
|
+
self, symbol: str, order_type: enums.TraderOrderType,
|
270
|
+
quantity: decimal.Decimal, price: decimal.Decimal, taker_or_maker: str
|
271
|
+
):
|
245
272
|
if not taker_or_maker:
|
246
273
|
taker_or_maker = enums.ExchangeConstantsMarketPropertyColumns.TAKER.value
|
247
274
|
base, quote = symbol_util.parse_symbol(symbol).base_and_quote()
|
@@ -258,7 +285,6 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
|
|
258
285
|
enums.FeePropertyColumns.CURRENCY.value: fee_currency,
|
259
286
|
enums.FeePropertyColumns.RATE.value: rate,
|
260
287
|
enums.FeePropertyColumns.COST.value: cost,
|
261
|
-
enums.FeePropertyColumns.IS_FROM_EXCHANGE.value: False,
|
262
288
|
}
|
263
289
|
|
264
290
|
def _get_fees_currency(self, base, quote, order_type: enums.TraderOrderType):
|
@@ -266,6 +292,11 @@ class ExchangeSimulatorConnector(abstract_exchange.AbstractExchange):
|
|
266
292
|
return quote
|
267
293
|
return base
|
268
294
|
|
295
|
+
@classmethod
|
296
|
+
def register_simulator_connector_fee_methods(cls, exchange_name: str, simulator_connector):
|
297
|
+
# override when using custom fees in backtesting is necessary
|
298
|
+
pass
|
299
|
+
|
269
300
|
def get_time_frames(self, importer):
|
270
301
|
return time_frame_manager.sort_time_frames(list(set(backtesting_api.get_available_time_frames(importer)) &
|
271
302
|
set(self.exchange_manager.exchange_config.available_time_frames)),
|
{OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/exchange_factory.py
RENAMED
@@ -29,7 +29,7 @@ async def create_exchanges(exchange_manager, exchange_config_by_exchange: typing
|
|
29
29
|
|
30
30
|
if exchange_manager.is_backtesting:
|
31
31
|
# simulated : create exchange simulator instance
|
32
|
-
await create_simulated_exchange(exchange_manager)
|
32
|
+
await create_simulated_exchange(exchange_manager, exchange_config_by_exchange)
|
33
33
|
exchange_manager.load_constants()
|
34
34
|
else:
|
35
35
|
# real : create a rest or websocket exchange instance
|
@@ -139,9 +139,10 @@ async def _create_rest_exchange(
|
|
139
139
|
raise Exception(f"Can't create an exchange instance that match the exchange configuration ({exchange_manager})")
|
140
140
|
|
141
141
|
|
142
|
-
async def create_simulated_exchange(exchange_manager):
|
142
|
+
async def create_simulated_exchange(exchange_manager, exchange_config_by_exchange: typing.Optional[dict[str, dict]]):
|
143
143
|
exchange_manager.exchange = exchanges.ExchangeSimulator(
|
144
|
-
exchange_manager.config, exchange_manager, exchange_manager.backtesting
|
144
|
+
exchange_manager.config, exchange_manager, exchange_manager.backtesting,
|
145
|
+
exchange_config_by_exchange=exchange_config_by_exchange
|
145
146
|
)
|
146
147
|
|
147
148
|
await exchange_manager.exchange.initialize()
|
@@ -34,6 +34,7 @@ class ExchangeSimulator(rest_exchange.RestExchange):
|
|
34
34
|
self.exchange_importers = []
|
35
35
|
self.exchange_tentacle_class = None
|
36
36
|
self.exchange_tentacle = None
|
37
|
+
self.exchange_config_by_exchange = exchange_config_by_exchange
|
37
38
|
super().__init__(config, exchange_manager, exchange_config_by_exchange)
|
38
39
|
|
39
40
|
def _create_connector(self, config, exchange_manager, connector_class):
|
@@ -46,12 +47,17 @@ class ExchangeSimulator(rest_exchange.RestExchange):
|
|
46
47
|
|
47
48
|
async def initialize_impl(self):
|
48
49
|
self.exchange_tentacle_class = exchange_util.get_rest_exchange_class(
|
49
|
-
self.exchange_manager.exchange_name, self.exchange_manager.tentacles_setup_config,
|
50
|
+
self.exchange_manager.exchange_name, self.exchange_manager.tentacles_setup_config,
|
51
|
+
self.exchange_config_by_exchange
|
50
52
|
)
|
51
53
|
await super().initialize_impl()
|
52
54
|
self.exchange_importers = self.connector.exchange_importers
|
53
55
|
if self.connector.should_adapt_market_statuses():
|
54
56
|
await self._init_exchange_tentacle()
|
57
|
+
if self.exchange_tentacle_class:
|
58
|
+
self.exchange_tentacle_class.DEFAULT_CONNECTOR_CLASS.register_simulator_connector_fee_methods(
|
59
|
+
self.exchange_manager.exchange_name, self.connector
|
60
|
+
)
|
55
61
|
|
56
62
|
async def _init_exchange_tentacle(self):
|
57
63
|
origin_ignore_config = self.exchange_manager.ignore_config
|
@@ -61,7 +67,7 @@ class ExchangeSimulator(rest_exchange.RestExchange):
|
|
61
67
|
# initialize a locale exchange_tentacle to be able to access adapters for market statuses
|
62
68
|
if self.exchange_tentacle_class:
|
63
69
|
self.exchange_tentacle = self.exchange_tentacle_class(
|
64
|
-
self.exchange_manager.config, self.exchange_manager,
|
70
|
+
self.exchange_manager.config, self.exchange_manager, self.exchange_config_by_exchange
|
65
71
|
)
|
66
72
|
finally:
|
67
73
|
self.exchange_manager.ignore_config = origin_ignore_config
|
{OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchanges/types/rest_exchange.py
RENAMED
@@ -82,6 +82,7 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
82
82
|
# trigger an error
|
83
83
|
# Name of the price param to give ccxt to edit a stop loss
|
84
84
|
STOP_LOSS_EDIT_PRICE_PARAM = ccxt_enums.ExchangeOrderCCXTUnifiedParams.STOP_LOSS_PRICE.value
|
85
|
+
STOP_LOSS_CREATE_PRICE_PARAM = ccxt_enums.ExchangeOrderCCXTUnifiedParams.STOP_LOSS_PRICE.value
|
85
86
|
"""
|
86
87
|
RestExchange is using its exchange connector to interact with the exchange.
|
87
88
|
It should be used regardless of the exchange or the exchange library (ccxt or other)
|
@@ -559,6 +560,12 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
559
560
|
return exchanges_util.ExchangeMarketStatusFixer(market_status, price_example).market_status
|
560
561
|
return market_status
|
561
562
|
|
563
|
+
def get_max_orders_count(self, symbol: str, order_type: enums.TraderOrderType) -> int:
|
564
|
+
return (
|
565
|
+
constants.DEFAULT_MAX_STOP_ORDERS_COUNT if orders.is_stop_order(order_type)
|
566
|
+
else constants.DEFAULT_MAX_DEFAULT_ORDERS_COUNT
|
567
|
+
)
|
568
|
+
|
562
569
|
def _apply_contract_size(self, value, contract_size):
|
563
570
|
if value is None:
|
564
571
|
return value
|
@@ -1132,7 +1139,11 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
1132
1139
|
async def fetch_exchange_config(
|
1133
1140
|
cls, exchange_config_by_exchange: typing.Optional[dict[str, dict]], exchange_manager
|
1134
1141
|
):
|
1135
|
-
raise NotImplementedError("fetch_exchange_config")
|
1142
|
+
raise NotImplementedError("fetch_exchange_config is not implemented")
|
1143
|
+
|
1144
|
+
@classmethod
|
1145
|
+
def get_custom_url_config(cls, tentacle_config: dict, exchange_name: str) -> dict:
|
1146
|
+
raise NotImplementedError("get_custom_url_config is not implemented")
|
1136
1147
|
|
1137
1148
|
@classmethod
|
1138
1149
|
def supported_autofill_exchanges(cls, tentacle_config):
|
{OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/__init__.py
RENAMED
@@ -45,6 +45,7 @@ from octobot_trading.personal_data.orders import (
|
|
45
45
|
is_stop_order,
|
46
46
|
is_stop_trade_order_type,
|
47
47
|
is_take_profit_order,
|
48
|
+
ensure_orders_limit,
|
48
49
|
get_trade_order_type,
|
49
50
|
create_as_chained_order,
|
50
51
|
ensure_orders_relevancy,
|
@@ -292,6 +293,7 @@ __all__ = [
|
|
292
293
|
"get_pnl_transaction_source_from_order",
|
293
294
|
"is_stop_order",
|
294
295
|
"is_stop_trade_order_type",
|
296
|
+
"ensure_orders_limit",
|
295
297
|
"is_take_profit_order",
|
296
298
|
"get_trade_order_type",
|
297
299
|
"create_as_chained_order",
|
{OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/personal_data/orders/__init__.py
RENAMED
@@ -120,6 +120,7 @@ from octobot_trading.personal_data.orders.order_util import (
|
|
120
120
|
is_stop_order,
|
121
121
|
is_stop_trade_order_type,
|
122
122
|
is_take_profit_order,
|
123
|
+
ensure_orders_limit,
|
123
124
|
get_trade_order_type,
|
124
125
|
create_order_price_trigger,
|
125
126
|
create_as_active_order_using_strategy_if_any,
|
@@ -205,6 +206,8 @@ __all__ = [
|
|
205
206
|
"get_pnl_transaction_source_from_order",
|
206
207
|
"is_stop_order",
|
207
208
|
"is_stop_trade_order_type",
|
209
|
+
"is_take_profit_order",
|
210
|
+
"ensure_orders_limit",
|
208
211
|
"create_as_chained_order",
|
209
212
|
"ensure_orders_relevancy",
|
210
213
|
"get_order_quantity_currency",
|
@@ -517,6 +517,28 @@ def is_take_profit_order(order_type: enums.TraderOrderType):
|
|
517
517
|
]
|
518
518
|
|
519
519
|
|
520
|
+
def ensure_orders_limit(exchange_manager, symbol, added_orders: list[enums.TraderOrderType]):
|
521
|
+
max_limit_orders = exchange_manager.exchange.get_max_orders_count(symbol, enums.TraderOrderType.SELL_LIMIT)
|
522
|
+
max_stop_orders = exchange_manager.exchange.get_max_orders_count(symbol, enums.TraderOrderType.STOP_LOSS)
|
523
|
+
open_orders = exchange_manager.exchange_personal_data.orders_manager.get_open_orders(
|
524
|
+
symbol=symbol, active=None # consider both active and inactive orders of this symbol
|
525
|
+
)
|
526
|
+
stop_orders_count = len([o for o in open_orders if is_stop_order(o.order_type)]) + len(
|
527
|
+
[o_type for o_type in added_orders if is_stop_order(o_type)]
|
528
|
+
)
|
529
|
+
limit_orders_count = len(open_orders) + len(added_orders) - stop_orders_count
|
530
|
+
if limit_orders_count > max_limit_orders:
|
531
|
+
raise errors.MaxOpenOrderReachedForSymbolError(
|
532
|
+
f"{symbol} max open limit orders reached: "
|
533
|
+
f"limit = {max_limit_orders}, orders count = {limit_orders_count}"
|
534
|
+
)
|
535
|
+
if stop_orders_count > max_stop_orders:
|
536
|
+
raise errors.MaxOpenOrderReachedForSymbolError(
|
537
|
+
f"{symbol} max open stop orders reached: "
|
538
|
+
f"limit = {max_stop_orders}, orders count = {stop_orders_count}"
|
539
|
+
)
|
540
|
+
|
541
|
+
|
520
542
|
def get_trade_order_type(order_type: enums.TraderOrderType) -> enums.TradeOrderType:
|
521
543
|
if order_type in (enums.TraderOrderType.BUY_MARKET, enums.TraderOrderType.SELL_MARKET):
|
522
544
|
return enums.TradeOrderType.MARKET
|
@@ -75,6 +75,9 @@ class MockedCCXTConnector(CCXTConnector):
|
|
75
75
|
def _should_authenticate(self):
|
76
76
|
return False
|
77
77
|
|
78
|
+
def register_simulator_connector_fee_methods(self, *args, **kwargs):
|
79
|
+
pass
|
80
|
+
|
78
81
|
|
79
82
|
class MockedRestExchange(DefaultRestExchange):
|
80
83
|
DEFAULT_CONNECTOR_CLASS = MockedCCXTConnector
|
{OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/exchanges/test_exchange_simulator.py
RENAMED
@@ -118,6 +118,7 @@ async def test_init_exchange_tentacle(backtesting_trader):
|
|
118
118
|
init_adapter = mock.Mock()
|
119
119
|
|
120
120
|
class AdapterTentacle:
|
121
|
+
DEFAULT_CONNECTOR_CLASS = mock.Mock()
|
121
122
|
def __init__(self, *_, **__):
|
122
123
|
self.get_adapter_class = mock.Mock(
|
123
124
|
return_value=init_adapter
|
@@ -125,6 +126,7 @@ async def test_init_exchange_tentacle(backtesting_trader):
|
|
125
126
|
self.stop = mock.AsyncMock()
|
126
127
|
|
127
128
|
class NoAdapterTentacle:
|
129
|
+
DEFAULT_CONNECTOR_CLASS = mock.Mock()
|
128
130
|
def __init__(self, *_, **__):
|
129
131
|
self.get_adapter_class = mock.Mock(
|
130
132
|
return_value=None
|
{OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests/personal_data/orders/test_order_util.py
RENAMED
@@ -22,6 +22,7 @@ import pytest
|
|
22
22
|
import octobot_trading.api as api
|
23
23
|
import octobot_trading.enums as enums
|
24
24
|
import octobot_trading.constants as constants
|
25
|
+
import octobot_trading.errors
|
25
26
|
import octobot_trading.personal_data as personal_data
|
26
27
|
import octobot_trading.personal_data.orders.order_util as order_util
|
27
28
|
import octobot_trading.personal_data.orders.order_factory as order_factory
|
@@ -940,3 +941,56 @@ def test_get_split_orders_count_and_increment():
|
|
940
941
|
symbol_market,
|
941
942
|
False
|
942
943
|
) == (0, decimal.Decimal('0'))
|
944
|
+
|
945
|
+
|
946
|
+
def test_ensure_orders_limit():
|
947
|
+
symbol = "BTC/USDT"
|
948
|
+
exchange_manager = mock.Mock(
|
949
|
+
exchange = mock.Mock(
|
950
|
+
get_max_orders_count = mock.Mock(return_value=5),
|
951
|
+
),
|
952
|
+
exchange_personal_data = mock.Mock(
|
953
|
+
orders_manager = mock.Mock(
|
954
|
+
get_open_orders = mock.Mock(
|
955
|
+
return_value=[
|
956
|
+
mock.Mock(order_type=enums.TraderOrderType.BUY_LIMIT),
|
957
|
+
mock.Mock(order_type=enums.TraderOrderType.SELL_LIMIT),
|
958
|
+
mock.Mock(order_type=enums.TraderOrderType.STOP_LOSS),
|
959
|
+
mock.Mock(order_type=enums.TraderOrderType.STOP_LOSS),
|
960
|
+
mock.Mock(order_type=enums.TraderOrderType.STOP_LOSS),
|
961
|
+
],
|
962
|
+
)
|
963
|
+
)
|
964
|
+
)
|
965
|
+
)
|
966
|
+
|
967
|
+
# do not raise
|
968
|
+
order_util.ensure_orders_limit(exchange_manager, symbol, [])
|
969
|
+
assert exchange_manager.exchange.get_max_orders_count.call_count == 2
|
970
|
+
assert exchange_manager.exchange.get_max_orders_count.mock_calls[0].args == (
|
971
|
+
symbol, enums.TraderOrderType.SELL_LIMIT
|
972
|
+
)
|
973
|
+
assert exchange_manager.exchange.get_max_orders_count.mock_calls[1].args == (
|
974
|
+
symbol, enums.TraderOrderType.STOP_LOSS
|
975
|
+
)
|
976
|
+
exchange_manager.exchange_personal_data.orders_manager.get_open_orders.assert_called_once_with(
|
977
|
+
symbol=symbol, active=None
|
978
|
+
)
|
979
|
+
|
980
|
+
# ok added limit orders
|
981
|
+
order_util.ensure_orders_limit(exchange_manager, symbol, [enums.TraderOrderType.BUY_LIMIT]*2)
|
982
|
+
order_util.ensure_orders_limit(exchange_manager, symbol, [enums.TraderOrderType.BUY_LIMIT]*3)
|
983
|
+
# too many added limit orders
|
984
|
+
with pytest.raises(octobot_trading.errors.MaxOpenOrderReachedForSymbolError):
|
985
|
+
order_util.ensure_orders_limit(exchange_manager, symbol, [enums.TraderOrderType.BUY_LIMIT]*4)
|
986
|
+
with pytest.raises(octobot_trading.errors.MaxOpenOrderReachedForSymbolError):
|
987
|
+
order_util.ensure_orders_limit(exchange_manager, symbol, [enums.TraderOrderType.BUY_LIMIT]*10)
|
988
|
+
|
989
|
+
# ok added stop orders
|
990
|
+
order_util.ensure_orders_limit(exchange_manager, symbol, [enums.TraderOrderType.STOP_LOSS])
|
991
|
+
order_util.ensure_orders_limit(exchange_manager, symbol, [enums.TraderOrderType.STOP_LOSS_LIMIT]*2)
|
992
|
+
# too many added stop orders
|
993
|
+
with pytest.raises(octobot_trading.errors.MaxOpenOrderReachedForSymbolError):
|
994
|
+
order_util.ensure_orders_limit(exchange_manager, symbol, [enums.TraderOrderType.STOP_LOSS]*3)
|
995
|
+
with pytest.raises(octobot_trading.errors.MaxOpenOrderReachedForSymbolError):
|
996
|
+
order_util.ensure_orders_limit(exchange_manager, symbol, [enums.TraderOrderType.STOP_LOSS_LIMIT]*10)
|
@@ -317,9 +317,9 @@ class RealExchangeTester:
|
|
317
317
|
end = self.get_time_after_time_frames(start, self.HISTORICAL_CANDLES_TO_FETCH_COUNT)
|
318
318
|
return start, end
|
319
319
|
|
320
|
-
async def get_kline_price(self, **kwargs):
|
320
|
+
async def get_kline_price(self, time_frame=None, **kwargs):
|
321
321
|
async with self.get_exchange_manager() as exchange_manager:
|
322
|
-
return await exchange_manager.exchange.get_kline_price(self.SYMBOL, self.TIME_FRAME, **kwargs)
|
322
|
+
return await exchange_manager.exchange.get_kline_price(self.SYMBOL, time_frame or self.TIME_FRAME, **kwargs)
|
323
323
|
|
324
324
|
async def get_order_book(self, **kwargs):
|
325
325
|
async with self.get_exchange_manager() as exchange_manager:
|
{OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/tests_additional/real_exchanges/test_hollaex.py
RENAMED
@@ -107,7 +107,7 @@ class TestHollaexRealExchangeTester(RealExchangeTester):
|
|
107
107
|
await super().test_get_historical_ohlcv()
|
108
108
|
|
109
109
|
async def test_get_kline_price(self):
|
110
|
-
kline_price = await self.get_kline_price()
|
110
|
+
kline_price = await self.get_kline_price(time_frame=TimeFrames.ONE_HOUR)
|
111
111
|
assert len(kline_price) == 1
|
112
112
|
assert len(kline_price[0]) == 6
|
113
113
|
kline_start_time = kline_price[0][PriceIndexes.IND_PRICE_TIME.value]
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/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
|
{OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.185 → OctoBot-Trading-2.4.187}/octobot_trading/exchange_data/kline/__init__.py
RENAMED
File without changes
|