Este projeto disponibiliza um script Python para geração automática de sinais de compra e venda de ativos da B3 (Bolsa de Valores Brasileira), aplicando estratégias com indicadores técnicos nas séries temporais do mercado à vista. Inclui um script para backtesting e seleção das estratégias com melhor desempenho, permitindo avaliar as abordagens antes de aplicá-las.
Como principais vantagens, o projeto proporciona:
- envio de sinais de negociação recorrentes via canal no Telegram e que evitem a necessidade de análise gráfica.
- usa aprendizado de máquina para a geração de sinal de confirmação.
- código aberto permitindo flexibilidade para escolha dos indicadores e comparação entre estratégias.
Canal Telegram aberto com sinais diários executado via GitHub Actions. Todos podem inscrever-se para uma impressão do que o bot pode oferecer. t.me/b3_trading_signals_free
- Download de dados: Realiza o download de dados de mercado pela API Yahoo Finance.
- Estratégias via indicadores técnicos: Implementa estratégias de cruzamento de 2 ou 3 médias móveis (SMA, WMA ou EMA), bandas de Bollinger (BB), média móvel de convergência/divergência para identificar possíveis tendências.
- Backtesting das estratégias: Realiza teste das estratégias com dados históricos, gerando figuras e resumo para tomada de decisão.
- Avaliação de performance: Avalia desempenho frente a uma função objetivo de ponderação e classifica as melhores estratégias.
- Previsão do preço futuro: Realiza predições baseadas em aprendizado de máquina supervisionado, aplicando algoritmos regressores como gradient boosting e random forest.
- Notificações via Telegram: Envia sinais de negociação provenientes da estratégia escolhida diretamente para o smartphone/computador.
- Agendamento automático: Configura tarefa para execução recorrente via GitHub Actions ou então pelo Agendador de Tarefas do Windows.
- Arquivos de configuração: Utiliza
.envpara variáveis de ambiente privadas,.jsonpara parâmetros de configuração,.txtpara lista de códigos,.txtpara lista de indicadores e.csvpara lista de estratégias.
O projeto suporta os seguintes indicadores para aplicação nas estratégias:
- cruzamento de duas e três médias móveis usando:
- SMA (Simple Moving Average) - Média móvel simples.
- EMA (Exponential Moving Average) - Média móvel exponencial.
- WMA (Weighted Moving Average) – Média móvel ponderada.
- bandas de Bollinger;
- média móvel de convergência/divergência.
Essas opções permitem que o usuário compare o desempenho de diferentes abordagens dentro da B3.
-
Instalar dependências:
pip install pandas pip install numpy pip install yfinance pip install requests pip install python-dotenv pip install scikit-learn
-
Configurar códigos e indicadores
- Em
config.jsonaltere os parâmetros de configuração. - Em
tickers.txtadicione os códigos das ações que deseja avaliar, um por linha. - Em
indicators.txtadicione os indicadores que deseja gerar, um por linha. Inicialmente apenas SMA, WMA e EMA são implementáveis. - Em
strategies.csvsão salvos os códigos das ações que deseja gerar sinais de negociação, cada qual com a respectiva melhor estratégia.
- Em
-
Configurar Telegram
- Crie um bot no Telegram e obtenha o seu
TOKEN. - Crie um canal no Telegram e obtenha o seu
CHAT_ID. - Adicione o bot como administrador do canal.
- Adicione as chaves em
.envpara serem lidas pelob3_trading_signals_bot.py.
- Crie um bot no Telegram e obtenha o seu
-
Executar o script
- Para rodar a batelada de backtests execute:
python b3_trading_signals.py
- Para geração de sinais e notificação, para cada ticker, execute:
python b3_trading_signals_bot.py
- Para automatizar a geração de sinais com GitHub Actions, crie os repository secrets
TOKENeCHAT_ID, para o workflow já configurado. Alternativamente, para agendar tarefa somente pelo Windows, execute uma única vez:python b3_trading_signals_task_scheduler.py
- Para rodar a batelada de backtests execute:
-
Gráfico do backtest com SMA
Após a execução do script
b3_trading_signals.pysão gerados gráficos de cada estratégia, planilhas para cada ticker, planilha com melhores resultados. As figuras geradas seguem o exemplo mostrado abaixo:Note como o ativo encerra o período avaliado próximo ao valor inicial, de modo que a estratégia Buy & hold resultaria em retorno nulo. Por outro lado, caso a estratégia SMA 5/30 fosse seguida à risca proporcionaria ao final do período um retorno de 20% sobre o valor investido, desconsiderando taxas de negociação. Ademais, a operação de venda a descoberto foi desconsiderada nos cálculos devido as taxas de aluguel envolvidas, embora possa facilmente ser habilitada no backtest.
-
Sinal de negociação via Telegram
Após a execução do script
b3_trading_signals_bot.pysão gerados sinais de negociação para as melhores estratégias escolhidas, seguindo o exemplo mostrado abaixo:Note como é gerado um sinal de negociação para cada ativo, sugerindo a tendência de alta, baixa ou neutralidade baseado na estratégia escolhida e a duração dessa tendência, que mostra a quantas amostras a tendência permanece sem trocar de lado. Adicionalmente, são mostrados dados de volume e das principais médias móveis como indicadores de força dessa tendência.
b3_trading_signals.py→ Arquivo principal para backtest e seleção das melhores estratégias.b3_trading_signals_bot.py→ Arquivo principal para geração de sinais diários e notificações via Telegram.b3_trading_signals_task_scheduler.py→ Criação de execução agendada no Windows.core/→ Classes e funções reutilizáveis.tickers.txt→ Lista de tickers para análise.indicators.txt→ Lista de indicadores para análise.strategies.csv→ Lista de estratégias para sinais de negociação consistindo de tickers e seus indicadores.
- Contribuições são bem-vindas! Abra uma issue ou envie um pull request.
- Novas melhorias e funcionalidades poderão ser incorporadas no futuro. Estão planejadas:
- alteração para o paradigma de orientação a objeto (POO); ✅
- melhoria na função objetivo com novas ponderações e presets; ✅
- predição de preço futuro via árvores de decisão; ✅
- mais indicadores para o preço e estratégias; ✅
- alertas/relatório por e-mail.
- Sobre bases de dados:
- API Yahoo Finance: latência de 15 minutos para dados intradiários, sem limite de requisições;
- API Brapi em seu plano gratuito: latência de 30 minutos, limite mensal de 15000 requisições;
- Outras APIs: latências similares e/ou envolvem custo.
Este repositório é mantido de forma independente, durante o tempo livre. Se o código lhe foi útil e deseja apoiar o seu desenvolvimento contínuo, considere fazer uma doação:
Seu apoio ajuda a manter e evoluir o projeto, adicionando novos indicadores, melhorias e documentação.


