|
import streamlit as st |
|
import yfinance as yf |
|
import pandas as pd |
|
import ta |
|
import plotly.graph_objects as go |
|
|
|
|
|
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 |
|
|
|
|
|
def detect_double_top(data, lookback=20): |
|
signals = pd.DataFrame(index=data.index) |
|
signals['signal'] = 0.0 |
|
|
|
|
|
signals['double_top'] = ta.patterns.double_top(data['High'], data['Low'], data['Close'], lookback=lookback, threshold=0.02) |
|
|
|
|
|
signals['positions'] = signals['double_top'].diff() |
|
|
|
return signals |
|
|
|
|
|
def main(): |
|
st.title("Hourly Stock Price Analysis and Double Top Pattern Detection") |
|
|
|
|
|
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') |
|
|
|
|
|
signals = detect_double_top(stock_prices) |
|
|
|
|
|
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')) |
|
|
|
|
|
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() |