diff --git a/tradingagents/dataflows/discovery/filter.py b/tradingagents/dataflows/discovery/filter.py index 8a3b5cc7..5ee83217 100644 --- a/tradingagents/dataflows/discovery/filter.py +++ b/tradingagents/dataflows/discovery/filter.py @@ -478,22 +478,30 @@ class CandidateFilter: cand["recent_move_status"] = reaction.get("status") if reaction.get("status") == "lagging": - if self.recent_mover_action == "filter": - filtered_reasons["recent_moved"] += 1 - change_pct = reaction.get("price_change_pct", 0) - logger.info( - f"Filtered {ticker}: Already moved {change_pct:+.1f}% in last " - f"{self.recent_movement_lookback_days} days" - ) - continue - if self.recent_mover_action == "deprioritize": - cand["priority"] = "low" - existing_context = cand.get("context", "") - change_pct = reaction.get("price_change_pct", 0) - cand["context"] = ( - f"{existing_context} | ⚠️ Recent move: {change_pct:+.1f}% " - f"over {self.recent_movement_lookback_days}d" - ) + # Mean-reversion candidates are expected to have moved — exempt them + from tradingagents.dataflows.discovery.scanner_registry import SCANNER_REGISTRY + source = cand.get("source", "") + scanner_cls = SCANNER_REGISTRY.scanners.get(source) + scanner_pipeline = getattr(scanner_cls, "pipeline", None) + is_mean_reversion = scanner_pipeline == "mean_reversion" + + if not is_mean_reversion: + if self.recent_mover_action == "filter": + filtered_reasons["recent_moved"] += 1 + change_pct = reaction.get("price_change_pct", 0) + logger.info( + f"Filtered {ticker}: Already moved {change_pct:+.1f}% in last " + f"{self.recent_movement_lookback_days} days" + ) + continue + if self.recent_mover_action == "deprioritize": + cand["priority"] = "low" + existing_context = cand.get("context", "") + change_pct = reaction.get("price_change_pct", 0) + cand["context"] = ( + f"{existing_context} | ⚠️ Recent move: {change_pct:+.1f}% " + f"over {self.recent_movement_lookback_days}d" + ) # Liquidity filter based on average volume if self.min_average_volume: diff --git a/tradingagents/default_config.py b/tradingagents/default_config.py index 2b71273c..5ee9325c 100644 --- a/tradingagents/default_config.py +++ b/tradingagents/default_config.py @@ -63,7 +63,7 @@ DEFAULT_CONFIG = { "filter_recent_movers": True, # Enable/disable filter "recent_movement_lookback_days": 7, # Days to check for recent moves "recent_movement_threshold": 10.0, # % change threshold - "recent_mover_action": "filter", # "filter" or "deprioritize" + "recent_mover_action": "deprioritize", # "filter" or "deprioritize" # Volume / compression detection "volume_cache_key": "default", # Cache key for volume data "min_market_cap": 0, # Minimum market cap in billions (0 = no filter)