OctoBot-Trading 2.4.2__tar.gz → 2.4.4__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.2 → OctoBot-Trading-2.4.4}/CHANGELOG.md +11 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.2/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.4}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/README.md +1 -1
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/portfolio.py +2 -4
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/trades.py +1 -1
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/constants.py +0 -10
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/enums.py +7 -2
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/errors.py +0 -10
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +1 -1
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/abstract_exchange.py +4 -4
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/adapters/abstract_adapter.py +9 -1
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +1 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +15 -13
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +1 -1
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/traders/trader.py +10 -11
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/types/rest_exchange.py +36 -34
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/types/websocket_exchange.py +7 -2
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/util/exchange_util.py +6 -6
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/mode_config.py +21 -12
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +6 -3
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/exchange_personal_data.py +19 -17
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/channel/orders.py +35 -27
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/channel/orders_updater.py +2 -2
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/order.py +17 -28
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/order_factory.py +2 -1
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/order_util.py +6 -4
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/orders_manager.py +26 -14
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/channel/trades.py +1 -1
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/trade.py +6 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/trade_factory.py +2 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/trades_manager.py +14 -4
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/signals/signal_creation.py +23 -8
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/signals/trading_signal_bundle_builder.py +4 -5
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/signals/util.py +4 -3
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/orders_storage.py +1 -4
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/script_keywords/basic_keywords/test_amount.py +6 -4
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/test_order.py +22 -8
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/test_order_util.py +46 -8
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/test_orders_storage_operations.py +9 -3
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/trades/__init__.py +2 -2
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/trades/test_trade_factory.py +10 -3
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/trades/test_trade_manager.py +16 -15
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/signals/test_trading_signal_bundle_builder.py +25 -25
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/signals/test_util.py +7 -7
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/LICENSE +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/OctoBot_Trading.egg-info/requires.txt +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/contracts.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/exchange.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/basic_exchange_wrapper.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/modes_util.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +12 -12
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/position.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/requirements.txt +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/setup.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_basic_exchange_wrapper.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/traders/test_trader.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/exchanges/util/test_exchange_util.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/test_abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_ascendex.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_binance.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_bitget.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_bithumb.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_bitso.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_bittrex.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_bybit.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_coinbase.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_coinex.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_gateio.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_hollaex.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_huobi.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_huobipro.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_kraken.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_kucoin.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_ndax.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_okcoin.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_okx.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_phemex.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_poloniex.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_upbit.py +0 -0
- {OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,17 @@ 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.4] - 2023-06-08
|
8
|
+
### Fixed
|
9
|
+
- Orders sync issues
|
10
|
+
- Order sizing issues when using % param
|
11
|
+
|
12
|
+
## [2.4.3] - 2023-05-12
|
13
|
+
### Updated
|
14
|
+
- Use orders shared if for pnl
|
15
|
+
### Fixed
|
16
|
+
- Chained orders in trading signals
|
17
|
+
|
7
18
|
## [2.4.2] - 2023-05-10
|
8
19
|
### Added
|
9
20
|
- Display timeframe
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.4
|
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.4](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.4
|
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.4](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.4](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)
|
@@ -40,14 +40,12 @@ def get_global_portfolio_currencies_values(exchange_managers: list) -> dict:
|
|
40
40
|
currencies_values = {}
|
41
41
|
for exchange in exchange_managers:
|
42
42
|
this_currency_values = (
|
43
|
-
exchange.exchange_personal_data.portfolio_manager
|
44
|
-
|
43
|
+
exchange.exchange_personal_data.portfolio_manager
|
44
|
+
.portfolio_value_holder.get_current_crypto_currencies_values()
|
45
45
|
)
|
46
46
|
for currency, value in this_currency_values.items():
|
47
47
|
if currency not in currencies_values:
|
48
48
|
currencies_values[currency] = value
|
49
|
-
else:
|
50
|
-
currencies_values[currency] += value
|
51
49
|
return currencies_values
|
52
50
|
|
53
51
|
|
@@ -25,7 +25,7 @@ def get_trade_history(
|
|
25
25
|
) -> list:
|
26
26
|
return [
|
27
27
|
trade.to_dict() if as_dict else trade
|
28
|
-
for trade in exchange_manager.exchange_personal_data.trades_manager.
|
28
|
+
for trade in exchange_manager.exchange_personal_data.trades_manager.get_trades()
|
29
29
|
if _trade_filter(trade, quote, symbol, since, include_cancelled)
|
30
30
|
]
|
31
31
|
|
@@ -181,16 +181,6 @@ CANCEL_ORDER_STATUS_SCOPE = [enums.OrderStatus.PENDING_CANCEL,
|
|
181
181
|
enums.OrderStatus.EXPIRED,
|
182
182
|
enums.OrderStatus.REJECTED]
|
183
183
|
|
184
|
-
ORDER_NON_EMPTY_FIELDS = [enums.ExchangeConstantsOrderColumns.ID.value,
|
185
|
-
enums.ExchangeConstantsOrderColumns.TIMESTAMP.value,
|
186
|
-
enums.ExchangeConstantsOrderColumns.SYMBOL.value,
|
187
|
-
enums.ExchangeConstantsOrderColumns.TYPE.value,
|
188
|
-
enums.ExchangeConstantsOrderColumns.SIDE.value,
|
189
|
-
enums.ExchangeConstantsOrderColumns.PRICE.value,
|
190
|
-
enums.ExchangeConstantsOrderColumns.AMOUNT.value,
|
191
|
-
enums.ExchangeConstantsOrderColumns.STATUS.value]
|
192
|
-
ORDER_REQUIRED_FIELDS = ORDER_NON_EMPTY_FIELDS + [enums.ExchangeConstantsOrderColumns.REMAINING.value]
|
193
|
-
|
194
184
|
DEFAULT_INITIALIZATION_EVENT_TOPICS = [
|
195
185
|
commons_enums.InitializationEventExchangeTopics.BALANCE,
|
196
186
|
commons_enums.InitializationEventExchangeTopics.ORDERS,
|
@@ -299,6 +299,7 @@ class ExchangeConstantsOrderBookTickerColumns(enum.Enum):
|
|
299
299
|
class ExchangeConstantsOrderColumns(enum.Enum):
|
300
300
|
INFO = "info"
|
301
301
|
ID = "id"
|
302
|
+
EXCHANGE_ID = "exchange_id"
|
302
303
|
ORDER_ID = "order_id"
|
303
304
|
TIMESTAMP = "timestamp"
|
304
305
|
DATETIME = 'datetime'
|
@@ -331,6 +332,10 @@ class ExchangeConstantsOrderColumns(enum.Enum):
|
|
331
332
|
ENTRIES = "entries"
|
332
333
|
|
333
334
|
|
335
|
+
class TradeExtraConstants(enum.Enum):
|
336
|
+
CREATION_TIME = "creation_time"
|
337
|
+
|
338
|
+
|
334
339
|
class ExchangeConstantsPositionColumns(enum.Enum):
|
335
340
|
ID = "id"
|
336
341
|
TIMESTAMP = "timestamp"
|
@@ -523,7 +528,7 @@ class TradingSignalOrdersAttrs(enum.Enum):
|
|
523
528
|
GROUP_ID = "group_id"
|
524
529
|
GROUP_TYPE = "group_type"
|
525
530
|
TAG = "tag"
|
526
|
-
|
531
|
+
ORDER_ID = "order_id"
|
527
532
|
BUNDLED_WITH = "bundled_with"
|
528
533
|
CHAINED_TO = "chained_to"
|
529
534
|
ADDITIONAL_ORDERS = "additional_orders"
|
@@ -545,12 +550,12 @@ class StoredOrdersAttr(enum.Enum):
|
|
545
550
|
CHAINED_ORDERS = "co"
|
546
551
|
EXCHANGE_CREATION_PARAMS = "ecp"
|
547
552
|
TRADER_CREATION_KWARGS = "tck"
|
548
|
-
SHARED_SIGNAL_ORDER_ID = "ssoi"
|
549
553
|
HAS_BEEN_BUNDLED = "hbb"
|
550
554
|
ENTRIES = "en"
|
551
555
|
UPDATE_TIME = "ut"
|
552
556
|
UPDATE_TYPE = "uty"
|
553
557
|
ORDER_ID = "oid"
|
558
|
+
ORDER_EXCHANGE_ID = "oeid"
|
554
559
|
ORDER_STATUS = "s"
|
555
560
|
ORDER_DETAILS = "d"
|
556
561
|
UPDATE_WITH_TRIGGERING_ORDER_FEES = "utf"
|
@@ -111,16 +111,6 @@ class PortfolioOperationError(Exception):
|
|
111
111
|
"""
|
112
112
|
|
113
113
|
|
114
|
-
class MissingOrderException(Exception):
|
115
|
-
"""
|
116
|
-
Raised when an order is missing
|
117
|
-
"""
|
118
|
-
|
119
|
-
def __init__(self, order_id):
|
120
|
-
super().__init__()
|
121
|
-
self.order_id = order_id
|
122
|
-
|
123
|
-
|
124
114
|
class InvalidOrderState(Exception):
|
125
115
|
"""
|
126
116
|
Raised when an order state is handled on a previously cleared order
|
@@ -67,7 +67,7 @@ class OHLCVUpdater(ohlcv_channel.OHLCVProducer):
|
|
67
67
|
]
|
68
68
|
|
69
69
|
def _get_traded_pairs(self):
|
70
|
-
return self.channel.exchange_manager.exchange_config.
|
70
|
+
return self.channel.exchange_manager.exchange_config.traded_symbol_pairs
|
71
71
|
|
72
72
|
def _get_time_frames(self):
|
73
73
|
return self.channel.exchange_manager.exchange_config.available_time_frames
|
{OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/abstract_exchange.py
RENAMED
@@ -227,10 +227,10 @@ class AbstractExchange(tentacles_management.AbstractTentacle):
|
|
227
227
|
"""
|
228
228
|
raise NotImplementedError("get_all_currencies_price_ticker is not implemented")
|
229
229
|
|
230
|
-
async def get_order(self,
|
230
|
+
async def get_order(self, exchange_order_id: str, symbol: str = None, **kwargs: dict) -> dict:
|
231
231
|
"""
|
232
232
|
Get the order data from the exchange
|
233
|
-
:param
|
233
|
+
:param exchange_order_id: the order id on exchange
|
234
234
|
:param symbol: the order symbol
|
235
235
|
:return: the order data
|
236
236
|
"""
|
@@ -288,11 +288,11 @@ class AbstractExchange(tentacles_management.AbstractTentacle):
|
|
288
288
|
raise NotImplementedError("get_leverage_tiers is not implemented")
|
289
289
|
|
290
290
|
async def cancel_order(
|
291
|
-
self,
|
291
|
+
self, exchange_order_id: str, symbol: str, order_type: enums.TraderOrderType, **kwargs: dict
|
292
292
|
) -> enums.OrderStatus:
|
293
293
|
"""
|
294
294
|
Cancel a order on the exchange
|
295
|
-
:param
|
295
|
+
:param exchange_order_id: the order id on exchange
|
296
296
|
:param symbol: the order symbol
|
297
297
|
:param order_type: the type of the order
|
298
298
|
:return: True if the order is successfully cancelled
|
@@ -16,6 +16,7 @@
|
|
16
16
|
import decimal
|
17
17
|
|
18
18
|
import octobot_trading.errors as errors
|
19
|
+
import octobot_trading.enums as enums
|
19
20
|
import octobot_commons.logging as logging
|
20
21
|
import octobot_commons.constants as commons_constants
|
21
22
|
|
@@ -133,6 +134,9 @@ class AbstractAdapter:
|
|
133
134
|
return default
|
134
135
|
|
135
136
|
def fix_order(self, raw, **kwargs):
|
137
|
+
# id is reserved for octobot managed id. store exchange id in EXCHANGE_ID
|
138
|
+
raw[enums.ExchangeConstantsOrderColumns.EXCHANGE_ID.value] = \
|
139
|
+
raw.pop(enums.ExchangeConstantsOrderColumns.ID.value, None)
|
136
140
|
# add generic logic if necessary
|
137
141
|
return raw
|
138
142
|
|
@@ -182,7 +186,11 @@ class AbstractAdapter:
|
|
182
186
|
raise NotImplementedError("parse_public_recent_trades is not implemented")
|
183
187
|
|
184
188
|
def fix_trades(self, raw, **kwargs):
|
185
|
-
|
189
|
+
for trade in raw:
|
190
|
+
# id is reserved for octobot managed id. store exchange id in EXCHANGE_ID
|
191
|
+
trade[enums.ExchangeConstantsOrderColumns.EXCHANGE_ID.value] = \
|
192
|
+
trade.pop(enums.ExchangeConstantsOrderColumns.ID.value, None)
|
193
|
+
# add generic logic if necessary
|
186
194
|
return raw
|
187
195
|
|
188
196
|
def parse_trades(self, fixed, **kwargs):
|
@@ -148,6 +148,7 @@ class CCXTAdapter(adapters.AbstractAdapter):
|
|
148
148
|
for recent_trade in fixed:
|
149
149
|
recent_trade.pop(ecoc.INFO.value, None)
|
150
150
|
recent_trade.pop(ecoc.DATETIME.value, None)
|
151
|
+
recent_trade.pop(ecoc.EXCHANGE_ID.value, None)
|
151
152
|
recent_trade.pop(ecoc.ID.value, None)
|
152
153
|
recent_trade.pop(ecoc.ORDER.value, None)
|
153
154
|
recent_trade.pop(ecoc.FEE.value, None)
|
@@ -285,12 +285,12 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
285
285
|
raise octobot_trading.errors.FailedRequest(f"Failed to get_all_currencies_price_ticker {e}")
|
286
286
|
|
287
287
|
# ORDERS
|
288
|
-
async def get_order(self,
|
288
|
+
async def get_order(self, exchange_order_id: str, symbol: str = None, **kwargs: dict) -> dict:
|
289
289
|
if self.client.has['fetchOrder']:
|
290
290
|
try:
|
291
291
|
with self.error_describer():
|
292
292
|
return self.adapter.adapt_order(
|
293
|
-
await self.client.fetch_order(
|
293
|
+
await self.client.fetch_order(exchange_order_id, symbol, params=kwargs),
|
294
294
|
symbol=symbol
|
295
295
|
)
|
296
296
|
except ccxt.OrderNotFound:
|
@@ -306,7 +306,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
306
306
|
# When fetch_order is not supported, uses get_open_orders and extract order id
|
307
307
|
open_orders = await self.get_open_orders(symbol=symbol)
|
308
308
|
for order in open_orders:
|
309
|
-
if order.get(ecoc.
|
309
|
+
if order.get(ecoc.EXCHANGE_ID.value, None) == exchange_order_id:
|
310
310
|
return order
|
311
311
|
return None # OrderNotFound
|
312
312
|
|
@@ -449,7 +449,7 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
449
449
|
async def create_limit_trailing_stop_order(self, symbol, quantity, price=None, side=None, params=None) -> dict:
|
450
450
|
raise NotImplementedError("create_limit_trailing_stop_order is not implemented")
|
451
451
|
|
452
|
-
async def edit_order(self,
|
452
|
+
async def edit_order(self, exchange_order_id: str, order_type: enums.TraderOrderType, symbol: str,
|
453
453
|
quantity: float, price: float, stop_price: float = None, side: str = None,
|
454
454
|
current_price: float = None, params: dict = None):
|
455
455
|
ccxt_order_type = self.get_ccxt_order_type(order_type)
|
@@ -459,21 +459,23 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
459
459
|
price_to_use = None
|
460
460
|
# do not use keyword arguments here as default ccxt edit order is passing *args (and not **kwargs)
|
461
461
|
return self.adapter.adapt_order(
|
462
|
-
await self.client.edit_order(
|
462
|
+
await self.client.edit_order(
|
463
|
+
exchange_order_id, symbol, ccxt_order_type, side, quantity, price_to_use, params
|
464
|
+
),
|
463
465
|
symbol=symbol
|
464
466
|
)
|
465
467
|
|
466
468
|
async def cancel_order(
|
467
|
-
|
469
|
+
self, exchange_order_id: str, symbol: str, order_type: enums.TraderOrderType, **kwargs: dict
|
468
470
|
) -> enums.OrderStatus:
|
469
471
|
try:
|
470
472
|
with self.error_describer():
|
471
|
-
await self.client.cancel_order(
|
473
|
+
await self.client.cancel_order(exchange_order_id, symbol=symbol, params=kwargs)
|
472
474
|
# no exception, cancel worked
|
473
475
|
try:
|
474
476
|
# make sure order is canceled
|
475
477
|
cancelled_order = await self.exchange_manager.exchange.get_order(
|
476
|
-
|
478
|
+
exchange_order_id, symbol=symbol
|
477
479
|
)
|
478
480
|
if cancelled_order is None or personal_data.parse_is_cancelled(cancelled_order):
|
479
481
|
return enums.OrderStatus.CANCELED
|
@@ -489,13 +491,13 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
489
491
|
# get a cancelled order).
|
490
492
|
return enums.OrderStatus.CANCELED
|
491
493
|
except ccxt.OrderNotFound as e:
|
492
|
-
self.logger.debug(f"Trying to cancel order with id {
|
494
|
+
self.logger.debug(f"Trying to cancel order with id {exchange_order_id} but order was not found")
|
493
495
|
raise octobot_trading.errors.OrderCancelError from e
|
494
496
|
except (ccxt.NotSupported, octobot_trading.errors.NotSupported) as e:
|
495
497
|
raise octobot_trading.errors.NotSupported from e
|
496
498
|
except Exception as e:
|
497
|
-
self.logger.exception(e, True, f"Unexpected error when cancelling order with id: "
|
498
|
-
f"{
|
499
|
+
self.logger.exception(e, True, f"Unexpected error when cancelling order with exchange id: "
|
500
|
+
f"{exchange_order_id} failed to cancel | {e} ({e.__class__.__name__})")
|
499
501
|
raise e
|
500
502
|
|
501
503
|
async def get_positions(self, symbols=None, **kwargs: dict) -> list:
|
@@ -726,8 +728,8 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
726
728
|
def parse_currency(self, currency):
|
727
729
|
return self.client.safe_currency_code(currency)
|
728
730
|
|
729
|
-
def
|
730
|
-
return order.get(ecoc.
|
731
|
+
def parse_exhange_order_id(self, order):
|
732
|
+
return order.get(ecoc.EXCHANGE_ID.value, None)
|
731
733
|
|
732
734
|
def parse_order_symbol(self, order):
|
733
735
|
return order.get(ecoc.SYMBOL.value, None)
|
@@ -565,7 +565,7 @@ class CCXTWebsocketConnector(abstract_websocket_exchange.AbstractWebsocketExchan
|
|
565
565
|
message = f"Closed exchange connection to force reconnect. Error: {err}"
|
566
566
|
if subsequent_disconnections > 1 and subsequent_disconnections % 5 == 0:
|
567
567
|
self.logger.error(
|
568
|
-
f"Multiple disconnections if a row [{subsequent_disconnections}]for {ws_des}. {message}"
|
568
|
+
f"Multiple disconnections if a row [{subsequent_disconnections}] for {ws_des}. {message}"
|
569
569
|
)
|
570
570
|
else:
|
571
571
|
self.logger.debug(message)
|
@@ -165,7 +165,7 @@ class Trader(util.Initializable):
|
|
165
165
|
if not order.can_be_edited():
|
166
166
|
raise errors.OrderEditError(f"Order can't be edited, order: {order}")
|
167
167
|
changed = False
|
168
|
-
|
168
|
+
previous_exchange_order_id = order.exchange_order_id
|
169
169
|
try:
|
170
170
|
async with order.lock:
|
171
171
|
# now that we got the lock, ensure we can edit the order
|
@@ -183,7 +183,7 @@ class Trader(util.Initializable):
|
|
183
183
|
order_params.update(params or {})
|
184
184
|
# fill in every param as some exchange rely on re-creating the order altogether
|
185
185
|
edited_order = await self.exchange_manager.exchange.edit_order(
|
186
|
-
order.
|
186
|
+
order.exchange_order_id,
|
187
187
|
order.order_type,
|
188
188
|
order.symbol,
|
189
189
|
quantity=order.origin_quantity if edited_quantity is None else edited_quantity,
|
@@ -222,9 +222,9 @@ class Trader(util.Initializable):
|
|
222
222
|
self.logger.info(f"Edited order: {order}")
|
223
223
|
return changed
|
224
224
|
finally:
|
225
|
-
if
|
225
|
+
if previous_exchange_order_id != order.exchange_order_id:
|
226
226
|
# order id changed: update orders_manager to keep consistency
|
227
|
-
self.exchange_manager.exchange_personal_data.orders_manager.replace_order(
|
227
|
+
self.exchange_manager.exchange_personal_data.orders_manager.replace_order(order.order_id, order)
|
228
228
|
|
229
229
|
async def _create_new_order(self, new_order, params: dict,
|
230
230
|
wait_for_creation=True,
|
@@ -263,16 +263,15 @@ class Trader(util.Initializable):
|
|
263
263
|
# rebind local elements to new order instance
|
264
264
|
if new_order.order_group:
|
265
265
|
updated_order.add_to_order_group(new_order.order_group)
|
266
|
+
updated_order.order_id = new_order.order_id
|
266
267
|
updated_order.tag = new_order.tag
|
267
268
|
updated_order.chained_orders = new_order.chained_orders
|
268
269
|
for chained_order in new_order.chained_orders:
|
269
270
|
chained_order.triggered_by = updated_order
|
270
|
-
chained_order.replace_associated_entry_id(new_order.order_id, updated_order.order_id)
|
271
271
|
updated_order.triggered_by = new_order.triggered_by
|
272
272
|
updated_order.has_been_bundled = new_order.has_been_bundled
|
273
273
|
updated_order.exchange_creation_params = new_order.exchange_creation_params
|
274
274
|
updated_order.is_waiting_for_chained_trigger = new_order.is_waiting_for_chained_trigger
|
275
|
-
updated_order.set_shared_signal_order_id(new_order.shared_signal_order_id)
|
276
275
|
updated_order.associated_entry_ids = new_order.associated_entry_ids
|
277
276
|
updated_order.update_with_triggering_order_fees = new_order.update_with_triggering_order_fees
|
278
277
|
|
@@ -362,7 +361,7 @@ class Trader(util.Initializable):
|
|
362
361
|
async with order.lock:
|
363
362
|
try:
|
364
363
|
order_status = await self.exchange_manager.exchange.cancel_order(
|
365
|
-
order.
|
364
|
+
order.exchange_order_id, order.symbol, order.order_type
|
366
365
|
)
|
367
366
|
except errors.NotSupported:
|
368
367
|
raise
|
@@ -370,7 +369,7 @@ class Trader(util.Initializable):
|
|
370
369
|
# retry to cancel order
|
371
370
|
self.logger.debug(f"Failed to cancel order ({err} {err.__class__.__name__}), retrying")
|
372
371
|
order_status = await self.exchange_manager.exchange.cancel_order(
|
373
|
-
order.
|
372
|
+
order.exchange_order_id, order.symbol, order.order_type
|
374
373
|
)
|
375
374
|
except errors.OrderCancelError as err:
|
376
375
|
if await self._handle_order_cancel_error(order, err, wait_for_cancelling, cancelling_timeout):
|
@@ -444,19 +443,19 @@ class Trader(util.Initializable):
|
|
444
443
|
await order.state.wait_for_terminate(cancelling_timeout)
|
445
444
|
self.logger.debug(f"Completed order cancelling, order: {order}")
|
446
445
|
|
447
|
-
async def cancel_order_with_id(self,
|
446
|
+
async def cancel_order_with_id(self, exchange_order_id, emit_trading_signals=False,
|
448
447
|
wait_for_cancelling=True,
|
449
448
|
cancelling_timeout=octobot_trading.constants.INDIVIDUAL_ORDER_SYNC_TIMEOUT):
|
450
449
|
"""
|
451
450
|
Gets order matching order_id from the OrderManager and calls self.cancel_order() on it
|
452
|
-
:param
|
451
|
+
:param exchange_order_id: Exchange id of the order to cancel
|
453
452
|
:param emit_trading_signals: when true, trading signals will be emitted
|
454
453
|
:param wait_for_cancelling: when True, always make sure the order is completely cancelled before returning.
|
455
454
|
:param cancelling_timeout: time before raising a timeout error when waiting for an order cancel
|
456
455
|
:return: True if cancel is successful, False if order is not found or cancellation failed
|
457
456
|
"""
|
458
457
|
try:
|
459
|
-
order = self.exchange_manager.exchange_personal_data.orders_manager.get_order(
|
458
|
+
order = self.exchange_manager.exchange_personal_data.orders_manager.get_order(exchange_order_id)
|
460
459
|
async with signals.remote_signal_publisher(self.exchange_manager, order.symbol, emit_trading_signals):
|
461
460
|
return await signals.cancel_order(
|
462
461
|
self.exchange_manager,
|
{OctoBot-Trading-2.4.2 → OctoBot-Trading-2.4.4}/octobot_trading/exchanges/types/rest_exchange.py
RENAMED
@@ -39,7 +39,7 @@ import octobot_trading.personal_data.orders as orders
|
|
39
39
|
|
40
40
|
|
41
41
|
class RestExchange(abstract_exchange.AbstractExchange):
|
42
|
-
ORDER_NON_EMPTY_FIELDS = [ecoc.
|
42
|
+
ORDER_NON_EMPTY_FIELDS = [ecoc.EXCHANGE_ID.value, ecoc.TIMESTAMP.value, ecoc.SYMBOL.value, ecoc.TYPE.value,
|
43
43
|
ecoc.SIDE.value, ecoc.PRICE.value, ecoc.AMOUNT.value, ecoc.STATUS.value]
|
44
44
|
ORDER_REQUIRED_FIELDS = ORDER_NON_EMPTY_FIELDS + [ecoc.REMAINING.value]
|
45
45
|
PRINT_DEBUG_LOGS = False
|
@@ -143,7 +143,7 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
143
143
|
return await self._verify_order(created_order, order_type, symbol, price, side)
|
144
144
|
return None
|
145
145
|
|
146
|
-
async def edit_order(self,
|
146
|
+
async def edit_order(self, exchange_order_id: str, order_type: enums.TraderOrderType, symbol: str,
|
147
147
|
quantity: decimal.Decimal, price: decimal.Decimal,
|
148
148
|
stop_price: decimal.Decimal = None, side: enums.TradeOrderSide = None,
|
149
149
|
current_price: decimal.Decimal = None,
|
@@ -158,17 +158,17 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
158
158
|
side = None if side is None else side.value
|
159
159
|
params = {} if params is None else params
|
160
160
|
params.update(self.exchange_manager.exchange_backend.get_orders_parameters(None))
|
161
|
-
edited_order = await self._edit_order(
|
161
|
+
edited_order = await self._edit_order(exchange_order_id, order_type, symbol, quantity=float_quantity,
|
162
162
|
price=float_price, stop_price=float_stop_price, side=side,
|
163
163
|
current_price=float_current_price, params=params)
|
164
164
|
order = await self._verify_order(edited_order, order_type, symbol, price, side)
|
165
165
|
return order
|
166
166
|
return None
|
167
167
|
|
168
|
-
async def _edit_order(self,
|
168
|
+
async def _edit_order(self, exchange_order_id: str, order_type: enums.TraderOrderType, symbol: str,
|
169
169
|
quantity: float, price: float, stop_price: float = None, side: str = None,
|
170
170
|
current_price: float = None, params: dict = None):
|
171
|
-
return await self.connector.edit_order(
|
171
|
+
return await self.connector.edit_order(exchange_order_id, order_type, symbol,
|
172
172
|
quantity, price, stop_price, side,
|
173
173
|
current_price, params)
|
174
174
|
|
@@ -196,14 +196,14 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
196
196
|
async def _verify_order(self, created_order, order_type, symbol, price, side, get_order_params=None):
|
197
197
|
# some exchanges are not returning the full order details on creation: fetch it if necessary
|
198
198
|
if created_order and not self._ensure_order_details_completeness(created_order):
|
199
|
-
if ecoc.
|
200
|
-
|
201
|
-
if
|
202
|
-
self.logger.error(f"No order id on created order: {created_order}")
|
199
|
+
if ecoc.EXCHANGE_ID.value in created_order:
|
200
|
+
order_exchange_id = created_order[ecoc.EXCHANGE_ID.value]
|
201
|
+
if order_exchange_id is None:
|
202
|
+
self.logger.error(f"No order exchange id on created order: {created_order}")
|
203
203
|
return None
|
204
204
|
params = get_order_params or {}
|
205
205
|
fetched_order = await self.get_order(
|
206
|
-
created_order[ecoc.
|
206
|
+
created_order[ecoc.EXCHANGE_ID.value], symbol=symbol, **params
|
207
207
|
)
|
208
208
|
if fetched_order is None:
|
209
209
|
created_order[ecoc.STATUS.value] = enums.OrderStatus.PENDING_CREATION.value
|
@@ -446,27 +446,27 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
446
446
|
async def get_all_currencies_price_ticker(self, **kwargs: dict) -> typing.Optional[list]:
|
447
447
|
return await self.connector.get_all_currencies_price_ticker(**kwargs)
|
448
448
|
|
449
|
-
async def get_order(self,
|
449
|
+
async def get_order(self, exchange_order_id: str, symbol: str = None, **kwargs: dict) -> dict:
|
450
450
|
return await self._ensure_order_completeness(
|
451
|
-
await self.connector.get_order(
|
451
|
+
await self.connector.get_order(exchange_order_id, symbol=symbol, **kwargs),
|
452
452
|
symbol, **kwargs
|
453
453
|
)
|
454
454
|
|
455
|
-
async def get_order_from_open_and_closed_orders(self,
|
455
|
+
async def get_order_from_open_and_closed_orders(self, exchange_order_id: str, symbol: str = None, **kwargs: dict) -> dict:
|
456
456
|
for order in await self.get_open_orders(symbol, **kwargs):
|
457
|
-
if order[enums.ExchangeConstantsOrderColumns.
|
457
|
+
if order[enums.ExchangeConstantsOrderColumns.EXCHANGE_ID.value] == exchange_order_id:
|
458
458
|
return order
|
459
459
|
for order in await self.get_closed_orders(symbol, **kwargs):
|
460
|
-
if order[enums.ExchangeConstantsOrderColumns.
|
460
|
+
if order[enums.ExchangeConstantsOrderColumns.EXCHANGE_ID.value] == exchange_order_id:
|
461
461
|
return order
|
462
462
|
return None # OrderNotFound
|
463
463
|
|
464
|
-
async def get_order_from_trades(self, symbol,
|
464
|
+
async def get_order_from_trades(self, symbol, exchange_order_id, order_to_update=None):
|
465
465
|
order_to_update = order_to_update or {}
|
466
466
|
trades = await self.get_my_recent_trades(symbol)
|
467
467
|
# usually the right trade is within the last ones
|
468
468
|
for trade in trades[::-1]:
|
469
|
-
if trade[ecoc.ORDER.value] ==
|
469
|
+
if trade[ecoc.ORDER.value] == exchange_order_id:
|
470
470
|
return exchanges_util.update_raw_order_from_raw_trade(order_to_update, trade)
|
471
471
|
return None #OrderNotFound
|
472
472
|
|
@@ -505,47 +505,49 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
505
505
|
]
|
506
506
|
|
507
507
|
async def _ensure_orders_completeness(
|
508
|
-
self, raw_orders, symbol, since=None, limit=None,
|
508
|
+
self, raw_orders, symbol, since=None, limit=None, trades_by_exchange_order_id=None, **kwargs
|
509
509
|
):
|
510
510
|
if not self.REQUIRE_ORDER_FEES_FROM_TRADES \
|
511
511
|
or not any(exchanges_util.is_missing_trading_fees(order) for order in raw_orders):
|
512
512
|
return raw_orders
|
513
|
-
|
513
|
+
trades_by_exchange_order_id = trades_by_exchange_order_id or await self._get_trades_by_exchange_order_id(
|
514
514
|
symbol=symbol, since=since, limit=limit, **kwargs
|
515
515
|
)
|
516
516
|
return [
|
517
|
-
await self._ensure_order_completeness(
|
517
|
+
await self._ensure_order_completeness(
|
518
|
+
order, symbol, trades_by_exchange_order_id=trades_by_exchange_order_id, **kwargs
|
519
|
+
)
|
518
520
|
for order in raw_orders
|
519
521
|
]
|
520
522
|
|
521
523
|
async def _ensure_order_completeness(
|
522
|
-
self, raw_order, symbol, since=None, limit=None,
|
524
|
+
self, raw_order, symbol, since=None, limit=None, trades_by_exchange_order_id=None, **kwargs
|
523
525
|
):
|
524
526
|
if not self.REQUIRE_ORDER_FEES_FROM_TRADES or not exchanges_util.is_missing_trading_fees(raw_order):
|
525
527
|
return raw_order
|
526
|
-
|
528
|
+
trades_by_exchange_order_id = trades_by_exchange_order_id or await self._get_trades_by_exchange_order_id(
|
527
529
|
symbol=symbol, since=since, limit=limit, **kwargs
|
528
530
|
)
|
529
|
-
exchanges_util.apply_trades_fees(raw_order,
|
531
|
+
exchanges_util.apply_trades_fees(raw_order, trades_by_exchange_order_id)
|
530
532
|
return raw_order
|
531
533
|
|
532
|
-
async def
|
533
|
-
|
534
|
+
async def _get_trades_by_exchange_order_id(self, symbol=None, since=None, limit=None, **kwargs):
|
535
|
+
trades_by_exchange_order_id = {}
|
534
536
|
for trade in await self.get_my_recent_trades(symbol=symbol, since=since, limit=limit, **kwargs):
|
535
|
-
|
536
|
-
if
|
537
|
-
|
537
|
+
exchange_order_id = trade[enums.ExchangeConstantsOrderColumns.ORDER.value]
|
538
|
+
if exchange_order_id in trades_by_exchange_order_id:
|
539
|
+
trades_by_exchange_order_id[exchange_order_id].append(trade)
|
538
540
|
else:
|
539
|
-
|
540
|
-
return
|
541
|
+
trades_by_exchange_order_id[exchange_order_id] = [trade]
|
542
|
+
return trades_by_exchange_order_id
|
541
543
|
|
542
544
|
async def get_my_recent_trades(self, symbol: str = None, since: int = None, limit: int = None, **kwargs: dict) -> list:
|
543
545
|
return await self.connector.get_my_recent_trades(symbol=symbol, since=since, limit=limit, **kwargs)
|
544
546
|
|
545
547
|
async def cancel_order(
|
546
|
-
self,
|
548
|
+
self, exchange_order_id: str, symbol: str, order_type: enums.TraderOrderType, **kwargs: dict
|
547
549
|
) -> enums.OrderStatus:
|
548
|
-
return await self.connector.cancel_order(
|
550
|
+
return await self.connector.cancel_order(exchange_order_id, symbol, order_type, **kwargs)
|
549
551
|
|
550
552
|
def get_trade_fee(self, symbol, order_type, quantity, price, taker_or_maker):
|
551
553
|
return self.connector.get_trade_fee(symbol, order_type, quantity, price, taker_or_maker)
|
@@ -836,8 +838,8 @@ class RestExchange(abstract_exchange.AbstractExchange):
|
|
836
838
|
def parse_order_book_ticker(self, order_book_ticker):
|
837
839
|
return self.connector.parse_order_book_ticker(order_book_ticker)
|
838
840
|
|
839
|
-
def
|
840
|
-
return self.connector.
|
841
|
+
def parse_exhange_order_id(self, order):
|
842
|
+
return self.connector.parse_exhange_order_id(order)
|
841
843
|
|
842
844
|
def parse_order_symbol(self, order):
|
843
845
|
return self.connector.parse_order_symbol(order)
|
@@ -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 asyncio
|
17
|
+
import sys
|
17
18
|
import concurrent.futures as futures
|
18
19
|
|
19
20
|
import octobot_commons.thread_util as thread_util
|
@@ -134,7 +135,8 @@ class WebSocketExchange(abstract_websocket.AbstractWebsocketExchange):
|
|
134
135
|
try:
|
135
136
|
self.websocket_connectors_executors = futures.ThreadPoolExecutor(
|
136
137
|
max_workers=len(self.websocket_connectors),
|
137
|
-
thread_name_prefix=f"{self.get_name()}-{self.exchange_name}-pool-executor"
|
138
|
+
thread_name_prefix=f"{self.get_name()}-{self.exchange_name}-pool-executor",
|
139
|
+
|
138
140
|
)
|
139
141
|
|
140
142
|
self.websocket_connectors_tasks = [
|
@@ -201,7 +203,10 @@ class WebSocketExchange(abstract_websocket.AbstractWebsocketExchange):
|
|
201
203
|
self.logger.error(f"Error when closing sockets : {e}")
|
202
204
|
for websocket_task in self.websocket_connectors_tasks:
|
203
205
|
websocket_task.cancel()
|
204
|
-
|
206
|
+
if sys.version_info.minor >= 9:
|
207
|
+
self.websocket_connectors_executors.shutdown(True)
|
208
|
+
else:
|
209
|
+
thread_util.stop_thread_pool_executor_non_gracefully(self.websocket_connectors_executors)
|
205
210
|
self.websocket_connectors_executors = None
|
206
211
|
|
207
212
|
def add_pairs(self, pairs, watching_only=False):
|