| | 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'): |
| | |
| | df = yf.download(ticker, interval=interval, period=period) |
| |
|
| | |
| | df.reset_index(inplace=True) |
| |
|
| | return df |
| |
|
| | def detect_candlestick_patterns(df): |
| | |
| | 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) |
| |
|
| | |
| | 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') |
| |
|
| | |
| | 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'): |
| | |
| | while True: |
| | |
| | live_data = fetch_live_data(ticker) |
| |
|
| | |
| | live_data = detect_candlestick_patterns(live_data) |
| |
|
| | |
| | plot_candlestick(live_data) |
| |
|
| | |
| | st.write(live_data) |
| |
|
| | if __name__ == "__main__": |
| | main() |