Spaces:
Sleeping
Sleeping
import gradio as gr | |
import yfinance as yf | |
import csv | |
import pandas as pd | |
import matplotlib.pyplot as plt | |
from valuation import parallel_portfolio_valuation,serialCal | |
def get_stock_price(stock_symbol): | |
try: | |
stock = yf.Ticker(stock_symbol) | |
stock_data = stock.history(period="1d") | |
latest_close = stock_data['Close'].iloc[-1] | |
return float(latest_close) | |
except Exception as e: | |
return 0 | |
def getCompoanyInfo(portfolio): | |
#yfinance | |
company_data = [] | |
for stock in portfolio: | |
try: | |
stock_info = yf.Ticker(stock['symbol']).info | |
# Collect key datasets | |
company_details = { | |
'symbol': stock['symbol'], | |
'company_name': stock_info.get('longName', 'N/A'), | |
'sector': stock_info.get('sector', 'N/A'), | |
'industry': stock_info.get('industry', 'N/A'), | |
'market_cap': stock_info.get('marketCap', 'N/A'), | |
'dividend_yield': stock_info.get('dividendYield', 'N/A'), | |
'pe_ratio': stock_info.get('trailingPE', 'N/A'), | |
'52_week_high': stock_info.get('fiftyTwoWeekHigh', 'N/A'), | |
'52_week_low': stock_info.get('fiftyTwoWeekLow', 'N/A'), | |
'price': round(stock['price'],2), | |
'quantity': stock['quantity'], | |
} | |
company_data.append(company_details) | |
except Exception as e: | |
print(f"Error fetching data for {stock['symbol']}: {e}") | |
continue | |
return pd.DataFrame(company_data) | |
def calculatePortfolioValue(file:str): | |
portfolio = [] | |
""" | |
portfolio = [ | |
{'symbol': 'AAPL', 'price': 160, 'quantity': 100}, | |
{'symbol': 'GOOG', 'price': 2000, 'quantity': 50}, | |
{'symbol': 'MSFT', 'price': 300, 'quantity': 200}, | |
] | |
""" | |
with open(file,"r") as fr: | |
reader = csv.reader(fr) | |
for i in list(reader)[1:]: | |
#print({'symbol':i[0],'price':get_stock_price(i[0]),'quantity':i[1]}) | |
portfolio.append({'symbol':i[0],'price':get_stock_price(i[0]),'quantity':float(i[1])}) | |
return str(round(parallel_portfolio_valuation(portfolio),2)) + " $", getCompoanyInfo(portfolio) | |
def startGradio(): | |
with gr.Blocks() as demo: | |
text1 = gr.Text(value ="Stock Portfolio Valuation using multiprocessing",interactive=False,show_label=False) | |
with gr.Column(): | |
file = gr.File() | |
df = gr.Dataframe() | |
parallelValue = gr.Textbox(label="Portfolio Valuation through the process of paralleization") | |
bt = gr.Button() | |
bt.click(fn=calculatePortfolioValue,inputs=[file],outputs=[parallelValue,df]) | |
demo.load() | |
demo.launch() | |
if __name__ == "__main__": | |
startGradio() | |
#calculatePortfolioValue("/Users/sarathrajan/Desktop/HPCUI/stocks_qty.csv") |