OctoBot-Trading 2.4.60__tar.gz → 2.4.62__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.60 → OctoBot-Trading-2.4.62}/CHANGELOG.md +8 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/OctoBot_Trading.egg-info/SOURCES.txt +4 -0
- {OctoBot-Trading-2.4.60/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.62}/PKG-INFO +2 -2
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/README.md +1 -1
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/__init__.py +1 -1
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/__init__.py +8 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +14 -0
- OctoBot-Trading-2.4.62/octobot_trading/modes/script_keywords/basic_keywords/position.py +58 -0
- OctoBot-Trading-2.4.62/octobot_trading/modes/script_keywords/basic_keywords/price.py +64 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/dsl/values.py +1 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/channel/orders.py +1 -1
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/order.py +7 -2
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/script_keywords/__init__.py +1 -0
- OctoBot-Trading-2.4.62/tests/modes/script_keywords/basic_keywords/test_position.py +53 -0
- OctoBot-Trading-2.4.62/tests/modes/script_keywords/basic_keywords/test_price.py +135 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/script_keywords/dsl/test_quantity.py +6 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/test_order.py +57 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/LICENSE +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/MANIFEST.in +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/OctoBot_Trading.egg-info/requires.txt +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/OctoBot_Trading.egg-info/top_level.txt +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/channels.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/contracts.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/exchange.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/modes.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/orders.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/portfolio.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/positions.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/profitability.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/storage.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/symbol_data.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/trader.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/api/trades.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/constants.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/enums.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/errors.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_channel.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/adapters/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/config/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/exchange_channels.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/exchange_details.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/exchanges.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/traders/trader.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/types/rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/util/exchange_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/util/symbol_details.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/exchanges/util/websockets_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/channel/mode.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/mode_config.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/modes_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/modes_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/context_management.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/octobot_channel_consumer.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/order_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/order_group.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/order_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/order_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/asset.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/position.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/position_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/position_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/position_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/trade.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/trades/trades_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/transaction.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/signals/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/signals/channel/signal_producer.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/signals/signal_creation.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/signals/util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/abstract_storage.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/candles_storage.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/orders_storage.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/portfolio_storage.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/storage_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/trades_storage.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/transactions_storage.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/storage/util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/supervisors/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/config_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/initializable.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/initialization_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/simulator_updater_utils.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/test_tools/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/test_tools/exchange_data.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/requirements.txt +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/setup.cfg +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/setup.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_channels.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_exchange.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_modes.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_orders.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_profitability.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_symbol_data.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_trader.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/api/test_trades.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/cli/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/contracts/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/contracts/test_future_contract.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/funding/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/funding/test_funding_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/kline/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/kline/test_kline_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/ohlcv/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/order_book/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/prices/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/prices/test_prices_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/recent_trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/ticker/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/connectors/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/implementations/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/test_abstract_exchange.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/test_exchange_builder.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/test_exchange_config_data.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/test_exchange_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/test_exchange_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/test_exchange_simulator.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/test_exchanges.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/traders/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/traders/test_trader.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/types/test_websocket_exchange.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/exchanges/util/test_exchange_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/script_keywords/dsl/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/test_abstract_mode_consumer.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/test_abstract_trading_mode.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/test_modes_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/groups/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/groups/test_group_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/test_order_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/test_double_filled_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/test_order_adapter.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/test_order_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/test_order_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/test_orders_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/limit/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/market/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/assets/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/history/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/test_asset.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/test_portfolio.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/test_value_converter.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/channel/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/states/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/test_position.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/test_position_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/test_positions_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/types/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/positions/types/test_linear_position.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/trades/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/trades/test_trade_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/trades/test_trade_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/trades/test_trade_pnl.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/trades/test_trade_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/transactions/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/signals/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/signals/test_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/test_utils/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/test_utils/order_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/test_utils/random_numbers.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/util/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/util/test_config_util.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/__init__.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_ascendex.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_binance.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_bingx.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_bitget.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_bithumb.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_bitso.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_bybit.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_coinbase.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_coinex.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_gateio.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_hollaex.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_htx.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_kraken.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_kucoin.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_mexc.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_ndax.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_okcoin.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_okx.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_phemex.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_poloniex.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_upbit.py +0 -0
- {OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [2.4.62] - 2024-03-15
|
8
|
+
### Added
|
9
|
+
- [ScriptingKeywords] price offsets
|
10
|
+
|
11
|
+
## [2.4.61] - 2024-03-12
|
12
|
+
### Fixed
|
13
|
+
- [Orders] chained orders quantity after fees decimals
|
14
|
+
|
7
15
|
## [2.4.60] - 2024-03-12
|
8
16
|
### Updated
|
9
17
|
- [TradingModes] add exchange order ids to cancel_symbol_open_orders
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.62
|
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.62](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)
|
@@ -139,6 +139,8 @@ octobot_trading/modes/script_keywords/basic_keywords/__init__.py
|
|
139
139
|
octobot_trading/modes/script_keywords/basic_keywords/account_balance.py
|
140
140
|
octobot_trading/modes/script_keywords/basic_keywords/amount.py
|
141
141
|
octobot_trading/modes/script_keywords/basic_keywords/configuration.py
|
142
|
+
octobot_trading/modes/script_keywords/basic_keywords/position.py
|
143
|
+
octobot_trading/modes/script_keywords/basic_keywords/price.py
|
142
144
|
octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py
|
143
145
|
octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py
|
144
146
|
octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py
|
@@ -349,6 +351,8 @@ tests/modes/script_keywords/__init__.py
|
|
349
351
|
tests/modes/script_keywords/basic_keywords/__init__.py
|
350
352
|
tests/modes/script_keywords/basic_keywords/test_account_balance.py
|
351
353
|
tests/modes/script_keywords/basic_keywords/test_amount.py
|
354
|
+
tests/modes/script_keywords/basic_keywords/test_position.py
|
355
|
+
tests/modes/script_keywords/basic_keywords/test_price.py
|
352
356
|
tests/modes/script_keywords/dsl/__init__.py
|
353
357
|
tests/modes/script_keywords/dsl/test_quantity.py
|
354
358
|
tests/personal_data/__init__.py
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.4.
|
3
|
+
Version: 2.4.62
|
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.62](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.62](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)
|
{OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/modes/script_keywords/__init__.py
RENAMED
@@ -35,6 +35,10 @@ from octobot_trading.modes.script_keywords.basic_keywords import (
|
|
35
35
|
set_leverage,
|
36
36
|
set_partial_take_profit_stop_loss,
|
37
37
|
get_amount_from_input_amount,
|
38
|
+
get_price_with_offset,
|
39
|
+
get_position,
|
40
|
+
average_open_pos_entry,
|
41
|
+
is_in_one_way_position_mode,
|
38
42
|
total_account_balance,
|
39
43
|
available_account_balance,
|
40
44
|
adapt_amount_to_holdings,
|
@@ -67,6 +71,10 @@ __all__ = [
|
|
67
71
|
"set_leverage",
|
68
72
|
"set_partial_take_profit_stop_loss",
|
69
73
|
"get_amount_from_input_amount",
|
74
|
+
"get_price_with_offset",
|
75
|
+
"get_position",
|
76
|
+
"average_open_pos_entry",
|
77
|
+
"is_in_one_way_position_mode",
|
70
78
|
"total_account_balance",
|
71
79
|
"available_account_balance",
|
72
80
|
"adapt_amount_to_holdings",
|
@@ -36,6 +36,16 @@ from octobot_trading.modes.script_keywords.basic_keywords.amount import (
|
|
36
36
|
get_amount_from_input_amount,
|
37
37
|
)
|
38
38
|
|
39
|
+
from octobot_trading.modes.script_keywords.basic_keywords.price import (
|
40
|
+
get_price_with_offset,
|
41
|
+
)
|
42
|
+
|
43
|
+
from octobot_trading.modes.script_keywords.basic_keywords.position import (
|
44
|
+
get_position,
|
45
|
+
average_open_pos_entry,
|
46
|
+
is_in_one_way_position_mode,
|
47
|
+
)
|
48
|
+
|
39
49
|
from octobot_trading.modes.script_keywords.basic_keywords.account_balance import (
|
40
50
|
total_account_balance,
|
41
51
|
available_account_balance,
|
@@ -71,6 +81,10 @@ __all__ = [
|
|
71
81
|
"set_leverage",
|
72
82
|
"set_partial_take_profit_stop_loss",
|
73
83
|
"get_amount_from_input_amount",
|
84
|
+
"get_price_with_offset",
|
85
|
+
"get_position",
|
86
|
+
"average_open_pos_entry",
|
87
|
+
"is_in_one_way_position_mode",
|
74
88
|
"total_account_balance",
|
75
89
|
"available_account_balance",
|
76
90
|
"adapt_amount_to_holdings",
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# Drakkar-Software OctoBot-Trading
|
2
|
+
# Copyright (c) Drakkar-Software, All rights reserved.
|
3
|
+
#
|
4
|
+
# This library is free software; you can redistribute it and/or
|
5
|
+
# modify it under the terms of the GNU Lesser General Public
|
6
|
+
# License as published by the Free Software Foundation; either
|
7
|
+
# version 3.0 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This library is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU Lesser General Public
|
15
|
+
# License along with this library.
|
16
|
+
|
17
|
+
import octobot_trading.constants as trading_constants
|
18
|
+
import octobot_trading.enums as trading_enums
|
19
|
+
import octobot_trading.errors as trading_errors
|
20
|
+
|
21
|
+
|
22
|
+
def get_position(context, symbol=None, side=trading_enums.PositionSide.BOTH.value):
|
23
|
+
return context.exchange_manager.exchange_personal_data.positions_manager.get_symbol_position(
|
24
|
+
symbol or context.symbol,
|
25
|
+
_get_position_side(context, side)
|
26
|
+
)
|
27
|
+
|
28
|
+
|
29
|
+
async def average_open_pos_entry(context, side=trading_enums.PositionSide.LONG.value):
|
30
|
+
if context.exchange_manager.is_future:
|
31
|
+
return get_position(context, context.symbol, side).entry_price
|
32
|
+
elif context.exchange_manager.is_margin:
|
33
|
+
return trading_constants.ZERO
|
34
|
+
else:
|
35
|
+
return trading_constants.ZERO
|
36
|
+
|
37
|
+
|
38
|
+
def _get_position_side(ctx, side):
|
39
|
+
if is_in_one_way_position_mode(ctx):
|
40
|
+
return trading_enums.PositionSide.BOTH
|
41
|
+
|
42
|
+
# hedge mode
|
43
|
+
if side == trading_enums.PositionSide.LONG.value:
|
44
|
+
return trading_enums.PositionSide.LONG
|
45
|
+
elif side == trading_enums.PositionSide.SHORT.value:
|
46
|
+
return trading_enums.PositionSide.SHORT
|
47
|
+
elif side == trading_enums.PositionSide.BOTH.value:
|
48
|
+
raise trading_errors.InvalidArgumentError(
|
49
|
+
"average_open_pos_entry: both sides are not implemented yet for hedged mode"
|
50
|
+
)
|
51
|
+
else:
|
52
|
+
raise trading_errors.InvalidArgumentError(
|
53
|
+
'average_open_pos_entry: side needs to be "long", "short" or "both"'
|
54
|
+
)
|
55
|
+
|
56
|
+
|
57
|
+
def is_in_one_way_position_mode(ctx):
|
58
|
+
return ctx.exchange_manager.exchange.get_pair_future_contract(ctx.symbol).is_one_way_position_mode()
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# Drakkar-Software OctoBot-Trading
|
2
|
+
# Copyright (c) Drakkar-Software, All rights reserved.
|
3
|
+
#
|
4
|
+
# This library is free software; you can redistribute it and/or
|
5
|
+
# modify it under the terms of the GNU Lesser General Public
|
6
|
+
# License as published by the Free Software Foundation; either
|
7
|
+
# version 3.0 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This library is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU Lesser General Public
|
15
|
+
# License along with this library.
|
16
|
+
import octobot_trading.errors as errors
|
17
|
+
import octobot_trading.constants as constants
|
18
|
+
import octobot_trading.personal_data as personal_data
|
19
|
+
import octobot_trading.modes.script_keywords.dsl as dsl
|
20
|
+
import octobot_trading.modes.script_keywords.basic_keywords.position as position
|
21
|
+
|
22
|
+
|
23
|
+
async def get_price_with_offset(context, offset_input, use_delta_type_as_flat_value=False, side=None):
|
24
|
+
if offset_input is None:
|
25
|
+
raise errors.InvalidArgumentError("price or offset is required")
|
26
|
+
offset_type, offset_value = dsl.parse_quantity(offset_input)
|
27
|
+
|
28
|
+
# when use_delta_type_as_flat_value is True, consider a simple price input as a flat target instead of an offset
|
29
|
+
is_delta_type_considered_as_flat = offset_type is dsl.QuantityType.DELTA and use_delta_type_as_flat_value
|
30
|
+
|
31
|
+
if offset_type is dsl.QuantityType.DELTA_EXPLICIT or (
|
32
|
+
offset_type is dsl.QuantityType.DELTA and not is_delta_type_considered_as_flat
|
33
|
+
):
|
34
|
+
current_price_val = await personal_data.get_up_to_date_price(
|
35
|
+
context.exchange_manager, context.symbol, timeout=constants.ORDER_DATA_FETCHING_TIMEOUT
|
36
|
+
)
|
37
|
+
# offset should be negative when wanting to buy bellow current price
|
38
|
+
computed_price = current_price_val + offset_value
|
39
|
+
|
40
|
+
elif offset_type is dsl.QuantityType.PERCENT:
|
41
|
+
current_price_val = await personal_data.get_up_to_date_price(
|
42
|
+
context.exchange_manager, context.symbol, timeout=constants.ORDER_DATA_FETCHING_TIMEOUT
|
43
|
+
)
|
44
|
+
computed_price = current_price_val * (constants.ONE + (offset_value / constants.ONE_HUNDRED))
|
45
|
+
|
46
|
+
elif offset_type is dsl.QuantityType.ENTRY_PERCENT:
|
47
|
+
average_open_pos_entry_val = await position.average_open_pos_entry(context, side)
|
48
|
+
computed_price = average_open_pos_entry_val * (constants.ONE + (offset_value / constants.ONE_HUNDRED))
|
49
|
+
|
50
|
+
elif offset_type is dsl.QuantityType.ENTRY:
|
51
|
+
average_open_pos_entry_val = await position.average_open_pos_entry(context, side)
|
52
|
+
computed_price = average_open_pos_entry_val + offset_value
|
53
|
+
|
54
|
+
elif is_delta_type_considered_as_flat or offset_type is dsl.QuantityType.FLAT:
|
55
|
+
computed_price = offset_value
|
56
|
+
else:
|
57
|
+
raise errors.InvalidArgumentError(
|
58
|
+
f"'{offset_input}' is not supported. "
|
59
|
+
f"Make sure to use a supported syntax for price, supported parameters are: "
|
60
|
+
f"1.2, -0.222, -0.222d, @65100, 5%, e5%, e500"
|
61
|
+
)
|
62
|
+
|
63
|
+
symbol_market = context.exchange_manager.exchange.get_market_status(context.symbol, with_fixer=False)
|
64
|
+
return personal_data.decimal_adapt_price(symbol_market, computed_price)
|
@@ -29,7 +29,7 @@ class OrdersProducer(exchanges_channel.ExchangeChannelProducer):
|
|
29
29
|
|
30
30
|
async def perform(self, orders, is_from_bot=False, are_closed=False):
|
31
31
|
try:
|
32
|
-
self.logger.debug(f"Received order update for {len(orders)} orders.")
|
32
|
+
self.logger.debug(f"Received order update for {len(orders)} {'closed' if are_closed else ''} orders.")
|
33
33
|
has_new_order = False
|
34
34
|
waiting_complete_init_orders = []
|
35
35
|
symbols = set()
|
{OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/octobot_trading/personal_data/orders/order.py
RENAMED
@@ -25,6 +25,7 @@ import octobot_trading.enums as enums
|
|
25
25
|
import octobot_trading.errors as errors
|
26
26
|
import octobot_trading.personal_data.orders.states as orders_states
|
27
27
|
import octobot_trading.personal_data.orders.order_util as order_util
|
28
|
+
import octobot_trading.personal_data.orders.decimal_order_adapter as decimal_order_adapter
|
28
29
|
import octobot_trading.util as util
|
29
30
|
|
30
31
|
|
@@ -476,11 +477,15 @@ class Order(util.Initializable):
|
|
476
477
|
logger = logging.get_logger(self.get_logger_name())
|
477
478
|
fees_str = f"Paid {self.quantity_currency} fees: {relevant_fees_amount}, " \
|
478
479
|
f"initial order size: {self.origin_quantity}"
|
479
|
-
if relevant_fees_amount
|
480
|
+
if relevant_fees_amount >= self.origin_quantity:
|
480
481
|
logger.error(f"Impossible to update chained order amount according to triggering order fees: "
|
481
482
|
f"fees are larger than then chained order size. {fees_str}")
|
482
483
|
return False
|
483
|
-
self.origin_quantity
|
484
|
+
self.origin_quantity = decimal_order_adapter.decimal_adapt_quantity(
|
485
|
+
self.exchange_manager.exchange.get_market_status(self.symbol, with_fixer=False),
|
486
|
+
self.origin_quantity - relevant_fees_amount
|
487
|
+
)
|
488
|
+
fees_str = f"{fees_str}, updated size: {self.origin_quantity}"
|
484
489
|
logger.debug(f"Updating chained order quantity with triggering order fees. {fees_str}")
|
485
490
|
return True
|
486
491
|
|
@@ -64,6 +64,7 @@ async def mock_context(backtesting_trader):
|
|
64
64
|
mock.Mock(),
|
65
65
|
)
|
66
66
|
context.signal_builder = mock.Mock()
|
67
|
+
context.is_trading_signal_emitter = mock.Mock(return_value=False)
|
67
68
|
context.orders_writer = mock.Mock(log_many=mock.AsyncMock())
|
68
69
|
portfolio_manager = exchange_manager.exchange_personal_data.portfolio_manager
|
69
70
|
# init portfolio with 0.5 BTC, 20 ETH and 30000 USDT and only 0.1 available BTC
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# Drakkar-Software OctoBot-Trading
|
2
|
+
# Copyright (c) Drakkar-Software, All rights reserved.
|
3
|
+
#
|
4
|
+
# This library is free software; you can redistribute it and/or
|
5
|
+
# modify it under the terms of the GNU Lesser General Public
|
6
|
+
# License as published by the Free Software Foundation; either
|
7
|
+
# version 3.0 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This library is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU Lesser General Public
|
15
|
+
# License along with this library.
|
16
|
+
import pytest
|
17
|
+
import mock
|
18
|
+
import decimal
|
19
|
+
|
20
|
+
import octobot_trading.modes.script_keywords as script_keywords
|
21
|
+
import octobot_trading.modes.script_keywords.basic_keywords.position as position
|
22
|
+
import octobot_trading.enums as enums
|
23
|
+
import octobot_trading.constants as constants
|
24
|
+
|
25
|
+
from tests import event_loop
|
26
|
+
from tests.modes.script_keywords import mock_context
|
27
|
+
from tests.exchanges import backtesting_trader, \
|
28
|
+
backtesting_config, backtesting_exchange_manager, fake_backtesting
|
29
|
+
|
30
|
+
|
31
|
+
# All test coroutines will be treated as marked.
|
32
|
+
pytestmark = pytest.mark.asyncio
|
33
|
+
|
34
|
+
|
35
|
+
@pytest.mark.parametrize("backtesting_config", ["USDT"], indirect=["backtesting_config"])
|
36
|
+
async def test_average_open_pos_entry(mock_context):
|
37
|
+
mock_context.exchange_manager.is_future = False
|
38
|
+
with mock.patch.object(position, "get_position",
|
39
|
+
mock.Mock(return_value=(mock.Mock(entry_price=decimal.Decimal("40000"))))) \
|
40
|
+
as get_position_mock:
|
41
|
+
mock_context.symbol = "ETH/USDT"
|
42
|
+
assert await script_keywords.average_open_pos_entry(mock_context, enums.TradeOrderSide.BUY.value) == \
|
43
|
+
constants.ZERO
|
44
|
+
mock_context.exchange_manager.is_future = True
|
45
|
+
mock_context.symbol = "ETH/USDT"
|
46
|
+
assert await script_keywords.average_open_pos_entry(mock_context, enums.TradeOrderSide.BUY.value) == \
|
47
|
+
decimal.Decimal("40000")
|
48
|
+
get_position_mock.assert_called_once_with(mock_context, "ETH/USDT", enums.TradeOrderSide.BUY.value)
|
49
|
+
get_position_mock.reset_mock()
|
50
|
+
mock_context.symbol = "BTC/USDT"
|
51
|
+
assert await script_keywords.average_open_pos_entry(mock_context, enums.TradeOrderSide.BUY.value) == \
|
52
|
+
decimal.Decimal("40000")
|
53
|
+
get_position_mock.assert_called_once_with(mock_context, "BTC/USDT", enums.TradeOrderSide.BUY.value)
|
@@ -0,0 +1,135 @@
|
|
1
|
+
# Drakkar-Software OctoBot-Trading
|
2
|
+
# Copyright (c) Drakkar-Software, All rights reserved.
|
3
|
+
#
|
4
|
+
# This library is free software; you can redistribute it and/or
|
5
|
+
# modify it under the terms of the GNU Lesser General Public
|
6
|
+
# License as published by the Free Software Foundation; either
|
7
|
+
# version 3.0 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This library is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU Lesser General Public
|
15
|
+
# License along with this library.
|
16
|
+
import pytest
|
17
|
+
import mock
|
18
|
+
import decimal
|
19
|
+
|
20
|
+
import octobot_trading.modes.script_keywords as script_keywords
|
21
|
+
import octobot_trading.modes.script_keywords.dsl as dsl
|
22
|
+
import octobot_trading.modes.script_keywords.basic_keywords.position as position
|
23
|
+
import octobot_trading.personal_data as personal_data
|
24
|
+
import octobot_trading.errors as errors
|
25
|
+
import octobot_trading.constants as constants
|
26
|
+
from octobot_trading.enums import ExchangeConstantsMarketStatusColumns as Ecmsc
|
27
|
+
|
28
|
+
from tests import event_loop
|
29
|
+
from tests.modes.script_keywords import null_context
|
30
|
+
|
31
|
+
# All test coroutines will be treated as marked.
|
32
|
+
pytestmark = pytest.mark.asyncio
|
33
|
+
|
34
|
+
|
35
|
+
async def test_get_price_with_offset(null_context):
|
36
|
+
null_context.symbol = "blop/plop"
|
37
|
+
null_context.exchange_manager = mock.Mock(
|
38
|
+
exchange=mock.Mock(
|
39
|
+
get_market_status=mock.Mock(return_value={
|
40
|
+
Ecmsc.PRECISION.value: {
|
41
|
+
Ecmsc.PRECISION_PRICE.value: 2
|
42
|
+
}
|
43
|
+
})
|
44
|
+
)
|
45
|
+
)
|
46
|
+
|
47
|
+
with pytest.raises(errors.InvalidArgumentError):
|
48
|
+
await script_keywords.get_price_with_offset(null_context, "1sdsqdq")
|
49
|
+
|
50
|
+
with mock.patch.object(personal_data, "get_up_to_date_price", mock.AsyncMock(return_value=200)) \
|
51
|
+
as current_price_mock:
|
52
|
+
with mock.patch.object(dsl, "parse_quantity",
|
53
|
+
mock.Mock(return_value=(script_keywords.QuantityType.DELTA, decimal.Decimal(10)))) \
|
54
|
+
as parse_quantity_mock:
|
55
|
+
assert await script_keywords.get_price_with_offset(null_context, 10) == decimal.Decimal(210)
|
56
|
+
current_price_mock.assert_called_once_with(
|
57
|
+
null_context.exchange_manager, null_context.symbol, timeout=constants.ORDER_DATA_FETCHING_TIMEOUT
|
58
|
+
)
|
59
|
+
parse_quantity_mock.assert_called_once_with(10)
|
60
|
+
null_context.exchange_manager.exchange.get_market_status.assert_called_once_with(
|
61
|
+
"blop/plop", with_fixer=False
|
62
|
+
)
|
63
|
+
current_price_mock.reset_mock()
|
64
|
+
parse_quantity_mock.reset_mock()
|
65
|
+
|
66
|
+
assert await script_keywords.get_price_with_offset(null_context, 10, use_delta_type_as_flat_value=True) \
|
67
|
+
== decimal.Decimal(10)
|
68
|
+
current_price_mock.assert_not_called()
|
69
|
+
parse_quantity_mock.assert_called_once_with(10)
|
70
|
+
current_price_mock.reset_mock()
|
71
|
+
parse_quantity_mock.reset_mock()
|
72
|
+
|
73
|
+
with mock.patch.object(dsl, "parse_quantity",
|
74
|
+
mock.Mock(return_value=(script_keywords.QuantityType.DELTA_EXPLICIT, decimal.Decimal(10)))) \
|
75
|
+
as parse_quantity_mock:
|
76
|
+
assert await script_keywords.get_price_with_offset(null_context, 10) == decimal.Decimal(210)
|
77
|
+
current_price_mock.assert_called_once_with(
|
78
|
+
null_context.exchange_manager, null_context.symbol, timeout=constants.ORDER_DATA_FETCHING_TIMEOUT
|
79
|
+
)
|
80
|
+
parse_quantity_mock.assert_called_once_with(10)
|
81
|
+
current_price_mock.reset_mock()
|
82
|
+
parse_quantity_mock.reset_mock()
|
83
|
+
|
84
|
+
# DELTA_EXPLICIT ignores use_delta_type_as_flat_value
|
85
|
+
assert await script_keywords.get_price_with_offset(null_context, 10, use_delta_type_as_flat_value=True) \
|
86
|
+
== decimal.Decimal(210)
|
87
|
+
current_price_mock.assert_called_once_with(
|
88
|
+
null_context.exchange_manager, null_context.symbol, timeout=constants.ORDER_DATA_FETCHING_TIMEOUT
|
89
|
+
)
|
90
|
+
parse_quantity_mock.assert_called_once_with(10)
|
91
|
+
current_price_mock.reset_mock()
|
92
|
+
parse_quantity_mock.reset_mock()
|
93
|
+
|
94
|
+
with mock.patch.object(
|
95
|
+
dsl, "parse_quantity",
|
96
|
+
mock.Mock(return_value=(script_keywords.QuantityType.DELTA, decimal.Decimal("10.333333")))
|
97
|
+
) as parse_quantity_mock:
|
98
|
+
assert await script_keywords.get_price_with_offset(
|
99
|
+
null_context, 10.333333, use_delta_type_as_flat_value=True
|
100
|
+
) == decimal.Decimal("10.33") # rounded according to precision
|
101
|
+
current_price_mock.assert_not_called()
|
102
|
+
parse_quantity_mock.assert_called_once_with(10.333333)
|
103
|
+
current_price_mock.reset_mock()
|
104
|
+
parse_quantity_mock.reset_mock()
|
105
|
+
|
106
|
+
with mock.patch.object(dsl, "parse_quantity",
|
107
|
+
mock.Mock(return_value=(script_keywords.QuantityType.PERCENT, decimal.Decimal(-99)))):
|
108
|
+
assert await script_keywords.get_price_with_offset(null_context, 10) == decimal.Decimal(2)
|
109
|
+
|
110
|
+
with mock.patch.object(dsl, "parse_quantity",
|
111
|
+
mock.Mock(return_value=(script_keywords.QuantityType.PERCENT, decimal.Decimal(1000)))):
|
112
|
+
assert await script_keywords.get_price_with_offset(null_context, 10) == decimal.Decimal(2200)
|
113
|
+
|
114
|
+
with mock.patch.object(position, "average_open_pos_entry", mock.AsyncMock(return_value=500)) \
|
115
|
+
as average_open_pos_entry_mock:
|
116
|
+
with mock.patch.object(dsl, "parse_quantity",
|
117
|
+
mock.Mock(return_value=(script_keywords.QuantityType.ENTRY_PERCENT, decimal.Decimal(-50)))):
|
118
|
+
assert await script_keywords.get_price_with_offset(null_context, 10, side="sell") == decimal.Decimal(250)
|
119
|
+
average_open_pos_entry_mock.assert_called_once_with(null_context, "sell")
|
120
|
+
|
121
|
+
with mock.patch.object(position, "average_open_pos_entry", mock.AsyncMock(return_value=500)) \
|
122
|
+
as average_open_pos_entry_mock:
|
123
|
+
with mock.patch.object(dsl, "parse_quantity",
|
124
|
+
mock.Mock(return_value=(script_keywords.QuantityType.ENTRY, decimal.Decimal(50)))):
|
125
|
+
assert await script_keywords.get_price_with_offset(null_context, 10, side="sell") == decimal.Decimal(550)
|
126
|
+
average_open_pos_entry_mock.assert_called_once()
|
127
|
+
|
128
|
+
with mock.patch.object(dsl, "parse_quantity",
|
129
|
+
mock.Mock(return_value=(script_keywords.QuantityType.FLAT, decimal.Decimal(50)))):
|
130
|
+
assert await script_keywords.get_price_with_offset(null_context, 10) == decimal.Decimal(50)
|
131
|
+
|
132
|
+
with mock.patch.object(dsl, "parse_quantity",
|
133
|
+
mock.Mock(return_value=(script_keywords.QuantityType.UNKNOWN, decimal.Decimal(-50)))):
|
134
|
+
with pytest.raises(errors.InvalidArgumentError):
|
135
|
+
await script_keywords.get_price_with_offset(null_context, 10)
|
{OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/tests/modes/script_keywords/dsl/test_quantity.py
RENAMED
@@ -27,6 +27,12 @@ def test_parse_quantity_types():
|
|
27
27
|
assert script_keywords.parse_quantity(1.366666663347877) == \
|
28
28
|
(script_keywords.QuantityType.DELTA, decimal.Decimal("1.366666663347877"))
|
29
29
|
assert script_keywords.parse_quantity("-10") == (script_keywords.QuantityType.DELTA, decimal.Decimal(-10))
|
30
|
+
|
31
|
+
assert script_keywords.parse_quantity("-10d") == (script_keywords.QuantityType.DELTA_EXPLICIT, decimal.Decimal(-10))
|
32
|
+
assert script_keywords.parse_quantity("d-10") == (script_keywords.QuantityType.DELTA_EXPLICIT, decimal.Decimal(-10))
|
33
|
+
assert script_keywords.parse_quantity("d+10") == (script_keywords.QuantityType.DELTA_EXPLICIT, decimal.Decimal(10))
|
34
|
+
assert script_keywords.parse_quantity("d10") == (script_keywords.QuantityType.DELTA_EXPLICIT, decimal.Decimal(10))
|
35
|
+
|
30
36
|
assert script_keywords.parse_quantity("-10b") == (script_keywords.QuantityType.DELTA_BASE, decimal.Decimal(-10))
|
31
37
|
|
32
38
|
assert script_keywords.parse_quantity("q") == (script_keywords.QuantityType.DELTA_QUOTE, None)
|
@@ -339,6 +339,63 @@ async def test_trigger_chained_orders(trader_simulator):
|
|
339
339
|
create_as_chained_order_mock.assert_called_once_with(order_mock_1)
|
340
340
|
|
341
341
|
|
342
|
+
def test_update_quantity_with_order_fees(trader_simulator):
|
343
|
+
config, exchange_manager_inst, trader_inst = trader_simulator
|
344
|
+
|
345
|
+
base_order = personal_data.Order(trader_inst)
|
346
|
+
base_order.symbol = "BTC/USDT"
|
347
|
+
|
348
|
+
other_order = personal_data.Order(trader_inst)
|
349
|
+
other_order.symbol = base_order.symbol
|
350
|
+
other_order.origin_quantity = decimal.Decimal(1)
|
351
|
+
|
352
|
+
# case 1: quantity_currency is not the amount unit: nothing changes
|
353
|
+
base_order.fee = {
|
354
|
+
enums.FeePropertyColumns.CURRENCY.value: "USDT",
|
355
|
+
enums.FeePropertyColumns.COST.value: decimal.Decimal("1")
|
356
|
+
}
|
357
|
+
other_order.quantity_currency = "BTC"
|
358
|
+
assert other_order.update_quantity_with_order_fees(base_order) is True
|
359
|
+
assert other_order.origin_quantity == decimal.Decimal(1) # nothing changed
|
360
|
+
|
361
|
+
# case 2: quantity_currency is the amount unit: other_order quantity is reduced
|
362
|
+
base_order.fee = {
|
363
|
+
enums.FeePropertyColumns.CURRENCY.value: "BTC",
|
364
|
+
enums.FeePropertyColumns.COST.value: decimal.Decimal("0.1")
|
365
|
+
}
|
366
|
+
other_order.quantity_currency = "BTC"
|
367
|
+
assert other_order.update_quantity_with_order_fees(base_order) is True
|
368
|
+
assert other_order.origin_quantity == decimal.Decimal("0.9") # 1 - 0.1
|
369
|
+
other_order.origin_quantity = decimal.Decimal(1)
|
370
|
+
|
371
|
+
# case 3: quantity_currency is the amount unit and is too large: return False
|
372
|
+
base_order.fee = {
|
373
|
+
enums.FeePropertyColumns.CURRENCY.value: "BTC",
|
374
|
+
enums.FeePropertyColumns.COST.value: decimal.Decimal("1")
|
375
|
+
}
|
376
|
+
other_order.quantity_currency = "BTC"
|
377
|
+
assert other_order.update_quantity_with_order_fees(base_order) is False
|
378
|
+
assert other_order.origin_quantity == decimal.Decimal(1) # nothing changed
|
379
|
+
base_order.fee = {
|
380
|
+
enums.FeePropertyColumns.CURRENCY.value: "BTC",
|
381
|
+
enums.FeePropertyColumns.COST.value: decimal.Decimal("1.1")
|
382
|
+
}
|
383
|
+
other_order.quantity_currency = "BTC"
|
384
|
+
assert other_order.update_quantity_with_order_fees(base_order) is False
|
385
|
+
assert other_order.origin_quantity == decimal.Decimal(1) # nothing changed
|
386
|
+
|
387
|
+
# case 4: quantity_currency is the amount unit: other_order quantity is reduced and adapted
|
388
|
+
base_order.fee = {
|
389
|
+
enums.FeePropertyColumns.CURRENCY.value: "BTC",
|
390
|
+
enums.FeePropertyColumns.COST.value: decimal.Decimal("0.111111111111111111111111")
|
391
|
+
}
|
392
|
+
other_order.quantity_currency = "BTC"
|
393
|
+
assert other_order.update_quantity_with_order_fees(base_order) is True
|
394
|
+
# 1 - 0.111111111111111111111111 with truncated digits
|
395
|
+
assert other_order.origin_quantity == decimal.Decimal("0.88888")
|
396
|
+
other_order.origin_quantity = decimal.Decimal(1)
|
397
|
+
|
398
|
+
|
342
399
|
async def test_update_from_order(trader_simulator):
|
343
400
|
config, exchange_manager_inst, trader_inst = trader_simulator
|
344
401
|
|
File without changes
|
File without changes
|
{OctoBot-Trading-2.4.60 → OctoBot-Trading-2.4.62}/OctoBot_Trading.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|