OctoBot-Trading 2.4.52__tar.gz → 2.4.53__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.52 → OctoBot-Trading-2.4.53}/CHANGELOG.md +4 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.52/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.53}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/README.md +1 -1
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +4 -2
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/order.py +8 -6
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/portfolio.py +1 -1
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/portfolio_manager.py +1 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +21 -9
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/__init__.py +1 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/test_portfolio.py +213 -174
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/test_portfolio_manager.py +1 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/LICENSE +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/OctoBot_Trading.egg-info/requires.txt +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/api/contracts.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/api/exchange.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/constants.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/enums.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/errors.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/traders/trader.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/util/exchange_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/util/symbol_details.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/mode_config.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/modes_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/order_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/position.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/signals/signal_creation.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/signals/util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/storage/orders_storage.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/util/test_tools/exchange_data.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/requirements.txt +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/setup.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/test_exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/traders/test_trader.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/exchanges/util/test_exchange_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/modes/script_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/modes/test_abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/modes/test_modes_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/test_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/test_order_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/trades/test_trade_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/trades/test_trade_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/signals/test_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_ascendex.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_binance.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_bingx.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_bitget.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_bithumb.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_bitso.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_bybit.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_coinbase.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_coinex.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_gateio.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_hollaex.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_htx.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_kraken.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_kucoin.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_mexc.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_ndax.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_okcoin.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_okx.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_phemex.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_poloniex.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_upbit.py +0 -0
- {OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,10 @@ 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.53] - 2024-02-02
|
8
|
+
### Fixed
|
9
|
+
- [Orders] Handle quote-based fees in exchange simulator
|
10
|
+
|
7
11
|
## [2.4.52] - 2024-01-30
|
8
12
|
### Added
|
9
13
|
- [API] Trades utility
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.53
|
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.53](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.53
|
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.53](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.53](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)
|
@@ -637,10 +637,12 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
637
637
|
price=float(price),
|
638
638
|
takerOrMaker=taker_or_maker)
|
639
639
|
fees[enums.FeePropertyColumns.IS_FROM_EXCHANGE.value] = False
|
640
|
-
fees[enums.FeePropertyColumns.COST.value] = decimal.Decimal(
|
640
|
+
fees[enums.FeePropertyColumns.COST.value] = decimal.Decimal(
|
641
|
+
str(fees.get(enums.FeePropertyColumns.COST.value) or 0)
|
642
|
+
)
|
641
643
|
if self.exchange_manager.is_future:
|
642
644
|
# fees on futures are wrong
|
643
|
-
rate = fees
|
645
|
+
rate = fees.get(enums.FeePropertyColumns.RATE.value, 0) or 0
|
644
646
|
# avoid using ccxt computed fees as they are often wrong
|
645
647
|
# see https://docs.ccxt.com/en/latest/manual.html#trading-fees
|
646
648
|
parsed_symbol = commons_symbols.parse_symbol(symbol)
|
{OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/octobot_trading/personal_data/orders/order.py
RENAMED
@@ -534,12 +534,14 @@ class Order(util.Initializable):
|
|
534
534
|
except KeyError:
|
535
535
|
return False
|
536
536
|
|
537
|
-
def get_computed_fee(self, forced_value=None):
|
537
|
+
def get_computed_fee(self, forced_value=None, use_origin_quantity_and_price=False):
|
538
538
|
is_from_exchange = False
|
539
|
+
price = self.origin_price if use_origin_quantity_and_price else self.filled_price
|
540
|
+
quantity = self.origin_quantity if use_origin_quantity_and_price else self.filled_quantity
|
539
541
|
if self.fees_currency_side is enums.FeesCurrencySide.UNDEFINED:
|
540
|
-
computed_fee = self.exchange_manager.exchange.get_trade_fee(
|
541
|
-
|
542
|
-
|
542
|
+
computed_fee = self.exchange_manager.exchange.get_trade_fee(
|
543
|
+
self.symbol, self.order_type, quantity, price, self.taker_or_maker
|
544
|
+
)
|
543
545
|
value = computed_fee[enums.FeePropertyColumns.COST.value]
|
544
546
|
currency = computed_fee[enums.FeePropertyColumns.CURRENCY.value]
|
545
547
|
is_from_exchange = computed_fee[enums.FeePropertyColumns.IS_FROM_EXCHANGE.value]
|
@@ -547,10 +549,10 @@ class Order(util.Initializable):
|
|
547
549
|
symbol_fees = self.exchange_manager.exchange.get_fees(self.symbol)
|
548
550
|
fees = decimal.Decimal(f"{symbol_fees[self.taker_or_maker]}")
|
549
551
|
if self.fees_currency_side is enums.FeesCurrencySide.CURRENCY:
|
550
|
-
value =
|
552
|
+
value = quantity / price * fees
|
551
553
|
currency = self.currency
|
552
554
|
else:
|
553
|
-
value =
|
555
|
+
value = quantity * price * fees
|
554
556
|
currency = self.market
|
555
557
|
return {
|
556
558
|
enums.FeePropertyColumns.IS_FROM_EXCHANGE.value: is_from_exchange,
|
@@ -136,7 +136,7 @@ class Portfolio:
|
|
136
136
|
"""
|
137
137
|
Realize portfolio availability update
|
138
138
|
:param order: the order that triggers the portfolio update
|
139
|
-
:param is_new_order: True when the order is being created
|
139
|
+
:param is_new_order: True when the order is being created, False when cancelled
|
140
140
|
"""
|
141
141
|
raise NotImplementedError("update_portfolio_available_from_order is not implemented")
|
142
142
|
|
@@ -266,6 +266,7 @@ class PortfolioManager(util.Initializable):
|
|
266
266
|
if order.is_filled():
|
267
267
|
self.portfolio.update_portfolio_from_filled_order(order)
|
268
268
|
else:
|
269
|
+
# order cancelled
|
269
270
|
self.portfolio.update_portfolio_available(order, is_new_order=False)
|
270
271
|
return True
|
271
272
|
except errors.PortfolioNegativeValueError as portfolio_negative_value_error:
|
@@ -17,6 +17,7 @@ import octobot_trading.constants as constants
|
|
17
17
|
import octobot_trading.enums as enums
|
18
18
|
import octobot_trading.personal_data.portfolios.assets.spot_asset as spot_asset
|
19
19
|
import octobot_trading.personal_data.portfolios.portfolio as portfolio_class
|
20
|
+
import octobot_trading.personal_data.orders.order_util as order_util
|
20
21
|
|
21
22
|
|
22
23
|
class SpotPortfolio(portfolio_class.Portfolio):
|
@@ -28,20 +29,23 @@ class SpotPortfolio(portfolio_class.Portfolio):
|
|
28
29
|
Call update_portfolio_data for order currency and market
|
29
30
|
:param order: the order that updated the portfolio
|
30
31
|
"""
|
31
|
-
|
32
|
+
base_fees = order.get_total_fees(order.currency)
|
33
|
+
quote_fees = order.get_total_fees(order.market)
|
34
|
+
|
35
|
+
# update base
|
32
36
|
if order.side == enums.TradeOrderSide.BUY:
|
33
|
-
new_quantity = order.filled_quantity -
|
37
|
+
new_quantity = order.filled_quantity - base_fees
|
34
38
|
self._update_portfolio_data(order.currency, total_value=new_quantity, available_value=new_quantity)
|
35
39
|
else:
|
36
|
-
new_quantity = -order.filled_quantity
|
40
|
+
new_quantity = -order.filled_quantity - base_fees
|
37
41
|
self._update_portfolio_data(order.currency, total_value=new_quantity)
|
38
42
|
|
39
|
-
# update
|
43
|
+
# update quote
|
40
44
|
if order.side == enums.TradeOrderSide.BUY:
|
41
|
-
new_quantity = -(order.filled_quantity * order.filled_price)
|
45
|
+
new_quantity = -(order.filled_quantity * order.filled_price) - quote_fees
|
42
46
|
self._update_portfolio_data(order.market, total_value=new_quantity)
|
43
47
|
else:
|
44
|
-
new_quantity = (order.filled_quantity * order.filled_price) -
|
48
|
+
new_quantity = (order.filled_quantity * order.filled_price) - quote_fees
|
45
49
|
self._update_portfolio_data(order.market, total_value=new_quantity, available_value=new_quantity)
|
46
50
|
|
47
51
|
def update_portfolio_data_from_withdrawal(self, amount, currency):
|
@@ -56,18 +60,26 @@ class SpotPortfolio(portfolio_class.Portfolio):
|
|
56
60
|
"""
|
57
61
|
Realise portfolio availability update
|
58
62
|
:param order: the order that triggers the portfolio update
|
59
|
-
:param is_new_order: True when the order is being created
|
63
|
+
:param is_new_order: True when the order is being created, False when cancelled
|
60
64
|
"""
|
65
|
+
multiplier = constants.ONE if is_new_order else -constants.ONE
|
66
|
+
|
67
|
+
# take fees into account when in locked asset
|
68
|
+
# ( a BTC/USDT order with USDT fees need to lock USDT fees to be able to pay them)
|
69
|
+
forecasted_fees = order.get_computed_fee(use_origin_quantity_and_price=not order.is_filled())
|
70
|
+
base_fees = order_util.get_fees_for_currency(forecasted_fees, order.currency)
|
71
|
+
quote_fees = order_util.get_fees_for_currency(forecasted_fees, order.market)
|
72
|
+
|
61
73
|
# when buy order
|
62
74
|
if order.side == enums.TradeOrderSide.BUY:
|
63
|
-
new_quantity = - order.origin_quantity * order.origin_price
|
75
|
+
new_quantity = - (order.origin_quantity * order.origin_price + quote_fees) * multiplier
|
64
76
|
self._update_portfolio_data(order.market,
|
65
77
|
available_value=new_quantity,
|
66
78
|
total_value=constants.ZERO)
|
67
79
|
|
68
80
|
# when sell order
|
69
81
|
else:
|
70
|
-
new_quantity = - order.origin_quantity
|
82
|
+
new_quantity = - (order.origin_quantity + base_fees) * multiplier
|
71
83
|
self._update_portfolio_data(order.currency,
|
72
84
|
available_value=new_quantity,
|
73
85
|
total_value=constants.ZERO)
|
{OctoBot-Trading-2.4.52 → OctoBot-Trading-2.4.53}/tests/personal_data/portfolios/test_portfolio.py
RENAMED
@@ -17,11 +17,13 @@ import copy
|
|
17
17
|
import os
|
18
18
|
import decimal
|
19
19
|
|
20
|
+
import mock
|
20
21
|
import pytest
|
21
22
|
import octobot_commons.constants as commons_constants
|
22
23
|
|
23
24
|
import octobot_trading.constants as constants
|
24
25
|
import octobot_trading.errors as errors
|
26
|
+
import octobot_trading.enums as enums
|
25
27
|
from octobot_trading.enums import TraderOrderType, TradeOrderSide
|
26
28
|
from octobot_trading.personal_data.orders import BuyLimitOrder
|
27
29
|
from octobot_trading.personal_data.orders import SellLimitOrder
|
@@ -329,6 +331,9 @@ async def test_update_portfolio_with_cancelled_orders(backtesting_trader):
|
|
329
331
|
|
330
332
|
portfolio_manager.portfolio.update_portfolio_available(stop_loss, True)
|
331
333
|
portfolio_manager.portfolio.update_portfolio_available(limit_sell, True)
|
334
|
+
assert round(portfolio_manager.portfolio.get_currency_portfolio("BTC").available,
|
335
|
+
1) == decimal.Decimal('5.8')
|
336
|
+
assert portfolio_manager.portfolio.get_currency_portfolio("USDT").available == decimal.Decimal('1000')
|
332
337
|
|
333
338
|
# Test buy order
|
334
339
|
limit_buy = BuyLimitOrder(trader)
|
@@ -338,13 +343,21 @@ async def test_update_portfolio_with_cancelled_orders(backtesting_trader):
|
|
338
343
|
quantity=decimal.Decimal(str(4)),
|
339
344
|
price=decimal.Decimal(str(50)))
|
340
345
|
|
341
|
-
|
346
|
+
# simulate fees in USDT (ex: Kucoin, OKX)
|
347
|
+
with mock.patch.object(limit_buy.exchange_manager.exchange.connector, "_get_fees_currency", return_value="USDT") \
|
348
|
+
as _get_fees_currency_mock:
|
349
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_buy, True)
|
350
|
+
assert round(portfolio_manager.portfolio.get_currency_portfolio("BTC").available,
|
351
|
+
1) == decimal.Decimal('5.8')
|
352
|
+
# also locked 0.1 USDT for fees
|
353
|
+
assert portfolio_manager.portfolio.get_currency_portfolio("USDT").available == decimal.Decimal('799.9')
|
354
|
+
|
342
355
|
portfolio_manager.portfolio.update_portfolio_available(market_sell, True)
|
343
356
|
|
344
357
|
assert round(portfolio_manager.portfolio.get_currency_portfolio("BTC").available,
|
345
358
|
1) == decimal.Decimal('1.7')
|
346
359
|
assert portfolio_manager.portfolio.get_currency_portfolio("USDT").available == decimal.Decimal(
|
347
|
-
'
|
360
|
+
'799.9')
|
348
361
|
assert portfolio_manager.portfolio.get_currency_portfolio("BTC").total == decimal.Decimal(
|
349
362
|
'10')
|
350
363
|
assert portfolio_manager.portfolio.get_currency_portfolio("USDT").total == decimal.Decimal(
|
@@ -353,7 +366,9 @@ async def test_update_portfolio_with_cancelled_orders(backtesting_trader):
|
|
353
366
|
# with no filled orders
|
354
367
|
portfolio_manager.portfolio.update_portfolio_available(stop_loss, False)
|
355
368
|
portfolio_manager.portfolio.update_portfolio_available(limit_sell, False)
|
356
|
-
|
369
|
+
with mock.patch.object(limit_buy.exchange_manager.exchange.connector, "_get_fees_currency", return_value="USDT") \
|
370
|
+
as _get_fees_currency_mock:
|
371
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_buy, False)
|
357
372
|
portfolio_manager.portfolio.update_portfolio_available(market_sell, False)
|
358
373
|
|
359
374
|
assert portfolio_manager.portfolio.get_currency_portfolio("BTC").available == decimal.Decimal(
|
@@ -607,179 +622,202 @@ async def test_update_portfolio_with_multiple_filled_orders(backtesting_trader):
|
|
607
622
|
config, exchange_manager, trader = backtesting_trader
|
608
623
|
portfolio_manager = exchange_manager.exchange_personal_data.portfolio_manager
|
609
624
|
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
quantity=decimal.Decimal(str(4)),
|
616
|
-
price=decimal.Decimal(str(90)))
|
617
|
-
|
618
|
-
# Test buy order
|
619
|
-
limit_buy = BuyLimitOrder(trader)
|
620
|
-
limit_buy.update(order_type=TraderOrderType.BUY_LIMIT,
|
621
|
-
symbol="BTC/USDT",
|
622
|
-
current_price=decimal.Decimal(str(60)),
|
623
|
-
quantity=decimal.Decimal(str(2)),
|
624
|
-
price=decimal.Decimal(str(60)))
|
625
|
-
|
626
|
-
# Test buy order
|
627
|
-
limit_buy_2 = BuyLimitOrder(trader)
|
628
|
-
limit_buy_2.update(order_type=TraderOrderType.BUY_LIMIT,
|
629
|
-
symbol="BTC/USDT",
|
630
|
-
current_price=decimal.Decimal(str(50)),
|
631
|
-
quantity=decimal.Decimal(str(4)),
|
632
|
-
price=decimal.Decimal(str(50)))
|
633
|
-
|
634
|
-
# Test buy order
|
635
|
-
limit_buy_3 = BuyLimitOrder(trader)
|
636
|
-
limit_buy_3.update(order_type=TraderOrderType.BUY_LIMIT,
|
637
|
-
symbol="BTC/USDT",
|
638
|
-
current_price=decimal.Decimal(str(46)),
|
639
|
-
quantity=decimal.Decimal(str(2)),
|
640
|
-
price=decimal.Decimal(str(46)))
|
641
|
-
|
642
|
-
# Test buy order
|
643
|
-
limit_buy_4 = BuyLimitOrder(trader)
|
644
|
-
limit_buy_4.update(order_type=TraderOrderType.BUY_LIMIT,
|
645
|
-
symbol="BTC/USDT",
|
646
|
-
current_price=decimal.Decimal(str(41)),
|
647
|
-
quantity=decimal.Decimal(str(1.78)),
|
648
|
-
price=decimal.Decimal(str(41)))
|
649
|
-
|
650
|
-
# Test buy order
|
651
|
-
limit_buy_5 = BuyLimitOrder(trader)
|
652
|
-
limit_buy_5.update(order_type=TraderOrderType.BUY_LIMIT,
|
653
|
-
symbol="BTC/USDT",
|
654
|
-
current_price=decimal.Decimal(str(0.2122427)),
|
655
|
-
quantity=decimal.Decimal(str(3.72448)),
|
656
|
-
price=decimal.Decimal(str(0.2122427)))
|
657
|
-
|
658
|
-
# Test buy order
|
659
|
-
limit_buy_6 = BuyLimitOrder(trader)
|
660
|
-
limit_buy_6.update(order_type=TraderOrderType.BUY_LIMIT,
|
661
|
-
symbol="BTC/USDT",
|
662
|
-
current_price=decimal.Decimal(str(430)),
|
663
|
-
quantity=decimal.Decimal(str(1.05)),
|
664
|
-
price=decimal.Decimal(str(430)))
|
665
|
-
|
666
|
-
# Test sell order
|
667
|
-
limit_sell_2 = SellLimitOrder(trader)
|
668
|
-
limit_sell_2.update(order_type=TraderOrderType.SELL_LIMIT,
|
669
|
-
symbol="BTC/USDT",
|
670
|
-
current_price=decimal.Decimal(str(10)),
|
671
|
-
quantity=decimal.Decimal(str(2)),
|
672
|
-
price=decimal.Decimal(str(10)))
|
673
|
-
|
674
|
-
# Test stop loss order
|
675
|
-
stop_loss_2 = StopLossOrder(trader)
|
676
|
-
stop_loss_2.update(order_type=TraderOrderType.STOP_LOSS,
|
677
|
-
symbol="BTC/USDT",
|
678
|
-
current_price=decimal.Decimal(str(10)),
|
679
|
-
quantity=decimal.Decimal(str(2)),
|
680
|
-
price=decimal.Decimal(str(10)))
|
681
|
-
|
682
|
-
# Test sell order
|
683
|
-
limit_sell_3 = SellLimitOrder(trader)
|
684
|
-
limit_sell_3.update(order_type=TraderOrderType.SELL_LIMIT,
|
685
|
-
symbol="BTC/USDT",
|
686
|
-
current_price=decimal.Decimal(str(20)),
|
687
|
-
quantity=decimal.Decimal(str(1)),
|
688
|
-
price=decimal.Decimal(str(20)))
|
689
|
-
|
690
|
-
# Test stop loss order
|
691
|
-
stop_loss_3 = StopLossOrder(trader)
|
692
|
-
stop_loss_3.update(order_type=TraderOrderType.STOP_LOSS,
|
693
|
-
symbol="BTC/USDT",
|
694
|
-
current_price=decimal.Decimal(str(20)),
|
695
|
-
quantity=decimal.Decimal(str(1)),
|
696
|
-
price=decimal.Decimal(str(20)))
|
697
|
-
|
698
|
-
# Test sell order
|
699
|
-
limit_sell_4 = SellLimitOrder(trader)
|
700
|
-
limit_sell_4.update(order_type=TraderOrderType.SELL_LIMIT,
|
701
|
-
symbol="BTC/USDT",
|
702
|
-
current_price=decimal.Decimal(str(50)),
|
703
|
-
quantity=decimal.Decimal(str(0.2)),
|
704
|
-
price=decimal.Decimal(str(50)))
|
705
|
-
|
706
|
-
# Test stop loss order
|
707
|
-
stop_loss_4 = StopLossOrder(trader, side=TradeOrderSide.BUY)
|
708
|
-
stop_loss_4.update(order_type=TraderOrderType.STOP_LOSS,
|
709
|
-
symbol="BTC/USDT",
|
710
|
-
current_price=decimal.Decimal(str(45)),
|
711
|
-
quantity=decimal.Decimal(str(0.2)),
|
712
|
-
price=decimal.Decimal(str(45)))
|
713
|
-
|
714
|
-
# Test sell order
|
715
|
-
limit_sell_5 = SellLimitOrder(trader)
|
716
|
-
limit_sell_5.update(order_type=TraderOrderType.SELL_LIMIT,
|
717
|
-
symbol="BTC/USDT",
|
718
|
-
current_price=decimal.Decimal(str(11)),
|
719
|
-
quantity=decimal.Decimal(str(0.7)),
|
720
|
-
price=decimal.Decimal(str(11)))
|
721
|
-
|
722
|
-
# Test stop loss order
|
723
|
-
stop_loss_5 = StopLossOrder(trader)
|
724
|
-
stop_loss_5.update(order_type=TraderOrderType.STOP_LOSS,
|
725
|
-
symbol="BTC/USDT",
|
726
|
-
current_price=decimal.Decimal(str(9)),
|
727
|
-
quantity=decimal.Decimal(str(0.7)),
|
728
|
-
price=decimal.Decimal(str(9)))
|
729
|
-
|
730
|
-
portfolio_manager.portfolio.update_portfolio_available(stop_loss_2, True)
|
731
|
-
portfolio_manager.portfolio.update_portfolio_available(stop_loss_3, True)
|
732
|
-
portfolio_manager.portfolio.update_portfolio_available(stop_loss_4, True)
|
733
|
-
portfolio_manager.portfolio.update_portfolio_available(stop_loss_5, True)
|
734
|
-
portfolio_manager.portfolio.update_portfolio_available(limit_sell, True)
|
735
|
-
portfolio_manager.portfolio.update_portfolio_available(limit_sell_2, True)
|
736
|
-
portfolio_manager.portfolio.update_portfolio_available(limit_sell_3, True)
|
737
|
-
portfolio_manager.portfolio.update_portfolio_available(limit_sell_4, True)
|
738
|
-
portfolio_manager.portfolio.update_portfolio_available(limit_sell_5, True)
|
739
|
-
portfolio_manager.portfolio.update_portfolio_available(limit_buy, True)
|
740
|
-
portfolio_manager.portfolio.update_portfolio_available(limit_buy_2, True)
|
741
|
-
portfolio_manager.portfolio.update_portfolio_available(limit_buy_3, True)
|
742
|
-
portfolio_manager.portfolio.update_portfolio_available(limit_buy_4, True)
|
743
|
-
portfolio_manager.portfolio.update_portfolio_available(limit_buy_5, True)
|
744
|
-
portfolio_manager.portfolio.update_portfolio_available(limit_buy_6, True)
|
745
|
-
|
746
|
-
assert round(portfolio_manager.portfolio.get_currency_portfolio("BTC").available,
|
747
|
-
1) == decimal.Decimal('2.1')
|
748
|
-
assert round(portfolio_manager.portfolio.get_currency_portfolio("USDT").available,
|
749
|
-
7) == decimal.Decimal('62.7295063')
|
750
|
-
assert portfolio_manager.portfolio.get_currency_portfolio("BTC").total == decimal.Decimal(
|
751
|
-
'10')
|
752
|
-
assert portfolio_manager.portfolio.get_currency_portfolio("USDT").total == decimal.Decimal(
|
753
|
-
'1000')
|
754
|
-
|
755
|
-
# cancels
|
756
|
-
portfolio_manager.portfolio.update_portfolio_available(stop_loss_3, False)
|
757
|
-
portfolio_manager.portfolio.update_portfolio_available(stop_loss_5, False)
|
758
|
-
portfolio_manager.portfolio.update_portfolio_available(limit_sell_2, False)
|
759
|
-
portfolio_manager.portfolio.update_portfolio_available(limit_buy, False)
|
760
|
-
portfolio_manager.portfolio.update_portfolio_available(limit_buy_3, False)
|
761
|
-
portfolio_manager.portfolio.update_portfolio_available(limit_buy_5, False)
|
762
|
-
portfolio_manager.portfolio.update_portfolio_available(limit_sell_4, False)
|
625
|
+
fees = {
|
626
|
+
enums.ExchangeConstantsMarketPropertyColumns.TAKER.value: 0.001,
|
627
|
+
enums.ExchangeConstantsMarketPropertyColumns.MAKER.value: 0.001,
|
628
|
+
enums.ExchangeConstantsMarketPropertyColumns.FEE.value: 0.001
|
629
|
+
}
|
763
630
|
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
|
772
|
-
|
773
|
-
await fill_limit_or_stop_order(limit_buy_6)
|
631
|
+
with mock.patch.object(exchange_manager.exchange.connector, "get_fees", return_value=fees) \
|
632
|
+
as get_fees_mock:
|
633
|
+
# Test buy order
|
634
|
+
limit_sell = SellLimitOrder(trader)
|
635
|
+
limit_sell.update(order_type=TraderOrderType.SELL_LIMIT,
|
636
|
+
symbol="BTC/USDT",
|
637
|
+
current_price=decimal.Decimal(str(90)),
|
638
|
+
quantity=decimal.Decimal(str(4)),
|
639
|
+
price=decimal.Decimal(str(90)))
|
774
640
|
|
775
|
-
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
641
|
+
# Test buy order
|
642
|
+
limit_buy = BuyLimitOrder(trader)
|
643
|
+
limit_buy.update(order_type=TraderOrderType.BUY_LIMIT,
|
644
|
+
symbol="BTC/USDT",
|
645
|
+
current_price=decimal.Decimal(str(60)),
|
646
|
+
quantity=decimal.Decimal(str(2)),
|
647
|
+
price=decimal.Decimal(str(60)))
|
648
|
+
|
649
|
+
# Test buy order
|
650
|
+
limit_buy_2 = BuyLimitOrder(trader)
|
651
|
+
limit_buy_2.update(order_type=TraderOrderType.BUY_LIMIT,
|
652
|
+
symbol="BTC/USDT",
|
653
|
+
current_price=decimal.Decimal(str(50)),
|
654
|
+
quantity=decimal.Decimal(str(4)),
|
655
|
+
price=decimal.Decimal(str(50)))
|
656
|
+
|
657
|
+
# Test buy order
|
658
|
+
limit_buy_3 = BuyLimitOrder(trader)
|
659
|
+
limit_buy_3.update(order_type=TraderOrderType.BUY_LIMIT,
|
660
|
+
symbol="BTC/USDT",
|
661
|
+
current_price=decimal.Decimal(str(46)),
|
662
|
+
quantity=decimal.Decimal(str(2)),
|
663
|
+
price=decimal.Decimal(str(46)))
|
664
|
+
|
665
|
+
# Test buy order
|
666
|
+
limit_buy_4 = BuyLimitOrder(trader)
|
667
|
+
limit_buy_4.update(order_type=TraderOrderType.BUY_LIMIT,
|
668
|
+
symbol="BTC/USDT",
|
669
|
+
current_price=decimal.Decimal(str(41)),
|
670
|
+
quantity=decimal.Decimal(str(1.78)),
|
671
|
+
price=decimal.Decimal(str(41)))
|
672
|
+
|
673
|
+
# Test buy order
|
674
|
+
limit_buy_5 = BuyLimitOrder(trader)
|
675
|
+
limit_buy_5.update(order_type=TraderOrderType.BUY_LIMIT,
|
676
|
+
symbol="BTC/USDT",
|
677
|
+
current_price=decimal.Decimal(str(0.2122427)),
|
678
|
+
quantity=decimal.Decimal(str(3.72448)),
|
679
|
+
price=decimal.Decimal(str(0.2122427)))
|
680
|
+
|
681
|
+
# Test buy order
|
682
|
+
limit_buy_6 = BuyLimitOrder(trader)
|
683
|
+
limit_buy_6.update(order_type=TraderOrderType.BUY_LIMIT,
|
684
|
+
symbol="BTC/USDT",
|
685
|
+
current_price=decimal.Decimal(str(430)),
|
686
|
+
quantity=decimal.Decimal(str(1.05)),
|
687
|
+
price=decimal.Decimal(str(430)))
|
688
|
+
|
689
|
+
# Test sell order
|
690
|
+
limit_sell_2 = SellLimitOrder(trader)
|
691
|
+
limit_sell_2.update(order_type=TraderOrderType.SELL_LIMIT,
|
692
|
+
symbol="BTC/USDT",
|
693
|
+
current_price=decimal.Decimal(str(10)),
|
694
|
+
quantity=decimal.Decimal(str(2)),
|
695
|
+
price=decimal.Decimal(str(10)))
|
696
|
+
|
697
|
+
# Test stop loss order
|
698
|
+
stop_loss_2 = StopLossOrder(trader)
|
699
|
+
stop_loss_2.update(order_type=TraderOrderType.STOP_LOSS,
|
700
|
+
symbol="BTC/USDT",
|
701
|
+
current_price=decimal.Decimal(str(10)),
|
702
|
+
quantity=decimal.Decimal(str(2)),
|
703
|
+
price=decimal.Decimal(str(10)))
|
704
|
+
|
705
|
+
# Test sell order
|
706
|
+
limit_sell_3 = SellLimitOrder(trader)
|
707
|
+
limit_sell_3.update(order_type=TraderOrderType.SELL_LIMIT,
|
708
|
+
symbol="BTC/USDT",
|
709
|
+
current_price=decimal.Decimal(str(20)),
|
710
|
+
quantity=decimal.Decimal(str(1)),
|
711
|
+
price=decimal.Decimal(str(20)))
|
712
|
+
|
713
|
+
# Test stop loss order
|
714
|
+
stop_loss_3 = StopLossOrder(trader)
|
715
|
+
stop_loss_3.update(order_type=TraderOrderType.STOP_LOSS,
|
716
|
+
symbol="BTC/USDT",
|
717
|
+
current_price=decimal.Decimal(str(20)),
|
718
|
+
quantity=decimal.Decimal(str(1)),
|
719
|
+
price=decimal.Decimal(str(20)))
|
720
|
+
|
721
|
+
# Test sell order
|
722
|
+
limit_sell_4 = SellLimitOrder(trader)
|
723
|
+
limit_sell_4.update(order_type=TraderOrderType.SELL_LIMIT,
|
724
|
+
symbol="BTC/USDT",
|
725
|
+
current_price=decimal.Decimal(str(50)),
|
726
|
+
quantity=decimal.Decimal(str(0.2)),
|
727
|
+
price=decimal.Decimal(str(50)))
|
728
|
+
|
729
|
+
# Test stop loss order
|
730
|
+
stop_loss_4 = StopLossOrder(trader, side=TradeOrderSide.BUY)
|
731
|
+
stop_loss_4.update(order_type=TraderOrderType.STOP_LOSS,
|
732
|
+
symbol="BTC/USDT",
|
733
|
+
current_price=decimal.Decimal(str(45)),
|
734
|
+
quantity=decimal.Decimal(str(0.2)),
|
735
|
+
price=decimal.Decimal(str(45)))
|
736
|
+
|
737
|
+
# Test sell order
|
738
|
+
limit_sell_5 = SellLimitOrder(trader)
|
739
|
+
limit_sell_5.update(order_type=TraderOrderType.SELL_LIMIT,
|
740
|
+
symbol="BTC/USDT",
|
741
|
+
current_price=decimal.Decimal(str(11)),
|
742
|
+
quantity=decimal.Decimal(str(0.7)),
|
743
|
+
price=decimal.Decimal(str(11)))
|
744
|
+
|
745
|
+
# Test stop loss order
|
746
|
+
stop_loss_5 = StopLossOrder(trader)
|
747
|
+
stop_loss_5.update(order_type=TraderOrderType.STOP_LOSS,
|
748
|
+
symbol="BTC/USDT",
|
749
|
+
current_price=decimal.Decimal(str(9)),
|
750
|
+
quantity=decimal.Decimal(str(0.7)),
|
751
|
+
price=decimal.Decimal(str(9)))
|
752
|
+
|
753
|
+
portfolio_manager.portfolio.update_portfolio_available(stop_loss_2, True)
|
754
|
+
portfolio_manager.portfolio.update_portfolio_available(stop_loss_3, True)
|
755
|
+
portfolio_manager.portfolio.update_portfolio_available(stop_loss_4, True)
|
756
|
+
portfolio_manager.portfolio.update_portfolio_available(stop_loss_5, True)
|
757
|
+
with mock.patch.object(exchange_manager.exchange.connector, "_get_fees_currency", return_value="BTC") \
|
758
|
+
as _get_fees_currency_mock:
|
759
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_sell, True)
|
760
|
+
_get_fees_currency_mock.assert_called_once()
|
761
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_sell_2, True)
|
762
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_sell_3, True)
|
763
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_sell_4, True)
|
764
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_sell_5, True)
|
765
|
+
with mock.patch.object(exchange_manager.exchange.connector, "_get_fees_currency", return_value="USDT") \
|
766
|
+
as _get_fees_currency_mock:
|
767
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_buy, True)
|
768
|
+
_get_fees_currency_mock.assert_called_once()
|
769
|
+
_get_fees_currency_mock.reset_mock()
|
770
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_buy_2, True)
|
771
|
+
_get_fees_currency_mock.assert_called_once()
|
772
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_buy_3, True)
|
773
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_buy_4, True)
|
774
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_buy_5, True)
|
775
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_buy_6, True)
|
776
|
+
|
777
|
+
assert round(portfolio_manager.portfolio.get_currency_portfolio("BTC").available,
|
778
|
+
1) == decimal.Decimal('2.1')
|
779
|
+
assert round(portfolio_manager.portfolio.get_currency_portfolio("USDT").available,
|
780
|
+
7) == decimal.Decimal('62.4095063')
|
781
|
+
assert portfolio_manager.portfolio.get_currency_portfolio("BTC").total == decimal.Decimal('10')
|
782
|
+
assert portfolio_manager.portfolio.get_currency_portfolio("USDT").total == decimal.Decimal('1000')
|
783
|
+
|
784
|
+
# cancels
|
785
|
+
portfolio_manager.portfolio.update_portfolio_available(stop_loss_3, False)
|
786
|
+
portfolio_manager.portfolio.update_portfolio_available(stop_loss_5, False)
|
787
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_sell_2, False)
|
788
|
+
with mock.patch.object(exchange_manager.exchange.connector, "_get_fees_currency", return_value="USDT") \
|
789
|
+
as _get_fees_currency_mock:
|
790
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_buy, False)
|
791
|
+
_get_fees_currency_mock.assert_called_once()
|
792
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_buy_3, False)
|
793
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_buy_5, False)
|
794
|
+
portfolio_manager.portfolio.update_portfolio_available(limit_sell_4, False)
|
795
|
+
|
796
|
+
assert portfolio_manager.portfolio.get_currency_portfolio("BTC").available == decimal.Decimal('4.296')
|
797
|
+
assert portfolio_manager.portfolio.get_currency_portfolio("USDT").available == decimal.Decimal('275.32')
|
798
|
+
assert portfolio_manager.portfolio.get_currency_portfolio("BTC").total == decimal.Decimal('10')
|
799
|
+
assert portfolio_manager.portfolio.get_currency_portfolio("USDT").total == decimal.Decimal('1000.0000000')
|
800
|
+
|
801
|
+
# filling
|
802
|
+
await fill_limit_or_stop_order(stop_loss_2)
|
803
|
+
with mock.patch.object(exchange_manager.exchange.connector, "_get_fees_currency", return_value="BTC") \
|
804
|
+
as _get_fees_currency_mock:
|
805
|
+
await fill_limit_or_stop_order(limit_sell)
|
806
|
+
_get_fees_currency_mock.assert_called_once()
|
807
|
+
await fill_limit_or_stop_order(limit_sell_3)
|
808
|
+
with mock.patch.object(exchange_manager.exchange.connector, "_get_fees_currency", return_value="USDT") \
|
809
|
+
as _get_fees_currency_mock:
|
810
|
+
await fill_limit_or_stop_order(limit_buy_2)
|
811
|
+
_get_fees_currency_mock.assert_called_once()
|
812
|
+
await fill_limit_or_stop_order(limit_sell_5)
|
813
|
+
await fill_limit_or_stop_order(stop_loss_4)
|
814
|
+
await fill_limit_or_stop_order(limit_buy_4)
|
815
|
+
await fill_limit_or_stop_order(limit_buy_6)
|
816
|
+
|
817
|
+
assert portfolio_manager.portfolio.get_currency_portfolio("BTC").available == decimal.Decimal('9.32317')
|
818
|
+
assert portfolio_manager.portfolio.get_currency_portfolio("USDT").available == decimal.Decimal('673.9633')
|
819
|
+
assert portfolio_manager.portfolio.get_currency_portfolio("BTC").total == decimal.Decimal('9.32317')
|
820
|
+
assert portfolio_manager.portfolio.get_currency_portfolio("USDT").total == decimal.Decimal('673.9633')
|
783
821
|
|
784
822
|
|
785
823
|
async def test_update_portfolio_with_multiple_symbols_orders(backtesting_trader):
|
@@ -946,6 +984,7 @@ async def test_default_impl(backtesting_trader):
|
|
946
984
|
portfolio_manager = exchange_manager.exchange_personal_data.portfolio_manager
|
947
985
|
|
948
986
|
order = BuyMarketOrder(trader)
|
987
|
+
order.symbol = "BTC/USDT"
|
949
988
|
|
950
989
|
# should not raise NotImplemented
|
951
990
|
portfolio_manager.portfolio.update_portfolio_data_from_order(order)
|