diff --git a/freqtrade/constants.py b/freqtrade/constants.py index a06e2771f..d927f03d7 100644 --- a/freqtrade/constants.py +++ b/freqtrade/constants.py @@ -3,7 +3,7 @@ """ bot constants """ -from typing import List, Tuple +from typing import List, Literal, Tuple from freqtrade.enums import CandleType @@ -487,3 +487,6 @@ ListPairsWithTimeframes = List[PairWithTimeframe] # Type for trades list TradeList = List[List] + +LongShort = Literal['long', 'short'] +EntryExit = Literal['entry', 'exit'] diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 09ada4452..609dbb83e 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -20,7 +20,7 @@ from ccxt.base.decimal_to_precision import (ROUND_DOWN, ROUND_UP, TICK_SIZE, TRU from pandas import DataFrame from freqtrade.constants import (DEFAULT_AMOUNT_RESERVE_PERCENT, NON_OPEN_EXCHANGE_STATES, - ListPairsWithTimeframes, PairWithTimeframe) + EntryExit, ListPairsWithTimeframes, PairWithTimeframe) from freqtrade.data.converter import ohlcv_to_dataframe, trades_dict_to_list from freqtrade.enums import OPTIMIZE_MODES, CandleType, MarginMode, TradingMode from freqtrade.exceptions import (DDosProtection, ExchangeError, InsufficientFundsError, @@ -1429,7 +1429,7 @@ class Exchange: raise OperationalException(e) from e def get_rate(self, pair: str, refresh: bool, - side: Literal['entry', 'exit'], is_short: bool) -> float: + side: EntryExit, is_short: bool) -> float: """ Calculates bid/ask target bid rate - between current ask price and last price diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 9e01a150c..f440d8b99 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -7,12 +7,13 @@ import traceback from datetime import datetime, time, timezone from math import isclose from threading import Lock -from typing import Any, Dict, List, Literal, Optional, Tuple +from typing import Any, Dict, List, Optional, Tuple from schedule import Scheduler from freqtrade import __version__, constants from freqtrade.configuration import validate_config_consistency +from freqtrade.constants import LongShort from freqtrade.data.converter import order_book_to_dataframe from freqtrade.data.dataprovider import DataProvider from freqtrade.edge import Edge @@ -590,7 +591,7 @@ class FreqtradeBot(LoggingMixin): time_in_force = self.strategy.order_time_in_force['entry'] [side, name] = ['sell', 'Short'] if is_short else ['buy', 'Long'] - trade_side: Literal['long', 'short'] = 'short' if is_short else 'long' + trade_side: LongShort = 'short' if is_short else 'long' pos_adjust = trade is not None enter_limit_requested, stake_amount, leverage = self.get_valid_enter_price_and_stake( @@ -746,7 +747,7 @@ class FreqtradeBot(LoggingMixin): def get_valid_enter_price_and_stake( self, pair: str, price: Optional[float], stake_amount: float, - trade_side: Literal['long', 'short'], + trade_side: LongShort, entry_tag: Optional[str], trade: Optional[Trade] ) -> Tuple[float, float, float]: diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index aab340c21..2a5c0fabd 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -14,7 +14,7 @@ from pandas import DataFrame from freqtrade import constants from freqtrade.configuration import TimeRange, validate_config_consistency -from freqtrade.constants import DATETIME_PRINT_FORMAT +from freqtrade.constants import DATETIME_PRINT_FORMAT, LongShort 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 @@ -635,7 +635,7 @@ class Backtesting: def get_valid_price_and_stake( self, pair: str, row: Tuple, propose_rate: float, stake_amount: Optional[float], - direction: str, current_time: datetime, entry_tag: Optional[str], + direction: LongShort, current_time: datetime, entry_tag: Optional[str], trade: Optional[LocalTrade], order_type: str ) -> Tuple[float, float, float, float]: @@ -696,7 +696,7 @@ class Backtesting: return propose_rate, stake_amount_val, leverage, min_stake_amount - def _enter_trade(self, pair: str, row: Tuple, direction: str, + def _enter_trade(self, pair: str, row: Tuple, direction: LongShort, stake_amount: Optional[float] = None, trade: Optional[LocalTrade] = None) -> Optional[LocalTrade]: @@ -829,7 +829,7 @@ class Backtesting: self.rejected_trades += 1 return False - def check_for_trade_entry(self, row) -> Optional[str]: + def check_for_trade_entry(self, row) -> Optional[LongShort]: enter_long = row[LONG_IDX] == 1 exit_long = row[ELONG_IDX] == 1 enter_short = self._can_short and row[SHORT_IDX] == 1