feat: Add price data validation and debug logging to stock data retrieval

This commit is contained in:
Bobby Abellana (aider) 2025-02-06 23:39:58 -08:00
parent 95e1a2bcd0
commit f7d6d5d136
No known key found for this signature in database
GPG Key ID: 647714CC45F3647B

View File

@ -34,6 +34,29 @@ def get_stock_data(ticker: str, start_date: datetime, end_date: datetime, interv
"""Fetch stock data from the database"""
client = create_client()
# Add data validation
def validate_price_data(df: pd.DataFrame) -> pd.DataFrame:
if df.empty:
return df
# Remove rows with suspicious values
df = df[
(df['open'] > 0) &
(df['high'] > 0) &
(df['low'] > 0) &
(df['close'] > 0) &
(df['high'] >= df['low']) &
(df['high'] >= df['open']) &
(df['high'] >= df['close']) &
(df['low'] <= df['open']) &
(df['low'] <= df['close'])
]
# Sort by date and remove duplicates
df = df.sort_values('date').drop_duplicates(subset=['date'])
return df
# Calculate proper date range (looking back from today)
end_date = datetime.now()
start_date = end_date - timedelta(days=60) # 60 days of history
@ -94,6 +117,17 @@ def get_stock_data(ticker: str, start_date: datetime, end_date: datetime, interv
columns=['date', 'open', 'high', 'low', 'close', 'volume']
)
# Add validation step
df = validate_price_data(df)
if df.empty:
print(f"No valid data found for {ticker} after validation")
return df
# Add debug output for last price
last_price = df.iloc[-1]
print(f"Debug: Last valid price for {ticker}: ${last_price['close']:.2f}")
if interval != "daily" and interval != "5min":
# Resample to desired interval
df.set_index('date', inplace=True)