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 regional da inflação com dados do IBGE usando Python

Os dados desagregados do IPCA fornecem informações detalhadas sobre o comportamento de preços no Brasil a nível de região metropolitana e município, possibilitando ricas análises regionais de dados. Neste artigo mostramos como acessar, processar e analisar estes dados utilizando o Python.

Como coletar dados do Banco Central do Chile usando a API com o Python?

Neste artigo mostramos como pesquisar e como coletar os dados do portal do Banco Central do Chile através do sistema de API usando a linguagem Python. Este processo permite automatizar rotinas de extração de dados, eliminando trabalho manual e repetitivo de atualização de bases de dados econômicos.

Como analisar a relação de risco-retorno de ações?

O que é retorno? O que é o risco? Como exatamente os definimos e como podemos avaliar os ativos com base nessas medidas? Neste artigo, apresentamos uma introdução concisa à análise e gestão de ativos financeiros, destacando a eficácia do Python na coleta, tratamento e análise de dados financeiros. Exploraremos como utilizar a linguagem para avaliar o risco-retorno de ações.

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.