tbdavid2019 commited on
Commit
1e2adc2
·
1 Parent(s): 3d365ee
Files changed (1) hide show
  1. app.py +106 -0
app.py ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import requests
3
+ from autogluon.timeseries import TimeSeriesPredictor, TimeSeriesDataFrame
4
+ import gradio as gr
5
+
6
+ # Function to fetch stock data
7
+ def get_stock_data(ticker, period):
8
+ data = yf.download(ticker, period=period)
9
+ return data
10
+
11
+ # Function to prepare the data for Chronos-Bolt
12
+ def prepare_data_chronos(data):
13
+ data = data.reset_index()
14
+ data = data.rename(columns={"Date": "timestamp", "Close": "target"})
15
+ data = data[["timestamp", "target"]]
16
+ data["item_id"] = "stock"
17
+ data["timestamp"] = pd.to_datetime(data["timestamp"])
18
+ return TimeSeriesDataFrame(data)
19
+
20
+ # Function to fetch stock indices (you already defined these)
21
+ def get_tw0050_stocks():
22
+ response = requests.get('https://answerbook.david888.com/TW0050')
23
+ data = response.json()
24
+ return [f"{code}.TW" for code in data['stocks'].keys()]
25
+
26
+ def get_sp500_stocks(limit=50):
27
+ response = requests.get('https://answerbook.david888.com/SP500')
28
+ data = response.json()
29
+ return list(data['stocks'].keys())[:limit]
30
+
31
+ def get_nasdaq_stocks(limit=50):
32
+ response = requests.get('http://13.125.121.198:8090/stocks/NASDAQ100')
33
+ data = response.json()
34
+ return list(data['stocks'].keys())[:limit]
35
+
36
+ def get_tw0051_stocks():
37
+ response = requests.get('https://answerbook.david888.com/TW0051')
38
+ data = response.json()
39
+ return [f"{code}.TW" for code in data['stocks'].keys()]
40
+
41
+ def get_sox_stocks():
42
+ return [
43
+ "NVDA", "AVGO", "GFS", "CRUS", "ON", "ASML", "QCOM", "SWKS", "MPWR", "ADI",
44
+ "TSM", "AMD", "TXN", "QRVO", "AMKR", "MU", "ARM", "NXPI", "TER", "ENTG",
45
+ "LSCC", "COHR", "ONTO", "MTSI", "KLAC", "LRCX", "MRVL", "AMAT", "INTC", "MCHP"
46
+ ]
47
+
48
+ def get_dji_stocks():
49
+ response = requests.get('http://13.125.121.198:8090/stocks/DOWJONES')
50
+ data = response.json()
51
+ return list(data['stocks'].keys())
52
+
53
+ # Function to get top 10 potential stocks
54
+ def get_top_10_potential_stocks(period, selected_indices):
55
+ stock_list = []
56
+ if "\u53f0\u706350" in selected_indices:
57
+ stock_list += get_tw0050_stocks()
58
+ if "\u53f0\u7063\u4e2d\u578b100" in selected_indices:
59
+ stock_list += get_tw0051_stocks()
60
+ if "S&P\u7cbe\u7c21\u724850" in selected_indices:
61
+ stock_list += get_sp500_stocks()
62
+ if "NASDAQ\u7cbe\u7c21\u724850" in selected_indices:
63
+ stock_list += get_nasdaq_stocks()
64
+ if "\u8cfd\u57ce\u534a\u5b57\u9ad4SOX" in selected_indices:
65
+ stock_list += get_sox_stocks()
66
+ if "\u9053\u74b0DJI" in selected_indices:
67
+ stock_list += get_dji_stocks()
68
+
69
+ stock_predictions = []
70
+ prediction_length = 10
71
+
72
+ for ticker in stock_list:
73
+ try:
74
+ data = get_stock_data(ticker, period)
75
+ if data.empty:
76
+ continue
77
+
78
+ ts_data = prepare_data_chronos(data)
79
+ predictor = TimeSeriesPredictor(prediction_length=prediction_length)
80
+ predictor.fit(ts_data, hyperparameters={"Chronos": {"model_path": "amazon/chronos-bolt-base"}})
81
+
82
+ predictions = predictor.predict(ts_data)
83
+ potential = (predictions.iloc[-1] - data['Close'].iloc[-1]) / data['Close'].iloc[-1]
84
+ stock_predictions.append((ticker, potential, data['Close'].iloc[-1], predictions.iloc[-1]))
85
+
86
+ except Exception as e:
87
+ print(f"Stock {ticker} error: {str(e)}")
88
+ continue
89
+
90
+ top_10_stocks = sorted(stock_predictions, key=lambda x: x[1], reverse=True)[:10]
91
+ return top_10_stocks
92
+
93
+ # Gradio interface function
94
+ def stock_prediction_app(period, selected_indices):
95
+ top_10_stocks = get_top_10_potential_stocks(period, selected_indices)
96
+ df = pd.DataFrame(top_10_stocks, columns=["\u80a1\u7968\u4ee3\u865f", "\u6f5b\u529b (\u767e\u5206\u6bd4)", "\u73fe\u50f9", "\u9810\u6e2c\u50f9\u683c"])
97
+ return df
98
+
99
+ # Define Gradio interface
100
+ inputs = [
101
+ gr.Dropdown(choices=["3mo", "6mo", "9mo", "1yr"], label="\u6642\u9593\u7bc4\u570d"),
102
+ gr.CheckboxGroup(choices=["\u53f0\u706350", "\u53f0\u7063\u4e2d\u578b100", "S&P\u7cbe\u7c21\u724850", "NASDAQ\u7cbe\u7c21\u724850", "\u8cfd\u57ce\u534a\u5b57\u9ad4SOX", "\u9053\u74b0DJI"], label="\u6307\u6578\u9078\u64c7", value=["\u53f0\u706350", "\u53f0\u7063\u4e2d\u578b100"])
103
+ ]
104
+ outputs = gr.Dataframe(label="\u6f5b\u529b\u80a1\u63a8\u85a6\u7d50\u679c")
105
+
106
+ gr.Interface(fn=stock_prediction_app, inputs=inputs, outputs=outputs, title="\u53f0\u80a1\u7f8e\u80a1\u6f5b\u529b\u80a1\u63a8\u85a6\u7cfb\u7d71 - Chronos-Bolt\u6a21\u578b").launch()