guilhermecgs / ir

Projeto de calculo de Imposto de Renda em operacoes na bovespa automaticamente. Tags:canal eletronico do investidor, CEI, selenium, bovespa, IRPF, IR, imposto de renda, finance, yahoo finance, acao, fii, etf, python, crawler, webscraping, calculadora ir
Mozilla Public License 2.0
167 stars 45 forks source link

Sugestões de desenvolvimento #6

Closed Lucasramuniz closed 3 years ago

Lucasramuniz commented 4 years ago

Guilherme, bom dia,

Parabéns por sua iniciativa com este projeto, sensacional sua ideia.

Eu fiz muitas operações nestes meses e minhas notas de corretagem ficou uma bagunça. Conseguir aproveitar o carregamento dos dados na CEI e organizar aqui minhas informações.

Os problemas que eu tive foram os seguintes:

-Gostaria muito de poder contribuir, fazer uma interface talvez para o usuário poder acompanhar seu desempenho, muitos traders carregam prejuízos que poderiam compensar no IR, mas é muito complicado fazer isso manualmente...

Valeu!

guilhermecgs commented 4 years ago

Lucas,

estou focado no momento em aumentar a cobertura de testes e resolver qualquer erro antes de expandir as funcionalidades

em relacao aos seus itens:

Não reconheceu os Tickers de opções - eu removi manualmente para continuar rodando

Isso é tranquilo acrescentar... Consegue me repassar alguns exemplos?

Ocorreram operações que fiz mais de uma compra no mesmo dia com preços diferentes, não foi possível calcular o preço médio.

Mais de uma compra no mesmo dia funciona sem problemas. O erro deve ter sido outro. Talvez nao achou o ticker de opcoes?

Poderia existir um filtro para operações de Day-trade, calcular o saldo remanescente dos papeis que ficam para os próximos dias. (Por exemplo: na minha estrategia de operação, entro comprado com 300 contratos, então no mesmo dia se a operação andar, faço parcial, vendo 200 contratos para reduzir o risco da operação e sobram 100 contratos para swing-trade). Fazer o calculo de IR para daytrade seria muito bom.

Se for mexer com day-trade, teria que estar com os testes 100%... Além disso, como eu nao opero day-trade, precisaria de uma ajuda de negócio mesmo: quais casos de uso, como validar os calculos, etc. Se animar, manda um PR.

-Gostaria muito de poder contribuir, fazer uma interface talvez para o usuário poder acompanhar seu desempenho, muitos traders carregam prejuízos que poderiam compensar no IR, mas é muito complicado fazer isso manualmente...

Interfaces graficas geralmente demoram muito para ficar prontas. O usuário padrao nao é alguem leigo, mas sim alguem que ja sabe python e opera. Eu prefiro focar nesse usuário. É possível acompanhar tudo pelo backend. É melhor ter um software simples e correto do que grande que faz tudo mas nao faz nada direito. No caso, se animar fazer o day trade, poderia tudo ser acompanhado em jobs que rodam schedulados. Eu por exemplo recebo no meu email semanalmente a minha situacao.

guilhermecgs commented 4 years ago

resumindo: se quiser contribuir, day-trade seria uma boa..

vc consegue fazer rapido, vai te ajudar e vc tem contexto de negocio

Lucasramuniz commented 4 years ago

Guilherme, bom dia,

encontrei aqui informações sobre opções: http://bvmf.bmfbovespa.com.br/opcoes/download/SEDE9999.pdf http://www.b3.com.br/pt_br/market-data-e-indices/servicos-de-dados/market-data/consultas/mercado-a-vista/opcoes-8AE490CA64BA055F0164CCCAF13D4625/

Aqui os códigos de todas as opções autorizadas na oitava coluna: SEDE9999.txt

O problema do preço médio de compras do mesmo dia foi o seguinte: Eu comprei e vendi, depois comprei novamente no mesmo dia, então o resultado foi igual a Nan.

Para resolver este problema deveria ser feito o seguinte: -Calcular o preço médio das compras normalmente -O volume remanescente, dia após dia, vai para calculo do swing-trade, como se fosse uma operação swing-trade. (Por exemplo comprei 100 contratos a R$20,00, depois 100 a R$18,00, meu preço médio foi para R$19,00 e o volume para 200. se no mesmo dia eu vender 100 contratos, para o swing-trade deve ser considerado que existiu uma operação de 100 contratos a R$19,00). Ou seja considerar apenas o preço médio das compras e o volume remanescente do dia.

Animo de participar, posso fazer o calculo do IR para daytrade, preciso entender melhor a programação do seu loop de calculo.

Preciso de tempo também, estou bastante garrado aqui no serviço, apesar do Home-Office. Meu Linkedin: https://www.linkedin.com/in/lucas-muniz-9359b465/

Estou programando também estrategias de negociação no MetaTrader5, se vc animar posso te passar alguma coisa.

Lucasramuniz commented 4 years ago

Sobre as opções, os links que enviei estão complicados para entender,

aqui tem uma explicação mais simples: https://br.advfn.com/investimentos/opcoes/codigo-bovespa https://opcoes.net.br/

Operar opções tem uma grande vantagem em relação ao IR, vc aplica um volume bastante menor para obter o mesmo degrau financeiro... por exemplo se vc comprar 1000 contratos de uma ação a R$20,00 e vender por R$21,00, vc vai ganhar R$1000,00 e pagar R$150,00 de IR. Se a mesma operação fosse feita em opções seria o seguinte, compraria 1000 contratos a R$2,00 (Dependendo do Strike), e venderia por R$3,00 (Considerando a mesma variação de R$1,00 do papel) vc ganharia R$1000,00 e não pagaria IR pois não atingiu a cota dos R$20.000,00 de isenção (Se fizesse apenas esta operação, no caso vc já teria atingido R$3.000,00 da cota de isenção).

guilhermecgs commented 4 years ago

Blz,

1) em relacao ao erro do calculo de preco medio para o mesmo dia, voce consegue escrever um teste unitário que mostra o erro? Pode ser escrito dentro desse arquivo:

https://github.com/guilhermecgs/ir/blob/master/tests/test_stuff.py

2) As opcoes vou pegar desse site do site da advfn (codigo de negociacao e preco). O calculo de IR será o mesmo que é feito para ACOES.

3) Vou dar uma melhorada nos testes do https://github.com/guilhermecgs/ir/blob/master/src/calculo_ir.py para vc pegar algo mais facil de contribuir.

guilhermecgs commented 4 years ago

A busca dos precos de opcoes ja esta disponivel

Lucasramuniz commented 4 years ago

Bom dia Guilherme, não tive muito tempo ainda para olhar...

No código test_stuff eu deveria editar por exemplo:

guilhermecgs commented 4 years ago

Sim lucas.

O que eu preciso é executar um codigo que reproduza o erro. Uma vez o erro acontecendo eu consigo modificar o codigo para consertar.

Outra opcao seria vc me enviar a exportacao dos seus trades -> mas ai eu teria que ver seus trades. Nao gosto muito da opcao 2 pq "privacidade financeira" é importante

Lucasramuniz commented 4 years ago

Entendi, Acho melhor acessar meu export, porque eu já tenho calculado os resultados que deveríamos obter. export_operacoes.txt

guilhermecgs commented 4 years ago

@Lucasramuniz , acho que foi consertado.

Dentro de um mesmo dia, nao ha garantia de um ordem cronologica exata pq a informacao de hora/minuto nao é armazenada.

Para resolver, coloquei as compras vindo antes das vendas para garantir um saldo sempre >= ZERO

Lucasramuniz commented 4 years ago

@guilhermecgs, rodei aqui e funcionou muito melhor.

Verifiquei que o calculo do preço médio das vendas estão todas corretas, para cada mês todas estão batendo com minha planilha.

Está ocorrendo algum problema com o calculo dos preços médios das compras, por exemplo no mês de março as compras de VVAR3 no meu calculo o preço médio foi de 7,30 enquanto programa calculou 4,86. Verifiquei aqui com minha planilha que quando removi as 3 primeiras compras obtive o preço médio de 4,86.

PETR4 também ocorreu o problema, porem para encontrar o valor calculado pelo programa removi algumas compras intermediarias... meu calculo foi de 17,33, enquanto o do programa foi de 16,52...

Parece que perde algumas compras, ainda não sei ao certo.

Nos meses seguintes também ocorrem com outras ações... posso te enviar minha planilha se vc quiser conferir

guilhermecgs commented 4 years ago

@Lucasramuniz

(se a planilha for tranquila de entender, pode mandar sim)

O meu calculo considera a quantidade de acoes que vc tem na carteira no momento

preco_medio = (valor_da_compra_atual + preco_medio_atual * qtd_acoes_antes_da_compra) / qtd_acoes_depois_da_compra

Se em alguem momento sua quantidade de acoes foi a ZERO, um novo ciclo se inicia.

Se voce observar a ultima coluna da tabela abaixo, o preco medio de compra (VVAR3) comecou com R$11,87 e terminou em 26/03 com um preco de compra de R$7,36

Ja em 31/03 iniciou-se um novo ciclo de compra com um preco de 5.33

Como sao poucas as compras e vendas de VVAR3, da para vc fazer o calculo na mao e conferir

image

cum_qtd = quantidade de acoes de um ticker em um dado momento

Lucasramuniz commented 4 years ago

No caso de VVAR3 eu zerei a quantidade total em algum momento e depois voltei a posicionar.

Então o calculo do programa obteve o seguinte resultado: Preco Médio de Compra: R$ 4.86 Preco Médio de Venda: R$ 5.41 Resultado Apurado: R$ 334.40

Que é um problema porque na realidade o meu preço médio de compra foi de 7,30 no mês de Março e o resultado apurado deveria ser de R$ -1133,71.

Calculo o preço médio de compras em um período da seguinte forma: preco_medio_Mes = (preco_C1qtd_C1 + preco_C2qtd_C2 ... preco_Cn*qtd_Cn) / qtd_total_Mes Preco_medio.xlsx

Para considerar as compras dos meses anteriores, teria que somar na equação preco_medio_remanescenteqtd_total_remanescente. então ficaria: preco_medio_Mes = (preco_C1qtd_C1 + preco_C2qtd_C2 ... preco_Cnqtd_Cn + preco_medio_remanescente*qtd_total_remanescente) / (qtd_total_Mes + qtd_total_remanescente)

quando virar o mês e ainda houver posição aberta: preco_medio_remanescente = preco_medio_Mes_anterior

Talvez seria mais fácil para você apenas considerar o resultado da operação fechada anteriormente.

Os meus resultados dos meses seguintes também estão muito diferentes dos calculados pelo programa, talvez se corrigir este problema pode acertar os cálculos...

guilhermecgs commented 4 years ago

Entao, pelo o que voce falou o preco medio que vc esta calculando esta errado.

Nao existe um conceito de mes de fechamento: o calculo do preco medio pode ser feito a qualquer hora e DEVE considerar todas as operacoes que voce fez até o momento, e nao apenas aquelas operacoes que voce fez o mes.

Um exemplo simples: voce compra 100 em um mes e só vende daqui a um ano.

Esse site da bons exemplos do calculo que está implementado https://www.bussoladoinvestidor.com.br/calculo-do-preco-medio-de-acoes/

guilhermecgs commented 4 years ago

mais informacoes aqui: https://github.com/guilhermecgs/ir/commit/4595fe2dd144153137395b2fade975e567dc91e9#commitcomment-38268413

e aqui https://stackoverflow.com/a/60934485/1357553

Lucasramuniz commented 4 years ago

Tudo bem, não elaborei direito minha resposta, em como considerar operações anteriores.

Entretanto seu calculo não está correto, pois não considerou o prejuízo que obtive no fechamento das posições antes de encerrar o mês de Março. Como abrir novas posições, deve ter considerado para calculo do preço médio apenas as novas posições.

Como não havia feito nenhuma compra anterior de VVAR3. da forma que eu calculei preço médio das compras do mês de Março foi de 7,30 e das vendas de 5,41, como o volume de vendas foram de 600 o resultado de lucro/prejuiso seria (5,41-7,30)*600 = -1133.

vou avaliar melhor os links que vc enviou anteriormente.

guilhermecgs commented 3 years ago

Lucas, eu sinceramente nao entendi. Se animar, podemos marcar um zoom depois para vc me explicar. Meu email é guilhermecgs@gmail.com