OctoBot-Trading 2.4.102__tar.gz → 2.4.104__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.102 → OctoBot-Trading-2.4.104}/CHANGELOG.md +8 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.102/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.104}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/README.md +1 -1
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/__init__.py +2 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/exchange.py +4 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +8 -3
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/types/rest_exchange.py +20 -9
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/test_tools/exchanges_test_tools.py +1 -1
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/real_exchange_tester.py +121 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_ascendex.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_binance.py +12 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_binance_futures.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bingx.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bitfinex.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bitget.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bithumb.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bitmart.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bitso.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bitstamp.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bybit.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bybit_futures.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_coinbase.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_coinex.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_cryptocom.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_gateio.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_hitbtc.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_hollaex.py +20 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_htx.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_kraken.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_kucoin.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_kucoin_futures.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_mexc.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_ndax.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_okx.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_okx_futures.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_phemex.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_poloniex.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_upbit.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_wavesexchange.py +5 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/LICENSE +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/OctoBot_Trading.egg-info/requires.txt +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/contracts.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/constants.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/enums.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/errors.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/traders/trader.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/util/exchange_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/util/symbol_details.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/mode_activity.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/mode_config.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/modes_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/order_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/position.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/signals/signal_creation.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/signals/util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/orders_storage.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/test_tools/exchange_data.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/requirements.txt +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/setup.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/test_exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/traders/test_trader.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/exchanges/util/test_exchange_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/test_abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/modes/test_modes_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/test_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/test_order_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/trades/test_trade_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/trades/test_trade_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/signals/test_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_okcoin.py +0 -0
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [2.4.104] - 2024-08-26
|
8
|
+
### Updated
|
9
|
+
- [Exchange] handle ccxt.PermissionDenied
|
10
|
+
|
11
|
+
## [2.4.103] - 2024-08-25
|
12
|
+
### Added
|
13
|
+
- [API] add supports_custom_limit_order_book_fetch
|
14
|
+
|
7
15
|
## [2.4.102] - 2024-08-24
|
8
16
|
### Added
|
9
17
|
- [Exchanges] add get_order_books
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.104
|
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.104](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
|
20
20
|
[](https://app.codacy.com/gh/Drakkar-Software/OctoBot-Trading?utm_source=github.com&utm_medium=referral&utm_content=Drakkar-Software/OctoBot-Trading&utm_campaign=Badge_Grade_Dashboard)
|
21
21
|
[](https://pypi.python.org/pypi/OctoBot-Trading/)
|
22
22
|
[](https://coveralls.io/github/Drakkar-Software/OctoBot-Trading?branch=master)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.104
|
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.104](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.104](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)
|
@@ -123,6 +123,7 @@ from octobot_trading.api.exchange import (
|
|
123
123
|
store_history_in_run_storage,
|
124
124
|
get_enabled_exchanges_names,
|
125
125
|
get_auto_filled_exchange_names,
|
126
|
+
supports_custom_limit_order_book_fetch,
|
126
127
|
get_exchange_details,
|
127
128
|
cancel_ccxt_throttle_task,
|
128
129
|
stop_exchange,
|
@@ -309,6 +310,7 @@ __all__ = [
|
|
309
310
|
"store_history_in_run_storage",
|
310
311
|
"get_enabled_exchanges_names",
|
311
312
|
"get_auto_filled_exchange_names",
|
313
|
+
"supports_custom_limit_order_book_fetch",
|
312
314
|
"get_exchange_details",
|
313
315
|
"cancel_ccxt_throttle_task",
|
314
316
|
"stop_exchange",
|
@@ -324,6 +324,10 @@ def get_auto_filled_exchange_names(tentacles_setup_config) -> list:
|
|
324
324
|
return exchanges.get_auto_filled_exchange_names(tentacles_setup_config)
|
325
325
|
|
326
326
|
|
327
|
+
def supports_custom_limit_order_book_fetch(exchange_manager) -> bool:
|
328
|
+
return exchange_manager.exchange.SUPPORTS_CUSTOM_LIMIT_ORDER_BOOK_FETCH
|
329
|
+
|
330
|
+
|
327
331
|
async def get_exchange_details(
|
328
332
|
exchange_name, is_autofilled, tentacles_setup_config, aiohttp_session
|
329
333
|
) -> exchanges.ExchangeDetails:
|
@@ -14,6 +14,7 @@
|
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library.
|
16
16
|
import decimal
|
17
|
+
import time
|
17
18
|
|
18
19
|
import octobot_trading.exchanges.adapters as adapters
|
19
20
|
import octobot_trading.exchanges.connectors.ccxt.enums as ccxt_enums
|
@@ -201,9 +202,13 @@ class CCXTAdapter(adapters.AbstractAdapter):
|
|
201
202
|
# CCXT standard order_book fixing logic
|
202
203
|
try:
|
203
204
|
exchange_timestamp = fixed[enums.ExchangeConstantsOrderBookInfoColumns.TIMESTAMP.value]
|
204
|
-
|
205
|
-
|
206
|
-
|
205
|
+
if exchange_timestamp is None:
|
206
|
+
# force current time
|
207
|
+
fixed[enums.ExchangeConstantsOrderBookInfoColumns.TIMESTAMP.value] = time.time()
|
208
|
+
else:
|
209
|
+
fixed[enums.ExchangeConstantsOrderBookInfoColumns.TIMESTAMP.value] = self.get_uniformized_timestamp(
|
210
|
+
exchange_timestamp
|
211
|
+
)
|
207
212
|
except KeyError as e:
|
208
213
|
self.logger.error(f"Fail to convert order book timestamp ({e})")
|
209
214
|
return fixed
|
{OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/octobot_trading/exchanges/types/rest_exchange.py
RENAMED
@@ -94,6 +94,8 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
94
94
|
CAN_HAVE_DELAYED_OPEN_ORDERS = False
|
95
95
|
# Set True when get_cancelled_order() can return outdated open orders
|
96
96
|
CAN_HAVE_DELAYED_CANCELLED_ORDERS = False
|
97
|
+
# Set True when the "limit" param when fetching order books is taken into account
|
98
|
+
SUPPORTS_CUSTOM_LIMIT_ORDER_BOOK_FETCH = False
|
97
99
|
|
98
100
|
# text content of errors due to orders not found errors
|
99
101
|
EXCHANGE_ORDER_NOT_FOUND_ERRORS: typing.List[typing.Iterable[str]] = []
|
@@ -222,7 +224,8 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
222
224
|
f"Error when handling order {err}. Please make sure that trading permissions are on for this API key."
|
223
225
|
) from err
|
224
226
|
except ccxt.DDoSProtection as e:
|
225
|
-
# raised upon rate limit issues,
|
227
|
+
# ccxt.DDoSProtection: raised upon rate limit issues,
|
228
|
+
# last response data might have details on what is happening
|
226
229
|
# ensure this is not a permission error (can happen on binance)
|
227
230
|
if self.is_api_permission_error(e):
|
228
231
|
# invalid api key or missing trading rights
|
@@ -283,15 +286,23 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
283
286
|
return created_order
|
284
287
|
|
285
288
|
async def _create_order_with_retry(self, order_type, symbol, quantity: decimal.Decimal,
|
286
|
-
price: decimal.Decimal, stop_price: decimal.Decimal,
|
289
|
+
price: decimal.Decimal, stop_price: decimal.Decimal,
|
287
290
|
side: enums.TradeOrderSide,
|
288
|
-
current_price: decimal.Decimal,
|
291
|
+
current_price: decimal.Decimal,
|
289
292
|
reduce_only: bool, params) -> dict:
|
290
293
|
try:
|
291
294
|
return await self._create_specific_order(order_type, symbol, quantity, price=price,
|
292
295
|
stop_price=stop_price, side=side,
|
293
|
-
current_price=current_price,
|
296
|
+
current_price=current_price,
|
294
297
|
reduce_only=reduce_only, params=params)
|
298
|
+
except ccxt.PermissionDenied as err:
|
299
|
+
if self.is_exchange_account_traded_symbol_permission_error(err):
|
300
|
+
# exchange won't let this order create: raise
|
301
|
+
raise errors.ExchangeAccountSymbolPermissionError(
|
302
|
+
f"Error when creating {symbol} {order_type} order on {self.exchange_manager.exchange_name}: {err}"
|
303
|
+
) from err
|
304
|
+
# otherwise propagate exception: this is not a situation to retry
|
305
|
+
raise
|
295
306
|
except (ccxt.InvalidOrder, ccxt.BadRequest) as err:
|
296
307
|
if self.is_exchange_account_traded_symbol_permission_error(err):
|
297
308
|
# exchange won't let this order create: raise
|
@@ -303,9 +314,9 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
303
314
|
f"This might be due to an update on {self.name} market rules. Fetching updated rules.")
|
304
315
|
await self.connector.load_symbol_markets(reload=True, market_filter=self.exchange_manager.market_filter)
|
305
316
|
# retry order creation with updated markets (ccxt will use the updated market values)
|
306
|
-
return await self._create_specific_order(order_type, symbol, quantity, price=price,
|
317
|
+
return await self._create_specific_order(order_type, symbol, quantity, price=price,
|
307
318
|
stop_price=stop_price, side=side,
|
308
|
-
current_price=current_price, reduce_only=reduce_only,
|
319
|
+
current_price=current_price, reduce_only=reduce_only,
|
309
320
|
params=params)
|
310
321
|
|
311
322
|
def _ensure_order_details_completeness(self, order, order_required_fields=None, order_non_empty_fields=None):
|
@@ -318,7 +329,7 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
318
329
|
all(order[key] for key in order_non_empty_fields)
|
319
330
|
|
320
331
|
async def _create_specific_order(self, order_type, symbol, quantity: decimal.Decimal, price: decimal.Decimal = None,
|
321
|
-
side: enums.TradeOrderSide = None, current_price: decimal.Decimal = None,
|
332
|
+
side: enums.TradeOrderSide = None, current_price: decimal.Decimal = None,
|
322
333
|
stop_price: decimal.Decimal = None, reduce_only: bool = False, params=None) -> dict:
|
323
334
|
created_order = None
|
324
335
|
float_quantity = float(quantity)
|
@@ -405,7 +416,7 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
405
416
|
raise NotImplementedError("_create_market_trailing_stop_order is not implemented")
|
406
417
|
|
407
418
|
async def _create_limit_trailing_stop_order(
|
408
|
-
|
419
|
+
|
409
420
|
self, symbol, quantity, price=None, side=None,
|
410
421
|
reduce_only: bool = False, params=None) -> dict:
|
411
422
|
raise NotImplementedError("_create_limit_trailing_stop_order is not implemented")
|
@@ -662,7 +673,7 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
662
673
|
|
663
674
|
async def switch_to_account(self, account_type: enums.AccountTypes):
|
664
675
|
return await self.connector.switch_to_account(account_type=account_type)
|
665
|
-
|
676
|
+
|
666
677
|
# Futures
|
667
678
|
async def load_pair_future_contract(self, pair: str):
|
668
679
|
"""
|
@@ -14,13 +14,17 @@
|
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library.
|
16
16
|
import contextlib
|
17
|
+
import time
|
18
|
+
import typing
|
17
19
|
|
18
20
|
import ccxt.async_support
|
21
|
+
import pytest
|
19
22
|
from ccxt import Exchange
|
20
23
|
|
21
24
|
import octobot_commons.constants as constants
|
22
25
|
import octobot_commons.enums as commons_enums
|
23
26
|
import octobot_trading.enums as trading_enums
|
27
|
+
import octobot_trading.errors as trading_errors
|
24
28
|
import octobot_trading.exchanges.connectors.ccxt.ccxt_client_util as ccxt_client_util
|
25
29
|
import octobot_trading.exchanges.util as exchanges_util
|
26
30
|
from octobot_trading.enums import ExchangeConstantsTickersColumns as Ectc, \
|
@@ -44,6 +48,7 @@ class RealExchangeTester:
|
|
44
48
|
REQUIRES_AUTH = False # set True when even normally public apis require authentication
|
45
49
|
MARKET_STATUS_TYPE = trading_enums.ExchangeTypes.SPOT.value
|
46
50
|
HISTORICAL_CANDLES_TO_FETCH_COUNT = 650
|
51
|
+
DEFAULT_CUSTOM_BOOK_LIMIT = 50
|
47
52
|
|
48
53
|
# Public methods: to be implemented as tests
|
49
54
|
# Use await self._[method_name] to get the test request result
|
@@ -68,6 +73,15 @@ class RealExchangeTester:
|
|
68
73
|
async def test_get_order_book(self):
|
69
74
|
pass
|
70
75
|
|
76
|
+
|
77
|
+
async def test_get_order_books(self):
|
78
|
+
# implement if necessary
|
79
|
+
pass
|
80
|
+
|
81
|
+
async def test_get_order_books(self):
|
82
|
+
# implement if necessary
|
83
|
+
pass
|
84
|
+
|
71
85
|
async def test_get_recent_trades(self):
|
72
86
|
pass
|
73
87
|
|
@@ -139,6 +153,113 @@ class RealExchangeTester:
|
|
139
153
|
}
|
140
154
|
}
|
141
155
|
|
156
|
+
def _get_ref_order_book_timestamp(self):
|
157
|
+
return time.time() + 30 # allow 30s desync
|
158
|
+
|
159
|
+
async def inner_test_unsupported_get_order_books(self):
|
160
|
+
async with (self.get_exchange_manager() as exchange_manager):
|
161
|
+
with pytest.raises(trading_errors.NotSupported):
|
162
|
+
# with symbols filter
|
163
|
+
symbols = [self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3]
|
164
|
+
await exchange_manager.exchange.get_order_books(symbols=symbols)
|
165
|
+
|
166
|
+
with pytest.raises(trading_errors.NotSupported):
|
167
|
+
# without symbols filter
|
168
|
+
await exchange_manager.exchange.get_order_books(symbols=None)
|
169
|
+
|
170
|
+
async def inner_test_get_order_books(
|
171
|
+
self,
|
172
|
+
expected_symbol_filter: bool,
|
173
|
+
expected_missing_symbol_filter_books_min_count: int,
|
174
|
+
expected_max_orders_by_side: int,
|
175
|
+
min_book_orders_count: int,
|
176
|
+
supports_custom_limit: bool,
|
177
|
+
custom_limit: typing.Optional[int],
|
178
|
+
max_empty_book_sides: int,
|
179
|
+
):
|
180
|
+
async with (self.get_exchange_manager() as exchange_manager):
|
181
|
+
# with symbols filter
|
182
|
+
symbols = [self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3]
|
183
|
+
books_by_symbol = await exchange_manager.exchange.get_order_books(symbols=symbols)
|
184
|
+
ref_time = self._get_ref_order_book_timestamp()
|
185
|
+
empty_book_sides = []
|
186
|
+
if expected_symbol_filter:
|
187
|
+
assert len(books_by_symbol) == len(symbols)
|
188
|
+
else:
|
189
|
+
assert len(books_by_symbol) >= expected_missing_symbol_filter_books_min_count
|
190
|
+
for symbol, book in books_by_symbol.items():
|
191
|
+
assert 0 < book[trading_enums.ExchangeConstantsOrderBookInfoColumns.TIMESTAMP.value] < ref_time, (
|
192
|
+
f"Invalid {symbol} book timestamp value: "
|
193
|
+
f"{book[trading_enums.ExchangeConstantsOrderBookInfoColumns.TIMESTAMP.value]}, {ref_time=}"
|
194
|
+
)
|
195
|
+
for side in [
|
196
|
+
trading_enums.ExchangeConstantsOrderBookInfoColumns.BIDS,
|
197
|
+
trading_enums.ExchangeConstantsOrderBookInfoColumns.ASKS
|
198
|
+
]:
|
199
|
+
if len(book[side.value]) == 0:
|
200
|
+
empty_book_sides.append((symbol, side))
|
201
|
+
else:
|
202
|
+
assert min_book_orders_count < len(book[side.value]) <= expected_max_orders_by_side, (
|
203
|
+
f"Unexpected {symbol} {side.value} orders count: {len(book[side.value])}. Expected: "
|
204
|
+
f"[{min_book_orders_count}: {expected_max_orders_by_side}]"
|
205
|
+
)
|
206
|
+
if len(empty_book_sides) > max_empty_book_sides:
|
207
|
+
raise AssertionError(
|
208
|
+
f"More empty book sides than expected: {max_empty_book_sides=} {empty_book_sides=}"
|
209
|
+
)
|
210
|
+
# without symbols filter
|
211
|
+
books_by_symbol = await exchange_manager.exchange.get_order_books(symbols=None)
|
212
|
+
empty_book_sides = []
|
213
|
+
assert len(books_by_symbol) >= expected_missing_symbol_filter_books_min_count, (
|
214
|
+
f"{len(books_by_symbol)=} NOT >= {expected_missing_symbol_filter_books_min_count=}"
|
215
|
+
)
|
216
|
+
for symbol, book in books_by_symbol.items():
|
217
|
+
assert 0 < book[trading_enums.ExchangeConstantsOrderBookInfoColumns.TIMESTAMP.value] < ref_time, (
|
218
|
+
f"Invalid {symbol} book timestamp value: "
|
219
|
+
f"{book[trading_enums.ExchangeConstantsOrderBookInfoColumns.TIMESTAMP.value]}, {ref_time=}"
|
220
|
+
)
|
221
|
+
for side in [
|
222
|
+
trading_enums.ExchangeConstantsOrderBookInfoColumns.BIDS,
|
223
|
+
trading_enums.ExchangeConstantsOrderBookInfoColumns.ASKS
|
224
|
+
]:
|
225
|
+
if len(book[side.value]) == 0:
|
226
|
+
empty_book_sides.append((symbol, side))
|
227
|
+
else:
|
228
|
+
assert min_book_orders_count < len(book[side.value]) <= expected_max_orders_by_side, (
|
229
|
+
f"Unexpected {symbol} {side.value} orders count: {len(book[side.value])}. Expected: "
|
230
|
+
f"[{min_book_orders_count}: {expected_max_orders_by_side}]"
|
231
|
+
)
|
232
|
+
if len(empty_book_sides) > max_empty_book_sides:
|
233
|
+
raise AssertionError(
|
234
|
+
f"More empty book sides than expected: {max_empty_book_sides=} {empty_book_sides=}"
|
235
|
+
)
|
236
|
+
# with custom limit
|
237
|
+
books_by_symbol = await exchange_manager.exchange.get_order_books(symbols=None, limit=custom_limit)
|
238
|
+
self._ensure_book_custom_limit(
|
239
|
+
books_by_symbol, supports_custom_limit, expected_max_orders_by_side, custom_limit
|
240
|
+
)
|
241
|
+
|
242
|
+
def _ensure_book_custom_limit(
|
243
|
+
self,
|
244
|
+
books_by_symbol: dict,
|
245
|
+
supports_custom_limit: bool,
|
246
|
+
no_limit_default_size: int,
|
247
|
+
custom_limit: typing.Optional[int],
|
248
|
+
):
|
249
|
+
has_taken_limit_into_account = False
|
250
|
+
custom_limit = custom_limit or self.DEFAULT_CUSTOM_BOOK_LIMIT
|
251
|
+
for symbol, book in books_by_symbol.items():
|
252
|
+
for side in [
|
253
|
+
trading_enums.ExchangeConstantsOrderBookInfoColumns.BIDS,
|
254
|
+
trading_enums.ExchangeConstantsOrderBookInfoColumns.ASKS
|
255
|
+
]:
|
256
|
+
if no_limit_default_size < len(book[side.value]) <= custom_limit:
|
257
|
+
has_taken_limit_into_account = True
|
258
|
+
if supports_custom_limit:
|
259
|
+
assert has_taken_limit_into_account
|
260
|
+
else:
|
261
|
+
assert not supports_custom_limit
|
262
|
+
|
142
263
|
@contextlib.asynccontextmanager
|
143
264
|
async def get_exchange_manager(self, market_filter=None):
|
144
265
|
async with get_exchange_manager(
|
{OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_ascendex.py
RENAMED
@@ -116,10 +116,15 @@ class TestAscendExRealExchangeTester(RealExchangeTester):
|
|
116
116
|
async def test_get_order_book(self):
|
117
117
|
# limit param is not yet handled on AscendEx, consider orderbook with a least 6 bids and asks
|
118
118
|
order_book = await self.get_order_book()
|
119
|
+
assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
|
119
120
|
assert len(order_book[Ecobic.ASKS.value]) > 5
|
120
121
|
assert len(order_book[Ecobic.ASKS.value][0]) == 2
|
121
122
|
assert len(order_book[Ecobic.BIDS.value]) > 5
|
122
123
|
assert len(order_book[Ecobic.BIDS.value][0]) == 2
|
124
|
+
|
125
|
+
async def test_get_order_books(self):
|
126
|
+
# implement if necessary
|
127
|
+
pass
|
123
128
|
|
124
129
|
async def test_get_recent_trades(self):
|
125
130
|
recent_trades = await self.get_recent_trades()
|
{OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_binance.py
RENAMED
@@ -122,11 +122,23 @@ class TestBinanceRealExchangeTester(RealExchangeTester):
|
|
122
122
|
|
123
123
|
async def test_get_order_book(self):
|
124
124
|
order_book = await self.get_order_book()
|
125
|
+
assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
|
125
126
|
assert len(order_book[Ecobic.ASKS.value]) == 5
|
126
127
|
assert len(order_book[Ecobic.ASKS.value][0]) == 2
|
127
128
|
assert len(order_book[Ecobic.BIDS.value]) == 5
|
128
129
|
assert len(order_book[Ecobic.BIDS.value][0]) == 2
|
129
130
|
|
131
|
+
custom_limit_order_book = await self.get_order_book(limit=450)
|
132
|
+
# limit param is supported
|
133
|
+
# SUPPORTS_CUSTOM_LIMIT_ORDER_BOOK_FETCH = True in tentacle
|
134
|
+
self._ensure_book_custom_limit(
|
135
|
+
{self.SYMBOL: custom_limit_order_book}, True, 20, 450
|
136
|
+
)
|
137
|
+
|
138
|
+
async def test_get_order_books(self):
|
139
|
+
# not supported
|
140
|
+
await self.inner_test_unsupported_get_order_books()
|
141
|
+
|
130
142
|
async def test_get_recent_trades(self):
|
131
143
|
recent_trades = await self.get_recent_trades()
|
132
144
|
assert len(recent_trades) == 50
|
@@ -126,10 +126,15 @@ class TestBinanceFuturesRealExchangeTester(RealFuturesExchangeTester):
|
|
126
126
|
|
127
127
|
async def test_get_order_book(self):
|
128
128
|
order_book = await self.get_order_book()
|
129
|
+
assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
|
129
130
|
assert len(order_book[Ecobic.ASKS.value]) == 5
|
130
131
|
assert len(order_book[Ecobic.ASKS.value][0]) == 2
|
131
132
|
assert len(order_book[Ecobic.BIDS.value]) == 5
|
132
133
|
assert len(order_book[Ecobic.BIDS.value][0]) == 2
|
134
|
+
|
135
|
+
async def test_get_order_books(self):
|
136
|
+
# implement if necessary
|
137
|
+
pass
|
133
138
|
|
134
139
|
async def test_get_recent_trades(self):
|
135
140
|
recent_trades = await self.get_recent_trades()
|
{OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bingx.py
RENAMED
@@ -149,10 +149,15 @@ class TestBingxRealExchangeTester(RealExchangeTester):
|
|
149
149
|
|
150
150
|
async def test_get_order_book(self):
|
151
151
|
order_book = await self.get_order_book()
|
152
|
+
assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
|
152
153
|
assert len(order_book[Ecobic.ASKS.value]) == 5
|
153
154
|
assert len(order_book[Ecobic.ASKS.value][0]) == 2
|
154
155
|
assert len(order_book[Ecobic.BIDS.value]) == 5
|
155
156
|
assert len(order_book[Ecobic.BIDS.value][0]) == 2
|
157
|
+
|
158
|
+
async def test_get_order_books(self):
|
159
|
+
# implement if necessary
|
160
|
+
pass
|
156
161
|
|
157
162
|
async def test_get_recent_trades(self):
|
158
163
|
recent_trades = await self.get_recent_trades()
|
{OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bitfinex.py
RENAMED
@@ -140,10 +140,15 @@ class TestBitfinexRealExchangeTester(RealExchangeTester):
|
|
140
140
|
# bitfinex2 only supports 1, 25 and 100 size
|
141
141
|
# https://docs.bitfinex.com/reference#rest-public-book
|
142
142
|
order_book = await self.get_order_book(limit=25)
|
143
|
+
assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
|
143
144
|
assert len(order_book[Ecobic.ASKS.value]) == 25
|
144
145
|
assert len(order_book[Ecobic.ASKS.value][0]) == 2
|
145
146
|
assert len(order_book[Ecobic.BIDS.value]) == 25
|
146
147
|
assert len(order_book[Ecobic.BIDS.value][0]) == 2
|
148
|
+
|
149
|
+
async def test_get_order_books(self):
|
150
|
+
# implement if necessary
|
151
|
+
pass
|
147
152
|
|
148
153
|
async def test_get_recent_trades(self):
|
149
154
|
recent_trades = await self.get_recent_trades()
|
{OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bitget.py
RENAMED
@@ -126,10 +126,15 @@ class TestBitgetRealExchangeTester(RealExchangeTester):
|
|
126
126
|
|
127
127
|
async def test_get_order_book(self):
|
128
128
|
order_book = await self.get_order_book()
|
129
|
+
assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
|
129
130
|
assert len(order_book[Ecobic.ASKS.value]) == 150
|
130
131
|
assert len(order_book[Ecobic.ASKS.value][0]) == 2
|
131
132
|
assert len(order_book[Ecobic.BIDS.value]) == 150
|
132
133
|
assert len(order_book[Ecobic.BIDS.value][0]) == 2
|
134
|
+
|
135
|
+
async def test_get_order_books(self):
|
136
|
+
# implement if necessary
|
137
|
+
pass
|
133
138
|
|
134
139
|
async def test_get_recent_trades(self):
|
135
140
|
recent_trades = await self.get_recent_trades()
|
{OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bithumb.py
RENAMED
@@ -117,10 +117,15 @@ class TestBithumbRealExchangeTester(RealExchangeTester):
|
|
117
117
|
|
118
118
|
async def test_get_order_book(self):
|
119
119
|
order_book = await self.get_order_book()
|
120
|
+
assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
|
120
121
|
assert len(order_book[Ecobic.ASKS.value]) == 5
|
121
122
|
assert len(order_book[Ecobic.ASKS.value][0]) == 2
|
122
123
|
assert len(order_book[Ecobic.BIDS.value]) == 5
|
123
124
|
assert len(order_book[Ecobic.BIDS.value][0]) == 2
|
125
|
+
|
126
|
+
async def test_get_order_books(self):
|
127
|
+
# implement if necessary
|
128
|
+
pass
|
124
129
|
|
125
130
|
async def test_get_recent_trades(self):
|
126
131
|
recent_trades = await self.get_recent_trades()
|
{OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bitmart.py
RENAMED
@@ -116,10 +116,15 @@ class TestBitMartRealExchangeTester(RealExchangeTester):
|
|
116
116
|
|
117
117
|
async def test_get_order_book(self):
|
118
118
|
order_book = await self.get_order_book()
|
119
|
+
assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
|
119
120
|
assert len(order_book[Ecobic.ASKS.value]) == 5
|
120
121
|
assert len(order_book[Ecobic.ASKS.value][0]) == 2
|
121
122
|
assert len(order_book[Ecobic.BIDS.value]) == 5
|
122
123
|
assert len(order_book[Ecobic.BIDS.value][0]) == 2
|
124
|
+
|
125
|
+
async def test_get_order_books(self):
|
126
|
+
# implement if necessary
|
127
|
+
pass
|
123
128
|
|
124
129
|
async def test_get_recent_trades(self):
|
125
130
|
recent_trades = await self.get_recent_trades()
|
{OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bitso.py
RENAMED
@@ -116,10 +116,15 @@ class TestBitsoRealExchangeTester(RealExchangeTester):
|
|
116
116
|
|
117
117
|
async def test_get_order_book(self):
|
118
118
|
order_book = await self.get_order_book()
|
119
|
+
assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
|
119
120
|
assert len(order_book[Ecobic.ASKS.value]) == 50
|
120
121
|
assert len(order_book[Ecobic.ASKS.value][0]) == 2
|
121
122
|
assert len(order_book[Ecobic.BIDS.value]) == 50
|
122
123
|
assert len(order_book[Ecobic.BIDS.value][0]) == 2
|
124
|
+
|
125
|
+
async def test_get_order_books(self):
|
126
|
+
# implement if necessary
|
127
|
+
pass
|
123
128
|
|
124
129
|
async def test_get_recent_trades(self):
|
125
130
|
recent_trades = await self.get_recent_trades()
|
{OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bitstamp.py
RENAMED
@@ -114,10 +114,15 @@ class TestBitstampRealExchangeTester(RealExchangeTester):
|
|
114
114
|
|
115
115
|
async def test_get_order_book(self):
|
116
116
|
order_book = await self.get_order_book()
|
117
|
+
assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
|
117
118
|
assert len(order_book[Ecobic.ASKS.value]) >= 1000
|
118
119
|
assert len(order_book[Ecobic.ASKS.value][0]) == 2
|
119
120
|
assert len(order_book[Ecobic.BIDS.value]) >= 1000
|
120
121
|
assert len(order_book[Ecobic.BIDS.value][0]) == 2
|
122
|
+
|
123
|
+
async def test_get_order_books(self):
|
124
|
+
# implement if necessary
|
125
|
+
pass
|
121
126
|
|
122
127
|
async def test_get_recent_trades(self):
|
123
128
|
recent_trades = await self.get_recent_trades()
|
{OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_bybit.py
RENAMED
@@ -123,10 +123,15 @@ class TestBybitRealExchangeTester(RealExchangeTester):
|
|
123
123
|
|
124
124
|
async def test_get_order_book(self):
|
125
125
|
order_book = await self.get_order_book()
|
126
|
+
assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
|
126
127
|
assert len(order_book[Ecobic.ASKS.value]) == 5
|
127
128
|
assert len(order_book[Ecobic.ASKS.value][0]) == 2
|
128
129
|
assert len(order_book[Ecobic.BIDS.value]) == 5
|
129
130
|
assert len(order_book[Ecobic.BIDS.value][0]) == 2
|
131
|
+
|
132
|
+
async def test_get_order_books(self):
|
133
|
+
# implement if necessary
|
134
|
+
pass
|
130
135
|
|
131
136
|
async def test_get_recent_trades(self):
|
132
137
|
recent_trades = await self.get_recent_trades()
|
@@ -136,10 +136,15 @@ class TestBybitRealExchangeTester(RealFuturesExchangeTester):
|
|
136
136
|
|
137
137
|
async def test_get_order_book(self):
|
138
138
|
order_book = await self.get_order_book()
|
139
|
+
assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
|
139
140
|
assert len(order_book[Ecobic.ASKS.value]) == 5
|
140
141
|
assert len(order_book[Ecobic.ASKS.value][0]) == 2
|
141
142
|
assert len(order_book[Ecobic.BIDS.value]) == 5
|
142
143
|
assert len(order_book[Ecobic.BIDS.value][0]) == 2
|
144
|
+
|
145
|
+
async def test_get_order_books(self):
|
146
|
+
# implement if necessary
|
147
|
+
pass
|
143
148
|
|
144
149
|
async def test_get_recent_trades(self):
|
145
150
|
recent_trades = await self.get_recent_trades()
|
{OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_coinbase.py
RENAMED
@@ -125,10 +125,15 @@ class TestCoinbaseRealExchangeTester(RealExchangeTester):
|
|
125
125
|
|
126
126
|
async def test_get_order_book(self):
|
127
127
|
order_book = await self.get_order_book()
|
128
|
+
assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
|
128
129
|
assert len(order_book[Ecobic.ASKS.value]) == 5
|
129
130
|
assert len(order_book[Ecobic.ASKS.value][0]) == 2
|
130
131
|
assert len(order_book[Ecobic.BIDS.value]) == 5
|
131
132
|
assert len(order_book[Ecobic.BIDS.value][0]) == 2
|
133
|
+
|
134
|
+
async def test_get_order_books(self):
|
135
|
+
# implement if necessary
|
136
|
+
pass
|
132
137
|
|
133
138
|
async def test_get_recent_trades(self):
|
134
139
|
recent_trades = await self.get_recent_trades()
|
{OctoBot-Trading-2.4.102 → OctoBot-Trading-2.4.104}/tests_additional/real_exchanges/test_coinex.py
RENAMED
@@ -119,10 +119,15 @@ class TestCoinexRealExchangeTester(RealExchangeTester):
|
|
119
119
|
async def test_get_order_book(self):
|
120
120
|
# fetchOrderBook() limit argument must be None, 5/10/20/50. Default is 20
|
121
121
|
order_book = await self.get_order_book(limit=10)
|
122
|
+
assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
|
122
123
|
assert len(order_book[Ecobic.ASKS.value]) == 10
|
123
124
|
assert len(order_book[Ecobic.ASKS.value][0]) == 2
|
124
125
|
assert len(order_book[Ecobic.BIDS.value]) == 10
|
125
126
|
assert len(order_book[Ecobic.BIDS.value][0]) == 2
|
127
|
+
|
128
|
+
async def test_get_order_books(self):
|
129
|
+
# implement if necessary
|
130
|
+
pass
|
126
131
|
|
127
132
|
async def test_get_recent_trades(self):
|
128
133
|
recent_trades = await self.get_recent_trades()
|
@@ -123,10 +123,15 @@ class TestCryptoComRealExchangeTester(RealExchangeTester):
|
|
123
123
|
|
124
124
|
async def test_get_order_book(self):
|
125
125
|
order_book = await self.get_order_book()
|
126
|
+
assert 0 < order_book[Ecobic.TIMESTAMP.value] < self._get_ref_order_book_timestamp()
|
126
127
|
assert len(order_book[Ecobic.ASKS.value]) == 5
|
127
128
|
assert len(order_book[Ecobic.ASKS.value][0]) == 3
|
128
129
|
assert len(order_book[Ecobic.BIDS.value]) == 5
|
129
130
|
assert len(order_book[Ecobic.BIDS.value][0]) == 3
|
131
|
+
|
132
|
+
async def test_get_order_books(self):
|
133
|
+
# implement if necessary
|
134
|
+
pass
|
130
135
|
|
131
136
|
async def test_get_recent_trades(self):
|
132
137
|
recent_trades = await self.get_recent_trades()
|