Long-Short através de Cointegração – Parte 3

Este post é parte de uma série sobre como fazer operações de arbitragem estatística (long-short) através da técnica de cointegração. No primeiro post da série, introduzi intuitivamente o conceito de cointegração, que permite encontrar pares (ou outras combinações) de ativos que “andam juntos”. No segundo post, expliquei conceitualmente um teste simples de estacionariedade, conhecido como teste de Dickey-Fuller (DF), apresentei sua versão “aumentada”, e introduzi o Método de Engle-Granger, que permite testar se duas séries não-estacionárias são cointegradas.

Neste post, darei um exemplo prático da aplicação deste teste utilizando o Excel. É necessário ter o pacote de Análise de Dados instalado.

Relembrando, o processo para testar se duas séries são cointegradas consiste em primeiro testar se elas são não-estacionárias. Caso ambas sejam, é feita uma regressão entre as séries de preços, e utiliza-se o teste DF (ou o teste DF Aumentado) para testar a estacionariedade dos resíduos. Se os resíduos forem estacionários, a série é cointegrada.

Escolhi as ações QUAL3 (QualiCorp SA, uma empresa do ramo de seguro-saúde) e RENT3 (Localiza Rent a Car SA, uma locadora de automóveis) para o exercício. Os dados compreendem o período entre outubro de 2012 e outubro de 2014. Estas duas ações são cointegradas ao nível de 1% de significância neste período, o que é um tanto contra-intuitivo, considerando que são de setores totalmente diferentes. Todos os cálculos mencionados estão demonstrados e explicados na planilha que acompanha o post, disponível no link abaixo:

Download-Button_1700x1000_zpsce011000

 

 

Ressalto que esta escolha foi arbitrária e ilustrativa, e não quer dizer que seja possível operar este par de maneira lucrativa.

Comecemos por analisar as séries de preços das duas ações. Conforme podemos ver no gráfico abaixo, os preços das duas ações parecem se comportar, à primeira vista, de maneira similar:

Precos QUAL3 RENT3

 

Passo 1 – Testar se cada série é não-estacionária

Vamos começar. O primeiro passo é testar se cada uma das séries é não-estacionária, aplicando o teste DF em cada série de preços. A hipótese nula do teste DF é que a série é não-estacionária, portanto neste primeiro teste queremos que a hipótese nula não seja rejeitada.

Para aplicar o teste DF, precisamos primeiro calcular os valores defasados (lags) de cada série e o delta (diferença entre o preço do dia e o preço do dia anterior), e após isto fazer regressão do delta no lag. Por exemplo, para QUAL3 esta regressão seria:

\Delta P_t^{QUAL3}= a + b P_{t-1}^{QUAL3} + e_t^{QUAL3}

onde P_t^{QUAL3} representa o preço de QUAL3 no dia t e \Delta P_t^{QUAL3} = P_t^{QUAL3} - P_{t-1}^{QUAL3} é o delta do preço de QUAL3.

Ao estimar esta regressão (aba “Teste Estac. QUAL3”), obtemos a seguinte equação:

\Delta P_t^{QUAL3}= 21.37 -0.45 \times P_{t-1}^{QUAL3}

e o valor da estatística t para o coeficiente b é -1.29. O valor crítico do teste DF (ver tabela no segundo post da série) é de -2.87. Portanto concluímos com base no teste DF que a série é não-estacionária (não rejeitamos a hipótese nula pois a estatística do teste é menor do que o valor crítico).

O teste para RENT3 chega à mesma conclusão (ver aba “Teste Estac. RENT3”). Podemos então seguir para o próximo passo.

Passo 2 – Aplicar Metodologia de Engle-Granger

No segundo passo temos duas etapas: primeiro estimaremos uma regressão dos preços de QUAL3 em RENT3 e salvaremos os resíduos desta regressão. A seguir, aplicaremos o teste DF nestes resíduos. Neste teste queremos que a hipótese nula de não-estacionariedade seja rejeitada, o que implicará que uma combinação linear dos preços das ações é estacionária e portanto elas são cointegradas.

Estes passos estão detalhados na aba “Regressão Engle-Granger”. Primeiramente é feita a regressão dos preços de QUAL3 em RENT3:

P_t^{QUAL3}=\alpha P_t^{RENT3}+u_t

Os resíduos \hat{u}_t (também chamados de spread do par) são salvos para a segunda etapa, que consiste em estimar a regressão:

\Delta u_t=a +b u_{t-1}+v_t

A estimação desta segunda regressão resulta em uma estatística t de -4.60 para o coeficiente b. Como o valor crítico é -2.87 a 5% de significância, e -3.44 a 1% de significância, podemos rejeitar a hipótese nula de não-estacionariedade ao nível de 1% de significância, concluindo portanto que as duas séries são cointegradas.

O teste de cointegração em si está concluído, porém isto não implica que o par possa ser operado com sucesso. Para isto é necessário avaliar se o comportamento do spread é adequado e realizar algum tipo de simulação (backtest). Idealmente queremos que o spread apresente o seguinte comportamento:

  • Relação de cointegração estável ao longo do tempo
  • Reversão frequente do spread à média
  • Variabilidade razoavelmente grande nas divergências

Com relação ao primeiro ponto, podemos nos questionar se a relação de cointegração entre duas ações de setores tão diferentes será estável ao longo do tempo; pode ser que seja um resultado espúrio, afinal estamos falando de um teste estatístico que possui uma probabilidade de erro. É importante ressaltar que relações de cointegração podem “quebrar” a qualquer momento. Um resultado positivo em um teste de cointegração é um indício de que o par pode ser operável, mas não garante resultado futuro. É preciso reavaliar periodicamente a relação de cointegração para detectar possíveis mudanças no comportamento das séries.

O gráfico abaixo apresenta a evolução do spread ao longo do tempo, com duas bandas representando -2 e 2 vezes o desvio padrão dos resíduos. Vemos que, apesar de os resíduos apresentarem certa persistência, comportam-se de maneira aparentemente desejável: flutuam razoavelmente ao redor da média, visitando-a com certa frequência. Uma regra possível de operação consistiria em vender o par quando o resíduo estiver acima da banda, e comprar o par quando estiver abaixo da banda. O trade pode ser encerrado quando o par voltar a média ou a um percentual qualquer da média. A simulação do resultado deste tipo de estratégia pode ser feita de maneira muito similar à que introduzi neste post.

spread

 

Automatização

Conforme o leitor deve ter percebido, o processo de teste de cointegração de 1 par utilizando o Excel é complicado e possui vários passos. Na prática, um modelo para operar pares precisa avaliar milhares de combinações possíveis e torna-se inviável ou pouco prático fazer isto no Excel. O número de pares possíveis com N ações é N(N-1)/2, ou seja, com 100 ações (uma estimativa razoável do número de ações líquidas no mercado brasileiro) temos 4950 pares possíveis. Neste caso é recomendável utilizar alguma plataforma matemática como o R ou o Matlab. No R pode-se utilizar por exemplo o pacote tseries, que possui a função adf.test para fazer o teste DF. No Matlab há o toolbox de Econometria, que possui a função similar adftest.

No próximo post, falarei em linhas gerais sobre como montar um modelo geral para operar pares cointegrados, e potencialmente dar alguns exemplos em Matlab.

Anúncios

40 comentários sobre “Long-Short através de Cointegração – Parte 3

  1. Dr. Nickel,

    Excelente os seus textos. São realmente muito didáticos

    No final do seu texto você citou o MATLAB e o R para analizar vários pares ao mesmo tempo. Seria possível fazer isso utilizando o Eviews? (eu tenho um pouco mais de prática nele)

    Muito obrigado!

    Deco

    • Oi Deco, com certeza o EViews faz teste de cointegração. Só não sei se é tão eficiente para testar múltiplos pares como R ou Matlab. Abs

  2. Dr. Nickel,

    No artigo anterior você falou sobre o “modelo relacional linear” usado na cointegração que é:

    Spread (a,b) = Pa – alfa*Pb

    Tomando como base a sua planilha, qual seria o valor do “alfa”? Seria o coeficiete -0,4952 (da aba “Regressão Engle-Granger”, cell M22?

    Abraço,

    Deco

    • Na equação que coloquei no post não incluí a constante (intercept), mas rodei a regressão com a constante. Na realidade é preciso utilizar um outro valor crítico, mas não creio que faria diferença neste caso. abs

  3. Dr. Nickel,

    Primeiramente gostaria de parabenizá-lo pelo blog. Sou estudante de engenharia da UNICAMP e posso dizer que é difícil encontrar um blog sobre mercado financeiro com essa qualidade.

    Eu rodei alguns testes no MATLAB utilizando a função egcitest e, de fato, os valores críticos para esse teste são diferentes dos utilizados no Dickey-Fuller. Eu gostaria de saber qual é a consequência dessa diferença. Devo realizar o adftest nos resíduos e utilizar os valores críticos desse teste ou é mais confiável utilizar os do egcitest?

    Agradeço desde já!

    • Oi Renan, obrigado pelo elogio!

      Nunca utilizei a função ecgitest, portanto não sei direito como ela funciona, mas provavelmente ela utiliza o a função adftest. Conceitualmente, é preciso determinar o número de lags adequado para que os resíduos da regressão tenham comportamento de ruído branco. O número de lags, por sua vez, altera o valor crítico do teste ADF. Talvez a função possua um algoritmo para fazer isto automaticamente. Mas imagino que não deveria fazer diferença você testar usando a ecgitest, ou rodar a regressão e depois aplicar a adftest nos resíduos, desde que o número de lags seja adequado.

      Abs!

  4. Boa tarde.

    Você comentou no final deste artigo que explicaria “como montar um modelo geral para operar pares cointegrados”, porém não estou encontrando o artigo.

    Poderia me indicar o link por favor?

    Abraços,

      • Boa tarde vocês possuem alguma planilha para o controle de operações long-short ? Eu não estou falando da planilha para montar a operação, mas sim para fazer o controle dos ganhos, perdas, taxas e etc… pois eu não encontrei nenhuma planilha que suportasse venda a descoberto com aluguel de ações.

      • Tem uma planilha em um dos post de operações com pares que tem a lógica de cálculo de custos operacionais. Abs

  5. Dr. Nickel, boa tarde.

    Fazendo todos os testes e chegando-se e conclusão de que o par é cointegrado e em dado momento o modelo indicar compra (ou venda) do par, a qual razão esta compra/venda deveria ser feito? Para cada ação comprada, vendo 1 outra ação do par? Montar uma estratégia que o financeiro seja 0? Como saber a quantidade ideal de cada ação comprar e vender?

    Abraços,

    • Existem duas estratégias principais: usar o mesmo financeiro, ou comprar/vender R$1 para cada “beta” da ação no modelo de regressão. Na minha experiência, melhor fazer financeiro igual.

      • Você acha melhor fazer por cash neutral do que por cointegraçao?
        Eu não encontrei a planilha para controle de operações.

      • Não entendi sua pergunta. No modelo por cointegração você pode fazer cash neutral ou por quantidade (quantidade 1 pata beta de cada papel).

      • Importante fazer o backtest e ver se vc está confortável com o risco. Outra coisa para levar em consideração é que tanto no cash neutral como no por quantidade e beta, o mais realista é arredondar as quantidades para o lote da ação. Abs

  6. Amigo por cash neutral eu ia stopar no terceiro desvio padrão, mas eu penso até em só stopar somente se descointegrar antes do gain, o gain é quando o residuo volta pra zero, e sobre a quantidade de ação eu ia te perguntar isso, quase nunca bate o lote completo, sempre fica quebrado (venda 500 x 270 Compra) o correto seria operar com no minimo quantos ações de diferença para o lote completo ? pq eu não quero operar no fracionario.

    • Existem várias opções para stop loss: por tempo (por exemplo, x dias sem fechar o spread), por divergência (o seu exemplo quando o par diverge muito mais do que na abertura do trade, apesar de eu achar que 3 desvios praticamente nunca vai bater), quando perde a relação de cointegração ou combinação desses critérios. Minha sugestão é fazer um backtest e comparar diversas opções. Com relação ao lote, o impacto de arredondar é inversamente proporcional ao capital usado na estratégia. Com capital baixo, 100 ações farão uma grande diferença. Mas operar no fracionário nesse tipo de estratégia é inviável.

  7. Dr. Nickel, bom dia.

    Qual o tamanho da amostra que você considera ideal para analisar o par?

    E de quanto em quanto tempo seria ideal reavaliar esta correlação?

    • Eu acho que dois anos é um horizonte bom com dados diários. Menos que isto e a relação pode ser instável; muito mais que isso você começa a capturar relações de muito longo prazo e fica difícil montar estratégias lucrativas. Não entendi a segunda pergunta, este modelo não utiliza correlação.

      • Desculpa. Realmente perguntei errado. Na verdade queria pergunta a cada quanto tempo devo reavaliar a cointegração do modelo?
        Era pra sair cointegração mas digitei correlação rsrs.
        Mensalmente?

      • Isto também é potencialmente um parâmetro do modelo. Uma ideia: fazer diariamente e avaliar a estabilidade da relação ao longo do tempo.

      • Olá desculpe eu quis dizer 2 desvios e não 3 desvios, ex: tem o grau de liberdade e o resíduo tem que voltar pra média que é zero, ai tem um desvio acima da média e um desvio abaixo da média, se a operação for de venda da variável dependente o resíduo deve está no desvio padrão acima do resíduo o stop seria no desvio padrão acima desse desvio padrão, ou seja no segundo, você acha que pode dar muito stop essa estratégia ? Ou o correto seria esperar o resíduo voltar a media e se não voltar só zerar se descointegrar ?

      • Veja, os pontos de entrada e saída também são parâmetros do modelo. Se você colocar o ponto de entrada muito próximo da média, o modelo dará muitos sinais de entrada e os trades (pelo menos os iniciais) tenderão a perder dinheiro inicialmente até o par começar a convergir. Se o valor for muito alto, o modelo abrirá poucos trades. É preciso fazer um backtest para verificar o comportamento do modelo para diversos valores. Eu acho que valores razoáveis são: perto de 2 desvios para abrir o trade e entre 0 e 1 desvio para fechar (ou seja não precisa fechar quando cruzar a média, pode ser um valor próximo da média). Eu não colocaria stop loss no spread, eu colocaria no p&l do trade ou no número de dias que o trade está aberto. A razão é simples: o par pode não divergir muito em termos de spread, mas por não convergir, o tempo está contra você. Quanto mais demorar para convergir, maior o custo de aluguel e menor a chance de o trade ser lucrativo. Espero que ajude!

  8. Blza é pq a planilha veio configurada com a entrada no desvio padrão e o gain no tempo da meia vida(geralmente 16 dias) que deveria voltar pra media e o stop no segundo desvio padrão, quer dizer que você entra quando está no meu stop ou seja no segundo desvio padrão e zera na minha entrada no primeiro desvio padrão ? Eu achava que quanto mais proximo do terceiro desvio padrão, maior chance de se descointegrar.

    • De qual planilha você está falando? Como eu comentei, estes pontos de entrada/saída/stop são parâmetros do modelo. O fato de o spread estar fora de uma banda com um certo número de desvios padrões não necessariamente significa que a relação de cointegração quebrou. Abs

      • Eu uso a planilha de cointegraçao do Sérgio Ferro, eu vou testar os parâmetros com a entrada no segundo desvio padrão, mas ela veio configurada com entrada no primeiro desvio padrão e saída no segundo desvio padrão, minha dúvida é de essa entrada é segura ou gera muito stop.

      • Não conheço esta planilha. O ponto é que se o par for cointegrado, um spread acima ou abaixo de 2 desvios não significa que a cointegração deixou de existir. Se forem observados vários valores seguidos, é uma possibilidade. Ou seja, definir o stop como função do número de desvios não é a única possibilidade. É preciso testar diversas regras e ver o que faz mais sentido e funciona melhor.

      • Estava assistindo a un video do Sérgio Ferro onde ele apresenta esta planilha que o Júlio comentou. E nela, ele mostra o tempo esperado para o par retornar a média, o que ele chama de “meia vida”.
        Como faria o calculo desta meia vida? Ou seja, como calcular o prazo esperado para o par atingir a média novamente?

      • Gleiverson, a meia-vida é o tempo médio que um processo estocástico leva para retornar metade do caminho até a sua média. O seu cálculo depende do processo estocástico assumido. O processo estocástico mais simples comumente assumido para um processo estacionário (que reverte à média) é o processo Ornstein-Uhlenbeck (veja Wikipedia). Este processo tem um parâmetro que pode ser estimado com os valores da série temporal, que é a velocidade de reversão à média (vamos chamá-lo de alfa). A meia-vida deste processo é ln(2)/alfa.

        A série ideal para trade de reversão à média é uma com média/alta volatilidade e alta velocidade de reversão à média. Isto significa que a série dará várias oportunidades de operar, com lucros potenciais altos, e com alta chance de convergir rapidamente.

        O que algumas pessoas fazem é calcular empiricamente uma medida de meia-vida. Entretanto, o correto é utilizar o modelo assumido e calcular a meia-vida daquele processo.

  9. Dr. Nickel, boa tarde.

    O fato do Beta do par ser negativo, modifica a análie em algo?

    Pergunto isto, pois rodei uma série com EMBR3 e CCRO3 (EMBR3 como variável dependente), o que deu um beta de -2,37 e o teste Teste Dickey-Fuller -4,13. Usei dados de 03/11/2015 a 03/11/2016.
    Quando inverti a série e coloquei CCRO3 como variável dependente, o novo beta do par foi -0,37 e o Teste Dickey-Fuller -4,23.

    Acontece que em ambos os casos, o gráfico do resíduo foi praticamente o mesmo, quando na verdade, esperava que o gráfico fosse inverter. Por exemplo, em ambos os casos, o gráfico dos resíduos mostrava uma oportunidade de compra do par em 6/4/16 e com retorno a média em 19/4/16. Acontece que se tivesse feito esta operação, teria terminado no prejuízo no caso em que EMBR3 era a variável dependente (beta -2,37).

    Enfim, quando o beta do par for negativo, devo analisar o gráfico dos resíduos de maneira “inversa”?

    Não sei se consegui ser claro, talvez mandando os dados e gráficos fique mais fácil de explicar. Se tiver algum email em que possa lhe mandar os dados, você entenderá melhor o que quero dizer.

    • Oi Gleiverson,

      Um dos problemas com o método de cointegração é que a ordem das variáveis importa. O seu exemplo ilustra isto, a regressão de CCRO em EMBR é diferente da de EMBR em CCRO.

      O fato de o beta ser negativo tem implicações caso você esteja operando beta-neutro. Neste caso é possível uma situação em que para comprar o par você acabe tendo que comprar as duas ações, o que é contra-intuitivo para uma operação de par. Se for financeiro-neutro, não existe este problema.

      Um último ponto é que cointegração não é garantia de que o para será lucrativo. Todo par terá operações negativas.

      Abs

      • Realmente agora fez muito mais sentido para o caso de operar beta neutro.
        Vendendo (ou comprando) ambas as ações na proporção do Beta, o resultado foi positivo quando o beta é negativo.

  10. Dr. Nickelodeon, bom dia.

    A análise comparativa das estatística t para o coeficiente b, com o valor crítico de significância deve ser sempre feito em módulo?

    Por exemplo, dado que rodei uma regressão e a estatística t para o coeficiente b encontrada foi de +0.5.
    Este valor é maior que o valor crítico para de 1% de significância, porém quando ambos são analisados em módulo, o valor encontrado fica menor que o valor crítico de significância.
    Enfim, neste caso, a análise deve ser feita em módulo?

  11. Dr, boa tarde.

    Mesmo que o teste de cointegraçao aplicado seja o teste de Johansen, ainda assim ele deverá ser aplicado sobre os resíduos ou nesse caso seria aplicado diretamente sobre o par?

  12. Olá Dr. Nickel, por que na planilha vc faz o lag do residuo e depois o delta? Não entendi pq vc faz a regressão do Lag pelo Delta. Obrigado

    • Oi Guilherme, desculpe a demora. 1o passo: teste Dickey-Fuller em cada série para verificar se são não-estacionárias. Neste teste, fazemos a regressão do delta da série pelo lag da série. A intuição vem do modelo autoregressivo de ordem 1 (ver post 2 da série). Se as duas séries são não-estacionárias, podemos testar se são cointegradas. Este é o teste de Engle-Granger. Rodamos a regressão de uma série na outra, e aplicamos o teste DF nos resíduos desta regressão. A intuição é que, se as séries são cointegradas, o resíduo da regressão de Engle-Granger é estacionário.

      Espero que ajude, abs!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s