POC for check_buy_timeout
This commit is contained in:
parent
2816b96650
commit
49dcc561b7
@ -26,6 +26,7 @@ from freqtrade.resolvers import ExchangeResolver, StrategyResolver
|
|||||||
from freqtrade.rpc import RPCManager, RPCMessageType
|
from freqtrade.rpc import RPCManager, RPCMessageType
|
||||||
from freqtrade.state import State
|
from freqtrade.state import State
|
||||||
from freqtrade.strategy.interface import IStrategy, SellType
|
from freqtrade.strategy.interface import IStrategy, SellType
|
||||||
|
from freqtrade.strategy.strategy_wrapper import strategy_safe_wrapper
|
||||||
from freqtrade.wallets import Wallets
|
from freqtrade.wallets import Wallets
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@ -819,7 +820,11 @@ class FreqtradeBot:
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
if ((order['side'] == 'buy' and order['status'] == 'canceled')
|
if ((order['side'] == 'buy' and order['status'] == 'canceled')
|
||||||
or (self._check_timed_out('buy', order))):
|
or self._check_timed_out('buy', order)
|
||||||
|
or strategy_safe_wrapper(self.strategy.check_buy_timeout,
|
||||||
|
default_retval=False)(pair=trade.pair,
|
||||||
|
trade=trade,
|
||||||
|
order=order)):
|
||||||
|
|
||||||
self.handle_timedout_limit_buy(trade, order)
|
self.handle_timedout_limit_buy(trade, order)
|
||||||
self.wallets.update()
|
self.wallets.update()
|
||||||
|
@ -149,6 +149,24 @@ class IStrategy(ABC):
|
|||||||
:return: DataFrame with sell column
|
:return: DataFrame with sell column
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def check_buy_timeout(self, pair: str, trade: Trade, order: Dict, **kwargs) -> bool:
|
||||||
|
"""
|
||||||
|
Check buy timeout function callback.
|
||||||
|
This method can be used to override the buy-timeout.
|
||||||
|
It is called whenever a limit buy order has been created,
|
||||||
|
and is not yet fully filled.
|
||||||
|
Configuration options in `unfilledtimeout` will be verified before this,
|
||||||
|
so ensure to set these timeouts high enough.
|
||||||
|
|
||||||
|
When not implemented by a strategy, this simply returns False.
|
||||||
|
:param pair: Pair the trade is for
|
||||||
|
:param trade: trade object.
|
||||||
|
:param order: Order dictionary as returned from CCXT.
|
||||||
|
:param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
|
||||||
|
:return bool: When True is returned, then the buy-order is cancelled.
|
||||||
|
"""
|
||||||
|
return False
|
||||||
|
|
||||||
def informative_pairs(self) -> List[Tuple[str, str]]:
|
def informative_pairs(self) -> List[Tuple[str, str]]:
|
||||||
"""
|
"""
|
||||||
Define additional, informative pair/interval combinations to be cached from the exchange.
|
Define additional, informative pair/interval combinations to be cached from the exchange.
|
||||||
|
@ -5,7 +5,7 @@ from freqtrade.exceptions import StrategyError
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def strategy_safe_wrapper(f, message: str, default_retval=None):
|
def strategy_safe_wrapper(f, message: str = "", default_retval=None):
|
||||||
def wrapper(*args, **kwargs):
|
def wrapper(*args, **kwargs):
|
||||||
try:
|
try:
|
||||||
return f(*args, **kwargs)
|
return f(*args, **kwargs)
|
||||||
|
Loading…
Reference in New Issue
Block a user