"You can't know the one future. But you can roll thousands of plausible ones and look at the shape they make."
What a Monte Carlo simulation is
The future of a portfolio is uncertain, which sounds like a dead end — how do you compute with something you can't know? A Monte Carlo simulation is the honest answer. Instead of predicting one path, you generate many — thousands of randomly-sampled possible futures, each consistent with stated assumptions about how prices move — and then look at the distribution they form. Keep runs these over the portfolio with numpy: many random trials, each a plausible trajectory, aggregated into a picture of possibility rather than a single guessed number.
From one line to a fan of paths
A naive projection draws one line — "if you earn 7% a year, here's your balance in ten years." That single line hides everything that matters: the good years, the bad years, the sequence risk, the tail where things go badly. Monte Carlo replaces the line with a fan: run the ten-year trajectory thousands of times, each with different random draws for how each period turns out, and you get a spread. Now you can read percentile paths — the median outcome, the pessimistic 10th percentile, the optimistic 90th — and see the range of what's plausible, not just one flattering midpoint.
The assumptions are inputs, not truths
A simulation is only as meaningful as its assumptions, and Keep makes those assumptions explicit inputs to the run: the horizon, the number of iterations, the hurdles, a mean-reversion coefficient, and calibration derived from real data (volatility, beta, anchors). Change the assumptions and you get a different fan — which is exactly right, because you're exploring "what if things behave like this?" The simulation doesn't claim its assumptions are true; it makes them visible and lets you see their consequences. That transparency is what separates an honest scenario tool from a black-box oracle.