Improve protections work

This commit is contained in:
Matthias 2020-10-15 07:38:00 +02:00
parent f39a534fc0
commit 816703b8e1
4 changed files with 21 additions and 5 deletions

View File

@ -193,7 +193,16 @@ CONF_SCHEMA = {
'type': 'object', 'type': 'object',
'properties': { 'properties': {
'method': {'type': 'string', 'enum': AVAILABLE_PAIRLISTS}, 'method': {'type': 'string', 'enum': AVAILABLE_PAIRLISTS},
'config': {'type': 'object'} },
'required': ['method'],
}
},
'protections': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'method': {'type': 'string', 'enum': AVAILABLE_PROTECTIONS},
}, },
'required': ['method'], 'required': ['method'],
} }

View File

@ -2,12 +2,13 @@
Protection manager class Protection manager class
""" """
import logging import logging
from datetime import datetime
from typing import Dict, List from typing import Dict, List
from freqtrade.exceptions import OperationalException from freqtrade.exceptions import OperationalException
from freqtrade.plugins.protections import IProtection from freqtrade.plugins.protections import IProtection
from freqtrade.resolvers import ProtectionResolver from freqtrade.resolvers import ProtectionResolver
from datetime import datetime
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -47,6 +48,7 @@ class ProtectionManager():
def global_stop(self) -> bool: def global_stop(self) -> bool:
now = datetime.utcnow() now = datetime.utcnow()
for protection_handler in self._protection_handlers: for protection_handler in self._protection_handlers:
result = protection_handler.global_stop(now) result = protection_handler.global_stop(now)

View File

@ -4,15 +4,18 @@ from abc import ABC, abstractmethod
from datetime import datetime from datetime import datetime
from typing import Any, Dict from typing import Any, Dict
from freqtrade.mixins import LoggingMixin
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class IProtection(ABC): class IProtection(LoggingMixin, ABC):
def __init__(self, config: Dict[str, Any], protection_config: Dict[str, Any]) -> None: def __init__(self, config: Dict[str, Any], protection_config: Dict[str, Any]) -> None:
self._config = config self._config = config
self._protection_config = protection_config self._protection_config = protection_config
LoggingMixin.__init__(self, logger)
@property @property
def name(self) -> str: def name(self) -> str:

View File

@ -3,7 +3,7 @@ import logging
from datetime import datetime, timedelta from datetime import datetime, timedelta
from typing import Any, Dict from typing import Any, Dict
from sqlalchemy import or_, and_ from sqlalchemy import and_, or_
from freqtrade.persistence import Trade from freqtrade.persistence import Trade
from freqtrade.plugins.protections import IProtection from freqtrade.plugins.protections import IProtection
@ -42,7 +42,9 @@ class StoplossGuard(IProtection):
filters.append(Trade.pair == pair) filters.append(Trade.pair == pair)
trades = Trade.get_trades(filters).all() trades = Trade.get_trades(filters).all()
if len(trades) > self.trade_limit: if len(trades) > self._trade_limit:
self.log_on_refresh(logger.info, f"Trading stopped due to {self._trade_limit} "
f"stoplosses within {self._lookback_period} minutes.")
return True return True
return False return False