summaryrefslogtreecommitdiff
path: root/services/strategy-engine/strategies
diff options
context:
space:
mode:
authorTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-01 16:14:11 +0900
committerTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-01 16:14:11 +0900
commit380b8c079a9f92ece128ecccdff6c62fdef8f3b2 (patch)
treec56414eab6c0ddc4118cb7c6535274b1224ca031 /services/strategy-engine/strategies
parentc3560fdd637c4f034cac4f7371aeed65d018bc91 (diff)
feat(strategy): add warmup_period to BaseStrategy and YAML config loading
Diffstat (limited to 'services/strategy-engine/strategies')
-rw-r--r--services/strategy-engine/strategies/base.py5
-rw-r--r--services/strategy-engine/strategies/config/grid_strategy.yaml4
-rw-r--r--services/strategy-engine/strategies/config/rsi_strategy.yaml4
-rw-r--r--services/strategy-engine/strategies/grid_strategy.py4
-rw-r--r--services/strategy-engine/strategies/rsi_strategy.py4
5 files changed, 21 insertions, 0 deletions
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))