DeepFin / agents /financial_data_agent.py
Amós e Souza Fernandes
Upload 120 files
5f10e37 verified
# agents/financial_data_agent.py
import yfinance as yf
import pandas as pd
from agno.agent import Agent # Commented out
from agno.models.anthropic import Claude # Commented out
from agno.tools.yfinance import YFinanceTools # Commented out
def get_stock_report(ticker="NVDA"): # Commented out
agent = Agent(
model=Claude(id="claude-3-7-sonnet-latest"),
tools=[
YFinanceTools(
stock_price=True,
analyst_recommendations=True,
company_info=True,
company_news=True,
)
],
instructions=[
"Use tables to display data",
"Only output the report, no other text",
],
markdown=True,
)
return agent.get_response(f"Write a financial report on {ticker}")
def fetch_historical_ohlcv(ticker_symbol: str, period: str = "1y", interval: str = "1d") -> pd.DataFrame:
"""
Fetches historical OHLCV data for a given ticker symbol.
Args:
ticker_symbol (str): The stock ticker symbol (e.g., "AAPL" for Apple on NASDAQ,
"PETR4.SA" for Petrobras on B3, "000001.SS" for SSE Composite Index).
period (str): The period for which to download data (e.g., "1d", "5d", "1mo", "3mo", "6mo", "1y", "2y", "5y", "10y", "ytd", "max").
interval (str): The interval of data points (e.g., "1m", "2m", "5m", "15m", "30m", "60m", "90m", "1h", "1d", "5d", "1wk", "1mo", "3mo").
Returns:
pd.DataFrame: A pandas DataFrame containing the OHLCV data, or an empty DataFrame if an error occurs.
"""
try:
ticker = yf.Ticker(ticker_symbol)
data = ticker.history(period=period, interval=interval)
if data.empty:
print(f"No data found for {ticker_symbol} for the given period/interval.")
return pd.DataFrame()
# Ensure column names are consistent (Yahoo Finance sometimes uses 'Adj Close')
data.rename(columns={"Adj Close": "Adj_Close"}, inplace=True)
return data
except Exception as e:
print(f"Error fetching data for {ticker_symbol}: {e}")
return pd.DataFrame()
if __name__ == '__main__':
# Example usage:
# NASDAQ
aapl_data = fetch_historical_ohlcv("AAPL", period="1mo", interval="1d")
if not aapl_data.empty:
print("\nAAPL Data (NASDAQ):")
print(aapl_data.head())
# B3 (Brazilian Stock Exchange) - Example: Petrobras
petr4_data = fetch_historical_ohlcv("PETR4.SA", period="1mo", interval="1d")
if not petr4_data.empty:
print("\nPETR4.SA Data (B3):")
print(petr4_data.head())
# Asian Market - Example: Samsung Electronics (Korea Exchange)
samsung_data = fetch_historical_ohlcv("005930.KS", period="1mo", interval="1d")
if not samsung_data.empty:
print("\n005930.KS Data (Samsung - KRX):")
print(samsung_data.head())
# Example for a non-existent ticker or error
error_data = fetch_historical_ohlcv("NONEXISTENTTICKER", period="1d")
if error_data.empty:
print("\nSuccessfully handled non-existent ticker.")