File size: 2,583 Bytes
28647bc
6a80d9e
4ef2d29
 
 
 
 
 
 
 
 
 
9d82034
 
4ef2d29
9d82034
4ef2d29
9d82034
 
4ef2d29
9d82034
 
 
 
4ef2d29
 
9d82034
 
4ef2d29
 
 
9d82034
4ef2d29
 
 
9d82034
4ef2d29
 
 
9d82034
4ef2d29
9d82034
4ef2d29
6a80d9e
 
 
9d82034
6a80d9e
 
 
 
 
 
 
 
4ef2d29
9d82034
4ef2d29
 
9d82034
6a80d9e
 
75ec5ef
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 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)