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