37 lines
1.7 KiB
Python
37 lines
1.7 KiB
Python
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}")
|