cipherunhsiv commited on
Commit
faa2d08
·
verified ·
1 Parent(s): 9db8155

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +127 -0
app.py ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+ import pandas as pd
3
+ import plotly.graph_objects as go
4
+ from ultralytics import YOLO
5
+ import cv2
6
+ import time
7
+ import gradio as gr
8
+
9
+ API_KEY = "ITWJ6NDTF45CBTDO"
10
+
11
+ def get_stock_candlestick_data(symbol, interval="5min", output_size="compact"):
12
+ """
13
+ Fetch stock candlestick data from Alpha Vantage.
14
+ """
15
+ url = f"https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol={symbol}&interval={interval}&apikey={API_KEY}&outputsize={output_size}"
16
+ print(f"Fetching data from: {url}") # Debugging
17
+ response = requests.get(url)
18
+ if response.status_code == 200:
19
+ data = response.json()
20
+ print("API Response:", data) # Debugging
21
+ if f"Time Series ({interval})" in data:
22
+ return data[f"Time Series ({interval})"]
23
+ else:
24
+ print("Error: No candlestick data found in response.")
25
+ print(data)
26
+ return None
27
+ else:
28
+ print(f"Error fetching data: {response.status_code}")
29
+ print(response.text)
30
+ return None
31
+
32
+ def process_stock_candlestick_data(data):
33
+ """
34
+ Process Alpha Vantage stock candlestick data into a DataFrame.
35
+ """
36
+ rows = []
37
+ for timestamp, values in data.items():
38
+ rows.append({
39
+ "timestamp": timestamp,
40
+ "open": float(values["1. open"]),
41
+ "high": float(values["2. high"]),
42
+ "low": float(values["3. low"]),
43
+ "close": float(values["4. close"]),
44
+ "volume": float(values["5. volume"])
45
+ })
46
+ return pd.DataFrame(rows)
47
+
48
+ def generate_candlestick_chart(df, n=50):
49
+ """
50
+ Generate a candlestick chart using Plotly with the last n data points.
51
+ """
52
+ df = df.tail(n) # Use only the last n rows
53
+ fig = go.Figure(data=[go.Candlestick(
54
+ x=df["timestamp"],
55
+ open=df["open"],
56
+ high=df["high"],
57
+ low=df["low"],
58
+ close=df["close"]
59
+ )])
60
+ fig.update_layout(
61
+ title="Candlestick Chart",
62
+ xaxis_title="Time",
63
+ yaxis_title="Price",
64
+ xaxis_rangeslider_visible=False
65
+ )
66
+ # Removed fig.show() since Gradio will display the image
67
+ fig.write_image("candlestick.png")
68
+
69
+ def yolo_model(img_path, model):
70
+ """
71
+ Run YOLO model on the image and count GAP UP and GAP DOWN patterns.
72
+ """
73
+ results = model(img_path)
74
+ gap_up_count = 0
75
+ gap_down_count = 0
76
+ for result in results:
77
+ classes = result.boxes.cls
78
+ for cls in classes:
79
+ if cls == 0:
80
+ gap_down_count += 1
81
+ elif cls == 1:
82
+ gap_up_count += 1
83
+ annotated_image = result.plot()
84
+ return annotated_image, gap_up_count, gap_down_count
85
+
86
+ def detect_gap_patterns(symbol):
87
+ """
88
+ Main function to fetch data, generate charts, and detect GAP patterns in near-real-time.
89
+ """
90
+ model = YOLO("/content/best.pt") # Load model once outside the loop
91
+ while True:
92
+ data = get_stock_candlestick_data(symbol)
93
+ if not data:
94
+ print("Failed to fetch data. Retrying in 15 seconds.")
95
+ time.sleep(15)
96
+ continue # Retry instead of exiting
97
+
98
+ df = process_stock_candlestick_data(data)
99
+ generate_candlestick_chart(df, n=50) # Generate chart with last 50 candles
100
+ annotated_image, gap_up_count, gap_down_count = yolo_model("candlestick.png", model)
101
+ cv2.imwrite("annotated_output.png", annotated_image)
102
+ yield "annotated_output.png", gap_up_count, gap_down_count
103
+ time.sleep(15) # Wait 15 seconds to respect API rate limits
104
+
105
+ # Gradio Interface
106
+ with gr.Blocks() as demo:
107
+ gr.Markdown("# GAP Pattern Detection in Real-Time Stock Charts")
108
+ gr.Markdown("Enter a stock symbol (e.g., AAPL) to detect GAP UP and GAP DOWN patterns in near-real-time candlestick charts.")
109
+
110
+ with gr.Row():
111
+ symbol_input = gr.Textbox(label="Stock Symbol", placeholder="Enter a stock symbol (e.g., AAPL)")
112
+ submit_button = gr.Button("Start Real-Time Detection")
113
+
114
+ with gr.Row():
115
+ output_image = gr.Image(label="Annotated Candlestick Chart")
116
+ gap_up_output = gr.Textbox(label="GAP UP Count")
117
+ gap_down_output = gr.Textbox(label="GAP DOWN Count")
118
+
119
+ # Start real-time detection when the button is clicked
120
+ submit_button.click(
121
+ fn=detect_gap_patterns,
122
+ inputs=symbol_input,
123
+ outputs=[output_image, gap_up_output, gap_down_output]
124
+ )
125
+
126
+ # Launch the Gradio app
127
+ demo.launch(share=True, debug=True)