| 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}' |
|
|