Cointegração e Pairs Trading de ações no Python

O que é Pair Trading?

Pair Trading é uma estratégia de trading que utiliza métodos estatísticos para obter pares de ativos que sejam neutros em relação ao mercado. Um método para criar a estratégia de pair trading é realizar o teste de cointegração das ações de forma a obter a relação entre os pares.

Para utilizar o Pair Trading, devemos escolher dois ativos possuem relações estatísticas, afinal, se eles possuem uma forte relação, qualquer desvio de preço da relação de um com o outro, pode ser considerada uma anomalia, possibilitando um ganho através deste desvio, seja comprando ou entrando vendido na ação, a depender da situação.

Mas como podemos encontrar ativos que se relacionam e exprimem relações estatísticas entre si? E como podemos criar sinais de forma que possamos saber quando comprar ou vender os ativos? Existem diferentes métodos, mas o principal utilizado consiste no Teste de Cointegração, para saber se as ações possuem uma relação estatística.

Para obter o código e o tutorial deste exercício faça parte do Clube AM e receba toda semana os códigos em R/Python, vídeos, tutoriais e suporte completo para dúvidas.

Aprenda a coletar, processar e analisar dados do mercado financeiro no curso de Python para Investimentos.

Regressão e relações espúrias

Um problema comum do uso do modelo de regressão linear em séries temporais está no fato de que determinadas séries, principalmente econômicas, podem apresentar resultados inconsistentes, devido às suposições do MQO em relação as propriedades estatísticas das variáveis, tais como a média condicional e a variância condicional não oscilem no tempo. Caso haja esse relação, e as séries exibam tendências, é possível o aparecimento do que chama-se de regressão espúria, isto é, variáveis que apesar de possuírem forte relação estatística por meio da regressão linear, só as possuem devido a essa tendência comum.

Vemos abaixo a trajetória de duas ações, PETR3 e PETR4, no período de 28/04/2021 até 27/04/2022 - que possuem a mesma tendência. Será que é uma regressão espúria ou possuem uma relação de fato? Como verificar?

Cointegração

Em termos econômicos, diz-se que se duas variáveis possuem alguma relação de longo prazo se forem cointegradas, então mesmo que as séries contenham tendência (resultando por exemplo em uma regressão espúria), elas irão se comportar de modo semelhante, sendo a diferença entre elas estacionária, isso devido a uma tendência estocástica comum entre ambas.

Para ilustrar, considere, duas séries integradas de ordem 1, Y_t e X_t, e suponha que exista uma relação linear entre elas, dada por Y_t = \beta X_t + \epsilon_{t}. Isso implica no fato de existir algum valor de \beta tal que Y_t - \beta X_t seja integrado de ordem zero, mesmo com as séries originais sendo ambas não estacionárias. Nesses casos, diz-se que as séries são cointegradas e as mesmas compartilham a mesma tendência.

A ideia por trás da cointegração é que variáveis não estacionárias podem possuir uma trajetória temporal interligada, representando que haja uma tendência estocástica entre as séries. Isso possibilita a construção de um modelo que descreve as relações de equilíbrio de longo prazo entre as variáveis.

Com isso, nosso objetivo será encontrar:

1. Ativos que aparentam possuir a mesma tendência, e que aparentam não ser estacionários (isso pode ser checado por testes, mas iremos verificar visualmente);

2. Realizar o Teste de Cointegração de Engle-Granger, verificando se o desvio entre ambas é estacionário;

3. Criar a estratégia de investimento tomando como base o desvio padrão do desvio entre os pares de ativos.

Vamos continuar verificando os dois ativos selecionados acima, PETR3 e PETR4 durante o período citado. Vamos separar a série de preços em duas variáveis diferentes para aplicar o teste de cointegração usando a função coint da biblioteca statsmodels.

Queremos saber se de fato os preços das ações possuem alguma relação, e para isso, utilizamos a função coint() para realizar o Teste de Engle e Granger. No resultado, encontramos um valor abaixo de 5%, o que nos leva a rejeitar a Hipótese Nula de não cointegração.

Código
 Teste p-valor da Cointegração 0.046495901138853275

Com a confirmação da cointegração entre as duas ações, podemos modelar os spreads (desvios) entre as duas variáveis de forma que possamos criar os sinais de compra e venda. Realizamos esse procedimento através de uma regressão linear entre as duas ações. Calculamos o spread pela diferença do preço do PETR4 em relação ao preço do PETR3, ponderado pelo coeficiente encontrado no modelo.

Transformamos esse spread, calculando o z score, de forma que possamos medir as variações em termos de desvio padrão.

Com o spread calculado e transformado, é possível criar estratégias de pair trading. Por exemplo:

  • Long quando o spread estive abaixo de -1.0 - Compra ativo Y (petr4) e Vende X (petr3)
  • Short quando o spread estiver acima de 1.0 - Vende ativo Y (petr4) e Compra X (petr3)
  • Sair da posição quando z-score se aproximar de zero.

Claro que é uma estratégia simples entre dois ativos, e que pode ser melhorada. Além disso, é necessário identificar que a estratégia funciona out-of-sample, isto é, não somente com o período de tempo que temos em mãos da amostra, mas também fora de amostra, caso contrário, se a cointegração não existir no período fora da amostra, então nossa estratégia não funcionará.

Quer aprender mais?

Clique aqui para fazer seu cadastro no Boletim AM e baixar o código que produziu este exercício, além de receber novos exercícios com exemplos reais de análise de dados envolvendo as áreas de Data Science, Econometria, Machine Learning, Macroeconomia Aplicada, Finanças Quantitativas e Políticas Públicas diretamente em seu e-mail.

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Análise do Censo Demográfico com o R

Como podemos analisar dados do Censo Demográfico para produzir pesquisas e implementar políticas públicas? Mostramos nesta postagem o resultado de uma breve análise dos dados preliminares do Censo Demográfico de 2022 usando o R.

Deploy de modelos com Python + Shinylive + GitHub gastando ZERO reais

Colocar modelos em produção pode ser um grande desafio. Lidar com custos monetários, infraestrutura operacional e complexidades de códigos e ferramentas pode acabar matando potenciais projetos. Uma solução que elimina todos estes obstáculos é a recém lançada Shinylive. Neste artigo mostramos um exemplo com um modelo de previsão para o preço do petróleo Brent.

Como automatizar tarefas repetitivas usando Python? Um exemplo para largar o Excel

Manter relatórios diários com dados e análises atualizados é um desafio, pois envolve várias etapas: coleta de dados, tratamento de informações, produção de análises e atualização de relatório. Para superar este desafio algumas ferramentas como Python + Quarto + GitHub podem ser usadas para automatizar tudo que for automatizável. Neste artigo mostramos um exemplo com dados do mercado financeiro.

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.