I've built a simplistic Excel monte carlo model to price a zero-coupon bond, but it came up with a slightly unepxected result so I wanted to confirm whether my maths is just a little rusty or my model is wrong.
Suppose we have a 40 year ZCB with a price $P_t$ that equates to a flat discount rate of $z_t$ at time $t$; i.e. the price $P_t = \exp(-(40 - t) \cdot z_t)$, and let's say $z_0 = 2\%$ in this case . (This is obviously different from the usual zero coupon bond vs rate pricing formula, $P_t = \mathbb{E}[\exp(-\int_t r_t)]$, as it refers to a single "average" rate over the remaining life of the bond)
The monte carlo starts with this spread $z_0$, which evolves randomly after each period with no drift, according to $z_{t+\Delta t} = z_t + (\sigma \cdot \sqrt{\Delta t} \cdot \omega)$ where $\sigma$ is a vol parameter and $\omega \sim \text{N}(0,1)$.
At year 30, I look at the simulated value of $z_{30}$, and then infer the price of the bond as $P_{30} = \exp (-(40 - 30) \cdot z_{30})$.
Having run this simulation for a number of Monte Carlo runs, I took the average spread $z_t$ at $t = 30$, which was unsurprisingly equal to $2\% = z_0$, and the average price $P_{30}$ across all of these runs.
I was expecting that this average price would be approximately $\exp (-(40 - 30) \cdot z_{0}) = \exp(-10 \cdot 2\%)) = \exp (-(40 - 30) \cdot \mathbb{E}(z_{30}))$ but in fact the value was consistently higher than .
To some extent I can justify this to myself; the bond price is convex, so in absolute terms you'll see bigger absolute positive gains than negative losses when the spread moves tighter or wider by the same $\%$ amount (assuming the avg spread is still centered around $z_0 = 2\%$).
But on the other hand, this means your expected bond price in the monte carlo is a function of volatility: $\sigma = 0$ gives you $z_{30} = z_0$ in all cases and therefore a lower expected price than for some $\sigma > 0 $. I wouldn't intuitively expect that the expected bond price over time is dependent on vol even with zero drift; it's not an option-type payoff after all, and I've never previously seen bond prices contemplated as a function of vol. Discussions such as this one make me think that the $+\sigma^2/2$ lognormal expectation effect, skewing gains over losses, should be offset by $-\sigma^2/2$ term in the expected Brownian motion path (though admittedly this is a slightly different security from the one in that link), but my model appears to suggest otherwise.
What am I missing here? Is my model wrong, am I trying to reconcile 2 fundamentally different quantities or should the expected bond price with nonzero vol genuinely be higher than the bond price discounted at the expected spread?