Este projeto tem como objetivo criar uma aplicação web para análise de dados financeiros utilizando Flask, MongoDB e Bokeh. A aplicação conecta-se ao Yahoo Finance para recuperar dados históricos de ações, armazena esses dados no MongoDB (uma base de dados NoSQL) e exibe visualizações gráficas desses dados juntamente com recomendações de compra, venda ou manutenção com base em médias móveis simples.
-
Conexão ao Yahoo Finance:
- A aplicação conecta-se à API do Yahoo Finance para recuperar dados históricos de ações com base no símbolo fornecido pelo utilizador.
-
Armazenamento no MongoDB:
- Os dados recuperados do Yahoo Finance são armazenados no MongoDB. Cada ação é armazenada como um documento na coleção
stocks
na base de dadosstock_data
.
- Os dados recuperados do Yahoo Finance são armazenados no MongoDB. Cada ação é armazenada como um documento na coleção
-
Análise de Investimento e Recomendação:
- Com base nos dados históricos das ações, a aplicação calcula médias móveis de 20 e 50 dias.
- É feita uma recomendação de "Compra" se a média móvel de 20 dias estiver acima da média móvel de 50 dias.
- É feita uma recomendação de "Venda" se a média móvel de 20 dias estiver abaixo da média móvel de 50 dias.
- É feita uma recomendação de "Manutenção" se as médias móveis não mostrarem um padrão claro.
-
Visualização Gráfica com Bokeh:
- Utiliza a biblioteca Bokeh para criar gráficos rativos dos preços de fechamento das ações e suas médias móveis.
- Os gráficos são incorporados na página web para fácil visualização e compreensão dos dados.
-
Autenticação de Utilizadores:
- Implementa um sistema simples de login para restringir o acesso à aplicação a utilizadores autenticados.
-
Alertas:
- Os utilizadores podem definir alertas de preço para ações específicas. Quando uma ação atinge a condição de preço especificada (acima ou abaixo), o utilizador é notificado.
-
Atualizações em Tempo Real:
- Utiliza o Socket.IO para fornecer atualizações em tempo real para os dados das ações e alertas.
Para executar esta aplicação localmente, é necessário ter o Python instalado juntamente com as bibliotecas especificadas no ficheiro requirements.txt
. Além disso, um servidor MongoDB deve estar em execução na máquina local ou numa máquina remota acessível.
-
Clonar o repositório:
- Execute o comando
git clone https://github.com/Dark1nessss/Finance-Bot
- Navegue para o diretório do projeto com o comando
cd Finance-Bot
- Execute o comando
-
Instalar as dependências:
- Execute o comando
pip install -r requirements.txt
- Execute o comando
-
Configurar o MongoDB:
- Certifique-se de que o servidor MongoDB está em execução.
-
Executar a aplicação:
- Execute o comando
python app.py
- Execute o comando
-
Aceder à aplicação:
- Abra o navegador e vá para
http://localhost:5000
.
- Abra o navegador e vá para
-
Buscar dados de ações:
- Na página inicial, insira o símbolo de uma ação (por exemplo, AAPL para Apple) e clique em "Fetch Data".
- Isto buscará os dados mais recentes das ações do Yahoo Finance e armazená-los-á no MongoDB.
-
Visualizar dados e recomendação:
- Após buscar os dados, pode clicar em "Show Data" para visualizar os dados históricos das ações, um gráfico com médias móveis e uma recomendação de investimento.
-
Flask: Framework web que ajuda a interagir com HTML usando Python.
-
Flask-SocketIO: Adiciona suporte para comunicação em tempo real entre o servidor e os clientes.
-
Bokeh: Ajuda na criação de imagens/gráficos e muito mais.
-
pymongo: Framework que facilita a conexão entre Python e MongoDB.
-
yfinance: API do Yahoo Finance para auxiliar com bots e mais.
-
pandas: Biblioteca de manipulação e análise de dados.
-
datetime: Biblioteca para manipulação de datas em Python.
-
SweetAlert: Biblioteca para substituição de caixas de diálogo JavaScript por pop-ups bonitos, responsivos, personalizáveis e acessíveis (WAI-ARIA).
A aplicação utiliza a API do Yahoo Finance para obter dados financeiros e históricos de ações. Para isso, usamos a biblioteca yfinance
, que fornece uma interface fácil de usar para acessar esses dados.
-
Uso da API:
-
Utilizamos a biblioteca
yfinance
para obter informações detalhadas sobre as ações. Por exemplo, para recuperar o preço atual de uma ação, utilizamos o seguinte código:import yfinance as yf ticker = yf.Ticker('AAPL') ticker_info = ticker.info current_price = ticker_info.get('currentPrice')
-
O código acima cria um objeto para a ação da Apple e obtém informações financeiras relevantes através da propriedade
info
.
-
-
Dados Recuperados:
- Preço atual da ação.
- Histórico de preços (preços de fechamento, máximos e mínimos).
- Métricas financeiras como P/E (Price to Earnings Ratio) e EPS (Earnings Per Share).
A API do Financial Modeling Prep fornece dados financeiros detalhados, como balanço patrimonial, demonstração de resultados e fluxos de caixa. Esses dados são essenciais para a análise fundamentalista e para a criação de recomendações de investimento.
-
Uso da API:
-
Dados financeiros são acessados através de requisições HTTP para endpoints específicos. Por exemplo, para obter o balanço patrimonial, utilizamos o seguinte código:
import requests API_KEY_FMP = 'YOUR_API_KEY' balance_sheet_url = f'https://financialmodelingprep.com/api/v3/balance-sheet-statement/AAPL?apikey={API_KEY_FMP}' balance_sheet_response = requests.get(balance_sheet_url) balance_sheet_data = balance_sheet_response.json()[0]
-
O código acima faz uma requisição para o endpoint de balanço patrimonial da ação da Apple e analisa a resposta JSON para obter os dados necessários.
-
-
Dados Recuperados:
- Balanço patrimonial: ativos, passivos e patrimônio líquido.
- Demonstração de resultados: receitas, despesas, lucro líquido.
- Fluxos de caixa: entradas e saídas de caixa.
A aplicação inclui uma funcionalidade onde os utilizadores podem definir alertas para preços específicos de ações. Quando o preço da ação ultrapassa o limite definido, o utilizador recebe uma notificação.
-
Navegar para a Página de Alertas:
- Utilize a barra de navegação para ir para a página "Alerts".
-
Definir um Novo Alerta:
- Insira o símbolo da ação (por exemplo, AAPL para Apple).
- Selecione a condição ("above" ou "below").
- Insira o preço-alvo para o alerta.
- Clique em "Set Alert".
- A página de alertas exibe todos os alertas definidos pelo utilizador.
- Os utilizadores podem remover um alerta clicando no botão "Remove" ao lado do respetivo alerta.
- A aplicação utiliza WebSockets para fornecer notificações em tempo real quando uma ação atinge o limite de alerta.
- As notificações aparecem como pop-ups no canto superior direito da tela.
Para fins de teste, a aplicação inclui uma funcionalidade para simular alterações no preço das ações e acionar alertas.
- Simular uma Alteração de Preço:
- Navegue para a página de Alertas.
- Insira o símbolo da ação para a qual deseja simular uma alteração de preço.
- Clique no botão "Simulate Alert".
- A aplicação gerará um preço aleatório para a ação e verificará os alertas definidos.
- Se o preço simulado atender a qualquer condição de alerta, uma notificação será exibida.
app.py
: O ficheiro principal da aplicação que inicializa a aplicação Flask, configura a base de dados e inicia o servidor.routes.py
: Define as rotas para a aplicação web, incluindo buscar dados de ações, exibir dados, definir alertas e gerir a autenticação de utilizadores.operations.py
: Contém as operações principais para buscar dados de ações do Yahoo Finance, armazenar dados no MongoDB, gerar recomendações e gerir alertas.initdb.py
: Inicializa a base de dados MongoDB com as coleções e índices necessários.insert_data.py
: Insere dados iniciais na base de dados MongoDB, incluindo utilizadores e dados de ações de exemplo.templates/
: Diretório contendo os templates HTML para a aplicação web.static/
: Diretório contendo ficheiros estáticos como CSS e JavaScript.
-
Segurança Aprimorada:
- Implementar hashing de senhas para a autenticação de utilizadores.
- Adicionar controlo de acesso baseado em funções para restringir certas funcionalidades a utilizadores administradores.
-
Análise de Dados Avançada:
- Incluir indicadores técnicos adicionais para uma análise de investimento mais abrangente.
- Implementar modelos de machine learning para previsão de preços de ações.
-
Melhorias na Interface de Utilizador:
- Melhorar o design e a usabilidade da aplicação web.
- Adicionar gráficos mais interativos e personalizáveis.
-
Notificações:
- Implementar notificações por email ou SMS para alertas de ações.
- Fornecer opções para os utilizadores personalizarem as preferências de notificações.
Contribuições são bem-vindas! Se tiver ideias para melhorias ou novas funcionalidades, sinta-se à vontade para fazer um fork do repositório e submeter um pull request.