Jcp / app.py
Geek7's picture
Create app.py
8cd51d6 verified
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()