Spaces:
Sleeping
Sleeping
Update src/streamlit_app.py
Browse files- 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("
|
| 169 |
st.write("""
|
| 170 |
-
-
|
| 171 |
-
-
|
| 172 |
-
-
|
| 173 |
-
-
|
| 174 |
-
-
|
| 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"]
|
| 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
|
| 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("
|
| 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)
|
| 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 |
)
|