File size: 2,253 Bytes
fa89069
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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()