Calcule o rendimento de um título até o vencimento com VBA

Calcule o rendimento de um título e resgate de uma ligação através do método de bisseção e VBA. Outrossim, o rendimento até o vencimento de um título não é dado por uma equação simples e explícita. Como resultado, você precisa de métodos iterativos para retroceder a fórmula de precificação de títulos.

Do mesmo modo, a função TAXA do Excel, calcula iterativamente os rendimentos dos títulos. No entanto, você pode querer calcular essa quantidade com um pequeno código VBA e criar sua própria fórmula.

Usando VBA para calcular o rendimento de um título

Mas por que usar o VBA quando a fórmula TAXA resolve? Bem, existem vários bons motivos.

Calcule o rendimento de um título até o vencimento com VBA

  1. Você aprende a teoria por trás do método de bisseção e aplica os conceitos a um problema prático.
  2. Você pode aproveitar seu novo conhecimento para resolver outros problemas numéricos complicados, como o cálculo da volatilidade implícita.
  3. Você ganha familiaridade com o VBA - uma ferramenta amplamente usada em negócios e finanças.

Essa equação descreve o preço de um título.

C(1 + R)-1 + C(1 + R)-2 + . . . + C(1 + R)-N + B(1 + R)-N = P

Onde:

C = pagamento anual do cupom.
N = número de anos até o vencimento.
B = valor nominal.
P = preço de compra.

Veja outra equação para rendimento de um título.

Esta equação não pode ser rearranjada para dar i. Logo e seguida, mostrarei um pouco de VBA que aplica o método de bisseção para resolver esta equação para i

Calcular rendimento de um título até o vencimento

Onde temos:

  • C é o cupom
  • i é o rendimento até o vencimento
  • M é o valor nominal
  • F é a frequência de pagamento
  • n é o número de pagamentos

Copie e cole a tabela a seguir, na célula A1 em uma nova planilha de Excel.

Calcular Rendimentos de um título.
Dados Descrição
20 Anos até a maturidade
6 Frequência de Pagamento
 R$             15.000,00 Valor nominal
8,45% Taxa anual de cupons
 R$               2.300,00 Valor presente
=A4*TAXA(A3*A4;A5*A6/A4;-A7;A5;0) Rendimento até o vencimento usando TAXA
=RendimentoDaMaturidade(A5;A3;A6*A5;A7;A4) Rendimento da maturidade usando VBA e Bisseção

Use o código VBA a seguir. Copie e cole na área do Visual Basic Applications de sua pasta de trabalho. Depois acrescentes as seguintes funções.

Function BondPrice(ParValue As Double, NumeroDePagamento As Double, RendimentoDaMaturidade As Double, Coupon As Double, Frequency As Double)
 
BondPrice = Coupon / Frequency * (1 - 1 / (1 + RendimentoDaMaturidade / Frequency) ^ (NumeroDePagamento * Frequency)) / (RendimentoDaMaturidade / Frequency) _
+ ParValue / (1 + RendimentoDaMaturidade / Frequency) ^ (NumeroDePagamento * Frequency)
 
End Function


Function RendimentoDaMaturidade( _
 ByVal ParValue As Double, _
 ByVal NumeroDePagamento As Double, _
 ByVal Coupon As Double, _
 ByVal Price As Double, _
 ByVal Frequency As Double) As Double
 
 Dim epsilonABS As Double
 Dim epsilonSTEP As Double
 Dim iMid As Double
 Dim niter As Integer
 Dim iLower As Double
 Dim iUpper As Double
 
 epsilonABS = 0.0000001
 epsilonSTEP = 0.0000001
 niter = 0
 iLower = 0.0000001
 iUpper = 1
 
 Do While niter < 100 _
 Or iUpper - iLower >= epsilonSTEP _
 Or Abs(BondPrice(ParValue, NumeroDePagamento, iLower, Coupon, Frequency) - Price) >= epsilonABS _
 And epsilonABS <= Abs(BondPrice(ParValue, NumeroDePagamento, iUpper, Coupon, Frequency) - Price) >= epsilonABS
 iMid = (iLower + iUpper) / 2
 If Abs(BondPrice(ParValue, NumeroDePagamento, iMid, Coupon, Frequency) - Price) <= epsilonABS Then
 Exit Do
 ElseIf ((BondPrice(ParValue, NumeroDePagamento, iLower, Coupon, Frequency) - Price) * (BondPrice(ParValue, NumeroDePagamento, iMid, Coupon, Frequency) - Price) < 0) Then
 iUpper = iMid
 Else
 iLower = iMid
 End If
 niter = niter + 1
 Loop
 
 RendimentoDaMaturidade = iLower
 
End Function

O código contém duas funções.

BondPrice (ParValue, NumeroDePagamento, RendimentoDaMaturidade, Cupom, Frequência). Isso calcula o preço de um título.
RendimentoDaMaturidade (ParValue, NumeroDePagamento, Cupom, Preço, Frequência). Esta função resolve o BondPrice para dar o rendimento até o vencimento.

Você pode alterar o código, assim como os dados da tabela, para ver a correta funcionalidade.


Edivaldo data: 15/05/2018   ✅ 427

Deixe um comentário

avatar
1000
  Se inscrever  
Notificação de