Download app.py from Geek7/Jcp: direct link, hf CLI and curl.
- Browser
- Download file 3.22 kB
-
https://huggingface.co/spaces/Geek7/Jcp/resolve/main/app.py
- Command line
-
hf download hf://spaces/Geek7/Jcp/app.py
-
curl -L -o app.py https://huggingface.co/spaces/Geek7/Jcp/resolve/main/app.py
3.22 kB
| 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() |