From 380b8c079a9f92ece128ecccdff6c62fdef8f3b2 Mon Sep 17 00:00:00 2001 From: TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> Date: Wed, 1 Apr 2026 16:14:11 +0900 Subject: feat(strategy): add warmup_period to BaseStrategy and YAML config loading --- services/strategy-engine/strategies/base.py | 5 +++++ services/strategy-engine/strategies/config/grid_strategy.yaml | 4 ++++ services/strategy-engine/strategies/config/rsi_strategy.yaml | 4 ++++ services/strategy-engine/strategies/grid_strategy.py | 4 ++++ services/strategy-engine/strategies/rsi_strategy.py | 4 ++++ 5 files changed, 21 insertions(+) create mode 100644 services/strategy-engine/strategies/config/grid_strategy.yaml create mode 100644 services/strategy-engine/strategies/config/rsi_strategy.yaml (limited to 'services/strategy-engine/strategies') diff --git a/services/strategy-engine/strategies/base.py b/services/strategy-engine/strategies/base.py index 06101d0..fdf49ed 100644 --- a/services/strategy-engine/strategies/base.py +++ b/services/strategy-engine/strategies/base.py @@ -5,6 +5,11 @@ from shared.models import Candle, Signal class BaseStrategy(ABC): name: str = "base" + @property + @abstractmethod + def warmup_period(self) -> int: + pass + @abstractmethod def on_candle(self, candle: Candle) -> Signal | None: pass diff --git a/services/strategy-engine/strategies/config/grid_strategy.yaml b/services/strategy-engine/strategies/config/grid_strategy.yaml new file mode 100644 index 0000000..607f3df --- /dev/null +++ b/services/strategy-engine/strategies/config/grid_strategy.yaml @@ -0,0 +1,4 @@ +lower_price: 60000 +upper_price: 70000 +grid_count: 5 +quantity: "0.01" diff --git a/services/strategy-engine/strategies/config/rsi_strategy.yaml b/services/strategy-engine/strategies/config/rsi_strategy.yaml new file mode 100644 index 0000000..8b287a1 --- /dev/null +++ b/services/strategy-engine/strategies/config/rsi_strategy.yaml @@ -0,0 +1,4 @@ +period: 14 +oversold: 30 +overbought: 70 +quantity: "0.01" diff --git a/services/strategy-engine/strategies/grid_strategy.py b/services/strategy-engine/strategies/grid_strategy.py index f669f09..78e2703 100644 --- a/services/strategy-engine/strategies/grid_strategy.py +++ b/services/strategy-engine/strategies/grid_strategy.py @@ -18,6 +18,10 @@ class GridStrategy(BaseStrategy): self._grid_levels: list[float] = [] self._last_zone: Optional[int] = None + @property + def warmup_period(self) -> int: + return 2 + def configure(self, params: dict) -> None: self._lower_price = float(params["lower_price"]) self._upper_price = float(params["upper_price"]) diff --git a/services/strategy-engine/strategies/rsi_strategy.py b/services/strategy-engine/strategies/rsi_strategy.py index aebbafc..c37957d 100644 --- a/services/strategy-engine/strategies/rsi_strategy.py +++ b/services/strategy-engine/strategies/rsi_strategy.py @@ -34,6 +34,10 @@ class RsiStrategy(BaseStrategy): self._overbought: float = 70.0 self._quantity: Decimal = Decimal("0.01") + @property + def warmup_period(self) -> int: + return self._period + 1 + def configure(self, params: dict) -> None: self._period = int(params.get("period", 14)) self._oversold = float(params.get("oversold", 30)) -- cgit v1.2.3