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

Transfer Learning: mostrando porque o Python está na ponta do desenvolvimento

A aprendizagem por transferência (transfer learning) é o reuso de um modelo pré-treinado em um novo problema. Portanto, sua utilização torna-se um avanço enorme para a previsão de diferentes tipos de variáveis, principalmente para aquelas ordenadas no tempo. Mostramos nesta postagem o uso do Transfer Learning com o Python para o caso de Séries Temporais.

Criando Tabelas com o Python: mostrando o poder da linguagem sobre o Excel

Nos dias atuais, pessoas que trabalham com dados estão constantemente confrontados com um dilema: criar uma tabela não tão genial no Excel ou manter em um formato ainda pior, como um dataframe, mas mantendo a flexibilidade de obtenção dos dados. Podemos resolver esse grande problema, unindo a flexibilidade e beleza ao usar a biblioteca great_tables do Python.

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.

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.