Spaces:
Running
Running
# app.py | |
import streamlit as st | |
from data_fetcher.yfinance_client import fetch_intraday_data | |
from indicators.ema import calculate_ema | |
from indicators.rsi import calculate_rsi | |
from indicators.macd import calculate_macd | |
from indicators.bollinger_bands import calculate_bollinger_bands | |
from signals.strategy import generate_combined_signals | |
from utils.plotting import plot_stock_data_with_signals | |
import pandas as pd | |
# Streamlit app title with emoji | |
st.title('Stock Intraday Signal App π') | |
# Introduction and instructions with emojis | |
st.write(""" | |
## Introduction π | |
Welcome to the Stock Intraday Signal App! This application analyzes stock data to generate buy/sell signals π¦ based on technical indicators such as EMA, RSI, MACD, and Bollinger Bands. It's designed to help day traders π make informed decisions. | |
## How to Use π οΈ | |
1. Enter a stock symbol in the sidebar. π | |
2. Choose the date range for the analysis. ποΈ | |
3. Click on "Analyze" to view the stock data, indicators, and signals. π | |
""") | |
# Sidebar inputs with emojis | |
st.sidebar.header('User Input Parameters π') | |
stock_symbol = st.sidebar.text_input('Stock Symbol', value='AAPL', max_chars=5) | |
start_date = st.sidebar.date_input('Start Date') | |
end_date = st.sidebar.date_input('End Date') | |
analyze_button = st.sidebar.button('Analyze π') | |
# Main functionality | |
if analyze_button: | |
st.write(f"Fetching data for {stock_symbol} from {start_date} to {end_date}... π") | |
data = fetch_intraday_data(stock_symbol, start_date.isoformat(), end_date.isoformat()) | |
if data.empty: | |
st.error("No data found for the given parameters. Please try different dates or stock symbols. β") | |
else: | |
st.write("Calculating indicators... π") | |
ema_periods = [20, 50] # Example periods for EMA | |
ema_data = calculate_ema(data['Close'], ema_periods) | |
for period, ema_series in ema_data.items(): | |
data[f'EMA_{period}'] = ema_series | |
rsi_results = calculate_rsi(data['Close']) | |
data = data.join(rsi_results) # Merge the RSI results back into the main DataFrame | |
macd_data = calculate_macd(data['Close']) | |
data = pd.concat([data, macd_data], axis=1) | |
bb_data = calculate_bollinger_bands(data['Close']) | |
data = pd.concat([data, bb_data], axis=1) | |
st.write("Generating signals... π¦") | |
data = generate_combined_signals(data) | |
st.write("Visualizing data, indicators, and signals... π") | |
plot_stock_data_with_signals(data) | |