MobileApp / app.py
Mani9045's picture
Update app.py
368a9fb verified
import gradio as gr
import pandas as pd
import numpy as np
import yfinance as yf
import datetime
import matplotlib.pyplot as plt
# Function to fetch stock data
def get_stock_data(ticker, start_date, end_date):
stock_data = yf.download(ticker, start=start_date, end=end_date)
stock_data.reset_index(inplace=True)
return stock_data
# Function to calculate Simple Moving Average (SMA)
def calculate_sma(stock_data, window=30):
stock_data['SMA'] = stock_data['Close'].rolling(window=window).mean()
return stock_data
# Function to predict future stock price using SMA
def predict_future_sma(stock_data, periods=30):
last_sma = stock_data['SMA'].iloc[-1]
future_dates = pd.date_range(start=stock_data['Date'].iloc[-1], periods=periods + 1, closed='right')
future_sma = np.full(periods, last_sma)
return future_dates, future_sma
# Function to calculate percentage change
def calculate_percentage_change(stock_data):
start_value = stock_data['Close'].iloc[0]
end_value = stock_data['Close'].iloc[-1]
percentage_change = ((end_value - start_value) / start_value) * 100
return percentage_change
# Function to get stock statistics (high/low)
def get_stock_stats(stock_data):
high_value = stock_data['Close'].max()
low_value = stock_data['Close'].min()
return high_value, low_value
# Function to plot stock performance
def plot_stock_performance(stock_data, predicted_dates, predicted_sma):
plt.figure(figsize=(10, 5))
plt.plot(stock_data['Date'], stock_data['Close'], label="Historical Data", color="blue")
plt.plot(stock_data['Date'], stock_data['SMA'], label="SMA (30 days)", color="green")
plt.plot(predicted_dates, predicted_sma, label="Predicted SMA", color="orange", linestyle='--')
plt.xlabel("Date")
plt.ylabel("Stock Price")
plt.title("Stock Performance (Historical vs Predicted)")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.savefig("stock_performance.png")
return "stock_performance.png"
# Main function for UI
def stock_prediction(ticker, start_date, end_date):
stock_data = get_stock_data(ticker, start_date, end_date)
# Get statistics
percentage_change = calculate_percentage_change(stock_data)
high_value, low_value = get_stock_stats(stock_data)
# Calculate Simple Moving Average
stock_data = calculate_sma(stock_data)
# Predict future stock performance using SMA
predicted_dates, predicted_sma = predict_future_sma(stock_data)
# Generate buy/sell suggestion (simple rule-based)
suggestion = "Buy" if percentage_change < 0 else "Sell"
# Plot stock performance
plot_file = plot_stock_performance(stock_data, predicted_dates, predicted_sma)
return plot_file, percentage_change, high_value, low_value, suggestion
# UI setup
with gr.Blocks() as app:
gr.Markdown("# Stock Prediction App using Simple Moving Average (SMA)")
stock_ticker = gr.Dropdown(
label="Select Stock Ticker",
choices=["AAPL", "GOOGL", "MSFT", "AMZN", "TSLA", "NFLX", "FB", "NVDA", "IBM", "ORCL"]
)
start_date = gr.DatePicker(label="Start Date", value=datetime.date(2023, 1, 1))
end_date = gr.DatePicker(label="End Date", value=datetime.date.today())
plot_output = gr.Image(label="Stock Performance (Historical vs Predicted)")
percentage_change_output = gr.Textbox(label="Percentage Change")
high_value_output = gr.Textbox(label="Highest Stock Value")
low_value_output = gr.Textbox(label="Lowest Stock Value")
suggestion_output = gr.Textbox(label="Buy/Sell Suggestion")
# Button to make predictions
predict_button = gr.Button("Predict")
predict_button.click(
stock_prediction,
inputs=[stock_ticker, start_date, end_date],
outputs=[plot_output, percentage_change_output, high_value_output, low_value_output, suggestion_output]
)
app.launch()