omniverse1 commited on
Commit
c67acf2
·
verified ·
1 Parent(s): 972a547

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -31
app.py CHANGED
@@ -77,35 +77,38 @@ def update_analysis(symbol, prediction_days):
77
  )
78
 
79
  fundamentals = f"""
80
- #### COMPANY FUNDAMENTALS
81
- **Name:** {fundamental_info.get('name', 'N/A')} ({symbol.upper()})
82
- **Current Price:** Rp{fundamental_info.get('current_price', 0):,.2f}
83
- **Market Cap:** {fundamental_info.get('market_cap', 0):,}
84
- **P/E Ratio:** {fundamental_info.get('pe_ratio', 0):.2f}
85
- **Dividend Yield:** {fundamental_info.get('dividend_yield', 0):.2f}%
86
- **Volume:** {fundamental_info.get('volume', 0):,}
87
  """
88
 
 
 
 
 
89
  trading_signal = f"""
90
- #### TECHNICAL SIGNAL SUMMARY
91
- **Overall Trend:** {signals.get('overall', 'N/A')}
92
- **Signal Strength:** {signals.get('strength', 0):.2f}%
93
- **Support:** Rp{signals.get('support', 0):,.2f}
94
- **Resistance:** Rp{signals.get('resistance', 0):,.2f}
95
- **Stop Loss:** Rp{signals.get('stop_loss', 0):,.2f}
96
-
97
- **Detailed Signals:**
98
- {signals.get('details', '')}
 
99
  """
100
 
101
  prediction = f"""
102
- #### 30-DAY AI FORECAST (CHRONOS-BOLT)
103
- **Predicted High:** Rp{predictions.get('high_30d', 0):,.2f}
104
- **Predicted Low:** Rp{predictions.get('low_30d', 0):,.2f}
105
- **Expected Change:** {predictions.get('change_pct', 0):.2f}%
106
-
107
- **Model Insight:**
108
- {predictions.get('summary', 'No analysis available')}
109
  """
110
 
111
  return (
@@ -125,8 +128,9 @@ with gr.Blocks(
125
  title="REXPRO FINANCIAL AI DASHBOARD",
126
  theme=gr.themes.Soft(primary_hue="blue", secondary_hue="gray"),
127
  css="""
 
128
  body {
129
- background-color: #fafafa;
130
  color: #1e293b;
131
  font-family: 'Inter', 'Segoe UI', Arial, sans-serif;
132
  }
@@ -139,6 +143,7 @@ with gr.Blocks(
139
  h2, h3, h4 {
140
  color: #1e3a8a;
141
  font-weight: 600;
 
142
  }
143
  .gr-markdown {
144
  background-color: #ffffff;
@@ -156,6 +161,7 @@ with gr.Blocks(
156
  .gr-textbox input {
157
  background-color: #ffffff !important;
158
  color: #1e293b !important;
 
159
  }
160
  .gr-slider {
161
  background-color: #ffffff !important;
@@ -165,6 +171,13 @@ with gr.Blocks(
165
  border: 1px solid #e2e8f0;
166
  border-radius: 10px;
167
  }
 
 
 
 
 
 
 
168
  """,
169
  ) as app:
170
  gr.Markdown("# REXPRO FINANCIAL AI DASHBOARD")
@@ -189,21 +202,21 @@ with gr.Blocks(
189
  )
190
  analyze_button = gr.Button("RUN ANALYSIS")
191
 
192
- gr.Markdown("___")
193
 
194
  with gr.Row():
195
  with gr.Column(scale=1):
196
- fundamentals_output = gr.Markdown()
197
  with gr.Column(scale=1):
198
- signal_output = gr.Markdown()
199
 
200
- gr.Markdown("___")
201
 
202
  with gr.Tab("MARKET CHARTS"):
203
  with gr.Row():
204
  price_chart = gr.Plot(label="PRICE & MOVING AVERAGES")
205
  technical_chart = gr.Plot(label="TECHNICAL INDICATORS OVERVIEW")
206
- gr.Markdown("___")
207
  prediction_chart = gr.Plot(label="AI FORECAST PROJECTION")
208
 
209
  with gr.Tab("AI FORECAST SUMMARY"):
@@ -211,8 +224,8 @@ with gr.Blocks(
211
  predicted_high = gr.Textbox(label="PREDICTED HIGH (30D)", interactive=False)
212
  predicted_low = gr.Textbox(label="PREDICTED LOW (30D)", interactive=False)
213
  predicted_change = gr.Textbox(label="EXPECTED CHANGE (%)", interactive=False)
214
- gr.Markdown("___")
215
- prediction_summary = gr.Markdown()
216
 
217
  analyze_button.click(
218
  fn=update_analysis,
 
77
  )
78
 
79
  fundamentals = f"""
80
+ <h4>COMPANY FUNDAMENTALS</h4>
81
+ <b>Name:</b> {fundamental_info.get('name', 'N/A')} ({symbol.upper()})<br>
82
+ <b>Current Price:</b> Rp{fundamental_info.get('current_price', 0):,.2f}<br>
83
+ <b>Market Cap:</b> {fundamental_info.get('market_cap', 0):,}<br>
84
+ <b>P/E Ratio:</b> {fundamental_info.get('pe_ratio', 0):.2f}<br>
85
+ <b>Dividend Yield:</b> {fundamental_info.get('dividend_yield', 0):.2f}%<br>
86
+ <b>Volume:</b> {fundamental_info.get('volume', 0):,}<br>
87
  """
88
 
89
+ details_list = "".join(
90
+ [f"<li>{line.strip()}</li>" for line in signals.get("details", "").split("\n") if line.strip()]
91
+ )
92
+
93
  trading_signal = f"""
94
+ <h4>TECHNICAL SIGNAL SUMMARY</h4>
95
+ <b>Overall Trend:</b> {signals.get('overall', 'N/A')}<br>
96
+ <b>Signal Strength:</b> {signals.get('strength', 0):.2f}%<br>
97
+ <b>Support:</b> Rp{signals.get('support', 0):,.2f}<br>
98
+ <b>Resistance:</b> Rp{signals.get('resistance', 0):,.2f}<br>
99
+ <b>Stop Loss:</b> Rp{signals.get('stop_loss', 0):,.2f}<br><br>
100
+ <b>Detailed Signals:</b>
101
+ <ul style="margin-top: 8px; padding-left: 20px; line-height: 1.6;">
102
+ {details_list}
103
+ </ul>
104
  """
105
 
106
  prediction = f"""
107
+ <h4>30-DAY AI FORECAST (CHRONOS-BOLT)</h4>
108
+ <b>Predicted High:</b> Rp{predictions.get('high_30d', 0):,.2f}<br>
109
+ <b>Predicted Low:</b> Rp{predictions.get('low_30d', 0):,.2f}<br>
110
+ <b>Expected Change:</b> {predictions.get('change_pct', 0):.2f}%<br><br>
111
+ <b>Model Insight:</b><br>{predictions.get('summary', 'No analysis available')}
 
 
112
  """
113
 
114
  return (
 
128
  title="REXPRO FINANCIAL AI DASHBOARD",
129
  theme=gr.themes.Soft(primary_hue="blue", secondary_hue="gray"),
130
  css="""
131
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
132
  body {
133
+ background-color: #f9fafb;
134
  color: #1e293b;
135
  font-family: 'Inter', 'Segoe UI', Arial, sans-serif;
136
  }
 
143
  h2, h3, h4 {
144
  color: #1e3a8a;
145
  font-weight: 600;
146
+ margin-bottom: 6px;
147
  }
148
  .gr-markdown {
149
  background-color: #ffffff;
 
161
  .gr-textbox input {
162
  background-color: #ffffff !important;
163
  color: #1e293b !important;
164
+ border: 1px solid #d1d5db !important;
165
  }
166
  .gr-slider {
167
  background-color: #ffffff !important;
 
171
  border: 1px solid #e2e8f0;
172
  border-radius: 10px;
173
  }
174
+ ul {
175
+ margin: 0;
176
+ padding: 0 0 0 18px;
177
+ }
178
+ li {
179
+ margin-bottom: 4px;
180
+ }
181
  """,
182
  ) as app:
183
  gr.Markdown("# REXPRO FINANCIAL AI DASHBOARD")
 
202
  )
203
  analyze_button = gr.Button("RUN ANALYSIS")
204
 
205
+ gr.Markdown("---")
206
 
207
  with gr.Row():
208
  with gr.Column(scale=1):
209
+ fundamentals_output = gr.HTML()
210
  with gr.Column(scale=1):
211
+ signal_output = gr.HTML()
212
 
213
+ gr.Markdown("---")
214
 
215
  with gr.Tab("MARKET CHARTS"):
216
  with gr.Row():
217
  price_chart = gr.Plot(label="PRICE & MOVING AVERAGES")
218
  technical_chart = gr.Plot(label="TECHNICAL INDICATORS OVERVIEW")
219
+ gr.Markdown("---")
220
  prediction_chart = gr.Plot(label="AI FORECAST PROJECTION")
221
 
222
  with gr.Tab("AI FORECAST SUMMARY"):
 
224
  predicted_high = gr.Textbox(label="PREDICTED HIGH (30D)", interactive=False)
225
  predicted_low = gr.Textbox(label="PREDICTED LOW (30D)", interactive=False)
226
  predicted_change = gr.Textbox(label="EXPECTED CHANGE (%)", interactive=False)
227
+ gr.Markdown("---")
228
+ prediction_summary = gr.HTML()
229
 
230
  analyze_button.click(
231
  fn=update_analysis,