Rastrear grandes operações com Python
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:
Você entrará na área de divulgação de dados públicos, como mostra a imagem a seguir:
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
Porém, no dia 25/10/2023, apareceram 1.950.000 quantidades para esta mesma opção.
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:
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:
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:
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.
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:
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:
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.
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.
Esperamos que tenha gostado do artigo. Fique conosco para mais conteúdos de qualidade.