Python

Utilização do Modelo GARCH(1,1) na Previsão de Volatilidade

Utilização do Modelo GARCH(1,1) na Previsão de Volatilidade

O objetivo deste artigo é trazer um entendimento sobre o que se trata o modelo GARCH e apresentar uma aplicação em python deste modelo para a previsão de volatilidade. Vamos começar compreendendo como o modelo surgiu e como se destaca em comparação às outras formas de estimar a volatilidade. Em seguida, vamos explicar as propriedades do modelo GARCH(1,1) que será utilizado em nossa aplicação. Por fim, iremos demonstrar como montar a aplicação do modelo em python.

 

A motivação para este artigo foi a relevância que a volatilidade possui atualmente para os estudos de previsão de riscos. Um dos momentos de reconhecimento da importância de se mensurar o efeito da volatilidade ao longo do tempo na análise de riscos, ocorreu quando Robert Engle recebeu o Prêmio Nobel de Economia em 2003, por desenvolver um método estatístico para lidar com esta propriedade das séries econômicas. A Academia Real Sueca de Ciências afirmou que:

 

“Os modelos ARCH de Engle se tornaram ferramentas indispensáveis não apenas para pesquisas, mas também para analistas do mercado financeiro, que os utilizam na formação de ativos e na avaliação de risco de portfólio”.

Por que utilizar o Modelo GARCH para modelagem da volatilidade?

Uma mudança na variância ou volatilidade ao longo do tempo pode causar problemas na modelagem de séries temporais com métodos clássicos. Pois, um aspecto de uma série temporal que esses modelos não captam é uma alteração na variância ao longo do tempo, devido ao fato de que nesses modelos as observações recentes receberiam o mesmo peso que observações mais antigas, que claramente podem não possuir o mesmo impacto ao longo do tempo que uma vez tiveram.

 

É por isso que métodos de estimativa de volatilidade evoluíram para modelos que dão mais peso às informações recentes. Desses primeiros modelos se destacam a família de modelos GARCH, inicialmente proposto por Engle (1982), como ARCH, e generalizado por Bollerslev (1986). Esses métodos fornecem uma maneira de modelar uma mudança na variância de uma série temporal dependente do tempo.


A principal diferença entre eles seria o fato de que enquanto o modelo ARCH(q) demonstra que a variância condicional, ou volatilidade, σt2, em um determinado período, depende da magnitude de uma série de retornos ao quadrado (ou erros quadráticos), rt2, em “q” períodos anteriores, o modelo GARCH(p,q) vai além com componente adicional, sendo este a variância condicional em “p” períodos anteriores. A seguir a equação da variância condicional definida pelo modelo ARCH(q):

1

O modelo GARCH (p,q) possui um termo autorregressivo, como em ARCH(q), com a adição de um termo de média móvel. O termo autorregressivo (p) modela a variância condicional dos erros quadráticos ou simplesmente modela a variância condicional da série temporal ao quadrado, já a parte de média móvel (q) modela a variação do processo. A seguir a equação da variância condicional definida pelo modelo GARCH(p,q):

2

Outro motivo relevante para se usar o modelo GARCH, é que ele pode capturar a aglomeração da volatilidade, ou clusters de volatilidade, sofrida por séries financeiras. Os preços dos ativos são caracterizados por esse fenômeno, que se trata de períodos nos quais os preços exibem grandes variações para um longo período seguido por um período de tranquilidade comparativa.

 

Existem hoje muitas variantes do modelo GARCH, a maioria das quais fornece apenas melhorias marginais no modelo original. Entre essas extensões do modelo GARCH, estão o Integrated GARCH, Exponential GARCH ou EGARCH, GJR-GARCH e outras. A família de modelos GARCH é amplamente utilizada na prática para prever a volatilidade e os retornos do mercado financeiro.



O modelo

Para a maioria das séries financeiras, a utilização do modelo GARCH(1,1) já é suficiente para explicar sua volatilidade, desta forma, para a aplicação que será demonstrada mais a frente, utilizaremos este modelo. Para explicar o modelo, inicialmente consideramos rt como uma série de retornos, partindo disso o modelo GARCH(1.1) é definido como:

3

A equação acima demonstra que o modelo contém um termo defasado de retorno ao quadrado, rt-12, como em ARCH(1), mas também um termo defasado da variação condicional, σt-12, para determinar a variação condicional no período t, σt2.


O termo alfa, α, indica quanto o último retorno observado tem de influência sobre a variância condicional hoje, já o termo beta, β, indica quanto a volatilidade do período anterior deve influenciar a volatilidade hoje. Quanto maior o alfa maior o impacto imediato de choques nos dados da série temporal e quanto maior o beta maior a duração do impacto. Para a estimação dos parâmetros, é utilizado o método de máxima verossimilhança.

 

Uma propriedade este modelo é que todos os parâmetros não são negativos, ω, α, β ≥ 0. Para que o modelo seja estacionário, a soma dos parâmetros alfa e beta deve ser menor que um,  α + β < 1.

Ômega, ω, pode ser a visto como seria a variação se as informações sobre variações passadas não estivessem sendo passadas para o modelo. Ômega também é definido como o produto de um termo gama, γ, e da variância incondicional ou variância de longo prazo, σLR. Enquanto ômega, alfa e beta são os parâmetros de volatilidade do modelo, gama pode ser chamado de parâmetro de assimetria do modelo.

4

A equação acima nos mostra que, para existir a variância incondicional de rt2é necessário que α + β < 1, justificando a restrição de estacionariedade do modelo. É utilizada a expressão a seguir para se estimar um valor para a variância condicional em um período t+i, em outras palavras, está é a fórmula para prever a volatilidade dos próximos períodos.

5

Utilizaremos o log-retorno devido a suas propriedades estatísticas, como a estacionariedade, para calcular os retornos da série temporal.

6

A aplicação em Python

A estimação dos parâmetros e o cálculo para prever a volatilidade serão feitos a seguir, utilizaremos o ambiente do Google Colab e a cotação do dólar será o nosso objeto de estudo.

 

Inicialmente temos que instalar e importar os pacotes que iremos utilizar:

 

 

#Instalação e importação dos pacotes para os buscar os dados e as funções do modelo

!pip install quandl

!pip install arch

import quandl as qdl

from arch import arch_model

 

#Importação de bibliotecas matemáticas e de ciência de dados

import numpy as np

import pandas as pd

 

#Pré definição das configuração dos gráficos

import seaborn as sns

sns.set()

import matplotlib as mpl

mpl.rcParams[‘figure.figsize’] = (155)

 

 

 

Utilizamos o pacote quandl para buscar os dados das cotações do dólar.

 

 

#Definição dos dados

dolar = qdl.get(‘BCB/1’, start_date = ‘2000-01-01’)

 

#Visualização do gráfico das cotações

dolar.rename(columns={“Value”“USD”}, inplace=True)

dolar.plot()

 

 

 

 

#Visualização do gráfico dos retornos

dolar_ret = np.log(dolar/dolar.shift(1)).dropna()

dolar_ret.plot()

 

 


Para esta análise será necessário padronizar os retornos, subtraindo-os de sua média esperada e dividindo pelo seu desvio padrão.

 

 

#Padronização dos retornos

dolar_m = dolar_ret.values.mean()

dolar_dp = dolar_ret.values.std()

dolar_ret_p = (dolar_ret – dolar_m)/dolar_dp

 

 

 

Para estimar um modelo do tipo GARCH, selecionamos a função arch_model do pacote arch instalado anteriormente. A função arch_model pode especificar um modelo GARCH em vez do modelo ARCH se informamos o modelo de volatilidade a ser utilizado, especificando o seguinte argumento da função  vol = ‘GARCH’, assim como os argumentos de defasagem p=1 e q=1 para determinar um modelo GARCH(1,1):

 

 

#Aplicação do Modelo GARCH(1,1) aos dados e vizualização dos resultados

garch_model = arch_model(dolar_ret_p, p=1, q=1, vol=‘GARCH’, dist=‘Normal’)

resultados = garch_model.fit(disp=‘off’)

print(resultados.summary())

 


 

 

#Previsão da volatilidade

resultados_forecast = resultados.forecast(horizon=5)

print(resultados_forecast.variance[-1:])


Cada coluna “h.n” da saída da previsão corresponde a n d períodos a frente, neste caso n dias a frente. A saída é alinhada para que a coluna “Date” represente os dados finais usados para gerar a previsão, de modo que “h.1” na linha “2020-05-29” seja a previsão da volatilidade condicional esperada de um dia à frente, feita usando dados até 29 de meio de 2020.

 

O gráfico hedgehog a seguir mostra os métodos de previsão ao longo do período analisado.
As linhas laranja indicam as previsões em diferentes intervalos de tempo.

 

 

#Visualização do gráfico hedgehog

g_previsões = resultados.hedgehog_plot()




Python Guide for Introductory Econometrics for Finance | Ran Tao & Chris Brooks
Value at Risk: Managing Financial Risk | Philippe Jorion
GARCH Models in Python | Chelsea Yang
Forecast volatility with GARH(1,1) https://youtu.be/oDXw0r0Oqmk
Quandl Data to Python | https://www.quandl.com/tools/python

    


Link para visualizar a programação no Google Colab

https://colab.research.google.com/drive/1cDbLT0vHapiaOqT1ACrTnGfWTqb16xm6?usp=sharing


Posted by Andreza Menezes in Derivativos & Riscos, 4 comments
Algo trading com Quantopian

Algo trading com Quantopian

Abriremos nossas discussões sobre algorithmic trading, ou algo trading para os iniciados, fazendo um review da plataforma mais popular atualmente, o Quantopian.

Da própria definição sobre a plataforma temos que:

O Quantopian é uma empresa de investimentos quantitativos com origem em crowd source. Nós inspiramos pessoas talentosas de todo o mundo a escrever algoritmos de investimento.

O Quantopian fornece capital, educação, dados, um ambiente de pesquisa e uma plataforma de desenvolvimento para autores de algoritmos (quants).

Mas o que isso tudo significa na prática? O Quantopian nasceu com o desejo de encontrar na multidão de pessoas, talentosos quants que pudessem escrever algoritmos de investimentos bons o suficiente para receberem um aporte de capital. Da necessidade de como fazer esta visão tornar-se realidade, o quantopian foi sendo moldado. Talvez a ordem das palavras destacadas no parágrafo anterior devessem constar na forma inversa. A plataforma surgiu como um ambiente de desenvolvimento, agregou um ambiente de pesquisa, fornece dados gratuitos e pagos (premium), edução na forma de tutorias e lectures e por fim, se o seu algoritmo se destacar na competição, eles financiam um fundo quantitativo que roda o seu algo e lhe paga royalties.

Ambiente de desenvolvimento

A chamada IDE (de Interactive Development Environment) é toda baseda na linguagem Python, a mais utilizada1 atualmente para ciência de dados e machine learnig. É na IDE que a implementação e o backtesting de estratégias deve ser feito. Ela registra automaticamente as principais métricas de desempenho e compara sua estratégia com um benchmark. Algoritmos também podem ser simulados usando dados ao vivo, algo conhecido como paper trading. Operar com dinheiro real, live trading não é mais possível no Quantopian. No passado já houve uma integração com uma conhecida corretora americana, mas esta possibilidade não existe mais.

Nesta IDE três métodos estão definidos para serem implementados pelo quant, um deles é obrigatório que são as definições de setup do backtesting que devem constar no método initialize(context). Os métodos opcionais são handle_data(context, data), em geral utilizado em algoritmos minuto-a-minuto e before_trading_start(context, data) muito utilizado em conjunto com algum método de pipeline que baixa e processa o algoritmo de investimento sobre um determinado universo de ativos.

Na figura abaixo podemos ver uma amostra parcial do ambiente de desenvolvimento, com o código a esquerda e alguns resultados de backtesting a direita e logs da simulação logo abaixo.

Ambiente de desenvolvimento - IDE

Ambiente de pesquisa

O módulo de research do quantopian é fundamentado no conceito de notebooks do IPython. De fato, o ambiente é um Jupyter notebook, como toda a sua interatividade disponível. Neste notebook o quant pode programar seus algoritmos e testá-los sem fazer um backtest completo.

Nesta plataforma aberta pode-se carregar todos os dados disponibilizados pela plataforma e explorar novas ideias de investimento. O ambiente de pesquisa é o lugar para fazer hipóteses e análises, “comprar empresas de baixo P/L realmente dá lucro a longo prazo?”, “se eu montar uma estratégia long-short com os fatores de Fama&French, vou ser bem sucedido?”, estes questionamentos devem ser feitos e analisados no ambiente de pesquisa. Neste ambiente se tem acesso a todos os dados, volume, fundamentos corporativos e outros conjuntos de dados, incluindo dados de sentimento entre outros, para os EUA. Para outros países, incluindo o Brasil, existem dados diários de preço e volume e fundamentos, que exploraremos na seção seguinte.

O ambiente de pesquisa também é útil para analisar o desempenho de backtests. Você pode carregar o resultado do backtest de um algoritmo e analisar resultados e comparar com desempenhos de outros algoritmos.

Por ser implementado em Python, ele abre a possibilidade de usar bibliotecas poderosas para analisar dados de séries temporais, como StatsModels para estatística e scikit-learn para machine learning em Python. Estas bibliotecas também estão disponíveis no ambiente de desenvolvimento e seu algoritmo pode fazer uso destas e participar da competição.

Além disso, o Quantopian desenvolveu2 várias ferramentas internas, como o Alphalens – uma nova ferramenta para análise de fatores “alfa”. Aqui deixo o alfa entre parentêses pois a ideia deles é encontrar uma métrica, que chamam de “fator”, que explique os retornos do portfolio. Portanto, no melhor entendimento deste autor, se trata de beta e não de alfa.

Na figura abaixo temos um amostra do ambiente de pesquisa. Pode-se verificar que em muito pouco este difere de um típico Jupyter notebook.

Bases de dados

Certamente o foco da empresa ainda é os EUA. Para aquele mercado a plataforma conta com dados históricos em barras de 1 minuto para ações, ETFs e futuros dos EUA desde 2002 até o último dia completo de negociação.

Os dados históricos de preço ou volume é ajustado para splits, fusões e dividendos na data atual da simulação. Esse ajuste é feito para que o algoritmo possa fazer cálculos corretos usando os valores da janela histórica.

O Quantopian também fornece acesso a dados fundamentalistas e de demonstrações contábeis. Os dados da Morningstar consistem em mais de 600 métricas que medem o desempenho financeiro das empresas. Também estão disponívei dados do vendor Factset. O uso mais comum desses dados é a filtragem para um subconjunto de ativos para uso posterior em um algoritmo.

O banco de dados inclui todas as ações e ETFs negociados desde 2002, mesmo aqueles que não são mais negociados. Isso é muito importante porque ajuda a prevenir o famoso survivorship bias, um dos vilões de “super” algoritmos que funcionam somente no backtesting. Bancos de dados que omitem títulos que não são mais negociados ignoram falências e outros eventos importantes, e levam a um falso otimismo sobre um algoritmo.

Uma lista com todas as bases de dados disponíveis pode ser consultada aqui. Uma interessante opção para aqueles que desejam utilizar a plataforma como meio de pesquisa é a possibilidade de colocar no ambiente o seu próprio conjunto de dados! Mesmo que este conjunto de dados não possa fazer parte de um algoritmo de competição, esta possibilidade é muito interessante para descobrir novas estratégias lucrativas com dados que por ventura não estejam disponíveis no Quantopian, e após esta descoberta, utilizar a plataforma de sua preferência para negociar.

Felizmente, e para alegria geral da nação, nem só de EUA vive o Quantopian. No final de 2018 a plataforma anunciou que passou a suportar, no ambiente de pesquisa, dados de preço/volume e dados fundamentalistas de 26 países. O Brasil está entre eles. Os dados de preços e fundamentos para cada um desses países estão disponíveis desde 2004. Os dados de preços são diários, incluindo as barras do OHLCV (Open-High-Low-Close-Volume). Os dados de fundamentos são do FactSet Fundamentals.

Educação

No quesito educação do investidor a plataforma oferece recursos como um ativo fórum de discussões, tutoriais para aprendizagem inicial e uma série de lectures que são vídeos demonstrando alguns usos mais avançados dos recursos.

No fórum podem ser compartilhados tanto backtests quanto notebooks e a troca de ideias de aloritmos é fomentada. Entretanto, predominam as discussões acerca de implementação dos algos e correção de bugs. Os tutoriais são bastante instrutivos, e recomenda-se iniciar por ali. Apesar de a linguagem de programação ser o conhecido Python, a plataforma faz uso intenso de sua API proprietária. São diversas classes, métodos e atributos que não fazem parte do core ou mesmo das famosas bibliotecas da linguagem e sim, são criações do Quantopian. Como iniciar diretamente pela referência a API é muito difícil e certamente logo afastaria iniciantes da plataforma, a empresa fez bons e simples tutoriais que já permitem ao quant wannabe criar seus primeiros algos, analisá-los através do Alphalens e rodar o backtesting na IDE.

Mas, na opinião deste autor, a verdadeira estrela desta seção são as lectures que podem ser vistas nesta lista. Estas são vídeos, no estilo webinar, e são acompanhadas de seus respectivos notebooks que podem ser clonados e modificados ao gosto do usuário. Os temas abordados são abragentes e relevantes, indo desde introdução ao NumPy e pandas, passando por conceitos importantes como momentos estatísticos e regressão múltipla, indo até assuntos avançados e muito pertinentes para qualquer algo trader como pairs trading, cointegração, análise de componentes principais e filtros de Kalman. São ao todo 56 lectures, material de ótima qualidade.

Conclusão

O Quantopian é uma excelente plataforma para pesquisar e implementar estratégias de negociação. Entre seus pontos fortes destacamos o ambiente de pesquisa, baseado na interatividade dos notebooks, a vasta base de dados, o uso da linguagem Python e os tutoriais e lectures que fornecem um bom suporte para o iniciante. Entre os pontos negativos da plataforma o uso de muitas classes e métodos proprietários, com pouca documentação, soam como uma caixa preta para o usuário e dificultam bastante o aprendizado inicial.

Ainda assim, se você está procurando um lugar para começar, a plataforma é uma das mais completas e sugere-se iniciar pelos tutoriais e então aprofundar seus conhecimentos com a série Lectures.

Em um próximo artigo, o Clube de Finanças implementará um algoritmo de demonstração, explicando o passo-a-passo para realizar a pesquisa e implementar o backtesting na IDE.


  1. Retirado de https://www.kaggle.com/kaggle/kaggle-survey-2017#multipleChoiceResponses.csv 

  2. Desenvolveu e mantém em código aberto boa parte de sua estrutura no repositório: https://github.com/quantopian 

Posted by Rafael F. Bressan in Derivativos & Riscos, 12 comments