import streamlit as st import pandas as pd import yfinance as yf import matplotlib.pyplot as plt from datetime import datetime from patterns import Doji, DragonflyDoji, Engulfing, GravestoneDoji, Hammer, HangingMan, Harami, InvertedHammer, LongleggedDoji, ShootingStar, ThreeWhiteSoldiers, ThreeBlackCrows def fetch_live_data(ticker, interval='1m', period='1d'): # Fetch live data using yfinance df = yf.download(ticker, interval=interval, period=period) # Convert DatetimeIndex to a column df.reset_index(inplace=True) return df def detect_candlestick_patterns(df): # Instantiate candlestick pattern detectors doji = Doji(df) dragonfly_doji = DragonflyDoji(df) engulfing = Engulfing(df) gravestone_doji = GravestoneDoji(df) hammer = Hammer(df) hanging_man = HangingMan(df) harami = Harami(df) inverted_hammer = InvertedHammer(df) long_legged_doji = LongleggedDoji(df) shooting_star = ShootingStar(df) three_white_soldiers = ThreeWhiteSoldiers(df) three_black_crows = ThreeBlackCrows(df) # Compute pattern detections df = doji.compute_pattern() df = dragonfly_doji.compute_pattern() df = engulfing.compute_pattern() df = gravestone_doji.compute_pattern() df = hammer.compute_pattern() df = hanging_man.compute_pattern() df = harami.compute_pattern() df = inverted_hammer.compute_pattern() df = long_legged_doji.compute_pattern() df = shooting_star.compute_pattern() df = three_white_soldiers.compute_pattern() df = three_black_crows.compute_pattern() return df def plot_candlestick(df): fig, ax = plt.subplots(figsize=(10, 6)) ax.plot(df['Datetime'], df['Close'], label='Close Price', color='black') ax.set_title('Live Stock Price with Candlestick Patterns') ax.set_xlabel('Datetime') ax.set_ylabel('Close Price') # Plot candlestick patterns for pattern, color in zip(['Doji', 'Dragonfly Doji', 'Engulfing', 'Gravestone Doji', 'Hammer', 'Hanging Man', 'Harami', 'Inverted Hammer', 'Long-Legged Doji', 'Shooting Star', 'Three White Soldiers', 'Three Black Crows'], ['blue', 'green', 'red', 'purple', 'orange', 'brown', 'pink', 'cyan', 'magenta', 'yellow', 'lime', 'darkgrey']): for i, row in df.iterrows(): if row[pattern] == 1: ax.annotate(pattern, xy=(row['Datetime'], row['Close']), xytext=(5, 5), textcoords='offset points', arrowprops=dict(facecolor=color, arrowstyle='wedge,tail_width=0.7', lw=0.7)) st.pyplot(fig) def main(): st.title('Live Candlestick Pattern Detection App') ticker = st.text_input('Enter Stock Ticker:', 'AAPL') if st.button('Detect Candlestick Patterns'): # Fetch live data continuously while True: # Fetch live data live_data = fetch_live_data(ticker) # Detect candlestick patterns live_data = detect_candlestick_patterns(live_data) # Display candlestick patterns using Matplotlib and Streamlit plot_candlestick(live_data) # Display raw data st.write(live_data) if __name__ == "__main__": main()