Spaces:
Sleeping
Sleeping
update app
Browse files
app.py
CHANGED
|
@@ -36,7 +36,6 @@ def load_model():
|
|
| 36 |
device_map="auto",
|
| 37 |
trust_remote_code=True
|
| 38 |
)
|
| 39 |
-
# CRITICAL FIX: Skip tokenizer loading
|
| 40 |
tokenizer = None
|
| 41 |
return model, tokenizer
|
| 42 |
|
|
@@ -57,6 +56,10 @@ def get_stock_data(symbol, period="1y"):
|
|
| 57 |
|
| 58 |
def analyze_stock(symbol, prediction_days=30):
|
| 59 |
"""Main analysis function"""
|
|
|
|
|
|
|
|
|
|
|
|
|
| 60 |
# Get stock data
|
| 61 |
data, stock = get_stock_data(symbol)
|
| 62 |
|
|
@@ -76,11 +79,11 @@ def analyze_stock(symbol, prediction_days=30):
|
|
| 76 |
predictions = predict_prices(data, model, tokenizer, prediction_days)
|
| 77 |
|
| 78 |
# Create charts
|
| 79 |
-
fig_price = create_price_chart(data, indicators)
|
| 80 |
-
fig_technical = create_technical_chart(data, indicators)
|
| 81 |
-
fig_prediction = create_prediction_chart(data, predictions)
|
| 82 |
|
| 83 |
-
return fundamental_info, indicators, signals, fig_price, fig_technical, fig_prediction
|
| 84 |
|
| 85 |
def create_ui():
|
| 86 |
"""Create the Gradio interface"""
|
|
@@ -120,11 +123,11 @@ def create_ui():
|
|
| 120 |
|
| 121 |
with gr.Row():
|
| 122 |
with gr.Column(scale=2):
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
value="BBCA
|
| 126 |
-
label="📊
|
| 127 |
-
info="
|
| 128 |
)
|
| 129 |
|
| 130 |
with gr.Row():
|
|
@@ -211,38 +214,37 @@ def create_ui():
|
|
| 211 |
|
| 212 |
# Event handlers
|
| 213 |
def update_analysis(symbol, pred_days):
|
| 214 |
-
fundamental_info, indicators, signals, fig_price, fig_technical, fig_prediction = analyze_stock(symbol, pred_days)
|
| 215 |
|
| 216 |
if fundamental_info is None:
|
|
|
|
| 217 |
return {
|
| 218 |
-
company_name: "
|
| 219 |
current_price: 0,
|
| 220 |
market_cap: "N/A",
|
| 221 |
pe_ratio: 0,
|
| 222 |
dividend_yield: 0,
|
| 223 |
volume: 0,
|
| 224 |
-
fundamentals_text: "
|
| 225 |
rsi_value: 0,
|
| 226 |
macd_signal: "N/A",
|
| 227 |
bb_position: "N/A",
|
| 228 |
overall_signal: "N/A",
|
| 229 |
signal_strength: 0,
|
| 230 |
-
signals_text: "
|
| 231 |
support_level: 0,
|
| 232 |
resistance_level: 0,
|
| 233 |
stop_loss: 0,
|
| 234 |
predicted_high: 0,
|
| 235 |
predicted_low: 0,
|
| 236 |
predicted_change: 0,
|
| 237 |
-
prediction_summary: "
|
| 238 |
-
price_chart:
|
| 239 |
-
technical_chart:
|
| 240 |
-
prediction_chart:
|
| 241 |
}
|
| 242 |
|
| 243 |
# Format outputs
|
| 244 |
-
# CRITICAL FIX: Use the Gradio component objects (left) as keys
|
| 245 |
-
# and the Plotly Figure objects (right) as values.
|
| 246 |
return {
|
| 247 |
company_name: fundamental_info.get('name', 'N/A'),
|
| 248 |
current_price: fundamental_info.get('current_price', 0),
|
|
|
|
| 36 |
device_map="auto",
|
| 37 |
trust_remote_code=True
|
| 38 |
)
|
|
|
|
| 39 |
tokenizer = None
|
| 40 |
return model, tokenizer
|
| 41 |
|
|
|
|
| 56 |
|
| 57 |
def analyze_stock(symbol, prediction_days=30):
|
| 58 |
"""Main analysis function"""
|
| 59 |
+
# FIX: Add .JK suffix if it's missing (case-insensitive check)
|
| 60 |
+
if not symbol.upper().endswith(".JK"):
|
| 61 |
+
symbol += ".JK"
|
| 62 |
+
|
| 63 |
# Get stock data
|
| 64 |
data, stock = get_stock_data(symbol)
|
| 65 |
|
|
|
|
| 79 |
predictions = predict_prices(data, model, tokenizer, prediction_days)
|
| 80 |
|
| 81 |
# Create charts
|
| 82 |
+
fig_price = create_price_chart(data, indicators)
|
| 83 |
+
fig_technical = create_technical_chart(data, indicators)
|
| 84 |
+
fig_prediction = create_prediction_chart(data, predictions)
|
| 85 |
|
| 86 |
+
return fundamental_info, indicators, signals, fig_price, fig_technical, fig_prediction
|
| 87 |
|
| 88 |
def create_ui():
|
| 89 |
"""Create the Gradio interface"""
|
|
|
|
| 123 |
|
| 124 |
with gr.Row():
|
| 125 |
with gr.Column(scale=2):
|
| 126 |
+
# FIX: Change Dropdown to Textbox for flexible user input
|
| 127 |
+
stock_selector = gr.Textbox(
|
| 128 |
+
value="BBCA",
|
| 129 |
+
label="📊 Input Simbol Saham IDX",
|
| 130 |
+
info="Contoh: BBCA, ADRO, TLKM (Tidak perlu menambahkan .JK)"
|
| 131 |
)
|
| 132 |
|
| 133 |
with gr.Row():
|
|
|
|
| 214 |
|
| 215 |
# Event handlers
|
| 216 |
def update_analysis(symbol, pred_days):
|
| 217 |
+
fundamental_info, indicators, signals, fig_price, fig_technical, fig_prediction = analyze_stock(symbol, pred_days)
|
| 218 |
|
| 219 |
if fundamental_info is None:
|
| 220 |
+
# FIX: Return appropriate initial values or error message
|
| 221 |
return {
|
| 222 |
+
company_name: "Gagal memuat data",
|
| 223 |
current_price: 0,
|
| 224 |
market_cap: "N/A",
|
| 225 |
pe_ratio: 0,
|
| 226 |
dividend_yield: 0,
|
| 227 |
volume: 0,
|
| 228 |
+
fundamentals_text: f"Tidak dapat mengambil data saham untuk {symbol}. Pastikan simbol benar.",
|
| 229 |
rsi_value: 0,
|
| 230 |
macd_signal: "N/A",
|
| 231 |
bb_position: "N/A",
|
| 232 |
overall_signal: "N/A",
|
| 233 |
signal_strength: 0,
|
| 234 |
+
signals_text: "Tidak ada sinyal tersedia",
|
| 235 |
support_level: 0,
|
| 236 |
resistance_level: 0,
|
| 237 |
stop_loss: 0,
|
| 238 |
predicted_high: 0,
|
| 239 |
predicted_low: 0,
|
| 240 |
predicted_change: 0,
|
| 241 |
+
prediction_summary: "Prediksi tidak tersedia",
|
| 242 |
+
price_chart: go.Figure(),
|
| 243 |
+
technical_chart: go.Figure(),
|
| 244 |
+
prediction_chart: go.Figure()
|
| 245 |
}
|
| 246 |
|
| 247 |
# Format outputs
|
|
|
|
|
|
|
| 248 |
return {
|
| 249 |
company_name: fundamental_info.get('name', 'N/A'),
|
| 250 |
current_price: fundamental_info.get('current_price', 0),
|