From 41380c36388e06d80d2d9b9278bc57f2035c32f2 Mon Sep 17 00:00:00 2001 From: "Bobby (aider)" Date: Sat, 8 Feb 2025 11:50:25 -0800 Subject: [PATCH] fix: correct timestamp handling and add date validation in stock data queries --- src/screener/t_sunnyband.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/screener/t_sunnyband.py b/src/screener/t_sunnyband.py index af44d63..ddb70f0 100644 --- a/src/screener/t_sunnyband.py +++ b/src/screener/t_sunnyband.py @@ -25,7 +25,7 @@ def get_stock_data(ticker: str, start_date: datetime, end_date: datetime, interv # Unified query format query = f""" SELECT - toDate(window_start) as date, + toDateTime(window_start/1000000000) as date, open, high, low, @@ -34,9 +34,11 @@ def get_stock_data(ticker: str, start_date: datetime, end_date: datetime, interv FROM stock_db.stock_prices WHERE ticker = '{ticker}' AND window_start BETWEEN - toUnixTimestamp('{start_date.date()}') * 1000000000 AND - toUnixTimestamp('{end_date.date()}') * 1000000000 - ORDER BY window_start ASC + {int(start_date.timestamp() * 1e9)} AND + {int(end_date.timestamp() * 1e9)} + AND toYear(toDateTime(window_start/1000000000)) <= toYear(now()) + AND toYear(toDateTime(window_start/1000000000)) >= (toYear(now()) - 1) + ORDER BY date ASC """ result = client.query(query) @@ -47,7 +49,7 @@ def get_stock_data(ticker: str, start_date: datetime, end_date: datetime, interv print(f"⚠️ No daily data for {ticker}, resampling from intraday data") intraday_query = f""" SELECT - toStartOfDay(window_start) AS date, + toDateTime(window_start/1000000000) as date, first_value(open) AS open, max(high) AS high, min(low) AS low, @@ -56,8 +58,10 @@ def get_stock_data(ticker: str, start_date: datetime, end_date: datetime, interv FROM stock_db.stock_prices WHERE ticker = '{ticker}' AND window_start BETWEEN - toUnixTimestamp('{start_date.date()}') * 1000000000 AND - toUnixTimestamp('{end_date.date()}') * 1000000000 + {int(start_date.timestamp() * 1e9)} AND + {int(end_date.timestamp() * 1e9)} + AND toYear(toDateTime(window_start/1000000000)) <= toYear(now()) + AND toYear(toDateTime(window_start/1000000000)) >= (toYear(now()) - 1) GROUP BY date ORDER BY date ASC """