fnonse / utils /stock_data.py
datamk's picture
Upload 18 files
8a3e273 verified
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:
# Add .NS suffix for NSE stocks
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}'