File size: 3,219 Bytes
8cd51d6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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()