feat(discovery): add mean_reversion pipeline for RSI oversold scanner

The rsi_oversold scanner is a contrarian signal, not a momentum signal —
it fires on short-term panic pullbacks within uptrends and expects a 3-7 day
bounce. Keeping it in the momentum pipeline conflates two fundamentally
different signal types and could cause the ranker to misprice it.

Changes:
- Add mean_reversion pipeline (priority 6, deep_dive_budget 5) to default_config.py
- Move rsi_oversold scanner from pipeline="momentum" to pipeline="mean_reversion"
  in both default_config.py and rsi_oversold.py

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Youssef Aitousarrah 2026-04-14 22:56:05 -07:00
parent 5c56f8dc26
commit 20d3e9fbbe
2 changed files with 8 additions and 2 deletions

View File

@ -39,7 +39,7 @@ class RSIOversoldScanner(BaseScanner):
"""
name = "rsi_oversold"
pipeline = "momentum"
pipeline = "mean_reversion"
strategy = "mean_reversion_bounce"
def __init__(self, config: Dict[str, Any]):

View File

@ -110,6 +110,12 @@ DEFAULT_CONFIG = {
"deep_dive_budget": 5,
},
"events": {"enabled": True, "priority": 5, "deep_dive_budget": 3},
"mean_reversion": {
"enabled": True,
"priority": 6,
"ranker_prompt": "mean_reversion_ranker.txt",
"deep_dive_budget": 5,
},
},
# ========================================
# OHLCV CACHE (populated nightly by prefetch workflow)
@ -273,7 +279,7 @@ DEFAULT_CONFIG = {
},
"rsi_oversold": {
"enabled": True,
"pipeline": "momentum",
"pipeline": "mean_reversion",
"limit": 10,
"max_tickers": 0, # 0 = no cap (nightly cache makes full universe fast)
"rsi_period": 2, # Connors RSI(2): most sensitive to short-term pullbacks