Should the Libor Market Model using spot measure as numeraire simulate an arbitrage free forward curve?

I have been looking at the following resource:

Reference Paper

Using equation [4] for the discretized version of the forward libor rate:

$$\tilde{L}^i_{T_{j+1}} = \tilde{L}^i_{T_{j}} exp[\sigma^i(\sum^i_{k = j + 1}\frac{\tau_k L^k_{T_{j}} \sigma^k}{1 + \tau_k L^k_{T_{j}}} - \frac{1}{2}\sigma^i)\tau_j + \sigma^i\sqrt{\tau_j}Z_j]$$

Now with some simplifying assumptions, namely that the time slice $$\tau$$ is 1 period and the volatility function $$\sigma$$ is a constant of 1, I get the following:

$$\tilde{L}^i_{T_{j+1}} = \tilde{L}^i_{T_{j}} exp[(\sum^i_{k = j + 1}\frac{L^k_{T_{j}}}{1 + L^k_{T_{j}}} - \frac{1}{2}) + Z_j]$$

Next, I assume an initial flat market forward curve at time $$t_0$$ of 6% (and thus also the spot curve is flat at 6%).

The question is then, shouldn't monte-carlo simulations based on the above create an arbitrage free forward curve in the future?

Suppose I invest 1 dollar in the 2 year spot at 6%, giving me 1.27497 at $$t_2$$ (continuous compounding). Alternatively, I could invest 1 dollar in the 1 year spot, giving me 1.061837 at $$t_1$$, and then I invest in the new 1 year spot at time $$t_1$$. This implies that the spot at $$t_1$$ should average to 6% for arbitrage free conditions to hold.

I simulate this in R...

F0 <- c(.06, .06, .06, .06, .06) # initial forward curve starting at T[0] and going to T[4]

paths <- 100000

Z0 <- rnorm(paths)

F1_0 <- F0[2] * exp((F0[2] / (1 + F0[2])) - .5 + Z0)
F1_1 <- F0[3] * exp((F0[2] / (1 + F0[2])) + (F0[3] / (1 + F0[3])) - .5 + Z0)
F1_2 <- F0[4] * exp((F0[2] / (1 + F0[2])) + (F0[3] / (1 + F0[3])) + (F0[4] / (1 + F0[4])) - .5 + Z0)
F1_3 <- F0[5] * exp((F0[2] / (1 + F0[2])) + (F0[3] / (1 + F0[3])) + (F0[4] / (1 + F0[4])) + (F0[5] / (1 + F0[5])) - .5 + Z0)

mean(F1_0) # 0.06359581


The mean future 1 year $$t_0$$ spot rate has converged to 0.0635, which is not arbitrage free. According to my setup, I should just invest in the 1 year spot now and then the 1 year spot next year.

So what gives? Am I misinterpreting the components of the discretized LMM? Does the discretized version introduce some sort of drift error?

Edit:

When I use the LMM in Matlab with a similar setup for the instantaneous volatility, I see somewhat similar behaviour:

Settle = datenum('1-Jan-2021');
CurveTimes = 0:10;
Rates = [0.06 0.06 0.06 0.06 0.06 0.06 0.06 0.06 0.06 0.06 0.06];

irdc = IRDataCurve('Forward',Settle,CurveDates,Rates,'Compounding',-1);

LMMVolFunc = @(a,t) 1;
LMMVolParams = [1];

numRates = 21;
VolFunc(1:numRates,1) = {@(t) LMMVolFunc(LMMVolParams,t)};

Beta = 0;
CorrFunc = @(i,j,Beta) exp(-Beta*abs(i-j));
Correlation = CorrFunc(meshgrid(1:numRates)',meshgrid(1:numRates),Beta);

LMM = LiborMarketModel(irdc,VolFunc,Correlation,'Period',1,'NumFactors',1);

[ZeroRates, ForwardRates] = simTermStructs(LMM, 10,'nTrials',10000);

mean(ForwardRates(1,1,:)) % ans = 0.0618
mean(ForwardRates(2,1,:)) % ans = 0.0650
mean(ForwardRates(3,1,:)) % ans = 0.0925


Again, the mean future $$t_0$$ spot rates are drifting upwards instead of staying flat. How should I interpret this drift? Do I just live with it? Note: I am significantly less competent in Matlab as I am in R, so there is certainly some possibility I am doing something inappropriate here.

• Not a code expert, but just intuitively: if 1y1y forward rate is 6%, then the expected forward rate under the money market measure should be > 6%. Similar argument to futures vs Fras.
– dm63
Sep 15, 2021 at 22:31
• Perhaps I'm being dense, and I apologize for that, but I don't see how that is true under no arbitrage. Using F(t,T1,T2) as the forward rate from T1 to T2 at time t... If the forward curve at t0 is flat 6% then the spot curve is flat at 6% [i.e. F(0,1,2) = (2*F(0,0,2) - 1*F(0,0,1)) / (2-1) = (2*6% - 1*6%) / (2-1) = 6%]. So if I invest in at 6% for 2 years, I receive exp(.06*2) = 1.1725. Alternatively, I invest at 6% for 1 year, then 6% for a second year, exp(.06*1)*exp(.06*1) = 1.1725. Does this not imply that the second year expected 1y spot [or F(1,1,2)] must be 6% under no arbitrage? Sep 16, 2021 at 0:41

I think that under the spot (money market) measure, the ratio of bond prices to the money market account is a martingale. So consider a world where the continuously compounded rate for the first year is known at 6%, and there is a two year zero coupon bond priced at exp(-0.12). We simulate the rate r in the second year. The above martingale condition gives $$exp(-0.12)/1=E[ 1/exp(0.6+r)].$$ This simplifies to $$E[exp(-r)]=exp(-0.06).$$ But since the exponential function is negatively convex we have $$E[exp(-r)] or $$E[r]>0.06.$$ Fundamentally the expectation of the rate is higher than the forward rate due to convexity of bonds. The ‘error’ should increase as volatility increases and should go to zero if volatility is zero.