OctoBot-Trading 2.4.48__tar.gz → 2.4.50__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.48 → OctoBot-Trading-2.4.50}/CHANGELOG.md +9 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/OctoBot_Trading.egg-info/SOURCES.txt +1 -2
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/OctoBot_Trading.egg-info/requires.txt +2 -2
- {OctoBot-Trading-2.4.48/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.50}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/README.md +1 -1
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/constants.py +2 -3
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +3 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +12 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +7 -7
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +33 -9
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/types/rest_exchange.py +5 -1
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/util/exchange_util.py +2 -2
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/mode_config.py +4 -3
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/requirements.txt +2 -2
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/util/test_exchange_util.py +2 -2
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bitfinex.py +2 -2
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bitget.py +13 -7
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_cryptocom.py +2 -2
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_gateio.py +15 -12
- OctoBot-Trading-2.4.48/tests_additional/real_exchanges/test_huobi.py → OctoBot-Trading-2.4.50/tests_additional/real_exchanges/test_htx.py +2 -2
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_kraken.py +2 -2
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_ndax.py +2 -2
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_okx.py +2 -2
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_okx_futures.py +2 -2
- OctoBot-Trading-2.4.48/tests_additional/real_exchanges/test_bittrex.py +0 -167
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/LICENSE +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/contracts.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/exchange.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/enums.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/errors.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/traders/trader.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/util/symbol_details.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/modes_util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/order_util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/position.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/signals/signal_creation.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/signals/util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/orders_storage.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/test_tools/exchange_data.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/setup.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/test_exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/traders/test_trader.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/test_abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/modes/test_modes_util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/test_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/test_order_util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/trades/test_trade_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/trades/test_trade_util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/signals/test_util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_ascendex.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_binance.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bingx.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bithumb.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bitso.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bybit.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_coinbase.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_coinex.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_hollaex.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_kucoin.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_mexc.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_okcoin.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_phemex.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_poloniex.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_upbit.py +0 -0
- {OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/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.50] - 2023-01-18
|
8
|
+
### Updated
|
9
|
+
- [Websocket] Fix websocket reconnection after binance auto disconect
|
10
|
+
|
11
|
+
## [2.4.49] - 2023-01-08
|
12
|
+
### Updated
|
13
|
+
- [Exchanges] replace Huobi by HTX
|
14
|
+
- [CCXT] 4.2.10
|
15
|
+
|
7
16
|
## [2.4.48] - 2023-12-15
|
8
17
|
### Fixed
|
9
18
|
- [Orders] futures orders quantity parsing
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.50
|
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.50](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)
|
@@ -445,7 +445,6 @@ tests_additional/real_exchanges/test_bitget.py
|
|
445
445
|
tests_additional/real_exchanges/test_bithumb.py
|
446
446
|
tests_additional/real_exchanges/test_bitso.py
|
447
447
|
tests_additional/real_exchanges/test_bitstamp.py
|
448
|
-
tests_additional/real_exchanges/test_bittrex.py
|
449
448
|
tests_additional/real_exchanges/test_bybit.py
|
450
449
|
tests_additional/real_exchanges/test_bybit_futures.py
|
451
450
|
tests_additional/real_exchanges/test_coinbase.py
|
@@ -454,7 +453,7 @@ tests_additional/real_exchanges/test_cryptocom.py
|
|
454
453
|
tests_additional/real_exchanges/test_gateio.py
|
455
454
|
tests_additional/real_exchanges/test_hitbtc.py
|
456
455
|
tests_additional/real_exchanges/test_hollaex.py
|
457
|
-
tests_additional/real_exchanges/
|
456
|
+
tests_additional/real_exchanges/test_htx.py
|
458
457
|
tests_additional/real_exchanges/test_kraken.py
|
459
458
|
tests_additional/real_exchanges/test_kucoin.py
|
460
459
|
tests_additional/real_exchanges/test_kucoin_futures.py
|
@@ -1,10 +1,10 @@
|
|
1
|
-
numpy==1.
|
1
|
+
numpy==1.26.3
|
2
2
|
OctoBot-Backtesting<1.10,>=1.9
|
3
3
|
Async-Channel<2.3,>=2.2
|
4
4
|
OctoBot-Commons<1.10,>=1.9
|
5
5
|
OctoBot-Tentacles-Manager<2.10,>=2.9
|
6
6
|
trading-backend>=1.2.7
|
7
|
-
ccxt==4.
|
7
|
+
ccxt==4.2.10
|
8
8
|
cryptography
|
9
9
|
sortedcontainers==2.4.0
|
10
10
|
tinydb==4.5.2
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.50
|
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.50](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.50](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)
|
@@ -82,10 +82,9 @@ FULL_CANDLE_HISTORY_EXCHANGES = [
|
|
82
82
|
"bitfinex2",
|
83
83
|
"bitstamp",
|
84
84
|
"bybit",
|
85
|
-
"gateio",
|
86
85
|
"bingx",
|
87
86
|
"hollaex",
|
88
|
-
"
|
87
|
+
"htx",
|
89
88
|
"kucoin",
|
90
89
|
"okcoin",
|
91
90
|
"okx",
|
@@ -97,7 +96,7 @@ TESTED_EXCHANGES = [
|
|
97
96
|
"binance",
|
98
97
|
"okx",
|
99
98
|
"gateio",
|
100
|
-
"
|
99
|
+
"htx",
|
101
100
|
"bitget",
|
102
101
|
"ascendex",
|
103
102
|
"kucoin",
|
@@ -135,6 +135,9 @@ class OHLCVUpdater(ohlcv_channel.OHLCVProducer):
|
|
135
135
|
self._set_initialized(pair, time_frame, False)
|
136
136
|
# fetch history
|
137
137
|
candles = None
|
138
|
+
if self.channel.exchange_manager.exchange_config is None:
|
139
|
+
# exchange stopped
|
140
|
+
return None
|
138
141
|
try:
|
139
142
|
candles: list = await self._get_init_candles(time_frame, pair)
|
140
143
|
except errors.FailedRequest as e:
|
@@ -66,6 +66,18 @@ class CCXTAdapter(adapters.AbstractAdapter):
|
|
66
66
|
except (KeyError, TypeError):
|
67
67
|
pass
|
68
68
|
|
69
|
+
def _ensure_fees(self, order_or_trade):
|
70
|
+
# call if necessary
|
71
|
+
if order_or_trade.get(enums.ExchangeConstantsOrderColumns.FEE.value) is None:
|
72
|
+
order_or_trade[enums.ExchangeConstantsOrderColumns.FEE.value] = {
|
73
|
+
enums.FeePropertyColumns.COST.value: constants.ZERO,
|
74
|
+
enums.FeePropertyColumns.EXCHANGE_ORIGINAL_COST.value: constants.ZERO,
|
75
|
+
enums.FeePropertyColumns.CURRENCY.value: None,
|
76
|
+
enums.FeePropertyColumns.RATE.value: None,
|
77
|
+
enums.FeePropertyColumns.TYPE.value: ccxt_enums.ExchangeOrderCCXTColumns.TAKER_OR_MAKER.value,
|
78
|
+
enums.FeePropertyColumns.IS_FROM_EXCHANGE.value: True,
|
79
|
+
}
|
80
|
+
|
69
81
|
def _fix_ohlcv_prices(self, ohlcv):
|
70
82
|
for index, value in enumerate(ohlcv[common_enums.PriceIndexes.IND_PRICE_TIME.value + 1:]):
|
71
83
|
ohlcv[index + 1] = float(value)
|
@@ -101,7 +101,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
101
101
|
self.time_frames = self.get_client_time_frames()
|
102
102
|
|
103
103
|
except (ccxt.ExchangeNotAvailable, ccxt.RequestTimeout) as e:
|
104
|
-
raise octobot_trading.errors.UnreachableExchange() from e
|
104
|
+
raise octobot_trading.errors.UnreachableExchange(e) from e
|
105
105
|
except ccxt.AuthenticationError:
|
106
106
|
raise ccxt.AuthenticationError
|
107
107
|
|
@@ -347,10 +347,10 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
347
347
|
pass
|
348
348
|
except ccxt.NotSupported as e:
|
349
349
|
# some exchanges are throwing this error when an order is cancelled (ex: coinbase pro)
|
350
|
-
raise octobot_trading.errors.NotSupported from e
|
350
|
+
raise octobot_trading.errors.NotSupported(e) from e
|
351
351
|
except ccxt.ExchangeError as e:
|
352
352
|
# something went wrong and ccxt did not expect it
|
353
|
-
raise octobot_trading.errors.FailedRequest from e
|
353
|
+
raise octobot_trading.errors.FailedRequest(e) from e
|
354
354
|
else:
|
355
355
|
# When fetch_order is not supported, uses get_open_orders and extract order id
|
356
356
|
open_orders = await self.get_open_orders(symbol=symbol)
|
@@ -391,7 +391,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
391
391
|
)
|
392
392
|
except ccxt.NotSupported as e:
|
393
393
|
# fetch_closed_orders is not supported
|
394
|
-
raise octobot_trading.errors.NotSupported from e
|
394
|
+
raise octobot_trading.errors.NotSupported(e) from e
|
395
395
|
|
396
396
|
async def get_my_recent_trades(self, symbol: str = None, since: int = None,
|
397
397
|
limit: int = None, **kwargs: dict) -> list:
|
@@ -543,9 +543,9 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
543
543
|
return enums.OrderStatus.CANCELED
|
544
544
|
except ccxt.OrderNotFound as e:
|
545
545
|
self.logger.debug(f"Trying to cancel order with id {exchange_order_id} but order was not found")
|
546
|
-
raise octobot_trading.errors.OrderCancelError from e
|
546
|
+
raise octobot_trading.errors.OrderCancelError(e) from e
|
547
547
|
except (ccxt.NotSupported, octobot_trading.errors.NotSupported) as e:
|
548
|
-
raise octobot_trading.errors.NotSupported from e
|
548
|
+
raise octobot_trading.errors.NotSupported(e) from e
|
549
549
|
except Exception as e:
|
550
550
|
self.logger.exception(e, True, f"Unexpected error when cancelling order with exchange id: "
|
551
551
|
f"{exchange_order_id} failed to cancel | {e} ({e.__class__.__name__})")
|
@@ -817,6 +817,6 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
817
817
|
# use 2 index to get the caller of the context manager
|
818
818
|
caller_function_name = inspect.stack()[2].function
|
819
819
|
exchanges.log_time_sync_error(self.logger, self.name, err, caller_function_name)
|
820
|
-
raise octobot_trading.errors.FailedRequest from err
|
820
|
+
raise octobot_trading.errors.FailedRequest(err) from err
|
821
821
|
except ccxt.RequestTimeout as e:
|
822
822
|
raise octobot_trading.errors.FailedRequest(f"Request timeout: {e}") from e
|
@@ -536,13 +536,18 @@ class CCXTWebsocketConnector(abstract_websocket_exchange.AbstractWebsocketExchan
|
|
536
536
|
ws_des = f"{watch_func.__name__} {g_kwargs}"
|
537
537
|
subsequent_disconnections = 0
|
538
538
|
already_got_feed_stopping_error = False
|
539
|
+
already_got_closed_by_user_error = False
|
539
540
|
spamming_logs_warning_interval = 5000
|
540
541
|
spamming_logs_debug_interval = 1000
|
541
542
|
while not self.should_stop:
|
542
543
|
try:
|
543
544
|
update_data = await watch_func(*g_args, **g_kwargs)
|
545
|
+
|
544
546
|
self._last_message_time = time.time()
|
547
|
+
if subsequent_disconnections > 0:
|
548
|
+
self.logger.debug(f"Reconnected to {ws_des}")
|
545
549
|
subsequent_disconnections = 0
|
550
|
+
already_got_closed_by_user_error = False
|
546
551
|
if update_data:
|
547
552
|
# Use a copy of the update data as it will be edited by adapters.
|
548
553
|
# We should avoid editing the original object since it is also used in ccxt internally buffers
|
@@ -600,15 +605,34 @@ class CCXTWebsocketConnector(abstract_websocket_exchange.AbstractWebsocketExchan
|
|
600
605
|
)
|
601
606
|
return
|
602
607
|
except Exception as err:
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
self.
|
608
|
+
count_error = True
|
609
|
+
if isinstance(err, ccxt.ExchangeClosedByUser):
|
610
|
+
if self.should_stop:
|
611
|
+
# normal when stopping websocket
|
612
|
+
self.logger.debug(
|
613
|
+
f"Disconnected {ws_des}: connection closed as {self.get_name()} is stopping ({err})"
|
614
|
+
)
|
615
|
+
return
|
616
|
+
# happening when auto-stopping websocket (calling self._close_exchange_to_force_reconnect)
|
617
|
+
# from another task: current task also raised ccxt.ExchangeClosedByUser
|
618
|
+
# this is normal as long as it happens only once after a reconnection
|
619
|
+
if not already_got_closed_by_user_error:
|
620
|
+
count_error = False
|
621
|
+
self.logger.debug(
|
622
|
+
f"{ws_des} connection automatically closed, reconnecting in {self.LONG_RECONNECT_DELAY} "
|
623
|
+
f"seconds ({err})"
|
624
|
+
)
|
625
|
+
already_got_closed_by_user_error = True
|
626
|
+
if count_error:
|
627
|
+
error_count = self._increment_error_counter(g_kwargs.get("time_frame"), err)
|
628
|
+
error_message = f"Unexpected error when handling {ws_des} feed: {err} ({err.__class__.__name__}) " \
|
629
|
+
f"({error_count} times)"
|
630
|
+
if error_count == 1:
|
631
|
+
self.logger.exception(err, True, error_message)
|
632
|
+
elif error_count % spamming_logs_warning_interval == 0:
|
633
|
+
self.logger.warning(error_message)
|
634
|
+
elif error_count % spamming_logs_debug_interval == 0:
|
635
|
+
self.logger.debug(error_message)
|
612
636
|
await asyncio.sleep(self.LONG_RECONNECT_DELAY) # avoid spamming
|
613
637
|
subsequent_disconnections += 1 # wait for a longer time before the next reconnect
|
614
638
|
# self.client might have changed
|
{OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/types/rest_exchange.py
RENAMED
@@ -548,7 +548,11 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
548
548
|
async def _ensure_order_completeness(
|
549
549
|
self, raw_order, symbol, since=None, limit=None, trades_by_exchange_order_id=None, **kwargs
|
550
550
|
):
|
551
|
-
if
|
551
|
+
if (
|
552
|
+
raw_order is None
|
553
|
+
or not self.REQUIRE_ORDER_FEES_FROM_TRADES
|
554
|
+
or not exchanges_util.is_missing_trading_fees(raw_order)
|
555
|
+
):
|
552
556
|
return raw_order
|
553
557
|
trades_by_exchange_order_id = trades_by_exchange_order_id or await self._get_trades_by_exchange_order_id(
|
554
558
|
symbol=symbol, since=since, limit=limit, **kwargs
|
{OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/octobot_trading/exchanges/util/exchange_util.py
RENAMED
@@ -156,7 +156,7 @@ def _get_docs_url():
|
|
156
156
|
import octobot.constants
|
157
157
|
return octobot.constants.OCTOBOT_DOCS_URL
|
158
158
|
except ImportError:
|
159
|
-
return "https://www.octobot.cloud/guides"
|
159
|
+
return "https://www.octobot.cloud/en/guides"
|
160
160
|
|
161
161
|
|
162
162
|
def _get_exchanges_docs_url():
|
@@ -164,7 +164,7 @@ def _get_exchanges_docs_url():
|
|
164
164
|
import octobot.constants
|
165
165
|
return octobot.constants.EXCHANGES_DOCS_URL
|
166
166
|
except ImportError:
|
167
|
-
return "https://www.octobot.cloud/guides/exchanges"
|
167
|
+
return "https://www.octobot.cloud/en/guides/exchanges"
|
168
168
|
|
169
169
|
|
170
170
|
def _get_time_sync_error_message(exchange_name, caller_name):
|
@@ -100,7 +100,8 @@ def get_order_amount_value_desc():
|
|
100
100
|
f"holdings associated to the current traded symbol; " \
|
101
101
|
f"5{dsl.QuantityType.TRADED_SYMBOLS_ASSETS_PERCENT.value} to trade 5% of the available " \
|
102
102
|
f"holdings associated to all configured trading pairs. " \
|
103
|
-
f"Leave empty to auto-compute the amount."
|
103
|
+
f"Leave empty to auto-compute the amount. Checkout the order amounts syntax from trading modes guides " \
|
104
|
+
f"for more details."
|
104
105
|
|
105
106
|
|
106
107
|
def user_select_order_amount(trading_mode, inputs: dict, include_buy=True, include_sell=True,
|
@@ -108,7 +109,7 @@ def user_select_order_amount(trading_mode, inputs: dict, include_buy=True, inclu
|
|
108
109
|
if include_buy:
|
109
110
|
trading_mode.UI.user_input(
|
110
111
|
constants.CONFIG_BUY_ORDER_AMOUNT, common_enums.UserInputTypes.TEXT, "", inputs,
|
111
|
-
title=_get_order_amount_title("buy"),
|
112
|
+
title=_get_order_amount_title("buy/entry"),
|
112
113
|
other_schema_values={"minLength": 0},
|
113
114
|
editor_options={
|
114
115
|
common_enums.UserInputOtherSchemaValuesTypes.DEPENDENCIES.value: buy_dependencies
|
@@ -117,7 +118,7 @@ def user_select_order_amount(trading_mode, inputs: dict, include_buy=True, inclu
|
|
117
118
|
if include_sell:
|
118
119
|
trading_mode.UI.user_input(
|
119
120
|
constants.CONFIG_SELL_ORDER_AMOUNT, common_enums.UserInputTypes.TEXT, "", inputs,
|
120
|
-
title=_get_order_amount_title("sell"),
|
121
|
+
title=_get_order_amount_title("sell/exit"),
|
121
122
|
other_schema_values={"minLength": 0},
|
122
123
|
editor_options={
|
123
124
|
common_enums.UserInputOtherSchemaValuesTypes.DEPENDENCIES.value: sell_dependencies
|
@@ -1,4 +1,4 @@
|
|
1
|
-
numpy==1.
|
1
|
+
numpy==1.26.3
|
2
2
|
|
3
3
|
# Drakkar-Software requirements
|
4
4
|
OctoBot-Backtesting>=1.9, <1.10
|
@@ -8,7 +8,7 @@ OctoBot-Tentacles-Manager>=2.9, <2.10
|
|
8
8
|
trading-backend>=1.2.7
|
9
9
|
|
10
10
|
# Exchange connection requirements
|
11
|
-
ccxt==4.
|
11
|
+
ccxt==4.2.10 # always ensure real exchanges tests (in tests_additional and authenticated exchange tests) are passing before changing the ccxt version
|
12
12
|
|
13
13
|
cryptography # Never specify a version (managed by https://github.com/Drakkar-Software/OctoBot-PyPi-Linux-Deployer)
|
14
14
|
|
{OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests/exchanges/util/test_exchange_util.py
RENAMED
@@ -80,7 +80,7 @@ async def test_is_compatible_account_with_checked_exchange(exchange_config, tent
|
|
80
80
|
|
81
81
|
|
82
82
|
def test_get_partners_explanation_message():
|
83
|
-
assert ".cloud/guides" in exchanges.get_partners_explanation_message()
|
83
|
+
assert ".cloud/en/guides" in exchanges.get_partners_explanation_message()
|
84
84
|
|
85
85
|
|
86
86
|
def test_log_time_sync_error():
|
@@ -90,7 +90,7 @@ def test_log_time_sync_error():
|
|
90
90
|
assert "exchange_name".capitalize() in args
|
91
91
|
assert "error" in args
|
92
92
|
assert "hello call" in args
|
93
|
-
assert ".cloud/guides" in args
|
93
|
+
assert ".cloud/en/guides" in args
|
94
94
|
|
95
95
|
|
96
96
|
@pytest.mark.asyncio
|
{OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bitfinex.py
RENAMED
@@ -184,6 +184,6 @@ class TestBitfinexRealExchangeTester(RealExchangeTester):
|
|
184
184
|
assert ticker[Ectc.LAST.value]
|
185
185
|
assert ticker[Ectc.PREVIOUS_CLOSE.value] is None
|
186
186
|
assert ticker[Ectc.BASE_VOLUME.value]
|
187
|
-
assert ticker[Ectc.TIMESTAMP.value]
|
187
|
+
assert ticker[Ectc.TIMESTAMP.value] is None # will trigger an 'Ignored incomplete ticker'
|
188
188
|
# open is None on this exchange
|
189
|
-
RealExchangeTester.check_ticker_typing(ticker)
|
189
|
+
RealExchangeTester.check_ticker_typing(ticker, check_timestamp=False)
|
{OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_bitget.py
RENAMED
@@ -20,6 +20,7 @@ from octobot_trading.enums import ExchangeConstantsMarketStatusColumns as Ecmsc,
|
|
20
20
|
ExchangeConstantsOrderBookInfoColumns as Ecobic, ExchangeConstantsOrderColumns as Ecoc, \
|
21
21
|
ExchangeConstantsTickersColumns as Ectc
|
22
22
|
from tests_additional.real_exchanges.real_exchange_tester import RealExchangeTester
|
23
|
+
import octobot_trading.errors as errors
|
23
24
|
from tests_additional.real_exchanges import get_exchange_manager
|
24
25
|
# required to catch async loop context exceptions
|
25
26
|
from tests import event_loop
|
@@ -80,7 +81,7 @@ class TestBitgetRealExchangeTester(RealExchangeTester):
|
|
80
81
|
async def test_get_symbol_prices(self):
|
81
82
|
# without limit
|
82
83
|
symbol_prices = await self.get_symbol_prices()
|
83
|
-
assert len(symbol_prices) ==
|
84
|
+
assert len(symbol_prices) == 100
|
84
85
|
# check candles order (oldest first)
|
85
86
|
self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
|
86
87
|
# check last candle is the current candle
|
@@ -99,9 +100,12 @@ class TestBitgetRealExchangeTester(RealExchangeTester):
|
|
99
100
|
async def test_get_historical_symbol_prices(self):
|
100
101
|
# try with since and limit (used in data collector)
|
101
102
|
for limit in (50, None):
|
102
|
-
|
103
|
-
|
104
|
-
|
103
|
+
if limit is None:
|
104
|
+
with pytest.raises(errors.FailedRequest):
|
105
|
+
# not supported
|
106
|
+
await self.get_symbol_prices(since=self.CANDLE_SINCE, limit=limit)
|
107
|
+
continue
|
108
|
+
symbol_prices = await self.get_symbol_prices(since=self.CANDLE_SINCE, limit=limit)
|
105
109
|
if limit:
|
106
110
|
assert len(symbol_prices) == limit
|
107
111
|
else:
|
@@ -111,9 +115,11 @@ class TestBitgetRealExchangeTester(RealExchangeTester):
|
|
111
115
|
# check that fetched candles are historical candles
|
112
116
|
max_candle_time = self.get_time_after_time_frames(self.CANDLE_SINCE_SEC, len(symbol_prices))
|
113
117
|
assert max_candle_time <= self.get_time()
|
114
|
-
|
115
|
-
|
116
|
-
|
118
|
+
for candle in symbol_prices:
|
119
|
+
assert self.CANDLE_SINCE_SEC <= candle[PriceIndexes.IND_PRICE_TIME.value]
|
120
|
+
|
121
|
+
# invalid (since param not respected)
|
122
|
+
assert candle[PriceIndexes.IND_PRICE_TIME.value] > max_candle_time
|
117
123
|
|
118
124
|
async def test_get_kline_price(self):
|
119
125
|
kline_price = await self.get_kline_price()
|
{OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_cryptocom.py
RENAMED
@@ -114,9 +114,9 @@ class TestCryptoComRealExchangeTester(RealExchangeTester):
|
|
114
114
|
async def test_get_order_book(self):
|
115
115
|
order_book = await self.get_order_book()
|
116
116
|
assert len(order_book[Ecobic.ASKS.value]) == 5
|
117
|
-
assert len(order_book[Ecobic.ASKS.value][0]) ==
|
117
|
+
assert len(order_book[Ecobic.ASKS.value][0]) == 3
|
118
118
|
assert len(order_book[Ecobic.BIDS.value]) == 5
|
119
|
-
assert len(order_book[Ecobic.BIDS.value][0]) ==
|
119
|
+
assert len(order_book[Ecobic.BIDS.value][0]) == 3
|
120
120
|
|
121
121
|
async def test_get_recent_trades(self):
|
122
122
|
recent_trades = await self.get_recent_trades()
|
{OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_gateio.py
RENAMED
@@ -84,18 +84,21 @@ class TestGateIORealExchangeTester(RealExchangeTester):
|
|
84
84
|
async def test_get_historical_symbol_prices(self):
|
85
85
|
# try with since and limit (used in data collector)
|
86
86
|
for limit in (50, None):
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
#
|
93
|
-
|
94
|
-
#
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
87
|
+
with pytest.raises(errors.FailedRequest):
|
88
|
+
await self.get_symbol_prices(since=self.CANDLE_SINCE, limit=limit)
|
89
|
+
# not supported anymore (Candlestick too long ago. Maximum 10000 points ago are allowed)
|
90
|
+
# symbol_prices = await self.get_symbol_prices(since=self.CANDLE_SINCE, limit=limit)
|
91
|
+
# if limit:
|
92
|
+
# assert len(symbol_prices) == limit
|
93
|
+
# else:
|
94
|
+
# assert len(symbol_prices) > 5
|
95
|
+
# # check candles order (oldest first)
|
96
|
+
# self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
|
97
|
+
# # check that fetched candles are historical candles
|
98
|
+
# max_candle_time = self.get_time_after_time_frames(self.CANDLE_SINCE_SEC, len(symbol_prices))
|
99
|
+
# assert max_candle_time <= self.get_time()
|
100
|
+
# for candle in symbol_prices:
|
101
|
+
# assert self.CANDLE_SINCE_SEC <= candle[PriceIndexes.IND_PRICE_TIME.value] <= max_candle_time
|
99
102
|
|
100
103
|
async def test_get_kline_price(self):
|
101
104
|
kline_price = await self.get_kline_price()
|
@@ -28,8 +28,8 @@ from tests import event_loop
|
|
28
28
|
pytestmark = pytest.mark.asyncio
|
29
29
|
|
30
30
|
|
31
|
-
class
|
32
|
-
EXCHANGE_NAME = "
|
31
|
+
class TestHTXRealExchangeTester(RealExchangeTester):
|
32
|
+
EXCHANGE_NAME = "htx"
|
33
33
|
SYMBOL = "BTC/USDT"
|
34
34
|
SYMBOL_2 = "ETH/BTC"
|
35
35
|
SYMBOL_3 = "XRP/BTC"
|
{OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_kraken.py
RENAMED
@@ -170,5 +170,5 @@ class TestKrakenRealExchangeTester(RealExchangeTester):
|
|
170
170
|
assert ticker[Ectc.LAST.value]
|
171
171
|
assert ticker[Ectc.PREVIOUS_CLOSE.value] is None
|
172
172
|
assert ticker[Ectc.BASE_VOLUME.value]
|
173
|
-
assert ticker[Ectc.TIMESTAMP.value]
|
174
|
-
RealExchangeTester.check_ticker_typing(ticker)
|
173
|
+
assert ticker[Ectc.TIMESTAMP.value] is None # will trigger an 'Ignored incomplete ticker'
|
174
|
+
RealExchangeTester.check_ticker_typing(ticker, check_timestamp=False)
|
{OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_ndax.py
RENAMED
@@ -120,9 +120,9 @@ class TestNdaxRealExchangeTester(RealExchangeTester):
|
|
120
120
|
async def test_get_order_book(self):
|
121
121
|
order_book = await self.get_order_book()
|
122
122
|
assert len(order_book[Ecobic.ASKS.value]) == 5
|
123
|
-
assert len(order_book[Ecobic.ASKS.value][0]) ==
|
123
|
+
assert len(order_book[Ecobic.ASKS.value][0]) == 3
|
124
124
|
assert len(order_book[Ecobic.BIDS.value]) == 5
|
125
|
-
assert len(order_book[Ecobic.BIDS.value][0]) ==
|
125
|
+
assert len(order_book[Ecobic.BIDS.value][0]) == 3
|
126
126
|
|
127
127
|
async def test_get_recent_trades(self):
|
128
128
|
recent_trades = await self.get_recent_trades()
|
{OctoBot-Trading-2.4.48 → OctoBot-Trading-2.4.50}/tests_additional/real_exchanges/test_okx.py
RENAMED
@@ -124,9 +124,9 @@ class TestOkxRealExchangeTester(RealExchangeTester):
|
|
124
124
|
async def test_get_order_book(self):
|
125
125
|
order_book = await self.get_order_book()
|
126
126
|
assert len(order_book[Ecobic.ASKS.value]) == 5
|
127
|
-
assert len(order_book[Ecobic.ASKS.value][0]) ==
|
127
|
+
assert len(order_book[Ecobic.ASKS.value][0]) == 3
|
128
128
|
assert len(order_book[Ecobic.BIDS.value]) == 5
|
129
|
-
assert len(order_book[Ecobic.BIDS.value][0]) ==
|
129
|
+
assert len(order_book[Ecobic.BIDS.value][0]) == 3
|
130
130
|
|
131
131
|
async def test_get_recent_trades(self):
|
132
132
|
recent_trades = await self.get_recent_trades()
|
@@ -123,9 +123,9 @@ class TestOkxFuturesRealExchangeTester(RealFuturesExchangeTester):
|
|
123
123
|
async def test_get_order_book(self):
|
124
124
|
order_book = await self.get_order_book()
|
125
125
|
assert len(order_book[Ecobic.ASKS.value]) == 5
|
126
|
-
assert len(order_book[Ecobic.ASKS.value][0]) ==
|
126
|
+
assert len(order_book[Ecobic.ASKS.value][0]) == 3
|
127
127
|
assert len(order_book[Ecobic.BIDS.value]) == 5
|
128
|
-
assert len(order_book[Ecobic.BIDS.value][0]) ==
|
128
|
+
assert len(order_book[Ecobic.BIDS.value][0]) == 3
|
129
129
|
|
130
130
|
async def test_get_recent_trades(self):
|
131
131
|
recent_trades = await self.get_recent_trades()
|