Properly type "side" parameter
This commit is contained in:
parent
b7cada1edd
commit
7c79d937e0
@ -1611,7 +1611,7 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def handle_protections(self, pair: str, side: str) -> None:
|
def handle_protections(self, pair: str, side: LongShort) -> None:
|
||||||
prot_trig = self.protections.stop_per_pair(pair, side=side)
|
prot_trig = self.protections.stop_per_pair(pair, side=side)
|
||||||
if prot_trig:
|
if prot_trig:
|
||||||
msg = {'type': RPCMessageType.PROTECTION_TRIGGER, }
|
msg = {'type': RPCMessageType.PROTECTION_TRIGGER, }
|
||||||
|
@ -849,7 +849,8 @@ class Backtesting:
|
|||||||
return 'short'
|
return 'short'
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def run_protections(self, enable_protections, pair: str, current_time: datetime, side: str):
|
def run_protections(
|
||||||
|
self, enable_protections, pair: str, current_time: datetime, side: LongShort):
|
||||||
if enable_protections:
|
if enable_protections:
|
||||||
self.protections.stop_per_pair(pair, current_time, side)
|
self.protections.stop_per_pair(pair, current_time, side)
|
||||||
self.protections.global_stop(current_time, side)
|
self.protections.global_stop(current_time, side)
|
||||||
|
@ -13,7 +13,7 @@ from sqlalchemy.orm import Query, declarative_base, relationship, scoped_session
|
|||||||
from sqlalchemy.pool import StaticPool
|
from sqlalchemy.pool import StaticPool
|
||||||
from sqlalchemy.sql.schema import UniqueConstraint
|
from sqlalchemy.sql.schema import UniqueConstraint
|
||||||
|
|
||||||
from freqtrade.constants import DATETIME_PRINT_FORMAT, NON_OPEN_EXCHANGE_STATES
|
from freqtrade.constants import DATETIME_PRINT_FORMAT, NON_OPEN_EXCHANGE_STATES, LongShort
|
||||||
from freqtrade.enums import ExitType, TradingMode
|
from freqtrade.enums import ExitType, TradingMode
|
||||||
from freqtrade.exceptions import DependencyException, OperationalException
|
from freqtrade.exceptions import DependencyException, OperationalException
|
||||||
from freqtrade.leverage import interest
|
from freqtrade.leverage import interest
|
||||||
@ -393,7 +393,7 @@ class LocalTrade():
|
|||||||
return "sell"
|
return "sell"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def trade_direction(self) -> str:
|
def trade_direction(self) -> LongShort:
|
||||||
if self.is_short:
|
if self.is_short:
|
||||||
return "short"
|
return "short"
|
||||||
else:
|
else:
|
||||||
|
@ -5,6 +5,7 @@ import logging
|
|||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
from typing import Dict, List, Optional
|
from typing import Dict, List, Optional
|
||||||
|
|
||||||
|
from freqtrade.constants import LongShort
|
||||||
from freqtrade.persistence import PairLocks
|
from freqtrade.persistence import PairLocks
|
||||||
from freqtrade.persistence.models import PairLock
|
from freqtrade.persistence.models import PairLock
|
||||||
from freqtrade.plugins.protections import IProtection
|
from freqtrade.plugins.protections import IProtection
|
||||||
@ -44,7 +45,8 @@ class ProtectionManager():
|
|||||||
"""
|
"""
|
||||||
return [{p.name: p.short_desc()} for p in self._protection_handlers]
|
return [{p.name: p.short_desc()} for p in self._protection_handlers]
|
||||||
|
|
||||||
def global_stop(self, now: Optional[datetime] = None, side: str = 'long') -> Optional[PairLock]:
|
def global_stop(self, now: Optional[datetime] = None,
|
||||||
|
side: LongShort = 'long') -> Optional[PairLock]:
|
||||||
if not now:
|
if not now:
|
||||||
now = datetime.now(timezone.utc)
|
now = datetime.now(timezone.utc)
|
||||||
result = None
|
result = None
|
||||||
@ -56,8 +58,8 @@ class ProtectionManager():
|
|||||||
result = PairLocks.lock_pair('*', lock.until, lock.reason, now=now)
|
result = PairLocks.lock_pair('*', lock.until, lock.reason, now=now)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def stop_per_pair(
|
def stop_per_pair(self, pair, now: Optional[datetime] = None,
|
||||||
self, pair, now: Optional[datetime] = None, side: str = 'long') -> Optional[PairLock]:
|
side: LongShort = 'long') -> Optional[PairLock]:
|
||||||
if not now:
|
if not now:
|
||||||
now = datetime.now(timezone.utc)
|
now = datetime.now(timezone.utc)
|
||||||
result = None
|
result = None
|
||||||
|
@ -3,6 +3,7 @@ import logging
|
|||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
|
from freqtrade.constants import LongShort
|
||||||
from freqtrade.persistence import Trade
|
from freqtrade.persistence import Trade
|
||||||
from freqtrade.plugins.protections import IProtection, ProtectionReturn
|
from freqtrade.plugins.protections import IProtection, ProtectionReturn
|
||||||
|
|
||||||
@ -54,7 +55,7 @@ class CooldownPeriod(IProtection):
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def global_stop(self, date_now: datetime, side: str) -> Optional[ProtectionReturn]:
|
def global_stop(self, date_now: datetime, side: LongShort) -> Optional[ProtectionReturn]:
|
||||||
"""
|
"""
|
||||||
Stops trading (position entering) for all pairs
|
Stops trading (position entering) for all pairs
|
||||||
This must evaluate to true for the whole period of the "cooldown period".
|
This must evaluate to true for the whole period of the "cooldown period".
|
||||||
@ -64,7 +65,8 @@ class CooldownPeriod(IProtection):
|
|||||||
# Not implemented for cooldown period.
|
# Not implemented for cooldown period.
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def stop_per_pair(self, pair: str, date_now: datetime, side: str) -> Optional[ProtectionReturn]:
|
def stop_per_pair(
|
||||||
|
self, pair: str, date_now: datetime, side: LongShort) -> Optional[ProtectionReturn]:
|
||||||
"""
|
"""
|
||||||
Stops trading (position entering) for this pair
|
Stops trading (position entering) for this pair
|
||||||
This must evaluate to true for the whole period of the "cooldown period".
|
This must evaluate to true for the whole period of the "cooldown period".
|
||||||
|
@ -5,6 +5,7 @@ from dataclasses import dataclass
|
|||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from typing import Any, Dict, List, Optional
|
from typing import Any, Dict, List, Optional
|
||||||
|
|
||||||
|
from freqtrade.constants import LongShort
|
||||||
from freqtrade.exchange import timeframe_to_minutes
|
from freqtrade.exchange import timeframe_to_minutes
|
||||||
from freqtrade.misc import plural
|
from freqtrade.misc import plural
|
||||||
from freqtrade.mixins import LoggingMixin
|
from freqtrade.mixins import LoggingMixin
|
||||||
@ -87,14 +88,15 @@ class IProtection(LoggingMixin, ABC):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def global_stop(self, date_now: datetime, side: str) -> Optional[ProtectionReturn]:
|
def global_stop(self, date_now: datetime, side: LongShort) -> Optional[ProtectionReturn]:
|
||||||
"""
|
"""
|
||||||
Stops trading (position entering) for all pairs
|
Stops trading (position entering) for all pairs
|
||||||
This must evaluate to true for the whole period of the "cooldown period".
|
This must evaluate to true for the whole period of the "cooldown period".
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def stop_per_pair(self, pair: str, date_now: datetime, side: str) -> Optional[ProtectionReturn]:
|
def stop_per_pair(
|
||||||
|
self, pair: str, date_now: datetime, side: LongShort) -> Optional[ProtectionReturn]:
|
||||||
"""
|
"""
|
||||||
Stops trading (position entering) for this pair
|
Stops trading (position entering) for this pair
|
||||||
This must evaluate to true for the whole period of the "cooldown period".
|
This must evaluate to true for the whole period of the "cooldown period".
|
||||||
|
@ -3,6 +3,7 @@ import logging
|
|||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from typing import Any, Dict, Optional
|
from typing import Any, Dict, Optional
|
||||||
|
|
||||||
|
from freqtrade.constants import LongShort
|
||||||
from freqtrade.persistence import Trade
|
from freqtrade.persistence import Trade
|
||||||
from freqtrade.plugins.protections import IProtection, ProtectionReturn
|
from freqtrade.plugins.protections import IProtection, ProtectionReturn
|
||||||
|
|
||||||
@ -68,7 +69,7 @@ class LowProfitPairs(IProtection):
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def global_stop(self, date_now: datetime, side: str) -> Optional[ProtectionReturn]:
|
def global_stop(self, date_now: datetime, side: LongShort) -> Optional[ProtectionReturn]:
|
||||||
"""
|
"""
|
||||||
Stops trading (position entering) for all pairs
|
Stops trading (position entering) for all pairs
|
||||||
This must evaluate to true for the whole period of the "cooldown period".
|
This must evaluate to true for the whole period of the "cooldown period".
|
||||||
@ -77,7 +78,8 @@ class LowProfitPairs(IProtection):
|
|||||||
"""
|
"""
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def stop_per_pair(self, pair: str, date_now: datetime, side: str) -> Optional[ProtectionReturn]:
|
def stop_per_pair(
|
||||||
|
self, pair: str, date_now: datetime, side: LongShort) -> Optional[ProtectionReturn]:
|
||||||
"""
|
"""
|
||||||
Stops trading (position entering) for this pair
|
Stops trading (position entering) for this pair
|
||||||
This must evaluate to true for the whole period of the "cooldown period".
|
This must evaluate to true for the whole period of the "cooldown period".
|
||||||
|
@ -5,6 +5,7 @@ from typing import Any, Dict, Optional
|
|||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
|
from freqtrade.constants import LongShort
|
||||||
from freqtrade.data.btanalysis import calculate_max_drawdown
|
from freqtrade.data.btanalysis import calculate_max_drawdown
|
||||||
from freqtrade.persistence import Trade
|
from freqtrade.persistence import Trade
|
||||||
from freqtrade.plugins.protections import IProtection, ProtectionReturn
|
from freqtrade.plugins.protections import IProtection, ProtectionReturn
|
||||||
@ -75,7 +76,7 @@ class MaxDrawdown(IProtection):
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def global_stop(self, date_now: datetime, side: str) -> Optional[ProtectionReturn]:
|
def global_stop(self, date_now: datetime, side: LongShort) -> Optional[ProtectionReturn]:
|
||||||
"""
|
"""
|
||||||
Stops trading (position entering) for all pairs
|
Stops trading (position entering) for all pairs
|
||||||
This must evaluate to true for the whole period of the "cooldown period".
|
This must evaluate to true for the whole period of the "cooldown period".
|
||||||
@ -84,7 +85,8 @@ class MaxDrawdown(IProtection):
|
|||||||
"""
|
"""
|
||||||
return self._max_drawdown(date_now)
|
return self._max_drawdown(date_now)
|
||||||
|
|
||||||
def stop_per_pair(self, pair: str, date_now: datetime, side: str) -> Optional[ProtectionReturn]:
|
def stop_per_pair(
|
||||||
|
self, pair: str, date_now: datetime, side: LongShort) -> Optional[ProtectionReturn]:
|
||||||
"""
|
"""
|
||||||
Stops trading (position entering) for this pair
|
Stops trading (position entering) for this pair
|
||||||
This must evaluate to true for the whole period of the "cooldown period".
|
This must evaluate to true for the whole period of the "cooldown period".
|
||||||
|
@ -3,6 +3,7 @@ import logging
|
|||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from typing import Any, Dict, Optional
|
from typing import Any, Dict, Optional
|
||||||
|
|
||||||
|
from freqtrade.constants import LongShort
|
||||||
from freqtrade.enums import ExitType
|
from freqtrade.enums import ExitType
|
||||||
from freqtrade.persistence import Trade
|
from freqtrade.persistence import Trade
|
||||||
from freqtrade.plugins.protections import IProtection, ProtectionReturn
|
from freqtrade.plugins.protections import IProtection, ProtectionReturn
|
||||||
@ -67,7 +68,7 @@ class StoplossGuard(IProtection):
|
|||||||
lock_side=(side if self._only_per_side else None)
|
lock_side=(side if self._only_per_side else None)
|
||||||
)
|
)
|
||||||
|
|
||||||
def global_stop(self, date_now: datetime, side: str) -> Optional[ProtectionReturn]:
|
def global_stop(self, date_now: datetime, side: LongShort) -> Optional[ProtectionReturn]:
|
||||||
"""
|
"""
|
||||||
Stops trading (position entering) for all pairs
|
Stops trading (position entering) for all pairs
|
||||||
This must evaluate to true for the whole period of the "cooldown period".
|
This must evaluate to true for the whole period of the "cooldown period".
|
||||||
@ -78,7 +79,8 @@ class StoplossGuard(IProtection):
|
|||||||
return None
|
return None
|
||||||
return self._stoploss_guard(date_now, None, side)
|
return self._stoploss_guard(date_now, None, side)
|
||||||
|
|
||||||
def stop_per_pair(self, pair: str, date_now: datetime, side: str) -> Optional[ProtectionReturn]:
|
def stop_per_pair(
|
||||||
|
self, pair: str, date_now: datetime, side: LongShort) -> Optional[ProtectionReturn]:
|
||||||
"""
|
"""
|
||||||
Stops trading (position entering) for this pair
|
Stops trading (position entering) for this pair
|
||||||
This must evaluate to true for the whole period of the "cooldown period".
|
This must evaluate to true for the whole period of the "cooldown period".
|
||||||
|
Loading…
Reference in New Issue
Block a user