OctoBot-Trading 2.4.17__tar.gz → 2.4.18__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.17 → OctoBot-Trading-2.4.18}/CHANGELOG.md +6 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/OctoBot_Trading.egg-info/SOURCES.txt +1 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/OctoBot_Trading.egg-info/requires.txt +1 -1
- {OctoBot-Trading-2.4.17/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.18}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/README.md +1 -1
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/constants.py +3 -3
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/adapters/abstract_adapter.py +8 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +18 -1
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/abstract_storage.py +20 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/candles_storage.py +1 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/orders_storage.py +1 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/portfolio_storage.py +1 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/trades_storage.py +2 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/transactions_storage.py +1 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/requirements.txt +1 -1
- OctoBot-Trading-2.4.18/tests_additional/real_exchanges/test_bingx.py +171 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_bybit.py +2 -2
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_bybit_futures.py +3 -3
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_coinbase.py +8 -5
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_hitbtc.py +4 -2
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_okx.py +2 -1
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_okx_futures.py +2 -1
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/LICENSE +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/contracts.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/exchange.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/enums.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/errors.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/traders/trader.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/util/exchange_util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/mode_config.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/modes_util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/order_util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/position.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/signals/signal_creation.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/signals/util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/test_tools/exchange_data.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/setup.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/test_exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/traders/test_trader.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/exchanges/util/test_exchange_util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/test_abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/test_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/test_order_util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/trades/test_trade_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/signals/test_util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_ascendex.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_binance.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_bitget.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_bithumb.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_bitso.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_bittrex.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_coinex.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_gateio.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_hollaex.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_huobi.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_huobipro.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_kraken.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_kucoin.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_mexc.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_ndax.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_okcoin.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_phemex.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_poloniex.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_upbit.py +0 -0
- {OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,12 @@ 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.18] - 2023-08-17
|
8
|
+
### Updated
|
9
|
+
- [CCXT] to version 4.0.65
|
10
|
+
### Fixed
|
11
|
+
- [Storage] handle corrupted db files auto fix
|
12
|
+
|
7
13
|
## [2.4.17] - 2023-08-16
|
8
14
|
### Added
|
9
15
|
- [Orders] %s and %t amounts
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.18
|
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.18](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)
|
@@ -435,6 +435,7 @@ tests_additional/real_exchanges/real_futures_exchange_tester.py
|
|
435
435
|
tests_additional/real_exchanges/test_ascendex.py
|
436
436
|
tests_additional/real_exchanges/test_binance.py
|
437
437
|
tests_additional/real_exchanges/test_binance_futures.py
|
438
|
+
tests_additional/real_exchanges/test_bingx.py
|
438
439
|
tests_additional/real_exchanges/test_bitfinex.py
|
439
440
|
tests_additional/real_exchanges/test_bitget.py
|
440
441
|
tests_additional/real_exchanges/test_bithumb.py
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.18
|
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.18](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.18](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)
|
@@ -78,7 +78,7 @@ FULL_CANDLE_HISTORY_EXCHANGES = [
|
|
78
78
|
"bitstamp",
|
79
79
|
"bybit",
|
80
80
|
"gateio",
|
81
|
-
"
|
81
|
+
"bingx",
|
82
82
|
"hollaex",
|
83
83
|
"huobi",
|
84
84
|
"huobipro",
|
@@ -103,8 +103,8 @@ TESTED_EXCHANGES = [
|
|
103
103
|
"hollaex",
|
104
104
|
"mexc",
|
105
105
|
]
|
106
|
-
DEFAULT_FUTURE_EXCHANGES = ["
|
107
|
-
SIMULATOR_TESTED_EXCHANGES = ["bitfinex2", "bithumb", "bitstamp", "bittrex", "coinex",
|
106
|
+
DEFAULT_FUTURE_EXCHANGES = ["bybit"]
|
107
|
+
SIMULATOR_TESTED_EXCHANGES = ["bingx", "bitfinex2", "bithumb", "bitstamp", "bittrex", "coinex",
|
108
108
|
"hitbtc", "kraken", "poloniex", "bitso", "ndax", "upbit",
|
109
109
|
"wavesexchange"]
|
110
110
|
|
@@ -69,6 +69,11 @@ class AbstractAdapter:
|
|
69
69
|
fixed = self.fix_ticker(raw, **kwargs)
|
70
70
|
return self.parse_ticker(fixed, **kwargs)
|
71
71
|
|
72
|
+
@_adapter
|
73
|
+
def adapt_ticker_from_kline(self, raw, symbol, **kwargs):
|
74
|
+
fixed = self.create_ticker_from_kline(raw, symbol, **kwargs)
|
75
|
+
return self.parse_ticker(fixed, **kwargs)
|
76
|
+
|
72
77
|
@_adapter
|
73
78
|
def adapt_balance(self, raw, **kwargs):
|
74
79
|
fixed = self.fix_balance(raw, **kwargs)
|
@@ -166,6 +171,9 @@ class AbstractAdapter:
|
|
166
171
|
def parse_ticker(self, fixed, **kwargs):
|
167
172
|
raise NotImplementedError("parse_ticker is not implemented")
|
168
173
|
|
174
|
+
def create_ticker_from_kline(self, kline, symbol, **kwargs):
|
175
|
+
raise NotImplementedError("create_ticker_from_kline is not implemented")
|
176
|
+
|
169
177
|
def fix_balance(self, raw, **kwargs):
|
170
178
|
# add generic logic if necessary
|
171
179
|
return raw
|
@@ -109,6 +109,23 @@ class CCXTAdapter(adapters.AbstractAdapter):
|
|
109
109
|
# CCXT standard ticker parsing logic
|
110
110
|
return fixed
|
111
111
|
|
112
|
+
def create_ticker_from_kline(self, kline, symbol, **kwargs):
|
113
|
+
return {
|
114
|
+
enums.ExchangeConstantsTickersColumns.SYMBOL.value: symbol,
|
115
|
+
enums.ExchangeConstantsTickersColumns.TIMESTAMP.value: kline[common_enums.PriceIndexes.IND_PRICE_TIME.value],
|
116
|
+
enums.ExchangeConstantsTickersColumns.OPEN.value: kline[common_enums.PriceIndexes.IND_PRICE_OPEN.value],
|
117
|
+
enums.ExchangeConstantsTickersColumns.HIGH.value: kline[common_enums.PriceIndexes.IND_PRICE_HIGH.value],
|
118
|
+
enums.ExchangeConstantsTickersColumns.LOW.value: kline[common_enums.PriceIndexes.IND_PRICE_LOW.value],
|
119
|
+
enums.ExchangeConstantsTickersColumns.CLOSE.value: kline[common_enums.PriceIndexes.IND_PRICE_CLOSE.value],
|
120
|
+
enums.ExchangeConstantsTickersColumns.BASE_VOLUME.value: kline[common_enums.PriceIndexes.IND_PRICE_VOL.value],
|
121
|
+
enums.ExchangeConstantsTickersColumns.LAST.value: kline[common_enums.PriceIndexes.IND_PRICE_CLOSE.value],
|
122
|
+
enums.ExchangeConstantsTickersColumns.BID.value: None,
|
123
|
+
enums.ExchangeConstantsTickersColumns.BID_VOLUME.value: None,
|
124
|
+
enums.ExchangeConstantsTickersColumns.ASK.value: None,
|
125
|
+
enums.ExchangeConstantsTickersColumns.ASK_VOLUME.value: None,
|
126
|
+
enums.ExchangeConstantsTickersColumns.PREVIOUS_CLOSE.value: None,
|
127
|
+
}
|
128
|
+
|
112
129
|
def fix_balance(self, raw, **kwargs):
|
113
130
|
fixed = super().fix_balance(raw, **kwargs)
|
114
131
|
# remove not currency specific keys
|
@@ -237,7 +254,7 @@ class CCXTAdapter(adapters.AbstractAdapter):
|
|
237
254
|
f"{fixed.get(ccxt_enums.ExchangePositionCCXTColumns.UNREALISED_PNL.value, 0)}"),
|
238
255
|
enums.ExchangeConstantsPositionColumns.REALISED_PNL.value: constants.ZERO if is_empty else
|
239
256
|
decimal.Decimal(
|
240
|
-
f"{fixed.get(ccxt_enums.ExchangePositionCCXTColumns.REALISED_PNL.value, 0)}"),
|
257
|
+
f"{fixed.get(ccxt_enums.ExchangePositionCCXTColumns.REALISED_PNL.value, 0) or 0}"),
|
241
258
|
enums.ExchangeConstantsPositionColumns.LIQUIDATION_PRICE.value: liquidation_price,
|
242
259
|
enums.ExchangeConstantsPositionColumns.MARK_PRICE.value: constants.ZERO if is_empty else
|
243
260
|
decimal.Decimal(
|
{OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/abstract_storage.py
RENAMED
@@ -169,3 +169,23 @@ class AbstractStorage:
|
|
169
169
|
elif isinstance(val, types.FunctionType):
|
170
170
|
raise ValueError(f"{val.__name__} is a function, it can't be serialized")
|
171
171
|
return sanitized
|
172
|
+
|
173
|
+
@staticmethod
|
174
|
+
def hard_reset_and_retry_if_necessary(fn):
|
175
|
+
"""
|
176
|
+
Will retry the given function if a database hard reset error is raised
|
177
|
+
Warning: when it happens, will also completely reset the database
|
178
|
+
"""
|
179
|
+
async def wrapper(*args, **kwargs):
|
180
|
+
try:
|
181
|
+
return await fn(*args, **kwargs)
|
182
|
+
except Exception as err:
|
183
|
+
database = args[0]._get_db() # pylint: disable=protected-access
|
184
|
+
if database.is_hard_reset_error(err):
|
185
|
+
logging.get_logger(args[0].__class__.__name__).warning(
|
186
|
+
f"Resetting database due to [{err}] error"
|
187
|
+
)
|
188
|
+
await database.hard_reset()
|
189
|
+
return await fn(*args, **kwargs)
|
190
|
+
raise
|
191
|
+
return wrapper
|
{OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/candles_storage.py
RENAMED
@@ -51,6 +51,7 @@ class CandlesStorage(abstract_storage.AbstractStorage):
|
|
51
51
|
commons_enums.InitializationEventExchangeTopics.CANDLES.value)
|
52
52
|
await self.store_candles()
|
53
53
|
|
54
|
+
@abstract_storage.AbstractStorage.hard_reset_and_retry_if_necessary
|
54
55
|
async def store_candles(self):
|
55
56
|
if not self.enabled:
|
56
57
|
return
|
@@ -66,6 +66,7 @@ class OrdersStorage(abstract_storage.AbstractStorage):
|
|
66
66
|
await self._add_historical_open_orders(order, update_type)
|
67
67
|
await self.trigger_debounced_flush()
|
68
68
|
|
69
|
+
@abstract_storage.AbstractStorage.hard_reset_and_retry_if_necessary
|
69
70
|
async def _update_history(self):
|
70
71
|
await self._get_db().replace_all(
|
71
72
|
self.HISTORY_TABLE,
|
{OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/portfolio_storage.py
RENAMED
@@ -29,6 +29,7 @@ class PortfolioStorage(abstract_storage.AbstractStorage):
|
|
29
29
|
PRICE_INIT_TIMEOUT = 30
|
30
30
|
HISTORY_TABLE = commons_enums.RunDatabases.HISTORICAL_PORTFOLIO_VALUE.value
|
31
31
|
|
32
|
+
@abstract_storage.AbstractStorage.hard_reset_and_retry_if_necessary
|
32
33
|
async def store_history(self, reset=False):
|
33
34
|
if not self.enabled:
|
34
35
|
return
|
@@ -28,6 +28,7 @@ class TradesStorage(abstract_storage.AbstractStorage):
|
|
28
28
|
LIVE_CHANNEL = channels_name.OctoBotTradingChannelsName.TRADES_CHANNEL.value
|
29
29
|
HISTORY_TABLE = commons_enums.DBTables.TRADES.value
|
30
30
|
|
31
|
+
@abstract_storage.AbstractStorage.hard_reset_and_retry_if_necessary
|
31
32
|
async def _live_callback(
|
32
33
|
self,
|
33
34
|
exchange: str,
|
@@ -65,6 +66,7 @@ class TradesStorage(abstract_storage.AbstractStorage):
|
|
65
66
|
await authenticator.update_trades(history, self.exchange_manager.exchange_name, reset)
|
66
67
|
self._to_update_auth_data_ids_buffer.clear()
|
67
68
|
|
69
|
+
@abstract_storage.AbstractStorage.hard_reset_and_retry_if_necessary
|
68
70
|
async def _store_history(self):
|
69
71
|
database = self._get_db()
|
70
72
|
await database.replace_all(
|
{OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/storage/transactions_storage.py
RENAMED
@@ -24,6 +24,7 @@ class TransactionsStorage(abstract_storage.AbstractStorage):
|
|
24
24
|
IS_LIVE_CONSUMER = False
|
25
25
|
HISTORY_TABLE = commons_enums.DBTables.TRANSACTIONS.value
|
26
26
|
|
27
|
+
@abstract_storage.AbstractStorage.hard_reset_and_retry_if_necessary
|
27
28
|
async def _store_history(self):
|
28
29
|
transactions = [
|
29
30
|
transaction
|
@@ -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==
|
11
|
+
ccxt==4.0.65 # 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
|
|
@@ -0,0 +1,171 @@
|
|
1
|
+
# Drakkar-Software OctoBot-Trading
|
2
|
+
# Copyright (c) Drakkar-Software, All rights reserved.
|
3
|
+
#
|
4
|
+
# This library is free software; you can redistribute it and/or
|
5
|
+
# modify it under the terms of the GNU Lesser General Public
|
6
|
+
# License as published by the Free Software Foundation; either
|
7
|
+
# version 3.0 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This library is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU Lesser General Public
|
15
|
+
# License along with this library.
|
16
|
+
import pytest
|
17
|
+
|
18
|
+
from octobot_commons.enums import TimeFrames, PriceIndexes
|
19
|
+
from octobot_trading.enums import ExchangeConstantsMarketStatusColumns as Ecmsc, \
|
20
|
+
ExchangeConstantsOrderBookInfoColumns as Ecobic, ExchangeConstantsOrderColumns as Ecoc, \
|
21
|
+
ExchangeConstantsTickersColumns as Ectc
|
22
|
+
import octobot_trading.errors
|
23
|
+
from tests_additional.real_exchanges.real_exchange_tester import RealExchangeTester
|
24
|
+
# required to catch async loop context exceptions
|
25
|
+
from tests import event_loop
|
26
|
+
|
27
|
+
# All test coroutines will be treated as marked.
|
28
|
+
pytestmark = pytest.mark.asyncio
|
29
|
+
|
30
|
+
|
31
|
+
class TestBingxRealExchangeTester(RealExchangeTester):
|
32
|
+
EXCHANGE_NAME = "bingx"
|
33
|
+
SYMBOL = "BTC/USDT"
|
34
|
+
SYMBOL_2 = "ETH/BTC"
|
35
|
+
SYMBOL_3 = "SHIB/USDT"
|
36
|
+
|
37
|
+
async def _test_time_frames(self):
|
38
|
+
time_frames = await self.time_frames()
|
39
|
+
assert all(time_frame in time_frames for time_frame in (
|
40
|
+
TimeFrames.ONE_MINUTE.value,
|
41
|
+
TimeFrames.THREE_MINUTES.value,
|
42
|
+
TimeFrames.FIVE_MINUTES.value,
|
43
|
+
TimeFrames.FIFTEEN_MINUTES.value,
|
44
|
+
TimeFrames.THIRTY_MINUTES.value,
|
45
|
+
TimeFrames.ONE_HOUR.value,
|
46
|
+
TimeFrames.TWO_HOURS.value,
|
47
|
+
TimeFrames.FOUR_HOURS.value,
|
48
|
+
TimeFrames.SIX_HOURS.value,
|
49
|
+
TimeFrames.TWELVE_HOURS.value,
|
50
|
+
TimeFrames.ONE_DAY.value,
|
51
|
+
TimeFrames.THREE_DAYS.value,
|
52
|
+
TimeFrames.ONE_WEEK.value,
|
53
|
+
TimeFrames.ONE_MONTH.value
|
54
|
+
))
|
55
|
+
|
56
|
+
async def test_get_market_status(self):
|
57
|
+
for market_status in await self.get_market_statuses():
|
58
|
+
assert market_status
|
59
|
+
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
60
|
+
assert market_status[Ecmsc.PRECISION.value]
|
61
|
+
assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]) == \
|
62
|
+
market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]
|
63
|
+
assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_PRICE.value]) == \
|
64
|
+
market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_PRICE.value]
|
65
|
+
assert all(elem in market_status[Ecmsc.LIMITS.value]
|
66
|
+
for elem in (Ecmsc.LIMITS_AMOUNT.value,
|
67
|
+
Ecmsc.LIMITS_PRICE.value,
|
68
|
+
Ecmsc.LIMITS_COST.value))
|
69
|
+
self.check_market_status_limits(
|
70
|
+
market_status,
|
71
|
+
low_cost_max=10, low_cost_min=1, # no suitable /BTC pair for now
|
72
|
+
has_price_limits=False
|
73
|
+
)
|
74
|
+
|
75
|
+
async def test_get_symbol_prices(self):
|
76
|
+
# without limit
|
77
|
+
symbol_prices = await self.get_symbol_prices()
|
78
|
+
assert len(symbol_prices) == 50
|
79
|
+
# check candles order (oldest first)
|
80
|
+
self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
|
81
|
+
# check last candle is the current candle
|
82
|
+
assert symbol_prices[-1][PriceIndexes.IND_PRICE_TIME.value] >= self.get_time() - self.get_allowed_time_delta()
|
83
|
+
|
84
|
+
# try with candles limit (used in candled updater)
|
85
|
+
symbol_prices = await self.get_symbol_prices(limit=1500)
|
86
|
+
# max candles is 1000
|
87
|
+
assert len(symbol_prices) == 1000
|
88
|
+
# check candles order (oldest first)
|
89
|
+
self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
|
90
|
+
# check last candle is the current candle
|
91
|
+
assert symbol_prices[-1][PriceIndexes.IND_PRICE_TIME.value] >= self.get_time() - self.get_allowed_time_delta()
|
92
|
+
|
93
|
+
async def test_get_historical_symbol_prices(self):
|
94
|
+
# try with since and limit (used in data collector)
|
95
|
+
for limit in (50, None):
|
96
|
+
symbol_prices = await self.get_symbol_prices(since=self.CANDLE_SINCE, limit=limit)
|
97
|
+
if limit:
|
98
|
+
assert len(symbol_prices) == limit
|
99
|
+
else:
|
100
|
+
assert len(symbol_prices) > 5
|
101
|
+
# check candles order (oldest first)
|
102
|
+
self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
|
103
|
+
# check that fetched candles are historical candles
|
104
|
+
max_candle_time = self.get_time_after_time_frames(self.CANDLE_SINCE_SEC, len(symbol_prices))
|
105
|
+
assert max_candle_time <= self.get_time()
|
106
|
+
for candle in symbol_prices:
|
107
|
+
assert self.CANDLE_SINCE_SEC <= candle[PriceIndexes.IND_PRICE_TIME.value] <= max_candle_time
|
108
|
+
|
109
|
+
async def test_get_kline_price(self):
|
110
|
+
kline_price = await self.get_kline_price()
|
111
|
+
assert len(kline_price) == 1
|
112
|
+
assert len(kline_price[0]) == 6
|
113
|
+
kline_start_time = kline_price[0][PriceIndexes.IND_PRICE_TIME.value]
|
114
|
+
# assert kline is the current candle
|
115
|
+
assert kline_start_time >= self.get_time() - self.get_allowed_time_delta()
|
116
|
+
|
117
|
+
async def test_get_order_book(self):
|
118
|
+
order_book = await self.get_order_book()
|
119
|
+
assert len(order_book[Ecobic.ASKS.value]) == 5
|
120
|
+
assert len(order_book[Ecobic.ASKS.value][0]) == 2
|
121
|
+
assert len(order_book[Ecobic.BIDS.value]) == 5
|
122
|
+
assert len(order_book[Ecobic.BIDS.value][0]) == 2
|
123
|
+
|
124
|
+
async def test_get_recent_trades(self):
|
125
|
+
recent_trades = await self.get_recent_trades()
|
126
|
+
assert len(recent_trades) == 50
|
127
|
+
# check trades order (oldest first)
|
128
|
+
self.ensure_elements_order(recent_trades, Ecoc.TIMESTAMP.value)
|
129
|
+
|
130
|
+
async def test_get_price_ticker(self):
|
131
|
+
# get_price_ticker is not support on spot market :
|
132
|
+
# to be fixed in this exchange tentacle using create_ticker_from_kline
|
133
|
+
with pytest.raises(octobot_trading.errors.FailedRequest):
|
134
|
+
ticker = await self.get_price_ticker()
|
135
|
+
# self._check_ticker(ticker, self.SYMBOL, check_content=True)
|
136
|
+
|
137
|
+
async def test_get_all_currencies_price_ticker(self):
|
138
|
+
# warning: fetches swap tickers
|
139
|
+
tickers = await self.get_all_currencies_price_ticker()
|
140
|
+
for symbol, ticker in tickers.items():
|
141
|
+
self._check_ticker(ticker, symbol)
|
142
|
+
|
143
|
+
@staticmethod
|
144
|
+
def _check_ticker(ticker, symbol, check_content=False):
|
145
|
+
assert ticker[Ectc.SYMBOL.value] == symbol
|
146
|
+
assert all(key in ticker for key in (
|
147
|
+
Ectc.HIGH.value,
|
148
|
+
Ectc.LOW.value,
|
149
|
+
Ectc.BID.value,
|
150
|
+
Ectc.BID_VOLUME.value,
|
151
|
+
Ectc.ASK.value,
|
152
|
+
Ectc.ASK_VOLUME.value,
|
153
|
+
Ectc.OPEN.value,
|
154
|
+
Ectc.CLOSE.value,
|
155
|
+
Ectc.LAST.value,
|
156
|
+
Ectc.PREVIOUS_CLOSE.value
|
157
|
+
))
|
158
|
+
if check_content:
|
159
|
+
assert ticker[Ectc.HIGH.value]
|
160
|
+
assert ticker[Ectc.LOW.value]
|
161
|
+
assert ticker[Ectc.BID.value]
|
162
|
+
assert ticker[Ectc.BID_VOLUME.value]
|
163
|
+
assert ticker[Ectc.ASK.value]
|
164
|
+
assert ticker[Ectc.ASK_VOLUME.value]
|
165
|
+
assert ticker[Ectc.OPEN.value]
|
166
|
+
assert ticker[Ectc.CLOSE.value]
|
167
|
+
assert ticker[Ectc.LAST.value]
|
168
|
+
assert ticker[Ectc.PREVIOUS_CLOSE.value]
|
169
|
+
assert ticker[Ectc.BASE_VOLUME.value]
|
170
|
+
assert ticker[Ectc.TIMESTAMP.value]
|
171
|
+
RealExchangeTester.check_ticker_typing(ticker)
|
{OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_bybit.py
RENAMED
@@ -77,9 +77,9 @@ class TestBybitRealExchangeTester(RealExchangeTester):
|
|
77
77
|
# check last candle is the current candle
|
78
78
|
assert symbol_prices[-1][PriceIndexes.IND_PRICE_TIME.value] >= self.get_time() - self.get_allowed_time_delta()
|
79
79
|
|
80
|
-
# can't fetch more than
|
80
|
+
# can't fetch more than 1000 candles
|
81
81
|
symbol_prices = await self.get_symbol_prices(limit=1500)
|
82
|
-
assert len(symbol_prices) ==
|
82
|
+
assert len(symbol_prices) == 1000
|
83
83
|
# check candles order (oldest first)
|
84
84
|
self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
|
85
85
|
# check last candle is the current candle
|
@@ -76,7 +76,7 @@ class TestBybitRealExchangeTester(RealFuturesExchangeTester):
|
|
76
76
|
# without limit
|
77
77
|
symbol_prices = await self.get_symbol_prices()
|
78
78
|
assert len(symbol_prices) == 200
|
79
|
-
# max is
|
79
|
+
# max is 1000 on Bybit
|
80
80
|
symbol_prices = await self.get_symbol_prices(limit=200)
|
81
81
|
assert len(symbol_prices) == 200
|
82
82
|
# check candles order (oldest first)
|
@@ -85,8 +85,8 @@ class TestBybitRealExchangeTester(RealFuturesExchangeTester):
|
|
85
85
|
assert symbol_prices[-1][PriceIndexes.IND_PRICE_TIME.value] >= self.get_time() - self.get_allowed_time_delta()
|
86
86
|
|
87
87
|
# fetching more than 200 candles is fetching candles from the past
|
88
|
-
symbol_prices = await self.get_symbol_prices(limit=
|
89
|
-
assert len(symbol_prices) ==
|
88
|
+
symbol_prices = await self.get_symbol_prices(limit=1500)
|
89
|
+
assert len(symbol_prices) == 1000
|
90
90
|
# check candles order (oldest first)
|
91
91
|
self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
|
92
92
|
# check last candle is the current candle
|
{OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_coinbase.py
RENAMED
@@ -18,7 +18,7 @@ import pytest
|
|
18
18
|
import octobot_trading.errors
|
19
19
|
from octobot_commons.enums import TimeFrames, PriceIndexes
|
20
20
|
from octobot_trading.enums import ExchangeConstantsMarketStatusColumns as Ecmsc, \
|
21
|
-
ExchangeConstantsOrderColumns as Ecoc, \
|
21
|
+
ExchangeConstantsOrderBookInfoColumns as Ecobic, ExchangeConstantsOrderColumns as Ecoc, \
|
22
22
|
ExchangeConstantsTickersColumns as Ectc
|
23
23
|
from tests_additional.real_exchanges.real_exchange_tester import RealExchangeTester
|
24
24
|
# required to catch async loop context exceptions
|
@@ -106,8 +106,11 @@ class TestCoinbaseRealExchangeTester(RealExchangeTester):
|
|
106
106
|
assert kline_start_time >= self.get_time() - self.get_allowed_time_delta()
|
107
107
|
|
108
108
|
async def test_get_order_book(self):
|
109
|
-
|
110
|
-
|
109
|
+
order_book = await self.get_order_book()
|
110
|
+
assert len(order_book[Ecobic.ASKS.value]) == 5
|
111
|
+
assert len(order_book[Ecobic.ASKS.value][0]) == 2
|
112
|
+
assert len(order_book[Ecobic.BIDS.value]) == 5
|
113
|
+
assert len(order_book[Ecobic.BIDS.value][0]) == 2
|
111
114
|
|
112
115
|
async def test_get_recent_trades(self):
|
113
116
|
recent_trades = await self.get_recent_trades()
|
@@ -151,8 +154,8 @@ class TestCoinbaseRealExchangeTester(RealExchangeTester):
|
|
151
154
|
assert ticker[Ectc.LAST.value]
|
152
155
|
assert ticker[Ectc.PREVIOUS_CLOSE.value] is None
|
153
156
|
assert ticker[Ectc.BASE_VOLUME.value] is None
|
154
|
-
assert ticker[Ectc.TIMESTAMP.value]
|
157
|
+
assert ticker[Ectc.TIMESTAMP.value]
|
155
158
|
RealExchangeTester.check_ticker_typing(
|
156
159
|
ticker,
|
157
|
-
check_open=False, check_high=False, check_low=False,
|
160
|
+
check_open=False, check_high=False, check_low=False, check_base_volume=False
|
158
161
|
)
|
{OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_hitbtc.py
RENAMED
@@ -71,7 +71,7 @@ class TestHitBtcRealExchangeTester(RealExchangeTester):
|
|
71
71
|
async def test_get_symbol_prices(self):
|
72
72
|
# without limit
|
73
73
|
symbol_prices = await self.get_symbol_prices(sort='DESC')
|
74
|
-
assert len(symbol_prices) ==
|
74
|
+
assert len(symbol_prices) == 10
|
75
75
|
# check candles order (oldest first)
|
76
76
|
self.ensure_elements_order(symbol_prices, PriceIndexes.IND_PRICE_TIME.value)
|
77
77
|
# check last candle is the current candle
|
@@ -99,7 +99,9 @@ class TestHitBtcRealExchangeTester(RealExchangeTester):
|
|
99
99
|
max_candle_time = self.get_time_after_time_frames(self.CANDLE_SINCE_SEC, len(symbol_prices))
|
100
100
|
assert max_candle_time <= self.get_time()
|
101
101
|
for candle in symbol_prices:
|
102
|
-
assert self.CANDLE_SINCE_SEC <= candle[PriceIndexes.IND_PRICE_TIME.value]
|
102
|
+
assert self.CANDLE_SINCE_SEC <= candle[PriceIndexes.IND_PRICE_TIME.value]
|
103
|
+
# invalid max time: history is not supported
|
104
|
+
assert max_candle_time <= candle[PriceIndexes.IND_PRICE_TIME.value]
|
103
105
|
|
104
106
|
async def test_get_kline_price(self):
|
105
107
|
kline_price = await self.get_kline_price(sort='DESC') # to be fixed in hitbtc tentacle
|
{OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/tests_additional/real_exchanges/test_okx.py
RENAMED
@@ -68,7 +68,8 @@ class TestOkxRealExchangeTester(RealExchangeTester):
|
|
68
68
|
normal_cost_min=1e-09,
|
69
69
|
low_cost_min=1e-08,
|
70
70
|
expect_invalid_price_limit_values=False,
|
71
|
-
enable_price_and_cost_comparison=False
|
71
|
+
enable_price_and_cost_comparison=False,
|
72
|
+
has_price_limits=False)
|
72
73
|
|
73
74
|
async def test_get_symbol_prices(self):
|
74
75
|
# without limit
|
@@ -67,7 +67,8 @@ class TestOkxFuturesRealExchangeTester(RealFuturesExchangeTester):
|
|
67
67
|
self.check_market_status_limits(market_status,
|
68
68
|
low_price_max=1e-05,
|
69
69
|
expect_invalid_price_limit_values=False,
|
70
|
-
enable_price_and_cost_comparison=True
|
70
|
+
enable_price_and_cost_comparison=True,
|
71
|
+
has_price_limits=False)
|
71
72
|
|
72
73
|
async def test_get_symbol_prices(self):
|
73
74
|
# without limit
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/OctoBot_Trading.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/funding/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.17 → OctoBot-Trading-2.4.18}/octobot_trading/exchange_data/kline/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|