V2Investing / app.py
Martyt's picture
Update app.py
64c836a
import gradio as gr
import yfinance as yf
import numpy as np
from datetime import datetime
def calculate_sharpe_ratios(end_date, sharpe_threshold, top_ten_tickers):
sharpe_ratios = []
for ticker_symbol in top_ten_tickers.split('\n'):
try:
ticker_info = yf.Ticker(ticker_symbol)
ticker_history = ticker_info.history(period="max")
if not ticker_history.empty:
start_date = ticker_history.index[0].strftime('%Y-%m-%d')
stock_data = yf.download(ticker_symbol, start=start_date, end=end_date)
if not stock_data['Close'].empty:
stock_data['Daily_Return'] = stock_data['Close'].pct_change()
risk_free_rate = 0.03
daily_risk_free_rate = (1 + risk_free_rate) ** (1/252) - 1
daily_returns = stock_data['Daily_Return']
sharpe_ratio = np.mean(daily_returns - daily_risk_free_rate) / np.std(daily_returns)
sharpe_ratios.append((ticker_symbol, sharpe_ratio))
except Exception as e:
print(f"Error processing {ticker_symbol}: {e}")
# Sort the list of tuples based on Sharpe ratios
sorted_sharpe_ratios = sorted(sharpe_ratios, key=lambda x: x[1], reverse=True)
# Get the top ten tickers with the highest Sharpe ratios
top_ten = []
for rank, (ticker, ratio) in enumerate(sorted_sharpe_ratios[:10], 1):
result = f"Rank: {rank}\nTicker: {ticker}\nSharpe Ratio: {ratio}\n---------------------"
top_ten.append(result)
return "\n".join(top_ten)
iface = gr.Interface(
fn=calculate_sharpe_ratios,
inputs=[
gr.inputs.Date(label="End Date", default=datetime.now().strftime('%Y-%m-%d')),
"text", # Sharpe Threshold input
"text" # Top Ten Tickers input
],
outputs=gr.outputs.Textbox(label="Top Ten Tickers with Highest Sharpe Ratios"),
title="Sharpe Ratio Calculator",
description="Calculate top ten tickers with highest Sharpe ratios based on provided parameters"
)
iface.launch()