ricardoadriano commited on
Commit
7635bf7
·
verified ·
1 Parent(s): 580dad5

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +11 -19
src/streamlit_app.py CHANGED
@@ -18,9 +18,7 @@ except Exception:
18
  ALTAIR_AVAILABLE = False
19
 
20
 
21
- # ========================
22
  # Utilidades
23
- # ========================
24
  def carregar_precos(
25
  tickers: List[str],
26
  start: str,
@@ -155,37 +153,33 @@ def format_percent(x: float) -> str:
155
  return f"{x*100:.2f}%"
156
 
157
 
158
- # ========================
159
  # Interface Streamlit
160
- # ========================
161
  st.set_page_config(page_title="VaR Monte Carlo - Carteira (B3)", page_icon="📉", layout="wide")
162
 
163
  st.title("📉 VaR da Carteira via Simulação de Monte Carlo")
164
- st.caption(
165
  "Baseado na carteira de ações tratada no arquivo **Atividade2_3** (ITUB4.SA, MGLU3.SA, COGN3.SA, PETR4.SA, ABEV3.SA)."
166
  )
167
 
168
- with st.expander("ℹ️ Como funciona este app"):
169
  st.write("""
170
- - Baixamos os preços diários dos tickers selecionados (por padrão, os 5 do seu estudo).
171
- - Calculamos retornos logarítmicos diários, suas médias e covariâncias.
172
- - **Opcional**: buscamos pesos de **Máximo Sharpe** (amostragem) ou você define pesos manualmente.
173
- - Rodamos uma simulação **Monte Carlo multivariada Normal** dos retornos no horizonte escolhido.
174
- - Calculamos o **VaR** (percentual e em R$) para os níveis de confiança (ex.: 95% e 99%).
175
  """)
176
 
177
- # ------------------------
178
  # Parâmetros
179
- # ------------------------
180
  colA, colB = st.columns([2, 1])
181
 
182
- default_tickers = ["ITUB4.SA", "MGLU3.SA", "COGN3.SA", "PETR4.SA", "ABEV3.SA"] # do material de referência
183
  with colA:
184
  tickers = st.multiselect(
185
  "Tickers (B3, sufixo .SA)",
186
  options=default_tickers,
187
  default=default_tickers,
188
- help="Por padrão, os 5 ativos do seu estudo."
189
  )
190
 
191
  with colB:
@@ -196,7 +190,7 @@ with colB:
196
  col1, col2, col3, col4 = st.columns([1, 1, 1, 1])
197
 
198
  with col1:
199
- aporte = st.number_input("Aporte inicial (R$)", min_value=1000.0, value=50_000.0, step=1000.0, format="%.2f")
200
 
201
  with col2:
202
  horizonte = st.number_input("Horizonte (dias úteis)", min_value=1, value=1, step=1)
@@ -273,9 +267,7 @@ st.subheader("Pesos da carteira")
273
  st.dataframe(pesos_df.style.format({"Peso": "{:.2%}"}))
274
  st.caption(f"Origem dos pesos: **{fonte_pesos}**.")
275
 
276
- # ------------------------
277
  # Simulação Monte Carlo
278
- # ------------------------
279
  rng = np.random.default_rng(seed)
280
  sim_ret_log = simular_mc_multivariado(
281
  mu=mu,
@@ -345,6 +337,6 @@ st.success("Simulação concluída!")
345
 
346
  st.divider()
347
  st.caption(
348
- "Carteira base (ITUB4.SA, MGLU3.SA, COGN3.SA, PETR4.SA, ABEV3.SA) conforme estudo — "
349
  "parametrizável acima. O método de Monte Carlo segue a abordagem Normal multivariada com média e covariância empíricas diárias."
350
  )
 
18
  ALTAIR_AVAILABLE = False
19
 
20
 
 
21
  # Utilidades
 
22
  def carregar_precos(
23
  tickers: List[str],
24
  start: str,
 
153
  return f"{x*100:.2f}%"
154
 
155
 
 
156
  # Interface Streamlit
 
157
  st.set_page_config(page_title="VaR Monte Carlo - Carteira (B3)", page_icon="📉", layout="wide")
158
 
159
  st.title("📉 VaR da Carteira via Simulação de Monte Carlo")
160
+ st.caption(
161
  "Baseado na carteira de ações tratada no arquivo **Atividade2_3** (ITUB4.SA, MGLU3.SA, COGN3.SA, PETR4.SA, ABEV3.SA)."
162
  )
163
 
164
+ with st.expander("Funcionamento deste app"):
165
  st.write("""
166
+ - Download dos preços diários dos tickers selecionados (por padrão, cinco ativos).
167
+ - Calculo dos retornos logarítmicos diários, suas médias e covariâncias.
168
+ - Opcionalmente se busca pesos de **Máximo Sharpe** (amostragem) ou você define pesos manualmente.
169
+ - Roda-se uma simulação **Monte Carlo multivariada Normal** dos retornos no horizonte escolhido.
170
+ - Calculo do **VaR** (percentual e em R$) para os níveis de confiança (ex.: 95% e 99%).
171
  """)
172
 
 
173
  # Parâmetros
 
174
  colA, colB = st.columns([2, 1])
175
 
176
+ default_tickers = ["ITUB4.SA", "MGLU3.SA", "COGN3.SA", "PETR4.SA", "ABEV3.SA"]
177
  with colA:
178
  tickers = st.multiselect(
179
  "Tickers (B3, sufixo .SA)",
180
  options=default_tickers,
181
  default=default_tickers,
182
+ help="Por padrão, os 5 ativos."
183
  )
184
 
185
  with colB:
 
190
  col1, col2, col3, col4 = st.columns([1, 1, 1, 1])
191
 
192
  with col1:
193
+ aporte = st.number_input("Investimento inicial (R$)", min_value=1000.0, value=50_000.0, step=1000.0, format="%.2f")
194
 
195
  with col2:
196
  horizonte = st.number_input("Horizonte (dias úteis)", min_value=1, value=1, step=1)
 
267
  st.dataframe(pesos_df.style.format({"Peso": "{:.2%}"}))
268
  st.caption(f"Origem dos pesos: **{fonte_pesos}**.")
269
 
 
270
  # Simulação Monte Carlo
 
271
  rng = np.random.default_rng(seed)
272
  sim_ret_log = simular_mc_multivariado(
273
  mu=mu,
 
337
 
338
  st.divider()
339
  st.caption(
340
+ "Carteira base (ITUB4.SA, MGLU3.SA, COGN3.SA, PETR4.SA, ABEV3.SA) — "
341
  "parametrizável acima. O método de Monte Carlo segue a abordagem Normal multivariada com média e covariância empíricas diárias."
342
  )