|
|
import yfinance as yf |
|
|
import pandas as pd |
|
|
from datetime import datetime, timedelta |
|
|
|
|
|
def get_stock_data(symbol, period='1y', interval='1d'): |
|
|
"""Fetch stock data from yfinance.""" |
|
|
try: |
|
|
|
|
|
ticker = yf.Ticker(f"{symbol}.NS") |
|
|
df = ticker.history(period=period, interval=interval) |
|
|
|
|
|
if df.empty: |
|
|
return None, "No data available for this symbol" |
|
|
|
|
|
return df, None |
|
|
except Exception as e: |
|
|
return None, f"Error fetching data: {str(e)}" |
|
|
|
|
|
def get_company_info(symbol): |
|
|
"""Get company information.""" |
|
|
try: |
|
|
ticker = yf.Ticker(f"{symbol}.NS") |
|
|
info = ticker.info |
|
|
return { |
|
|
'name': info.get('longName', symbol), |
|
|
'sector': info.get('sector', 'N/A'), |
|
|
'industry': info.get('industry', 'N/A'), |
|
|
'market_cap': info.get('marketCap', 'N/A'), |
|
|
'volume': info.get('volume', 'N/A') |
|
|
} |
|
|
except: |
|
|
return { |
|
|
'name': symbol, |
|
|
'sector': 'N/A', |
|
|
'industry': 'N/A', |
|
|
'market_cap': 'N/A', |
|
|
'volume': 'N/A' |
|
|
} |
|
|
|
|
|
def format_number(number): |
|
|
"""Format large numbers to readable format.""" |
|
|
if not isinstance(number, (int, float)) or pd.isna(number): |
|
|
return 'N/A' |
|
|
|
|
|
if number >= 1e9: |
|
|
return f'₹{number/1e9:.2f}B' |
|
|
elif number >= 1e6: |
|
|
return f'₹{number/1e6:.2f}M' |
|
|
else: |
|
|
return f'₹{number:,.2f}' |
|
|
|