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

Como selecionar variáveis para modelos de previsão no Python?

Em oposição à crença popular, grande parte dos modelos de machine learning não produzem previsões magicamente. É papel do cientista de dados executar uma boa engenharia de variáveis para não cair no clássico problema de “garbage in, garbage out” (GIGO) em aprendizado de máquina. Neste sentido, aprender a fazer uma boa seleção de variáveis é fundamental e neste artigo exploramos algumas possibilidades práticas usando o Python.

Resultado IPCA-15 - Novembro/2024

A Análise Macro apresenta os resultados do IPCA-15 de Novembro de 2024, com gráficos elaborados em Python para coleta, tratamento e visualização de dados. Todo o conteúdo, disponível exclusivamente no Clube AM, foi desenvolvido com base nos métodos ensinados nos cursos da Análise Macro, permitindo aos assinantes acesso aos códigos e replicação das análises.

Resultado PNADc Trimestral - 3° Trimestre/2024

A Análise Macro apresenta os resultados da PNADc Trimestral do 3º trimestre de 2024, com gráficos elaborados em Python para coleta, tratamento e visualização de dados. Todo o conteúdo, disponível exclusivamente no Clube AM, foi desenvolvido com base nos métodos ensinados nos cursos da Análise Macro, permitindo aos assinantes acesso aos códigos e replicação das análises.

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.