Estoy calculando los factores de descuento teóricos asociados a un bono que tiene 30 meses de vencimiento a partir de hoy con los parámetros siguientes obtenidos de aquí utilizando el modelo Nelson-Siegel-Svensson. El código de Python no es más que una aplicación directa de la fórmula del Modelo Nelson-Siegel-Svensson. ¿Se supone que los factores de descuento teóricos obtenidos a partir de las NSS son tan pequeños?
beta_0 = 6.33120453
beta_1 =-6.22139731
beta_2 = -4.55116776
beta_3 = -8.72097716
tau_1 = 1.68437012
tau_2 = 11.18918219
months_to_maturity_array = numpy.array([6, 12, 18, 24, 30])
years_to_maturity_array = months_to_maturity_array/12
term_1 = (beta_0) + (beta_1*((1-numpy.exp(-years_to_maturity_array/tau_1))/(years_to_maturity_array/tau_1))) + (beta_2*((((1-numpy.exp(-years_to_maturity_array/tau_1))/(years_to_maturity_array/tau_1)))-(numpy.exp(-years_to_maturity_array/tau_1))) + (beta_3*((((1-numpy.exp(-years_to_maturity_array/tau_2))/(years_to_maturity_array/tau_2)))-(numpy.exp(-years_to_maturity_array/tau_2))))
test = numpy.exp(-years_to_maturity_array * (term_1))
print('RESULT:', test)
Los factores de descuento de la producción resultan ser [ 0.9032555 0.70209724 0.44987297 0.23612997 0.10293834]
que parece muy bajo. Unos factores de descuento tan pequeños darán como resultado unos precios muy pequeños, lo que afecta a la optimización no lineal utilizada para calcular los parámetros. Por ejemplo, si el bono tiene el conjunto de cupones y valores faciales que se muestran a continuación, entonces el price
resulta ser 27.2861601745
.
coupons_and_facevals = [1.5, 1.5, 1.5, 102.5]
coupons_and_facevals = numpy.array(coupons_and_facevals)
price = 0
for i in range(0,4,1):
price = price + coupons_and_facevals[i] * test[i]
Llevo un tiempo trasteando con esto pero estoy atascado.
Gracias