OctoBot-Trading 2.4.76__tar.gz → 2.4.78__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.76 → OctoBot-Trading-2.4.78}/CHANGELOG.md +10 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/OctoBot_Trading.egg-info/requires.txt +1 -1
- {OctoBot-Trading-2.4.76/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.78}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/README.md +1 -1
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +16 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +9 -6
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +1 -1
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/test_tools/exchanges_test_tools.py +2 -2
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/requirements.txt +2 -1
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/test_exchange_config_data.py +13 -5
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/real_exchange_tester.py +9 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_ascendex.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_binance.py +2 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_binance_futures.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bingx.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bitfinex.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bitget.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bithumb.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bitso.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bitstamp.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bybit.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bybit_futures.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_coinbase.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_coinex.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_cryptocom.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_gateio.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_hitbtc.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_hollaex.py +2 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_htx.py +2 -5
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_kraken.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_kucoin.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_kucoin_futures.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_mexc.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_ndax.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_okcoin.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_okx.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_okx_futures.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_phemex.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_poloniex.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_upbit.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_wavesexchange.py +1 -4
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/LICENSE +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/contracts.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/exchange.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/constants.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/enums.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/errors.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/traders/trader.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/util/exchange_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/util/symbol_details.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/mode_activity.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/mode_config.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/modes_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/order_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/position.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/signals/signal_creation.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/signals/util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/orders_storage.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/test_tools/exchange_data.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/setup.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/traders/test_trader.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/util/test_exchange_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/test_abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/modes/test_modes_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/test_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/test_order_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/trades/test_trade_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/trades/test_trade_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/signals/test_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [2.4.78] - 2024-04-15
|
8
|
+
### Added
|
9
|
+
- [Exchanges] key adapter
|
10
|
+
### Updated
|
11
|
+
- CCXT to 4.2.95
|
12
|
+
|
13
|
+
## [2.4.77] - 2024-04-13
|
14
|
+
### Added
|
15
|
+
- [Exchanges] Handle inactive markets
|
16
|
+
|
7
17
|
## [2.4.76] - 2024-04-12
|
8
18
|
### Added
|
9
19
|
- [Exchanges] Handle order type open status for symbol
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.78
|
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.78](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.78
|
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.78](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.78](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)
|
@@ -27,9 +27,11 @@ import octobot_trading.exchanges.connectors.ccxt.ccxt_clients_cache as ccxt_clie
|
|
27
27
|
import octobot_trading.exchanges.util.exchange_util as exchange_util
|
28
28
|
|
29
29
|
|
30
|
-
def create_client(
|
31
|
-
|
32
|
-
|
30
|
+
def create_client(
|
31
|
+
exchange_class, exchange_manager, logger, options, headers,
|
32
|
+
additional_config, should_authenticate, unauthenticated_exchange_fallback=None,
|
33
|
+
keys_adapter=None
|
34
|
+
):
|
33
35
|
"""
|
34
36
|
Exchange instance creation
|
35
37
|
:return: the created ccxt (pro, async or sync) client
|
@@ -43,6 +45,8 @@ def create_client(exchange_class, exchange_manager, logger,
|
|
43
45
|
if exchange_manager.ignore_config or exchange_manager.check_config(exchange_manager.exchange_name):
|
44
46
|
try:
|
45
47
|
key, secret, password = exchange_manager.get_exchange_credentials(exchange_manager.exchange_name)
|
48
|
+
if keys_adapter:
|
49
|
+
key, secret, password = keys_adapter(key, secret, password)
|
46
50
|
if not (key and secret) and not exchange_manager.is_simulated and not exchange_manager.ignore_config:
|
47
51
|
logger.warning(f"No exchange API key set for {exchange_manager.exchange_name}. "
|
48
52
|
f"Enter your account details to enable real trading on this exchange.")
|
@@ -134,8 +138,16 @@ def get_ccxt_client_login_options(exchange_manager):
|
|
134
138
|
return {'defaultType': 'spot'}
|
135
139
|
|
136
140
|
|
137
|
-
def get_symbols(client):
|
141
|
+
def get_symbols(client, active_only):
|
138
142
|
try:
|
143
|
+
if active_only:
|
144
|
+
return set(
|
145
|
+
symbol
|
146
|
+
for symbol in client.symbols
|
147
|
+
if client.markets.get(symbol, {}).get(
|
148
|
+
enums.ExchangeConstantsMarketStatusColumns.ACTIVE.value, True
|
149
|
+
)
|
150
|
+
)
|
139
151
|
return set(client.symbols)
|
140
152
|
except (AttributeError, TypeError):
|
141
153
|
# ccxt exchange load_markets failed
|
@@ -97,7 +97,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
97
97
|
)
|
98
98
|
|
99
99
|
# initialize symbols and timeframes
|
100
|
-
self.symbols = self.get_client_symbols()
|
100
|
+
self.symbols = self.get_client_symbols(active_only=True)
|
101
101
|
self.time_frames = self.get_client_time_frames()
|
102
102
|
|
103
103
|
except (ccxt.ExchangeNotAvailable, ccxt.RequestTimeout) as e:
|
@@ -157,8 +157,8 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
157
157
|
else:
|
158
158
|
raise
|
159
159
|
|
160
|
-
def get_client_symbols(self):
|
161
|
-
return ccxt_client_util.get_symbols(self.client)
|
160
|
+
def get_client_symbols(self, active_only=True):
|
161
|
+
return ccxt_client_util.get_symbols(self.client, active_only)
|
162
162
|
|
163
163
|
def get_client_time_frames(self):
|
164
164
|
return ccxt_client_util.get_time_frames(self.client)
|
@@ -204,11 +204,12 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
204
204
|
def _create_client(self, force_unauth=False):
|
205
205
|
self.client, self.is_authenticated = self._client_factory(force_unauth)
|
206
206
|
|
207
|
-
def _client_factory(self, force_unauth) -> tuple:
|
207
|
+
def _client_factory(self, force_unauth, keys_adapter=None) -> tuple:
|
208
208
|
return ccxt_client_util.create_client(
|
209
209
|
self.exchange_type, self.exchange_manager, self.logger,
|
210
210
|
self.options, self.headers, self.additional_config,
|
211
|
-
False if force_unauth else self._should_authenticate(), self.unauthenticated_exchange_fallback
|
211
|
+
False if force_unauth else self._should_authenticate(), self.unauthenticated_exchange_fallback,
|
212
|
+
keys_adapter=keys_adapter
|
212
213
|
)
|
213
214
|
|
214
215
|
def _should_authenticate(self):
|
@@ -218,7 +219,9 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
218
219
|
)
|
219
220
|
|
220
221
|
def unauthenticated_exchange_fallback(self, err):
|
221
|
-
self.
|
222
|
+
if not self.exchange_manager.exchange_only:
|
223
|
+
# don't log error when auth is probably not necessary
|
224
|
+
self.handle_token_error(err)
|
222
225
|
return ccxt_client_util.get_unauthenticated_exchange(
|
223
226
|
self.exchange_type,
|
224
227
|
self.options, self.headers, self.additional_config
|
@@ -766,7 +766,7 @@ class CCXTWebsocketConnector(abstract_websocket_exchange.AbstractWebsocketExchan
|
|
766
766
|
return self.EXCHANGE_FEEDS.get(Feeds.CANDLE, Feeds.UNSUPPORTED.value) != Feeds.UNSUPPORTED.value
|
767
767
|
|
768
768
|
def _is_supported_pair(self, pair):
|
769
|
-
return pair in ccxt_client_util.get_symbols(self.client)
|
769
|
+
return pair in ccxt_client_util.get_symbols(self.client, True)
|
770
770
|
|
771
771
|
def _is_pair_independent_feed(self, feed):
|
772
772
|
return feed in self.PAIR_INDEPENDENT_CHANNELS
|
@@ -124,13 +124,13 @@ async def ensure_symbol_markets(
|
|
124
124
|
await exchange_manager.exchange.connector.load_symbol_markets(reload=reload, market_filter=market_filter)
|
125
125
|
|
126
126
|
|
127
|
-
async def get_portfolio(exchange_manager, as_float=False) -> dict:
|
127
|
+
async def get_portfolio(exchange_manager, as_float=False, clear_empty=True) -> dict:
|
128
128
|
balance = await exchange_manager.exchange.get_balance()
|
129
129
|
# filter out 0 values
|
130
130
|
return {
|
131
131
|
asset: {key: float(val) if as_float else val for key, val in values.items()} # use float for values
|
132
132
|
for asset, values in balance.items()
|
133
|
-
if any(value for value in values.values())
|
133
|
+
if not clear_empty or (clear_empty and any(value for value in values.values()))
|
134
134
|
}
|
135
135
|
|
136
136
|
|
@@ -8,7 +8,8 @@ OctoBot-Tentacles-Manager>=2.9, <2.10
|
|
8
8
|
trading-backend>=1.2.7
|
9
9
|
|
10
10
|
# Exchange connection requirements
|
11
|
-
|
11
|
+
# issue from 96, need ccxt==4.2.99
|
12
|
+
ccxt==4.2.95 # always ensure real exchanges tests (in tests_additional and authenticated exchange tests) are passing before changing the ccxt version
|
12
13
|
|
13
14
|
cryptography # Never specify a version (managed by https://github.com/Drakkar-Software/OctoBot-PyPi-Linux-Deployer)
|
14
15
|
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests/exchanges/test_exchange_config_data.py
RENAMED
@@ -80,7 +80,6 @@ class TestExchangeConfig:
|
|
80
80
|
}
|
81
81
|
_, exchange_manager = await self.init_default(config=config)
|
82
82
|
|
83
|
-
assert "UNI/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
|
84
83
|
assert "AVAX/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
|
85
84
|
assert "ADA/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
|
86
85
|
assert "MATIC/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
|
@@ -90,6 +89,9 @@ class TestExchangeConfig:
|
|
90
89
|
assert "AVAX/BNB" not in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
|
91
90
|
assert "ETH/BTC" in exchange_manager.exchange_config.traded_symbol_pairs
|
92
91
|
|
92
|
+
# inactive markets
|
93
|
+
assert "UNI/BTC" not in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
|
94
|
+
|
93
95
|
# disabled
|
94
96
|
assert "Ethereum" not in exchange_manager.exchange_config.traded_cryptocurrencies
|
95
97
|
assert "ADA/ETH" not in exchange_manager.exchange_config.traded_symbol_pairs
|
@@ -113,10 +115,12 @@ class TestExchangeConfig:
|
|
113
115
|
}
|
114
116
|
_, exchange_manager = await self.init_default(config=config)
|
115
117
|
|
116
|
-
assert "TRX/BTC" in exchange_manager.exchange_config.traded_symbol_pairs
|
117
118
|
assert "ADA/BTC" in exchange_manager.exchange_config.traded_symbol_pairs
|
118
119
|
assert "Bitcoin" in exchange_manager.exchange_config.traded_cryptocurrencies
|
119
120
|
|
121
|
+
# inactive markets
|
122
|
+
assert "TRX/BTC" not in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
|
123
|
+
|
120
124
|
# invalid ETH wildcard config
|
121
125
|
assert "Ethereum" not in exchange_manager.exchange_config.traded_cryptocurrencies
|
122
126
|
|
@@ -141,7 +145,6 @@ class TestExchangeConfig:
|
|
141
145
|
|
142
146
|
_, exchange_manager = await self.init_default(config=config)
|
143
147
|
|
144
|
-
assert "UNI/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
|
145
148
|
assert "AVAX/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
|
146
149
|
assert "ADA/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
|
147
150
|
assert "MATIC/BTC" in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
|
@@ -152,6 +155,9 @@ class TestExchangeConfig:
|
|
152
155
|
assert "AVAX/BNB" not in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
|
153
156
|
assert "BTC/USDT" in exchange_manager.exchange_config.traded_symbol_pairs
|
154
157
|
|
158
|
+
# inactive markets
|
159
|
+
assert "UNI/BTC" not in exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"]
|
160
|
+
|
155
161
|
# disabled
|
156
162
|
assert "Ethereum" not in exchange_manager.exchange_config.traded_cryptocurrencies
|
157
163
|
assert "ADA/ETH" not in exchange_manager.exchange_config.traded_symbol_pairs
|
@@ -189,11 +195,13 @@ class TestExchangeConfig:
|
|
189
195
|
_, exchange_manager = await self.init_default(config=config)
|
190
196
|
|
191
197
|
assert exchange_manager.exchange_config.traded_cryptocurrencies["Binance Coin"] == ["BNB/USDT"]
|
192
|
-
assert exchange_manager.exchange_config.traded_cryptocurrencies["Binance USD"] == ["BNB/BUSD"]
|
193
198
|
assert exchange_manager.exchange_config.traded_cryptocurrencies["Bitcoin"] == ["BNB/BTC"]
|
194
199
|
assert exchange_manager.exchange_config.traded_cryptocurrencies["Tether"] == ["BNB/USDT"]
|
195
200
|
|
196
|
-
|
201
|
+
# inactive markets
|
202
|
+
assert exchange_manager.exchange_config.traded_cryptocurrencies["Binance USD"] == []
|
203
|
+
|
204
|
+
sorted_pairs_without_redundancy = sorted(["BNB/USDT", "BNB/BTC"])
|
197
205
|
assert sorted(exchange_manager.exchange_config.traded_symbol_pairs) == sorted_pairs_without_redundancy
|
198
206
|
|
199
207
|
cancel_ccxt_throttle_task()
|
@@ -35,6 +35,7 @@ class RealExchangeTester:
|
|
35
35
|
SYMBOL = None
|
36
36
|
SYMBOL_2 = None
|
37
37
|
SYMBOL_3 = None
|
38
|
+
INACTIVE_MARKETS = []
|
38
39
|
# default is 1h, change if necessary
|
39
40
|
TIME_FRAME = commons_enums.TimeFrames.ONE_HOUR
|
40
41
|
ALLOWED_TIMEFRAMES_WITHOUT_CANDLE = 0
|
@@ -102,6 +103,14 @@ class RealExchangeTester:
|
|
102
103
|
# async def test_create_order(self):
|
103
104
|
# pass
|
104
105
|
|
106
|
+
def ensure_required_market_status_values(self, market_status):
|
107
|
+
assert market_status
|
108
|
+
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
109
|
+
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
110
|
+
assert market_status[Ecmsc.ACTIVE.value] \
|
111
|
+
is False if market_status[Ecmsc.SYMBOL.value] in self.INACTIVE_MARKETS else True
|
112
|
+
assert market_status[Ecmsc.PRECISION.value]
|
113
|
+
|
105
114
|
async def test_get_historical_ohlcv(self):
|
106
115
|
# common implementation, should always work if candles history is supported
|
107
116
|
historical_ohlcv = await self.get_historical_ohlcv()
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_ascendex.py
RENAMED
@@ -52,10 +52,7 @@ class TestAscendExRealExchangeTester(RealExchangeTester):
|
|
52
52
|
|
53
53
|
async def test_get_market_status(self):
|
54
54
|
for market_status in await self.get_market_statuses():
|
55
|
-
|
56
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
57
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
58
|
-
assert market_status[Ecmsc.PRECISION.value]
|
55
|
+
self.ensure_required_market_status_values(market_status)
|
59
56
|
# on AscendEx, precision is a decimal instead of a number of digits
|
60
57
|
assert 0 < market_status[Ecmsc.PRECISION.value][
|
61
58
|
Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in AscendEx tentacle
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_binance.py
RENAMED
@@ -32,6 +32,7 @@ class TestBinanceRealExchangeTester(RealExchangeTester):
|
|
32
32
|
SYMBOL = "BTC/USDT"
|
33
33
|
SYMBOL_2 = "ETH/BTC"
|
34
34
|
SYMBOL_3 = "XRP/BTC"
|
35
|
+
INACTIVE_MARKETS = [SYMBOL_3]
|
35
36
|
|
36
37
|
async def test_time_frames(self):
|
37
38
|
time_frames = await self.time_frames()
|
@@ -55,10 +56,7 @@ class TestBinanceRealExchangeTester(RealExchangeTester):
|
|
55
56
|
|
56
57
|
async def test_get_market_status(self):
|
57
58
|
for market_status in await self.get_market_statuses():
|
58
|
-
|
59
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
60
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
61
|
-
assert market_status[Ecmsc.PRECISION.value]
|
59
|
+
self.ensure_required_market_status_values(market_status)
|
62
60
|
assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]) == \
|
63
61
|
market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]
|
64
62
|
assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_PRICE.value]) == \
|
@@ -59,10 +59,7 @@ class TestBinanceFuturesRealExchangeTester(RealFuturesExchangeTester):
|
|
59
59
|
|
60
60
|
async def test_get_market_status(self):
|
61
61
|
for market_status in await self.get_market_statuses():
|
62
|
-
|
63
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
64
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
65
|
-
assert market_status[Ecmsc.PRECISION.value]
|
62
|
+
self.ensure_required_market_status_values(market_status)
|
66
63
|
assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]) == \
|
67
64
|
market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]
|
68
65
|
assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_PRICE.value]) == \
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bingx.py
RENAMED
@@ -56,10 +56,7 @@ class TestBingxRealExchangeTester(RealExchangeTester):
|
|
56
56
|
|
57
57
|
async def test_get_market_status(self):
|
58
58
|
for market_status in await self.get_market_statuses():
|
59
|
-
|
60
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
61
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
62
|
-
assert market_status[Ecmsc.PRECISION.value]
|
59
|
+
self.ensure_required_market_status_values(market_status)
|
63
60
|
assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]) == \
|
64
61
|
market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]
|
65
62
|
assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_PRICE.value]) == \
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bitfinex.py
RENAMED
@@ -55,10 +55,7 @@ class TestBitfinexRealExchangeTester(RealExchangeTester):
|
|
55
55
|
|
56
56
|
async def test_get_market_status(self):
|
57
57
|
for market_status in await self.get_market_statuses():
|
58
|
-
|
59
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
60
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
61
|
-
assert market_status[Ecmsc.PRECISION.value]
|
58
|
+
self.ensure_required_market_status_values(market_status)
|
62
59
|
assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]) == \
|
63
60
|
market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]
|
64
61
|
assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_PRICE.value]) == \
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bitget.py
RENAMED
@@ -57,10 +57,7 @@ class TestBitgetRealExchangeTester(RealExchangeTester):
|
|
57
57
|
|
58
58
|
async def test_get_market_status(self):
|
59
59
|
for market_status in await self.get_market_statuses():
|
60
|
-
|
61
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
62
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
63
|
-
assert market_status[Ecmsc.PRECISION.value]
|
60
|
+
self.ensure_required_market_status_values(market_status)
|
64
61
|
# on Bitget, precision is a decimal instead of a number of digits
|
65
62
|
assert 0 < market_status[Ecmsc.PRECISION.value][
|
66
63
|
Ecmsc.PRECISION_AMOUNT.value] < 1 # to be fixed in Bitget tentacle
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bithumb.py
RENAMED
@@ -50,10 +50,7 @@ class TestBithumbRealExchangeTester(RealExchangeTester):
|
|
50
50
|
|
51
51
|
async def test_get_market_status(self):
|
52
52
|
for market_status in await self.get_market_statuses():
|
53
|
-
|
54
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
55
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
56
|
-
assert market_status[Ecmsc.PRECISION.value]
|
53
|
+
self.ensure_required_market_status_values(market_status)
|
57
54
|
assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]) == \
|
58
55
|
market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_AMOUNT.value]
|
59
56
|
assert int(market_status[Ecmsc.PRECISION.value][Ecmsc.PRECISION_PRICE.value]) == \
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bitso.py
RENAMED
@@ -49,10 +49,7 @@ class TestBitsoRealExchangeTester(RealExchangeTester):
|
|
49
49
|
|
50
50
|
async def test_get_market_status(self):
|
51
51
|
for market_status in await self.get_market_statuses():
|
52
|
-
|
53
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
54
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
55
|
-
assert market_status[Ecmsc.PRECISION.value]
|
52
|
+
self.ensure_required_market_status_values(market_status)
|
56
53
|
# on this exchange, precision is a decimal instead of a number of digits
|
57
54
|
assert 0 < market_status[Ecmsc.PRECISION.value][
|
58
55
|
Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in this exchange tentacle
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bitstamp.py
RENAMED
@@ -53,10 +53,7 @@ class TestBitstampRealExchangeTester(RealExchangeTester):
|
|
53
53
|
|
54
54
|
async def test_get_market_status(self):
|
55
55
|
for market_status in await self.get_market_statuses():
|
56
|
-
|
57
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
58
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
59
|
-
assert market_status[Ecmsc.PRECISION.value]
|
56
|
+
self.ensure_required_market_status_values(market_status)
|
60
57
|
# on this exchange, precision is a decimal instead of a number of digits
|
61
58
|
assert 0 < market_status[Ecmsc.PRECISION.value][
|
62
59
|
Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in this exchange tentacle
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_bybit.py
RENAMED
@@ -53,10 +53,7 @@ class TestBybitRealExchangeTester(RealExchangeTester):
|
|
53
53
|
|
54
54
|
async def test_get_market_status(self):
|
55
55
|
for market_status in await self.get_market_statuses():
|
56
|
-
|
57
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
58
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
59
|
-
assert market_status[Ecmsc.PRECISION.value]
|
56
|
+
self.ensure_required_market_status_values(market_status)
|
60
57
|
# on Bybit, precision is a decimal instead of a number of digits
|
61
58
|
assert 0 < market_status[Ecmsc.PRECISION.value][
|
62
59
|
Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in Bybit tentacle
|
@@ -59,10 +59,7 @@ class TestBybitRealExchangeTester(RealFuturesExchangeTester):
|
|
59
59
|
|
60
60
|
async def test_get_market_status(self):
|
61
61
|
for market_status in await self.get_market_statuses():
|
62
|
-
|
63
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
64
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
65
|
-
assert market_status[Ecmsc.PRECISION.value]
|
62
|
+
self.ensure_required_market_status_values(market_status)
|
66
63
|
# on Bybit, precision is a decimal instead of a number of digits
|
67
64
|
assert 0 < market_status[Ecmsc.PRECISION.value][
|
68
65
|
Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in Bybit tentacle
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_coinbase.py
RENAMED
@@ -50,10 +50,7 @@ class TestCoinbaseRealExchangeTester(RealExchangeTester):
|
|
50
50
|
|
51
51
|
async def test_get_market_status(self):
|
52
52
|
for market_status in await self.get_market_statuses():
|
53
|
-
|
54
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
55
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
56
|
-
assert market_status[Ecmsc.PRECISION.value]
|
53
|
+
self.ensure_required_market_status_values(market_status)
|
57
54
|
assert 0 < market_status[Ecmsc.PRECISION.value][
|
58
55
|
Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in coinbase tentacle
|
59
56
|
assert 0 < market_status[Ecmsc.PRECISION.value][
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_coinex.py
RENAMED
@@ -53,10 +53,7 @@ class TestCoinexRealExchangeTester(RealExchangeTester):
|
|
53
53
|
|
54
54
|
async def test_get_market_status(self):
|
55
55
|
for market_status in await self.get_market_statuses():
|
56
|
-
|
57
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
58
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
59
|
-
assert market_status[Ecmsc.PRECISION.value]
|
56
|
+
self.ensure_required_market_status_values(market_status)
|
60
57
|
# on this exchange, precision is a decimal instead of a number of digits
|
61
58
|
assert 0 < market_status[Ecmsc.PRECISION.value][
|
62
59
|
Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in this exchange tentacle
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_cryptocom.py
RENAMED
@@ -51,10 +51,7 @@ class TestCryptoComRealExchangeTester(RealExchangeTester):
|
|
51
51
|
|
52
52
|
async def test_get_market_status(self):
|
53
53
|
for market_status in await self.get_market_statuses():
|
54
|
-
|
55
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
56
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
57
|
-
assert market_status[Ecmsc.PRECISION.value]
|
54
|
+
self.ensure_required_market_status_values(market_status)
|
58
55
|
# on CryptoCom, precision is a decimal instead of a number of digits
|
59
56
|
assert 0 < market_status[Ecmsc.PRECISION.value][
|
60
57
|
Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in CryptoCom tentacle
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_gateio.py
RENAMED
@@ -49,10 +49,7 @@ class TestGateIORealExchangeTester(RealExchangeTester):
|
|
49
49
|
|
50
50
|
async def test_get_market_status(self):
|
51
51
|
for market_status in await self.get_market_statuses():
|
52
|
-
|
53
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
54
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
55
|
-
assert market_status[Ecmsc.PRECISION.value]
|
52
|
+
self.ensure_required_market_status_values(market_status)
|
56
53
|
assert 1e-08 <= market_status[Ecmsc.PRECISION.value][
|
57
54
|
Ecmsc.PRECISION_AMOUNT.value] < 1 # to be fixed in tentacle
|
58
55
|
assert 1e-08 <= market_status[Ecmsc.PRECISION.value][
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_hitbtc.py
RENAMED
@@ -50,10 +50,7 @@ class TestHitBtcRealExchangeTester(RealExchangeTester):
|
|
50
50
|
|
51
51
|
async def test_get_market_status(self):
|
52
52
|
for market_status in await self.get_market_statuses():
|
53
|
-
|
54
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
55
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
56
|
-
assert market_status[Ecmsc.PRECISION.value]
|
53
|
+
self.ensure_required_market_status_values(market_status)
|
57
54
|
assert 1e-08 <= market_status[Ecmsc.PRECISION.value][
|
58
55
|
Ecmsc.PRECISION_AMOUNT.value] < 1 # to be fixed in hitbtc tentacle
|
59
56
|
assert 1e-09 <= market_status[Ecmsc.PRECISION.value][
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_hollaex.py
RENAMED
@@ -44,10 +44,7 @@ class TestHollaexRealExchangeTester(RealExchangeTester):
|
|
44
44
|
|
45
45
|
async def test_get_market_status(self):
|
46
46
|
for market_status in await self.get_market_statuses():
|
47
|
-
|
48
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
49
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
50
|
-
assert market_status[Ecmsc.PRECISION.value]
|
47
|
+
self.ensure_required_market_status_values(market_status)
|
51
48
|
assert 1e-08 <= market_status[Ecmsc.PRECISION.value][
|
52
49
|
Ecmsc.PRECISION_AMOUNT.value] < 1.0 # to be fixed in tentacle
|
53
50
|
assert 1e-08 <= market_status[Ecmsc.PRECISION.value][
|
@@ -57,6 +54,7 @@ class TestHollaexRealExchangeTester(RealExchangeTester):
|
|
57
54
|
Ecmsc.LIMITS_PRICE.value,
|
58
55
|
Ecmsc.LIMITS_COST.value))
|
59
56
|
self.check_market_status_limits(market_status,
|
57
|
+
normal_price_max=30000,
|
60
58
|
normal_cost_min=1e-07,
|
61
59
|
low_price_min=0.01, # XRP/USDT instead of /BTC
|
62
60
|
low_price_max=1,
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_htx.py
RENAMED
@@ -50,10 +50,7 @@ class TestHTXRealExchangeTester(RealExchangeTester):
|
|
50
50
|
|
51
51
|
async def test_get_market_status(self):
|
52
52
|
for market_status in await self.get_market_statuses():
|
53
|
-
|
54
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
55
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
56
|
-
assert market_status[Ecmsc.PRECISION.value]
|
53
|
+
self.ensure_required_market_status_values(market_status)
|
57
54
|
assert 1e-06 <= market_status[Ecmsc.PRECISION.value][
|
58
55
|
Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in tentacle
|
59
56
|
assert 1e-09 <= market_status[Ecmsc.PRECISION.value][
|
@@ -85,7 +82,7 @@ class TestHTXRealExchangeTester(RealExchangeTester):
|
|
85
82
|
|
86
83
|
# without useHistoricalEndpointForSpot=False
|
87
84
|
useHistoricalEndpointForSpot_symbol_prices = await self.get_symbol_prices(limit=200)
|
88
|
-
assert len(useHistoricalEndpointForSpot_symbol_prices) ==
|
85
|
+
assert len(useHistoricalEndpointForSpot_symbol_prices) == 200
|
89
86
|
|
90
87
|
async def test_get_historical_symbol_prices(self):
|
91
88
|
# try with since and limit (used in data collector)
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_kraken.py
RENAMED
@@ -49,10 +49,7 @@ class TestKrakenRealExchangeTester(RealExchangeTester):
|
|
49
49
|
|
50
50
|
async def test_get_market_status(self):
|
51
51
|
for market_status in await self.get_market_statuses():
|
52
|
-
|
53
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
54
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
55
|
-
assert market_status[Ecmsc.PRECISION.value]
|
52
|
+
self.ensure_required_market_status_values(market_status)
|
56
53
|
# on this exchange, precision is a decimal instead of a number of digits
|
57
54
|
assert 0 < market_status[Ecmsc.PRECISION.value][
|
58
55
|
Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in this exchange tentacle
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_kucoin.py
RENAMED
@@ -54,10 +54,7 @@ class TestKucoinRealExchangeTester(RealExchangeTester):
|
|
54
54
|
|
55
55
|
async def test_get_market_status(self):
|
56
56
|
for market_status in await self.get_market_statuses():
|
57
|
-
|
58
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
59
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
60
|
-
assert market_status[Ecmsc.PRECISION.value]
|
57
|
+
self.ensure_required_market_status_values(market_status)
|
61
58
|
# on this exchange, precision is a decimal instead of a number of digits
|
62
59
|
assert 0 < market_status[Ecmsc.PRECISION.value][
|
63
60
|
Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in this exchange tentacle
|
@@ -56,10 +56,7 @@ class TestKucoinFuturesRealExchangeTester(RealFuturesExchangeTester):
|
|
56
56
|
|
57
57
|
async def test_get_market_status(self):
|
58
58
|
for market_status in await self.get_market_statuses():
|
59
|
-
|
60
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
61
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
62
|
-
assert market_status[Ecmsc.PRECISION.value]
|
59
|
+
self.ensure_required_market_status_values(market_status)
|
63
60
|
# on this exchange, precision is a decimal instead of a number of digits
|
64
61
|
assert 0 < market_status[Ecmsc.PRECISION.value][
|
65
62
|
Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in this exchange tentacle
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_mexc.py
RENAMED
@@ -50,10 +50,7 @@ class TestMEXCRealExchangeTester(RealExchangeTester):
|
|
50
50
|
|
51
51
|
async def test_get_market_status(self):
|
52
52
|
for market_status in await self.get_market_statuses():
|
53
|
-
|
54
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
55
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
56
|
-
assert market_status[Ecmsc.PRECISION.value]
|
53
|
+
self.ensure_required_market_status_values(market_status)
|
57
54
|
assert 1e-06 <= market_status[Ecmsc.PRECISION.value][
|
58
55
|
Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in tentacle
|
59
56
|
assert 1e-09 <= market_status[Ecmsc.PRECISION.value][
|
{OctoBot-Trading-2.4.76 → OctoBot-Trading-2.4.78}/tests_additional/real_exchanges/test_ndax.py
RENAMED
@@ -53,10 +53,7 @@ class TestNdaxRealExchangeTester(RealExchangeTester):
|
|
53
53
|
|
54
54
|
async def test_get_market_status(self):
|
55
55
|
for market_status in await self.get_market_statuses():
|
56
|
-
|
57
|
-
assert market_status[Ecmsc.TYPE.value] == self.MARKET_STATUS_TYPE
|
58
|
-
assert market_status[Ecmsc.SYMBOL.value] in (self.SYMBOL, self.SYMBOL_2, self.SYMBOL_3)
|
59
|
-
assert market_status[Ecmsc.PRECISION.value]
|
56
|
+
self.ensure_required_market_status_values(market_status)
|
60
57
|
# on this exchange, precision is a decimal instead of a number of digits
|
61
58
|
assert 0 < market_status[Ecmsc.PRECISION.value][
|
62
59
|
Ecmsc.PRECISION_AMOUNT.value] <= 1 # to be fixed in this exchange tentacle
|