diff --git a/freqtrade/enums/__init__.py b/freqtrade/enums/__init__.py index 49f2f1a60..840290c90 100644 --- a/freqtrade/enums/__init__.py +++ b/freqtrade/enums/__init__.py @@ -1,6 +1,7 @@ # flake8: noqa: F401 from freqtrade.enums.backteststate import BacktestState from freqtrade.enums.candletype import CandleType +from freqtrade.enums.exitchecktuple import ExitCheckTuple from freqtrade.enums.marginmode import MarginMode from freqtrade.enums.ordertypevalue import OrderTypeValues from freqtrade.enums.rpcmessagetype import RPCMessageType diff --git a/freqtrade/enums/exitchecktuple.py b/freqtrade/enums/exitchecktuple.py new file mode 100644 index 000000000..3fec52e0a --- /dev/null +++ b/freqtrade/enums/exitchecktuple.py @@ -0,0 +1,17 @@ +from freqtrade.enums.selltype import SellType + + +class ExitCheckTuple: + """ + NamedTuple for Exit type + reason + """ + exit_type: SellType + exit_reason: str = '' + + def __init__(self, exit_type: SellType, exit_reason: str = ''): + self.exit_type = exit_type + self.exit_reason = exit_reason or exit_type.value + + @property + def exit_flag(self): + return self.exit_type != SellType.NONE diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index eae776546..c8f11559c 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -16,7 +16,8 @@ from freqtrade.configuration import validate_config_consistency from freqtrade.data.converter import order_book_to_dataframe from freqtrade.data.dataprovider import DataProvider from freqtrade.edge import Edge -from freqtrade.enums import RPCMessageType, RunMode, SellType, SignalDirection, State, TradingMode +from freqtrade.enums import (ExitCheckTuple, RPCMessageType, RunMode, SellType, SignalDirection, + State, TradingMode) from freqtrade.exceptions import (DependencyException, ExchangeError, InsufficientFundsError, InvalidOrderException, PricingError) from freqtrade.exchange import timeframe_to_minutes, timeframe_to_seconds @@ -27,7 +28,7 @@ from freqtrade.plugins.pairlistmanager import PairListManager from freqtrade.plugins.protectionmanager import ProtectionManager from freqtrade.resolvers import ExchangeResolver, StrategyResolver from freqtrade.rpc import RPCManager -from freqtrade.strategy.interface import IStrategy, ExitCheckTuple +from freqtrade.strategy.interface import IStrategy from freqtrade.strategy.strategy_wrapper import strategy_safe_wrapper from freqtrade.wallets import Wallets diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index d4c0c4e48..27ca11a89 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -19,7 +19,8 @@ from freqtrade.data import history from freqtrade.data.btanalysis import find_existing_backtest_stats, trade_list_to_dataframe from freqtrade.data.converter import trim_dataframe, trim_dataframes from freqtrade.data.dataprovider import DataProvider -from freqtrade.enums import BacktestState, CandleType, MarginMode, SellType, TradingMode +from freqtrade.enums import (BacktestState, CandleType, ExitCheckTuple, MarginMode, SellType, + TradingMode) from freqtrade.exceptions import DependencyException, OperationalException from freqtrade.exchange import timeframe_to_minutes, timeframe_to_seconds from freqtrade.misc import get_strategy_run_id @@ -31,7 +32,7 @@ from freqtrade.persistence import LocalTrade, Order, PairLocks, Trade from freqtrade.plugins.pairlistmanager import PairListManager from freqtrade.plugins.protectionmanager import ProtectionManager from freqtrade.resolvers import ExchangeResolver, StrategyResolver -from freqtrade.strategy.interface import IStrategy, ExitCheckTuple +from freqtrade.strategy.interface import IStrategy from freqtrade.strategy.strategy_wrapper import strategy_safe_wrapper from freqtrade.wallets import Wallets diff --git a/freqtrade/strategy/interface.py b/freqtrade/strategy/interface.py index fc12334fc..e78043b44 100644 --- a/freqtrade/strategy/interface.py +++ b/freqtrade/strategy/interface.py @@ -13,8 +13,8 @@ from pandas import DataFrame from freqtrade.constants import ListPairsWithTimeframes from freqtrade.data.dataprovider import DataProvider -from freqtrade.enums import (CandleType, SellType, SignalDirection, SignalTagType, SignalType, - TradingMode) +from freqtrade.enums import (CandleType, ExitCheckTuple, SellType, SignalDirection, SignalTagType, + SignalType, TradingMode) from freqtrade.exceptions import OperationalException, StrategyError from freqtrade.exchange import timeframe_to_minutes, timeframe_to_seconds from freqtrade.exchange.exchange import timeframe_to_next_date @@ -32,22 +32,6 @@ logger = logging.getLogger(__name__) CUSTOM_EXIT_MAX_LENGTH = 64 -class ExitCheckTuple: - """ - NamedTuple for Exit type + reason - """ - exit_type: SellType - exit_reason: str = '' - - def __init__(self, exit_type: SellType, exit_reason: str = ''): - self.exit_type = exit_type - self.exit_reason = exit_reason or exit_type.value - - @property - def exit_flag(self): - return self.exit_type != SellType.NONE - - class IStrategy(ABC, HyperStrategyMixin): """ Interface for freqtrade strategies diff --git a/tests/strategy/test_interface.py b/tests/strategy/test_interface.py index 3d75b36ac..5b7519d82 100644 --- a/tests/strategy/test_interface.py +++ b/tests/strategy/test_interface.py @@ -11,14 +11,13 @@ from pandas import DataFrame from freqtrade.configuration import TimeRange from freqtrade.data.dataprovider import DataProvider from freqtrade.data.history import load_data -from freqtrade.enums import SellType, SignalDirection +from freqtrade.enums import ExitCheckTuple, SellType, SignalDirection from freqtrade.exceptions import OperationalException, StrategyError from freqtrade.optimize.space import SKDecimal from freqtrade.persistence import PairLocks, Trade from freqtrade.resolvers import StrategyResolver from freqtrade.strategy.hyper import (BaseParameter, BooleanParameter, CategoricalParameter, DecimalParameter, IntParameter, RealParameter) -from freqtrade.strategy.interface import ExitCheckTuple from freqtrade.strategy.strategy_wrapper import strategy_safe_wrapper from tests.conftest import CURRENT_TEST_STRATEGY, TRADE_SIDES, log_has, log_has_re diff --git a/tests/test_freqtradebot.py b/tests/test_freqtradebot.py index 6f7b8f9b0..eaf6044d0 100644 --- a/tests/test_freqtradebot.py +++ b/tests/test_freqtradebot.py @@ -13,14 +13,14 @@ import pytest from pandas import DataFrame from freqtrade.constants import CANCEL_REASON, MATH_CLOSE_PREC, UNLIMITED_STAKE_AMOUNT -from freqtrade.enums import CandleType, RPCMessageType, RunMode, SellType, SignalDirection, State +from freqtrade.enums import (CandleType, ExitCheckTuple, RPCMessageType, RunMode, SellType, + SignalDirection, State) from freqtrade.exceptions import (DependencyException, ExchangeError, InsufficientFundsError, InvalidOrderException, OperationalException, PricingError, TemporaryError) from freqtrade.freqtradebot import FreqtradeBot from freqtrade.persistence import Order, PairLocks, Trade from freqtrade.persistence.models import PairLock -from freqtrade.strategy.interface import ExitCheckTuple from freqtrade.worker import Worker from tests.conftest import (create_mock_trades, get_patched_freqtradebot, get_patched_worker, log_has, log_has_re, patch_edge, patch_exchange, patch_get_signal, diff --git a/tests/test_integration.py b/tests/test_integration.py index 3e9c81a80..692886cf3 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -2,11 +2,10 @@ from unittest.mock import MagicMock import pytest -from freqtrade.enums import SellType +from freqtrade.enums import ExitCheckTuple, SellType from freqtrade.persistence import Trade from freqtrade.persistence.models import Order from freqtrade.rpc.rpc import RPC -from freqtrade.strategy.interface import ExitCheckTuple from tests.conftest import get_patched_freqtradebot, patch_get_signal