refactor: Modify scanner_controller to accept parameters directly and use dictionary mapping

This commit is contained in:
Bobby (aider) 2025-02-10 22:53:04 -08:00
parent 9e1cccd3b6
commit 0dd86ebe42

View File

@ -1,25 +1,30 @@
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
from utils.data_utils import get_float_input
def get_scanner_parameters():
"""Get user input for scanner parameters"""
min_price = get_float_input("Enter minimum stock price ($): ")
max_price = get_float_input("Enter maximum stock price ($): ")
min_volume = int(input("Enter minimum volume: "))
portfolio_size = get_float_input("Enter portfolio size ($) or 0 to skip position sizing: ")
return min_price, max_price, min_volume, portfolio_size
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):
"""
Run the selected technical scanner with provided parameters
def run_technical_scanner(scanner_choice: str):
"""Run the selected technical scanner"""
min_price, max_price, min_volume, portfolio_size = get_scanner_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
"""
scanner_map = {
"sunnybands": lambda: run_sunny_scanner(min_price, max_price, min_volume, portfolio_size),
"atr-ema": lambda: run_atr_ema_scanner(min_price, max_price, min_volume, portfolio_size),
"atr-ema_v2": lambda: run_atr_ema_scanner_v2(min_price, max_price, min_volume, portfolio_size)
}
if scanner_choice == "1":
run_sunny_scanner(min_price, max_price, min_volume, portfolio_size)
elif scanner_choice == "2":
run_atr_ema_scanner(min_price, max_price, min_volume, portfolio_size)
elif scanner_choice == "3":
run_atr_ema_scanner_v2(min_price, max_price, min_volume, portfolio_size)
scanner_func = scanner_map.get(scanner_choice)
if scanner_func:
return scanner_func()
else:
print("Invalid scanner choice.")
raise ValueError(f"Invalid scanner choice: {scanner_choice}")