diff options
Diffstat (limited to 'services/strategy-engine/tests/test_asian_session_rsi.py')
| -rw-r--r-- | services/strategy-engine/tests/test_asian_session_rsi.py | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/services/strategy-engine/tests/test_asian_session_rsi.py b/services/strategy-engine/tests/test_asian_session_rsi.py index b311220..db031f0 100644 --- a/services/strategy-engine/tests/test_asian_session_rsi.py +++ b/services/strategy-engine/tests/test_asian_session_rsi.py @@ -159,3 +159,32 @@ def test_reset_clears_all(): def test_warmup_period(): s = _make_strategy(rsi_period=14) assert s.warmup_period == 15 + + +def test_ema_filter_blocks_below_ema(): + """Entry blocked when price is below EMA.""" + s = AsianSessionRsiStrategy() + s._rsi_period = 5 + s._rsi_oversold = 40 + s._quantity = Decimal("0.5") + s._take_profit_pct = 1.5 + s._stop_loss_pct = 0.7 + s._session_start_utc = 0 + s._session_end_utc = 2 + s._max_trades_per_day = 3 + s._max_consecutive_losses = 10 + s._ema_period = 5 + s._require_bullish_candle = False # Test EMA only + + # Feed rising prices to set EMA high, then sharp drop + for i in range(10): + s.on_candle(_candle(200 + i * 5, hour=0, minute=i * 5)) + # Now feed low price -- below EMA, RSI should be low + signals = [] + for i in range(5): + sig = s.on_candle(_candle(100 - i * 5, hour=0, minute=(15 + i) * 5 % 60)) + if sig is not None: + signals.append(sig) + # Should have no BUY signals because price is way below EMA + buy_sigs = [s for s in signals if s.side == OrderSide.BUY] + assert len(buy_sigs) == 0 |
