Escolar Documentos
Profissional Documentos
Cultura Documentos
01 If a=b Then
02 Msgbox “Correto! As variáveis possuem o mesmo valor.”
03 End If
Note que a instrução If necessita que seu escopo seja delimitado através
de uma palavra-chave para o interpretador: End If. Se tivéssemos a condição
negativa com a mensagem: “As variáveis não possuem o mesmo valor.” o
código tomaria a forma:
01 If a=b Then
02 Msgbox “Correto! As variáveis possuem o mesmo valor.”
03 Else
04 Msgbox “As variáveis não possuem o mesmo valor.”
05 End If
01 If a>b Then
02 Msgbox “A variável a é maior que a variável b.”
03 Else
04 Msgbox “A variável b é maior que a variável a.”
05 End If
01 a=0
02 For i=5.2 To 6 Step 0.2
03 a=a+i
04 Next i
(2.1)
Resolução:
Note que os juros incidem sobre o valor inicial VP. Este procedimento
caracteriza a capitalização simples, por meio da qual os juros são sempre
aplicados a um valor inicial de referência, no caso, ao investimento inicial
dado por VP.
Assim, de maneira análoga, ao final do terceiro ano, o investidor também
recebe juros de 5% sobre o valor investido $100.000.
• Abra o Excel;
• Inicie o editor do Visual Basic;
• Insira novo módulo através da opção Módulo do menu Inserir (Figura
2.1); e
• Uma nova janela, referente ao módulo inserido, é aberta (Figura 2.2).
Figura 2.4: Implementação da função VFCS (Valor Futuro por Capitalização Simples).
Você já deve ter notado que o resultado obtido é o mesmo que a solução
demonstrada neste exemplo. Isto é, de $115.000 (Figura 2.5). Você deve ter
percebido que a criação de funções é, de certa forma, simples e facilmente
implementável. Longe das complicações teóricas de programação, iremos
sempre facilitar ao usuário que necessita de aplicação imediata dos
fundamentos aqui descritos. Novamente, insistimos em dizer que são
inúmeras possibilidades de funções definidas pelo usuário, e de rotinas que
podem ser criadas para a solução de praticamente quaisquer modelos
financeiros atuais.
Figura 2.5: Valor obtido da função VFCS.
(2.2)
Resolução:
Note que os juros estão incidindo sobre o valor inicial VP, acrescido dos
juros J1. Este procedimento caracteriza a capitalização composta, na qual os
juros são aplicados a um valor inicial de referência, no caso, ao investimento
inicial dado por VP, e também aos juros incorridos em períodos anterior, no
caso J1.
De forma análoga, ao final do terceiro ano, a taxa de juros de 5% é
aplicada sobre o valor investido $100.000 e todos os juros devidos
anteriormente.
Figura 2.7: Implementação da função VFCC (Valor Futuro por Capitalização Composta).
(2.3)
Resposta
(3.1)
No qual
• RF: retorno esperado do ativo livre de risco;
Exemplo 3.1: Um analista estimou o beta de uma ação em 1,3. Sabendo que
um investimento em um ativo livre de risco rende 11% ao ano e que o
mercado como um todo tem um retorno esperado de 18% ao ano, obtenha o
retorno esperado da ação.
Resolução:
ao ano
(3.2)
O nome da função pode ser qualquer, desde que não esteja na lista dos
termos exclusivos do VBA. Como convenção, neste livro adotaremos que
sempre funções possuam fnc como prefixo. Desta forma, cria-se um padrão e
evita-se que se utilize um nome que já está reservado para o próprio VBA.
Destaca-se ainda que letras maiúsculas e minúsculas não são diferenciados
pelo VBA, isto é, RA e ra, ou ainda rA, referem-se à mesma variável. Mas
adotaremos sempre que as variáveis passadas como argumentos sejam
grafadas em maiúsculas, e que as variáveis auxiliares, utilizadas no corpo da
função sejam grafadas em minúsculas. Insistimos que a escolha destes nomes
é livre. Contudo, a adoção de alguma convenção separando visualmente,
universos de rotinas e funções, variáveis como argumentos e variáveis
auxiliares, permite rapidamente obter informações adicionais sobre como
tratá-los.
3.4 Retorno do ativo livre de risco
(3.3)
(3.4)
Exemplo 3.2: Neste exercício, pede-se que o leitor desenvolva uma função
em VBA na qual, a partir das outras variáveis do CAPM, obtenhase o retorno
esperado do mercado.
Resolução:
(4.1)
No qual
(4.2)
(4.3)
Ou ainda:
(4.4)
na qual
(5.1)
É importante observar que fluxos de caixa genéricos envolvem diversos
desembolsos e recebimentos, que ocorrem em períodos diferentes. Não
necessariamente os fluxos de caixa FC0...FCn são iguais nem os intervalos
entre os prazos t0 ... tn de ocorrência dos fluxos de caixa são constantes. Além
disso, cada fluxo FCi que ocorre no prazo i pode ser descontado a uma taxa
de juros ri distinta, refletindo a possibilidade de que a estrutura temporal de
taxa de juros não seja constante. Note que no capítulop anterior, o modelo de
Gordon possui simplificações relevantes como, por exemplo, fluxos
igualmente espaçado se taxa de juros constate.
5.2 Valor presente líquido
Figura 5.2: Exemplo de fluxos de caixa que necessitam de ajustes para o uso da função VPL do Excel.
• Abra o Excel
• Digite os seguintes valores:
Figura 5.8: Ilustração do valor retornado para a fórmula do valor presente líquido.
Note que no código, a taxa de juros perdeu seu índice. Neste caso, a taxa
de juros deve ser um valor numérico, ou uma referência a uma única célula.
Caso seja fornecido um intervalo de células, como no caso anterior, a fórmula
retornará um erro. Observe o resultado para este caso:
Figura 5.10: Ilustração da aplicação da função fncVPL2.
Uma nova instrução foi acrescentada para decidir o que fazer, caso R seja
uma série de dados, ou um vetor. Para isso, usamos uma função do VBA que
retorna um valor tipo Boolean (True ou False) quando aplicada num objeto.
IsArray(R) retorna True quando R for uma série de dados, isto é, um vetor
de dados. Assim, a estrutura de decisão If... Then... Else pode ser utilizada.
A linha 3 do código (If IsArray(R) Then) pode ser lida como: “Se R for um
vetor, então...”; na linha 5 temos o código utilizando os termos da série da
taxa de juros R(i) para a resposta True da instrução IsArray(R), “Sim, R é
um vetor”. Na linha 7 temos: “Senão...” ou “Se R não for um vetor...”, e
temos o laço For... Next utilizando uma taxa de juros constante para todos os
termos do somatório. A linha 11 com a instrução End If encerra a estrutura
de decisão If... Then... Else.
Agora teste você mesmo. A função fncVPL3 é válida para as duas
situações. Ela prevê tratamentos distintos para a entrada da taxa de juros na
função. Seja numa situação na qual a taxa de juros é constante:
fncVPL5 = fncVPL5+ _
VPL(i+1)/(1+ VPL(i+2))^VPL(i)
é equivalente a:
Dim i As Integer
Dim n As Integer
As linhas 3, 4 e 5 declaram variáveis com os nomes T, FC e R como
sendo variáveis do tipo Double. Os parênteses vazios representam que estas
variáveis não são escalares, mas possuem uma dimensão, ainda a ser
definida. E da mesma forma, explorado nas variáveis i e n, poderiam ser
escritas como:
(5.3)
(5.4)
(5.5)
Como resposta, uma possível implementação para esta situação pode ser
dada por:
01 Function fncBetaCarteira(W,B) As Double
02 Dim i As Integer
03 For i = 1 To W.Count
04 fncBetaCarteira = fncBetaCarteira + W(i) * B(i)
05 Next i
06 End Function
(6.1)
(6.2)
01 Option Base 1
02 Function fncRC(W, R) As Double
03 Dim i As Integer
04 For i = 1 To W.Count
05 fncRC = fncRC + W(i) * R(i)
06 Next i
07 End Function
(6.3)
Ρ
Assets W σ
1 2 3 4 5
1 0,1 0 1 0,1 0,2 0,3 -0,7
2 0,1 0,05 0,1 1 0,1 0,1 0,2
3 0,2 0,05 0,2 0,2 1 -0,2 0,4
4 0,3 0,1 0,3 0,1 -0,2 1 0,2
5 0,3 0,2 -0,7 0,2 0,4 0,2 1
Tabela 6.2: Exemplo de composição de carteira para cálculo do risco total.
Ou seja, com 99% de chances, essa carteira pode vir a perder no máximo,
de hoje até 10 dias, $73.564. Há somente 1% de chances de a carteira perder
mais de $73.564 neste mesmo período.
01 Option Base 1
02 Function fncVaR(M, RT, GC, T) As Double
03 fncVaR = M * RT * Application.NormSInv(GC) * Sqr(T)
04 End Function
Figura 6.3: Ilustração da janela de código com a implementação das funções fnvRT e fncVaR.
Ainda, a função fncRT poderia estar aninhada a função fncVaR na
chamada pela planilha. Isto é, poderíamos ter calculado o VaR sem
necessidade da referência às células contendo o valor de RT, nem mesmo às
com os valores de M, GC e T, com a chamada à função conforme a Figura
6.4.
Figura 6.4: Ilustração da aplicação da função fncVaR com parâmetros numéricos e chamada à função
fncRT.
6.4 Modelo de Variâncias - Covariâncias do VaR
(6.5)
(6.6)
aonde σ = e M’ é a transposta de M.
(6.7)
(6.8)
auxMC = M0 · C
auxMCM = M0 · C · M
Na linha 13 temos a função Sqr() sobre o auxMCM atribuindo a ela
mesma, sua raiz quadrada. Os componentes do vetor são então calculados no
laço das linhas 14 a 16, e atribuído de resultados à função, na linha 17. O
resultado esperado é o seguinte:
(6.9)
(6.10)
Resolução
Uma possível codificação, sem novidades, para cálculo do Beta VaR é
apresentada a seguir.
(7.1)
onde
Com:
(7.2)
(7.3)
(7.4)
(7.5)
onde f(x) é a função que retorna o valor da distribuição normal padrão,
com média em zero e desvio padrão unitário, em função da distância x à
média.
O código exposto na próxima seção remete à implementação da equação
7.1, com a incorporação das variáveis definidas em 7.2, 7.3 e 7.4, utilizando a
chamada à função Norm_S_Dist, do Excel, intrínseca em sua biblioteca, que
fornece uma solução adequada para a Equação 7.4. Para uma discussão
completa de derivativos, Hull (2014).
Note que apenas inserimos os valores do modelo em B1, B2, B3, B4, B5 e
B6; em B8 realizamos do cálculo do CallTeórico´ com a função criada
fncBSCall. O valor que se obtém é de 4,44. Para obtermos a volatilidade
implícita recorremos à ferramenta de “Atingir meta” da opção de “Teste de
Hipóteses” do conjunto de opções da paleta “Dados”, conforme a figura a
seguir:
Figura 7.8: Uso da função fncGoalV em vários cenários para o uso de “Atingir meta”.
(7.6)
(7.7)
(7.9)
(7.11)
7.4.1 Gregas das opções (Delta da Put, Gamma da Put, Kappa da Put,
Theta da Put, Rho da Put)
(7.12)
(7.13)
(7.14)
(8.1)
(8.2)
(8.3)
8.2.2 Geração de números aleatórios
(8.4)
(8.5)
For j = 1 To NdT
Do
x1 = 2 * Rnd() - 1
x2 = 2 * Rnd() - 1
y = x1 ^ 2 + x2 ^ 2
Loop Until y <= 1
z = x1 * Sqr(-2 * Log(y) / y)
St = St * Exp((r - v ^ 2 / 2) * dt + v * Sqr(dt) * z)
Next j
Premio = St - K
If Premio < 0 Then Premio = 0
SomaS = SomaS + Premio
Next i
fncMCCall = (SomaS / NSim) / (1 + r) ^ T
End Function
Black, F., & Scholes, M. (1973, may). The Pricing of Options and
Corporate Liabilities. Journal of Political Economy, 81(3), 637–654.
Brealey, R. A., Myers, S. C., & Allen, F. (2016). Principles of corporate
finance (12th ed.). New York: McGraw-Hill Education - Europe.
Elton, E. J., Gruber, M. J., Brown, S. J., & Goetzmann, W. N. (2014).
Modern portfolio theory and investment analysis (9th ed.). Hoboken, NJ:
John Wiley & Sons Inc.
Fabozzi, F. J. (1999). Duration, convexity, and other bond risk measures.
Hoboken, NJ: John Wiley & Sons Inc.
Hull, J. C. (2014). Options, futures, and other derivatives. Upper Saddle
River, NJ: Pearson.
Jorion, P. (2006). Value-at-risk: The new benchmark for managing
financial risk. New York, NY: McGraw-Hill Education.
Merton, R. (1974). On The Pricing Of Corporate Debt: The Risk Structure
Of Interest Rates. The Journal of Finance, 29(2), 449-470.
[1]
Menu localizado na parte superior do Excel com as principais guias e comandos.
[2]
Black and Scholes (1973)