from datetime import datetime from screener.t_sunnyband import run_sunny_scanner from screener.t_atr_ema import run_atr_ema_scanner from screener.t_atr_ema_v2 import run_atr_ema_scanner_v2 def run_technical_scanner(scanner_choice: str, start_date: str, end_date: str, min_price: float, max_price: float, min_volume: int, portfolio_size: float, interval: str = "1d"): """ Run the selected technical scanner with provided parameters Args: scanner_choice (str): Type of scanner to run start_date (str): Start date in YYYY-MM-DD format end_date (str): End date in YYYY-MM-DD format min_price (float): Minimum stock price max_price (float): Maximum stock price min_volume (int): Minimum volume portfolio_size (float): Portfolio size for position sizing interval (str): Time interval for data (default: "1d") """ # Convert string dates to datetime objects start_dt = datetime.strptime(start_date, "%Y-%m-%d") end_dt = datetime.strptime(end_date, "%Y-%m-%d") scanner_map = { "sunnybands": lambda: run_sunny_scanner(min_price, max_price, min_volume, portfolio_size, interval, start_dt, end_dt), "atr-ema": lambda: run_atr_ema_scanner(min_price, max_price, min_volume, portfolio_size, interval, start_dt, end_dt), "atr-ema_v2": lambda: run_atr_ema_scanner_v2(min_price, max_price, min_volume, portfolio_size, interval, start_dt, end_dt) } scanner_func = scanner_map.get(scanner_choice) if scanner_func: return scanner_func() else: raise ValueError(f"Invalid scanner choice: {scanner_choice}")