summaryrefslogtreecommitdiff
path: root/services/strategy-engine/strategies/grid_strategy.py
diff options
context:
space:
mode:
Diffstat (limited to 'services/strategy-engine/strategies/grid_strategy.py')
-rw-r--r--services/strategy-engine/strategies/grid_strategy.py17
1 files changed, 15 insertions, 2 deletions
diff --git a/services/strategy-engine/strategies/grid_strategy.py b/services/strategy-engine/strategies/grid_strategy.py
index 1244eda..70443ec 100644
--- a/services/strategy-engine/strategies/grid_strategy.py
+++ b/services/strategy-engine/strategies/grid_strategy.py
@@ -44,6 +44,14 @@ class GridStrategy(BaseStrategy):
)
self._last_zone = None
+ self._init_filters(
+ require_trend=False,
+ adx_threshold=float(params.get("adx_threshold", 20.0)),
+ min_volume_ratio=float(params.get("min_volume_ratio", 0.5)),
+ atr_stop_multiplier=float(params.get("atr_stop_multiplier", 2.0)),
+ atr_tp_multiplier=float(params.get("atr_tp_multiplier", 3.0)),
+ )
+
def reset(self) -> None:
self._last_zone = None
@@ -59,6 +67,7 @@ class GridStrategy(BaseStrategy):
return len(self._grid_levels)
def on_candle(self, candle: Candle) -> Signal | None:
+ self._update_filter_data(candle)
price = float(candle.close)
current_zone = self._get_zone(price)
@@ -71,23 +80,27 @@ class GridStrategy(BaseStrategy):
if current_zone < prev_zone:
# Price moved to a lower zone → BUY
- return Signal(
+ signal = Signal(
strategy=self.name,
symbol=candle.symbol,
side=OrderSide.BUY,
price=candle.close,
quantity=self._quantity,
+ conviction=0.5,
reason=f"Grid: price crossed down from zone {prev_zone} to {current_zone}",
)
+ return self._apply_filters(signal)
elif current_zone > prev_zone:
# Price moved to a higher zone → SELL
- return Signal(
+ signal = Signal(
strategy=self.name,
symbol=candle.symbol,
side=OrderSide.SELL,
price=candle.close,
quantity=self._quantity,
+ conviction=0.5,
reason=f"Grid: price crossed up from zone {prev_zone} to {current_zone}",
)
+ return self._apply_filters(signal)
return None