Running a simulation
Every Monte Carlo setting explained: Simulations, Horizon, Initial capital, the Stress (×/yr) injector and its two worst-case modes.
Open the Monte Carlo tab of the Portfolio workspace, set four numbers, optionally arm the stress injector, and hit Run simulation. The run is explicit (not automatic) because it's a heavy computation over thousands of paths.
The settings
| Setting | Range (default) | What it does |
|---|---|---|
| Simulations | 100 – 10,000 (1,000) | How many alternative equity paths are generated. More paths = smoother percentile estimates, slower run. 1,000 is plenty for a first read. |
| Horizon (months) | 1 – 120 (36) | How far forward each path runs. Each simulated month draws ~21 trading days from your portfolio's daily-P/L pool. |
| Initial capital ($) | ≥ 1,000 | The starting equity each path accumulates on. Defaults to your portfolio's account size; editable if you want to model a different base. |
| Stress (×/yr) | 0 – 12 (0 = off) | Injects a worst-case event this many times per year, distributed across the horizon. |
The stress injector's two modes
When Stress is above zero, you choose what "worst-case event" means.
Historical worst day
Re-injects your portfolio's actual worst day from the backtest window. Grounded and conservative-ish: it happened once, and the simulation makes it happen on schedule — once, twice, or however many times a year you set.
Theoretical Black Swan
This one deserves a proper explanation, because it models something the historical window almost certainly does not contain.
The normal case. Your stop loss is what stands between a losing spread and its maximum loss. On an ordinary bad day the market moves against you, the spread's cost-to-close crosses your stop, the position closes, and you lose roughly what the stop said you would. The stop worked — that's what every number in your backtest assumes.
The Black Swan case. The stop never gets the chance. The market gaps — straight through your short strike and past your long wing before any order can be worked at a sane price. There is no orderly exit at the stop level, because between one price and the next there was no market at your stop. The position simply arrives at expiry at its maximum loss: the full spread width minus the credit you collected, times 100, times your contracts. The stop was a plan; the gap didn't consult it.
That's what this mode injects: every crash-exposed spread taking its full defined-risk loss simultaneously, as if each stop simply didn't exist that day. It is deliberately harsher than anything in the historical record.
How likely is it? Genuinely rare — a handful of days across decades of market history, and 0DTE's short holding window makes the exposure narrower still. This is not the scenario to plan your returns around. But "rare" is not "impossible", and it is precisely the shape of event that ends accounts rather than dents them: a strategy can be profitable for years and be erased in one morning by the one loss its stop couldn't cap. That's why defined-risk spreads are worth what they cost — your maximum loss is knowable, so the sane question isn't "will this happen?" but "if it happened tomorrow, would I still have an account?" This mode answers that question with a number.
Strategies at risk in the crash. In Black Swan mode a picker appears. A crash isn't symmetric: a violent move down destroys put spreads while call spreads expire worthless — profitably. Deselect the strategies that would profit from the crash you're modeling (for example bear-call spreads) so the injected loss reflects your real directional exposure instead of naively summing every position as if the market fell and rose at the same time.
Two more switches
- Show individual paths — overlays a sample of faint individual equity paths on the band chart. Worth keeping on: the band looks orderly, the individual paths remind you what living inside one feels like.
- The results include a stress transparency dropdown ("What was sampled") listing the per-strategy black-swan max losses and your portfolio's ten worst historical days, flagging which one was injected — so a stressed run is never a black box.
Then read the output properly: Reading the results.
