Calculando yield implícito em Bonds via Newton-Raphson

milton-rocha
4 min readJun 8, 2022

--

Todos que já estudaram cálculo chegaram a ver e aplicar o famoso método Newton-Raphson, que se trata de um método numérico muito utilizado para se encontrar raízes de funções.

Na internet é fácil achar uma representação gráfica de como o método de Newton funciona na solução de problemas em funções. Explicando brevemente este método se utiliza dos seguintes argumentos:

  • f(x_n) : valor da função base para o elemento x, na iteração n
  • f’(x_n) : valor da derivada primeira da função base para o elemento x, na iteração n
  • x_(n+1) : estimativa de novo valor para a solução da função base em busca do valor final (x+1)
  • φ : precisão que se deseja atingir com o método de Newton
  • r : raiz desejada

Formalização do método

Partindo da generalização formal, podemos notar que uma função f(x) pode ter sua raiz encontrada caso se faça o seguinte cálculo iterativo:

(1) Newton-Raphson generalizado

Para esta sequência fica claro que o próximo número a ser utilizado de estimativa (x_(n+1)) será o que foi calculado com base no último número de estimativa (x_n). Ou seja, parte-se de um número base x_n, e a partir dele será feito o ajuste com base no valor da função f(x) e sua primeira derivada (tangente).

Existirá convergência do valor para a raiz (r) à medida que ao se aumentar o número de iterações (n) o número x_n fique suficientemente próximo de r, com precisão igual à φ.

Deste modo, diz-se que a sequência converge para r:

(2) Convergência de x_n para a raiz

Este método numérico encontra dificuldades de solução em funções que não são curvas bem definidas, visto que pode ocorrer de a iteração seguinte (x_(n+1)) ser uma aproximação pior do que a aproximação atual (x_n).

Entretanto, como já sabemos, a Curva Preço-Taxa é bem definida, sem pontos de inflexão e sinuosidades, o que facilita e garante que a aplicação do método de Newton seja eficaz na solução do problema em questão.

Utilidade em bonds

Em renda fixa este método pode ser utilizado para rapidamente achar a solução para a equação de precificação de um bond. Ou seja, para qualquer dada taxa de juros é possível calcular a taxa de juros que foi usada no desconto daquele bond, essencialmente atingindo o seu valor de YTM (Yield to Maturity) ou TIR (Taxa Interna de Retorno).

Como fazer a adaptação de (1) para aplicação do método nos bonds?

I. A função de precificação do bond em questão deve ser conhecida, ou pelo menos sua aproximação por expansão de Taylor, para que a função preço seja aferida de maneira precisa

II. O numerador de (1) será substituído por uma função de diferença entre o preço almejado (calculado com a taxa de juros raiz — y_r) e o preço calculado na iteração. Visto que o método tem o objetivo de encontrar raizes, a substituição do numerador ocorre para que o método almeje zerá-lo (encontrar sua raiz)

III. O denominador da função será substituído pelo DV01 (Dollar Value of a Basis Point) do bond calculado na iteração n dividido por 10000, para que o resultado do shift almejado seja representado não em bps (em múltiplos de 0,01%), mas sim em número (0,5 = 50%)

(3) Newton-Raphson para os bonds

Desta forma, basta criar um código que consiga rapidamente calcular o bond e depois criar um solver que irá se utilizar do precificador para atingir o preço objetivo desejado.

Neste post não entrarei em detalhes muito profundos sobre o código de precificação dos bonds, mas é um código bastante eficaz, preciso, vetorizado e com alguns perks interessantes, como repricing automático em caso de modificação da taxa de juros inserida.

Representação gráfica da solução

Vamos supor um caso hipotético extremo, que faça sentido gerar um GIF bem bacana que demonstre a sua solução. Existe um bond com as seguintes características para precificação:

  • Vencimento : 2520 du
  • FACE : 1000
  • Yield : 2,5%
  • Preço inicial : 781.20
  • Preço objetivo : 72.54
Visualização em GIF da Solução Newton-Raphson proposta | Elaboração própria

Qual a solução para este problema e qual a velocidade de convergência neste caso?

A solução é 30% a.a de yield para o bond, esta solução, mesmo que dramática e extrema, foi atingida de maneira muito eficaz pelo código:

Elaboração própria

Código base

Código fonte de pricing e solução por Newton-Raphson

Referências bibliográficas

Stewart, James. “Cálculo, vol. 1.Pioneira Thomson Learning (2013): 306.

--

--