Cointegração e Pair Trading no Python

Pair Trading é uma estratégia de trading amplamente conhecida, 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 é através do teste de cointegração, de forma que se possa obter uma relação entre os pares, no caso ações de empresas listadas na bolsa. Neste post de hoje, ensinaremos a como realizar esse procedimento utilizando o Python.

Para utilizar o Pair Trading, devemos encontrar ativos que se relacionam de alguma forma, afinal, se eles possuem uma forte relação (principalmente estatística), qualquer desvio da diferença de seus preços pode ser considerada uma anomalia, possibilitando um ganho, 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, entretanto, um amplamente conhecido é a utilização do Teste de Cointegração para saber se as ações possuem uma forte relação estatística.

A partir dessa relação, podemos criar um modelo de regressão linear, que possibilite expressar a estimativa do preço de uma ação a partir de sua relação com outra ação. A diferença do resultado da estimativa de um ativo com o preço do outro resultará no spread (o desvio entre o preço das duas ações). Para construir os sinais de compra e venda, transformamos os desvios (spread) em um Escore Z, de forma que possamos mensurá-los em distâncias de desvio padrão.

Abaixo, mostramos o passo a passo deste método, utilizando os preços das ações JOPA3 e MDIA, no período entre janeiro de 2021 e janeiro de 2022. Deve-se salientar que a tarefa de encontrar ativos que possuem uma relação de cointegração não é algo fácil, sendo necessário uma investigação profunda de ativos que façam parte de setores iguais e tenham uma estrutura similar. Outro ponto a se observar é a amostra do tempo, que por vezes, pode não ser significativa em períodos diferentes, mesmo que com os mesmo ativos.

O primeiro passo será capturar os preços de fechamentos das empresas JOPA3 e MDIA3 durante o período citado.

Visualizamos a relação entre os dois ativos durante o período.

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

Com a confirmação da cointegração entre as duas ações, podemos modelar os spreads entre as duas variáveis de forma que possamos criar os sinais de comprar 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 MDIA3 em relação ao preço do JOPA3, 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.

Por fim, criamos os sinais através do ratio entre as duas ações transformados em z score com os limites de desvio padrão para entrar comprado ou vendido nas ações.  Com efeito, construímos uma simulação de investimento com um capital de 1000 para cada ação e visualizamos o resultado da estratégia durante o período.


__________________________________________________

Quer saber mais?

Veja nossos cursos da trilha de Finanças Quantitativas.

_________________________________________________

Referências

QuantRocket, Introduction to Pairs Trading

Sabir Jana, Statistical Arbitrage with Pairs Trading and Backtesting

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Criando operações SQL com IA Generativa no R com querychat

No universo da análise de dados, a velocidade para obter respostas é um diferencial competitivo. Frequentemente, uma simples pergunta de negócio — “Qual foi nosso produto mais vendido no último trimestre na região Nordeste?” — inicia um processo que envolve abrir o RStudio, escrever código dplyr ou SQL, executar e, finalmente, obter a resposta. E se pudéssemos simplesmente perguntar isso aos nossos dados em português, diretamente no nosso dashboard Shiny?

Dashboard Financeiro com IA e Shiny Python: Análise de Dados Abertos da CVM

Este artigo apresenta um tutorial completo sobre como construir uma ferramenta de análise financeira de ponta. Utilizando Shiny for Python, demonstramos a automação da coleta de dados das Demonstrações Financeiras Padronizadas (DFP) da CVM e o tratamento dessas informações com Pandas. O ponto alto do projeto é a integração da IA Generativa do Google Gemini, que atua como um assistente de análise, interpretando os dados filtrados pelo usuário e fornecendo insights contábeis e financeiros em tempo real. O resultado é um dashboard dinâmico que democratiza a análise de dados complexos e acelera a tomada de decisão.

Econometria, ML ou IA para previsão da PMS?

Prever a Pesquisa Mensal de Serviços (PMS/IBGE) é um desafio por natureza: trata-se de uma série mensal, sujeita a volatilidade e choques que vão de fatores sazonais a mudanças estruturais no setor. Para enfrentar esse problema, realizamos um exercício de comparação entre três abordagens de modelagem: econometria tradicional (ARIMA), machine learning (XGBoost) e inteligência artificial (TimeGPT).

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

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.