Skip to content

Commit 72ae5df

Browse files
committed
feat: add monthly contribution parameter to Monte Carlo simulation
1 parent 7b1cb37 commit 72ae5df

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

.env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,4 @@ MONTECARLO_SIMULATION_SCENARIOS=1000
3333
MONTECARLO_SIMULATION_YEARS=20
3434
MONTECARLO_MIN_ASSET_VOLATILITY=0.1
3535
MONTECARLO_DEFAULT_INITIAL_INVESTMENT=1000
36+
MONTECARLO_DEFAULT_MONTHLY_CONTRIBUTION=100

app.py

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
MONTECARLO_DEFAULT_INITIAL_INVESTMENT = int(
3434
os.getenv("MONTECARLO_DEFAULT_INITIAL_INVESTMENT", 1000)
3535
)
36+
MONTECARLO_DEFAULT_MONTHLY_CONTRIBUTION = int(
37+
os.getenv("MONTECARLO_DEFAULT_MONTHLY_CONTRIBUTION", 100)
38+
)
3639

3740
# Configure logging
3841
logging.basicConfig(
@@ -1020,7 +1023,10 @@ def _extract_financial_metrics(
10201023
try:
10211024
if profile is None:
10221025
logger.warning("Profile is None, returning defaults")
1023-
return 5000, 200
1026+
return (
1027+
MONTECARLO_DEFAULT_INITIAL_INVESTMENT,
1028+
MONTECARLO_DEFAULT_MONTHLY_CONTRIBUTION,
1029+
)
10241030

10251031
# Convert profile to dict for agent
10261032
profile_dict = (
@@ -1044,9 +1050,14 @@ def _extract_financial_metrics(
10441050
except Exception as e:
10451051
logger.error("Error extracting PAC metrics: %s", str(e))
10461052
logger.warning(
1047-
"PAC METRICS EXTRACTION FAILED - Returning defaults: Initial €5000, Monthly €200"
1053+
"PAC METRICS EXTRACTION FAILED - Returning defaults: Initial €%d, Monthly €%d",
1054+
MONTECARLO_DEFAULT_INITIAL_INVESTMENT,
1055+
MONTECARLO_DEFAULT_MONTHLY_CONTRIBUTION,
1056+
)
1057+
return (
1058+
MONTECARLO_DEFAULT_INITIAL_INVESTMENT,
1059+
MONTECARLO_DEFAULT_MONTHLY_CONTRIBUTION,
10481060
)
1049-
return 5000, 200 # Return defaults
10501061

10511062

10521063
def _display_wealth_simulation(
@@ -1070,11 +1081,11 @@ def _display_wealth_simulation(
10701081

10711082
# Display explanation of Long-Term Wealth Projection
10721083
st.markdown(
1073-
"""
1084+
f"""
10741085
**📊 Cos'è questa simulazione?**
10751086
1076-
La simulazione utilizza il **Monte Carlo**, un metodo statistico che proietta 1.000 scenari di crescita del portafoglio
1077-
su 20 anni, considerando volatilità storica e rendimenti medi. I tre scenari mostrati rappresentano:
1087+
La simulazione utilizza il **Monte Carlo**, un metodo statistico che proietta {MONTECARLO_SIMULATION_SCENARIOS} scenari di crescita del portafoglio
1088+
su {MONTECARLO_SIMULATION_YEARS} anni, considerando volatilità storica e rendimenti medi. I tre scenari mostrati rappresentano:
10781089
- **Pessimistico (10° percentile)**: Solo 1 scenario su 10 avrà risultati peggiori
10791090
- **Atteso (50° percentile)**: Il valore più probabile (mediana)
10801091
- **Ottimistico (75° percentile)**: 3 scenari su 4 rimangono sotto questo valore
@@ -1213,8 +1224,8 @@ def _display_wealth_simulation(
12131224
monthly_contribution,
12141225
)
12151226
else:
1216-
initial_investment = 5000
1217-
monthly_contribution = 200
1227+
initial_investment = MONTECARLO_DEFAULT_INITIAL_INVESTMENT
1228+
monthly_contribution = MONTECARLO_DEFAULT_MONTHLY_CONTRIBUTION
12181229
logger.warning(
12191230
"PAC SECTION - Profile is NONE, using default PAC parameters: Initial €%d, Monthly €%d",
12201231
initial_investment,
@@ -1292,7 +1303,7 @@ def _display_wealth_simulation(
12921303
)
12931304

12941305
fig_lump.update_layout(
1295-
title="Lump Sum Investment - 20-Year Wealth Projection",
1306+
title=f"Lump Sum Investment - {MONTECARLO_SIMULATION_YEARS}-Year Wealth Projection",
12961307
xaxis_title="Years",
12971308
yaxis_title="Portfolio Value (€)",
12981309
hovermode="x unified",

0 commit comments

Comments
 (0)