import streamlit as st import yfinance as yf import pandas as pd import ta import plotly.graph_objects as go # Function to load stock data using yfinance def get_stock_data(symbol, start_date, end_date, interval='1h'): stock_data = yf.download(symbol, start=start_date, end=end_date, interval=interval) return stock_data # Function to detect Double Top pattern def detect_double_top(data, lookback=20): signals = pd.DataFrame(index=data.index) signals['signal'] = 0.0 # Identify potential double top pattern signals['double_top'] = ta.patterns.double_top(data['High'], data['Low'], data['Close'], lookback=lookback, threshold=0.02) # Generate trading orders signals['positions'] = signals['double_top'].diff() return signals # Streamlit App def main(): st.title("Hourly Stock Price Analysis and Double Top Pattern Detection") # Load stock data using Streamlit sidebar symbol = st.sidebar.text_input("Enter Stock Symbol", value='AAPL') start_date = st.sidebar.text_input("Enter Start Date", value='2022-01-01') end_date = st.sidebar.text_input("Enter End Date", value='2022-02-01') stock_prices = get_stock_data(symbol, start_date, end_date, interval='1h') # Detect Double Top Pattern signals = detect_double_top(stock_prices) # Plotting Historical Stock Prices with Double Top Pattern Signals st.subheader("Hourly Historical Stock Prices with Double Top Pattern Signals") fig = go.Figure() fig.add_trace(go.Candlestick(x=stock_prices.index, open=stock_prices['Open'], high=stock_prices['High'], low=stock_prices['Low'], close=stock_prices['Close'], name='Candlesticks')) # Plot Double Top pattern signals fig.add_trace(go.Scatter(x=signals.index[signals['double_top'] == 1], y=stock_prices['High'][signals['double_top'] == 1], mode='markers', marker=dict(color='red', size=10), name='Double Top Signal')) st.plotly_chart(fig) if __name__ == "__main__": main()