Rastrear grandes operações com Python

Por
melver
13/05/2024 09h00Atualizado: 11/09/2024 11h38

Já vimos como encontrar as posições abertas em opções por meio do site da B3. Agora, aprenderemos a rastrear grandes operações com Python. Mas por que Python? Por ser uma das linguagens de mais fácil aprendizado, muitos investidores, fundos de investimentos e estrategistas que usam análise quantitativa (os quants), estão usando Python no mercado financeiro.

Para deixar o código mais simples, vamos dividi-lo em partes menores, que chamamos de funções. Desse modo, nosso código será dividido em quatro funções:

  • Obter opções;
  • Calcular a diferença de posições entre dois dias;
  • Renomear as colunas da tabela;
  • Salvar os dados no Excel.

Veremos cada uma dessas funções a seguir.

Preparando os dados

Primeiro, precisamos baixar os arquivos no site da B3. Você pode fazer isso acessando a área de Dados Públicos na página inicial da própria B3, como você pode ver na imagem abaixo:

Cabeçalho do site da B3

Você entrará na área de divulgação de dados públicos, como mostra a imagem a seguir:

Lista de dados públicos do site da B3

A cada dia útil, a B3 disponibiliza uma lista de arquivos, contendo os mais diversos dados. Para obtermos os dados das operações com opções, precisamos baixar o arquivo Posições em Aberto em Derivativos (Listado) para dois dias consecutivos.

Isso se deve ao fato de a B3 disponibilizar apenas a quantidade acumulada de posições em aberto. Portanto, para sabermos se houve aumento de posições abertas de um dia para o outro, precisamos calcular a diferença entre as posições em aberto dos dois dias.

Por exemplo, suponha que você viu que no dia 24/10/2023, não havia opções em aberto para o código ITUBX183. Como mostra a imagem abaixo

Lista de posições abertas em derivativos

Porém, no dia 25/10/2023, apareceram 1.950.000 quantidades para esta mesma opção.

Lista (Comparação) de posições abertas em derivativos

Se pegarmos a diferença de quantidades do dia 25/10 (1.950.000) para o dia 24/10 (0, pois não havia contrato em aberto), podemos concluir que houve um aumento de 1.950.000 de contratos em aberto de um dia para o outro. Ou seja, podemos concluir que houve negociação com essa opção no dia 25 de outubro.

Porém, fazer isso manualmente todos os dias é inviável. Por isso, vamos recorrer ao nosso bom amigo, Python!

Obter opções

Depois de baixar os dois arquivos, um para cada dia, é hora de usar o Python para abrir os arquivos e deixá-los adequados ao processamento que queremos. Fazemos isso usando uma biblioteca chamada pandas.

Confira o código a seguir:

Código Python para ler arquivo de posições abertas em derivativos

O código parece longo e difícil, mas se olharmos cada linha, veremos que ele é simples.

Primeiro, temos uma função (pedaço de código que faz algo específico, no caso, preparar os dados para processamento). Essa é a linha

def obter_opcoes(arquivo, ticker_i='AAAA', ticker_f='ZZZZ9999'):

As informações ticker_i e ticker_f foram usadas para filtrar apenas códigos (tickers) de opções, pois o arquivo traz informações sobre todos os instrumentos negociados na B3 como contratos futuros, termos e outros.

A linha seguinte

opcoes = pd.read_csv(arquivo,sep=';')

Abre o arquivo e obtém os dados, transformando em uma tabela. A seguir, a linha

colunas = ['TckrSymb','CvrdQty','TtlBlckdPos','UcvrdQty','TtlPos','BrrwrQty','LndrQty']

é onde escolheremos as colunas que queremos usar. Existem muitas outras informações no arquivo e não precisaremos delas.

A próxima linha,

filtro = ((opcoes.TckrSymb >= ticker_i) & (opcoes.TckrSymb <= ticker_f)) \

nós usaremos para eliminar os dados que não queremos (termos, contratos futuros e outros produtos). A barra no final indica que a linha continua.

A próxima linha

df = opcoes[colunas][filtro]

separa da tabela apenas as colunas e os produtos (opções) que queremos, aplicando o filtro que especificamos acima.

Finalmente, a linha

return df.set_index('TckrSymb')

nos entrega a tabela contendo apenas os dados das opções.

Usaremos esses dados nas demais funções a seguir.

Calculando a diferença de posições de um dia para outro 

Uma vez que temos como obter os dados de um dia, poderemos facilmente encontrar a diferença de posições entre dois dias distintos com a função a seguir:

Cálculo da diferença de posições abertas em derivativos

A primeira linha é a definição da função, como já vimos. Para as demais, temos:

df0 = obter_opcoes(inicio)

df1 = obter_opcoes(fim)

Cada linha obtém os dados dos produtos para dois dias distintos. A próxima linha calcula a diferença de posições entre os dois dias:

df = df1.sub(df0, axis=1, fill_value=0)

Finalmente, a linha

return df[(abs(df.UcvrdQty) > delta) | (abs(df.CvrdQty) > delta) | (abs(df.TtlBlckdPos) > delta)]

filtra os dados para nos informar apenas as posições que tiveram uma variação maior que delta. É exatamente com o uso desse filtro que Python nos ajudará a rastrear as grandes operações.

Agora, já temos o que precisamos. Faremos apenas alguns ajustes.

Renomeando as colunas da tabela

A tabela que obtemos acima tem nomes pouco amigáveis. Portanto, usaremos a função a seguir:

Renomear colunas de um dataframe no Python

para alterar os nomes das colunas. O objetivo é, simplesmente, dar nomes mais significativos e facilitar a leitura.

Estamos quase prontos para finalizar o processamento. Faltam apenas mais dois passos, uma função para salvar os nossos dados no Excel e as instruções para usar as funções que criamos.

Salvando tudo no Excel

Uma vez que tenhamos obtido os dados e filtrado apenas o que desejamos, precisamos salvar tudo no Excel. A função abaixo faz isso para nós.

Salvar um dataframe pandas no Excel

Observe que usamos a biblioteca ExcelWriter para podermos gravar os dados em um arquivo do Excel.

Finalmente, poderemos usar nossas funções.

Juntando tudo

Uma vez que nossas funções estejam todas definidas, poderemos usá-las de forma simples. Basta usarmos as linhas abaixo:

Usando funções python para obter operações

Na primeira e na segunda linha, informamos os nomes dos arquivos de dados. Note que renomeamos os arquivos que vieram da bolsa para nomes mais significativos.

inicio = 'PosicoesAbertas_20231004.csv'

fim    = 'PosicoesAbertas_20231005.csv'

Na terceira linha, definimos o tamanho mínimo da variação das posições de um dia para o outro. Nesse caso, 500.000 contratos de opções.

delta = 500000

Isso permite o Python filtrar e rastrear apenas as grandes operações de opções.

Nas duas linhas seguintes, usamos as funções para obtermos os dados já com os devidos filtros:

df1 = delta_opcoes(inicio, fim, delta)

df = renomear_colunas(df1)

Finalmente, usamos a linha

gravar_excel(df, 'VariacaoNasPosicoes.xlsx')

para salvar os dados no Excel.

Entendendo o resultado 

O arquivo do Excel terá o seguinte formato:

Lista de operações em opções no Excel

Explicaremos agora, cada uma das colunas Coberto, Descoberto, Travado e Total.

Coberto: Trata-se de uma das seguintes operações:

  • O investidor vendeu calls (opções de compra) e tem o ativo-objeto para cobrir uma eventual venda. Ou seja, o investidor fez uma estratégia de dividendos ativos.
  • O investidor vendeu puts (opções de venda) e está com uma posição vendida no ativo-objeto.

Travado: Trata-se de uma das seguintes operações:

  • O investidor comprou calls ou puts.
  • O investidor comprou ou vendeu um call spread ou put spread.

Descoberto: trata-se de uma das operações abaixo:

  • O investidor vendeu calls, mas não possui o ativo-objeto. Ou seja, o investidor fez uma venda descoberta de calls.
  • O investidor vendeu puts, mas não possui uma posição vendida no ativo-objeto. Nesse caso, ele fez uma venda descoberta de puts.

Total: É simplesmente a soma das colunas Coberto, Travado e Descoberto.

Compradores: No arquivo original, essa coluna informa a quantidade de compradores de cada opção. No nosso arquivo, é a diferença na quantidade de compradores de um dia para outro. Se o número for positivo, significa que houve aumento no número de compradores da opção. Se for negativo, significa que houve redução no número de compradores.

Lançadores: A mesma explicação anterior, mas aplicada ao número de vendedores.

Código completo

Para aqueles que querem se aventurar na programação com Python, segue o código completo.

Código completo em Python

Resumo

Como você percebeu ao longo do artigo, cada vez mais os profissionais do mercado financeiro usam a tecnologia da informação, em particular a programação por meio da linguagem Python, para obter mais vantagens, tentando extrair informações úteis de arquivos públicos.

Nesse artigo, mostramos como você pode rastrear grandes operações usando a linguagem Python e arquivos públicos da B3.

No artigo, “Interpretando as grandes operações de opções do mercado financeiro”, fornecemos insights que podemos obter ao analisarmos os resultados que obtivemos com nosso código desse artigo.

Ficou em dúvida? Entre em contato conosco.

WhatsApp Opções PRO

Esperamos que tenha gostado do artigo. Fique conosco para mais conteúdos de qualidade.


Compartilhe:
® Todos os direitos reservados à Opções PRO.Termos e Políticas