He estado mirando el siguiente recurso:
Utilizando la ecuación [4] para la versión discretizada del tipo libor a plazo:
$\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]$
Ahora, con algunas suposiciones simplificadoras, a saber, que el tramo de tiempo $\tau$ es de 1 periodo y la función de volatilidad $\sigma$ es una constante de 1, obtengo lo siguiente:
$\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]$
A continuación, asumo una curva de mercado a plazo inicial plana en el momento $t_0$ del 6% (y, por tanto, también la curva puntual es plana al 6%).
La pregunta es entonces, ¿no deberían las simulaciones monte-carlo basadas en lo anterior crear una curva a plazo libre de arbitraje en el futuro?
Supongamos que invierto 1 dólar en el spot a 2 años al 6%, lo que me da 1,27497 a $t_2$ (composición continua). Alternativamente, podría invertir 1 dólar en el spot a 1 año, lo que me daría 1,061837 a $t_1$ y luego invierto en el nuevo punto de 1 año en el tiempo $t_1$ . Esto implica que el punto en $t_1$ debe tener una media del 6% para que se den las condiciones de ausencia de arbitraje.
Simulo esto en 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
La media futura de 1 año $t_0$ El tipo de cambio al contado ha convergido a 0,0635, lo que no está libre de arbitraje. Según mi configuración, debería invertir en el spot a 1 año ahora y luego en el spot a 1 año el año que viene.
Entonces, ¿qué pasa? ¿Estoy interpretando mal los componentes del LMM discretizado? ¿La versión discretizada introduce algún tipo de error de deriva?
Editar:
Cuando uso el LMM en Matlab con una configuración similar para la volatilidad instantánea, veo un comportamiento algo similar:
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];
CurveDates = daysadd(Settle,360*CurveTimes,1);
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
De nuevo, el futuro medio $t_0$ Los tipos de interés al contado están subiendo en lugar de mantenerse planos. ¿Cómo debo interpretar esta deriva? ¿Debo vivir con ella? Nota: Soy significativamente menos competente en Matlab que en R, así que ciertamente hay alguna posibilidad de que esté haciendo algo inapropiado aquí.