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() |