diff --git a/src/screener/t_atr_ema.py b/src/screener/t_atr_ema.py index 44fc644..dbedda2 100644 --- a/src/screener/t_atr_ema.py +++ b/src/screener/t_atr_ema.py @@ -73,18 +73,26 @@ def run_atr_ema_scanner(min_price: float, max_price: float, min_volume: int, por try: with create_client() as client: query = f""" - WITH latest_data AS ( + WITH filtered_data AS ( + SELECT + ticker, + window_start, + close, + volume + FROM stock_db.stock_prices + WHERE window_start BETWEEN {start_ts} AND {end_ts} + AND toDateTime(window_start/1000000000) <= now() + AND close BETWEEN {min_price} AND {max_price} + AND volume >= {min_volume} + ), + latest_data AS ( SELECT ticker, argMax(close, window_start) as last_close, sum(volume) as total_volume, max(window_start) as last_update - FROM stock_db.stock_prices - WHERE window_start BETWEEN {start_ts} AND {end_ts} - AND toDateTime(window_start/1000000000) <= now() + FROM filtered_data GROUP BY ticker - HAVING last_close BETWEEN {min_price} AND {max_price} - AND total_volume >= {min_volume} ) SELECT ticker, diff --git a/src/screener/t_atr_ema_v2.py b/src/screener/t_atr_ema_v2.py index e768096..47bb62f 100644 --- a/src/screener/t_atr_ema_v2.py +++ b/src/screener/t_atr_ema_v2.py @@ -82,18 +82,26 @@ def run_atr_ema_scanner_v2(min_price: float, max_price: float, min_volume: int, with create_client() as client: # Query to get qualified stocks query = f""" - WITH latest_data AS ( + WITH filtered_data AS ( + SELECT + ticker, + window_start, + close, + volume + FROM stock_db.stock_prices + WHERE window_start BETWEEN {start_ts} AND {end_ts} + AND toDateTime(window_start/1000000000) <= now() + AND close BETWEEN {min_price} AND {max_price} + AND volume >= {min_volume} + ), + latest_data AS ( SELECT ticker, argMax(close, window_start) as last_close, sum(volume) as total_volume, max(window_start) as last_update - FROM stock_db.stock_prices - WHERE window_start BETWEEN {start_ts} AND {end_ts} - AND toDateTime(window_start/1000000000) <= now() + FROM filtered_data GROUP BY ticker - HAVING last_close BETWEEN {min_price} AND {max_price} - AND total_volume >= {min_volume} ) SELECT ticker, diff --git a/src/screener/t_sunnyband.py b/src/screener/t_sunnyband.py index 25329be..891bf8d 100644 --- a/src/screener/t_sunnyband.py +++ b/src/screener/t_sunnyband.py @@ -216,18 +216,26 @@ def run_sunny_scanner(min_price: float, max_price: float, min_volume: int, portf with create_client() as client: # Query to get stocks meeting criteria with their latest data query = f""" - WITH latest_data AS ( + WITH filtered_data AS ( + SELECT + ticker, + window_start, + close, + volume + FROM stock_db.stock_prices + WHERE window_start BETWEEN {start_ts} AND {end_ts} + AND toDateTime(window_start/1000000000) <= now() + AND close BETWEEN {min_price} AND {max_price} + AND volume >= {min_volume} + ), + latest_data AS ( SELECT ticker, argMax(close, window_start) as last_close, sum(volume) as total_volume, max(window_start) as last_update - FROM stock_db.stock_prices - WHERE window_start BETWEEN {start_ts} AND {end_ts} - AND toDateTime(window_start/1000000000) <= now() + FROM filtered_data GROUP BY ticker - HAVING last_close BETWEEN {min_price} AND {max_price} - AND total_volume >= {min_volume} ) SELECT ticker,