Documente Academic
Documente Profesional
Documente Cultură
April 2, 2019
Introdução
1 Introdução
Introdução
Section 1
Introdução
Introdução
Apresentação do curso
Descrição
Iremos fazer um curso focado na parte prática de finanças utilizando o R, será um
curso que irá abordar a ementa abaixo usando para cada aula slides e a aplicação do
que foi visto no dia. Tentaremos manter o mínimo do entendimento teórico mas o
curso será superficial nesse quesito, não iremos focar em demonstrações nem seremos
formais (matematicamente), para isso indicarei livros, matérias e outras fontes.
Mesmo sendo um curso relativamente superficial do ponto de vista teórico e sem pré
requisitos, ao longo do curso iremos abordar diversas ferramentas e técnicas que o R
proporciona, algumas básicas outras intermediárias/avançadas, sendo assim pode
também ser um curso interessante para os que apenas querem aprender R. Teremos
como objetivo a capacidade de entender, aplicar e analizar algumas aplicações para
finanças utilizando o R e falaremos também da integração R/Excel.
Introdução
Onde aprender
Onde eu aprendi
Minicurso no SER
SEMEST
Séries Temporais 1
Séries temporais financeiras (PPGAd)
UFFinance
DataCamp
Coursera
Alocação de ativos de risco
TCC
Artigos, eventos e livros
Outros
Gestão de Portfolio - Análise Macro
Econometria Financeira - Análise Macro
Introdução
1 Para quem tiver interesse recomendo o livro Multivariate Time Series Analysis - Tsay
e o pacote rmgarch.
Introdução
Ementa resumida
1 Introdução
Introdução à programação
Introdução ao R
Conceitos básicos
Baixando e tratando dados da internet
2 Análise de Carteiras
Introdução
Analisando a performance
Determinantes de performance
Otimizando a carteira - Parte 1
Otimizando a carteira - Parte 2
Passo a passo para otimizar carteiras
Funções objetivo e estimação de momentos
Aplicações
3 Modelos GARCH
Modelo GARCH(1, 1)
Outros modelos GARCH
Validação do modelo
Aplicações
Problemas
4 Integração R e Excel
Introdução
2 Análise de Carteiras
1 Introdução (09-Abr)
Primeiros passos
A alocação da carteira
O retorno da carteira
PerfomanceAnalytics
2 Analisando performance (16-Abr)
Dimensões da performance
Índice de Sharpe
Variação da performance no tempo
Não normalidade na distribuição dos retornos
3 Determinantes da performance (23-Abr)
Determinantes no caso de dois ativos
Usando a notação matricial
Orçamento de risco
Introdução
2 Análise de Carteiras
4 Otimizando a carteira - Parte 1 (30-Abr)
Teoria de Markowitz
A fronteira eficiente
Fora vs dentro da amostra
5 Otimizando a carteira - Parte 2 (07-Mai)
Introdução
Desafios
PortfolioAnalytics
6 Passo a passo para otimizar carteiras (14-Mai)
Especificação, restrições e objetivos
Rodando otimizações
Analisando resultados
7 Funções objetivo e estimação de momentos (21-Mai)
Introdução aos momentos
Funções personalizadas de momentos
Funções objetivo
8 Aplicações (28-Mai)
Introdução
Fazendo o backtest
Introdução
3 Modelos GARCH
1 Modelo GARCH(1,1) (04-Jun)
Analisando a volatilidade
A equação GARCH para previsão da volatilidade
O pacote rugarch
2 Extensões do modelo GARCH(1,1) normal (11-Jun)
Não normalidade dos retornos
Efeitos de alavancagem
Modelo da média
Evitando excessos
3 Validação do modelo (18-Jun)
Significância estatística
Qualidade do ajuste
Diagnosticando retornos
Backtesting com ugarchroll
Introdução
3 Modelos GARCH
4 Aplicações (25-Jun)
Value-at-risk
Simulação, validação e execução
Risco do modelo
Covariância do GARCH
5 Problemas (02-Jul)
O problema do otimizador
O problema do modelo univariado
Referências:
1 Análise de Carteiras
PerformanceAnalytics Charts and Tables Overview
Introduction to PortfolioAnalytics
Moderna Teoria de Carteiras e Análise de Investimentos - Elton e Gruber.
Active Portfolio Management - Grinold, Kahn
Introduction to Portfolio Analysis in R - DataCamp
Intermediate Portfolio Analysis in R - DataCamp
2 Modelos de volatilidade
GARCH models in R - Kris Boudt, DataCamp
Introduction to the rugarch package - Alexios Ghalanos
Analysis of Financial Time Series - Ruey S. Tsay
GARCH Models - Christian Francq, Jean-Michel Zakoian
Modelling Financial Time Series with S-PLUS - Eric Zivot
Forecasting: Principles and Practices - Rob J Hyndman, George Athanasopoulos
Time Series Analysis - James D. Hamilton
The Econometric Modelling of Financial Time Series - Terence C. Mills
Introduction to Computational Finance and Financial Econometrics - Eric Zivot,
Coursera
Introdução
Introdução a programação e R
Onde aprender R
Swirl
Introduction to R - DataCamp
Intermediate R - DataCamp
R for Data Science - Hadley Wickham
Introdução
Algoritmos
Definição: Algoritmo é a descrição de uma sequência de passos que deve ser seguida
para a realização de uma tarefa (ASCENCIO, 1999)
Tipos de algoritmos
Conceito de variável
Numérico
Lógico
Caractere
Introdução
Identificadores
Exemplo:
prices_ad: Série de preços ajustados.
Introdução
Pseudocódigo:
ALGORITMO
DECLARE preco_t1, preco_t2, retorno NUMERICO
LEIA preco_t1, preco_t2
retorno <- (preco_t2 - preco_t1)/preco_t1
ESCREVA retorno
FIM_ALGORITMO
No R:
## Calculo do retorno
preco_t1 <- 100
preco_t2 <- 110
print(retorno)
## [1] 0.1
Introdução
print(retorno)
## [1] 0.1
if (retorno >0){
print("lucrou")
}
## [1] "lucrou"
Introdução
Pseudocódigo:
SE condição
ENTÃO INÍCIO
comando1
comando2
FIM
SENÃO INÍCIO
comando3
comando4
FIM
Introdução
No R:
## Calculo do retorno
preco_t1 <- 100
preco_t2 <- 110
print(retorno)
## [1] 0.1
if (retorno >0){
print("lucrou")
}else{
if(retorno < 0){
print("perdeu")
}else{
print("manteve")
}
}
## [1] "lucrou"
Introdução
Pseudocódigo:
No R:
## Calculando retornos
precos <- c(100, 110, 90, 105)
retornos <- c()
for(i in 1:length(precos)){
retornos[i] <- (precos[i] - precos[1])/precos[1]
}
print(retornos)
## Calculando retornos
precos <- c(100, 110, 90, 105)
retornos <- c()
for(i in 1:length(precos)){
retornos[i] <- (precos[i] - precos[i - 1])/precos[i - 1]
}
print(retornos)
Observe que estamos sempre pegando o retorno de um dia (i) menos o retorno do dia
anterior (i - 1), dessa forma quando i for 1 não teremos o retorno pois não temos o
retorno antes do primeiro! Sendo assim o primeiro retorno é NA, e isso faz todo
sentido.
Aqui 1:length(precos) está criando um vetor que vai de 1 até 4 (o tamanho de precos),
então o código aqui vai “trocar” todos os i’s que estão entre as chaves PARA cada
item DENTRO (in) do vetor 1:length(precos), sendo assim ele vai fazer esse passo de
substituição 4 vezes, isto é, em quatro iterações.
Introdução
Vamos ver o passo a passo que a máquina está fazendo por trás, realizando o cálculo
manualmente:
## Calculando retornos
precos <- c(100, 110, 90, 105)
retornos <- c()
print(retornos)
Imagine fazer isso para quatro anos de precos? se você fizesse manual como fizemos
acima seria muito trabalhoso, precisando de 756 contas! Com o for isso fica muito
mais fácil.
Introdução
Vetor em algoritmos
Pseudocódigo:
No R:
for(i in 1:length(precos)){
retornos[i] <- (precos[i] - precos[1])/precos[1]
}
return(retornos)
}
## Usando a funcao:
precos <- c(100, 110, 90, 105)
retornos <- calcRet(precos)
print(retornos)
library(quantmod)
## Warning: ^BVSP contains missing values. Some functions will not work if
## objects contain missing values in the middle of the series. Consider using
## na.omit(), na.approx(), na.fill(), etc to remove or replace them.
sum(is.na(prices))
## [1] 8
Introdução
library(Amelia)
Missingness Map
2974
2959
2944
2929
2914
2899
2884
2869
2854
2839
2824
2809
2794
2779
2764
2749
2734
2719
2704
2689
2674
2659
2644
2629
2614
2599
2584
2569
2554
2539
2524
2509
2494
2479
2464
2449
2434
2419
2404
2389
2374
2359
2344
2329
2314
2299
2284
2269
2254
2239
2224
2209
2194
2179
2164
2149
2134
2119
2104
2089
2074
2059
2044
2029
2014
1999
1984
1969
1954
1939
1924
1909
1894
1879
1864
1849
1834
1819
1804
1789
1774
1759
1744
1729
1714
1699
1684
1669
1654
1639
1624
1609
1594
1579
1564
1549
1534
1519
1504
1489
1474
1459
1444
1429
1414
1399
1384
1369
1354
1339
1324
1309
1294
Missing (0%)
1279
1264
1249
1234
1219
1204
1189
1174
1159
Observed (100%)
1144
1129
1114
1099
1084
1069
1054
1039
1024
1009
994
979
964
949
934
919
904
889
874
859
844
829
814
799
784
769
754
739
724
709
694
679
664
649
634
619
604
589
574
559
544
529
514
499
484
469
454
439
424
409
394
379
364
349
334
319
304
289
274
259
244
229
214
199
184
169
154
139
124
109
94
79
64
49
34
19
4
^BVSP
Introdução
prices <- na.omit(prices) #edit# usar omit, locf ou o que? deixar que seja uma e
plot(prices)
80000 80000
70000 70000
60000 60000
50000 50000
40000 40000
30000 30000
Jan 02 2007 Jan 02 2009 Jan 03 2011 Jan 02 2013 Jan 02 2015 Jan 02 2017 Dec 28 2018