Um repositório simula um hedge fund com IA, onde agentes de IA, cada um representando a estratégia de investimento de um investidor famoso, analisam dados financeiros e tomam decisões de negociação. O sistema inclui ferramentas para testar essas estratégias. É importante notar que este é um conceito e é destinado apenas para fins educacionais e de pesquisa.
O sistema incorpora ferramentas para backtesting dessas estratégias. É importante notar que esta é uma prova de conceito e se destina apenas para fins educacionais e de pesquisa.
Módulos do sistema
-
src/agents
: Contém as definições para cada agente de investimento (por exemplo, Warren Buffett, Cathie Wood) e sua lógica específica para analisar ações e gerar sinais de negociação. -
src/tools
: Define ferramentas usadas pelos agentes, principalmente chamadas de API para buscar dados financeiros. -
src/llm
: Gerencia a configuração e instanciação de Large Language Models (LLMs) de diferentes provedores (OpenAI, Groq, etc.). -
src/graph
: Define a estrutura do fluxo de trabalho do agente. -
src/utils
: Fornece funções de utilidade para tarefas como exibir informações, gerenciar o progresso e interagir com LLMs. -
src/data
: Inclui modelos de dados (usando Pydantic) e um mecanismo de cache para respostas da API. -
src/backtester.py
: Implementa a funcionalidade de backtesting para avaliar o desempenho do hedge fund com IA em dados históricos. -
src/main.py
: Serve como o ponto de entrada principal para executar o hedge fund com IA.
Estrutura do código
Seção 1: Definições de Agentes (src/agents
)
Esta seção define a lógica central do hedge fund com IA: os agentes de investimento. Cada agente é responsável por analisar ações com base em uma filosofia de investimento específica.
-
Classes/Arquivos-chave:
- Cada arquivo (por exemplo,
warren_buffett.py
,cathie_wood.py
) define um único agente. - Cada função de agente recebe o
AgentState
atual como entrada e retorna umAgentState
atualizado. - Os agentes usam o módulo
tools.api
para buscar dados financeiros. - Os agentes usam LLMs de
llm.models
para gerar sinais de investimento com base em sua análise. - Os agentes geram um sinal de negociação (otimista, pessimista ou neutro) com um nível de confiança e raciocínio.
- Cada arquivo (por exemplo,
-
Fluxo de trabalho:
-
Busca de dados: Os agentes recuperam dados financeiros usando funções de
src/tools/api.py
. Isso inclui métricas financeiras, itens de linha, negociações de insiders e notícias da empresa. - Análise: Os agentes aplicam suas estratégias de investimento específicas aos dados buscados. Isso geralmente envolve o cálculo de índices financeiros, a análise de tendências e a avaliação do sentimento do mercado.
- Raciocínio (LLM): Muitos agentes utilizam LLMs para sintetizar sua análise e gerar um sinal de investimento bem fundamentado. A engenharia de prompt dentro desses agentes é crucial para orientar o processo de tomada de decisão do LLM.
- Geração de sinal: Cada agente gera um sinal de negociação (otimista, pessimista ou neutro), juntamente com um nível de confiança e uma explicação textual de seu raciocínio.
-
Funções-chave:
-
warren_buffett_agent(state: AgentState)
: Exemplo de uma função de agente. -
generate_buffett_output(...)
: Exemplo de função que usa LLM para gerar decisões de investimento. -
analyze_fundamentals(...)
: Exemplo de função que analisa os fundamentos da empresa com base nos critérios de Buffett.
-
-
Uso de LLMs:
- Os agentes usam LLMs para fornecer raciocínio semelhante ao humano para suas decisões de investimento. A qualidade da saída do LLM depende muito dos prompts fornecidos a ele, que são projetados para orientar o LLM na emulação do estilo de investimento do investidor específico.
- O arquivo
llm.py
contém a funçãocall_llm
, que simplifica o processo de chamar um LLM, lidar com erros e analisar a saída do LLM em um modelo Pydantic. Esta função é usada em vários agentes.
Seção 2: Tratamento de Dados (src/data
) e Chamadas de API (src/tools
)
Esta seção se concentra em como o sistema recupera e gerencia dados financeiros.
-
Classes/Arquivos-chave:
-
src/data/models.py
: Define modelos Pydantic para representar dados financeiros (por exemplo,Price
,FinancialMetrics
,CompanyNews
). -
src/data/cache.py
: Implementa um cache na memória para armazenar respostas da API e reduzir o número de chamadas de API externas. -
src/tools/api.py
: Fornece funções para buscar dados financeiros da API FinancialDatasets.
-
-
Fluxo de trabalho:
-
Chamadas de API: O módulo
src/tools/api.py
faz chamadas à API FinancialDatasets para recuperar dados financeiros. Ele constrói os URLs apropriados e lida com a autenticação da API usando uma chave de API armazenada em variáveis de ambiente. -
Modelagem de dados: As respostas da API são analisadas usando modelos Pydantic definidos em
src/data/models.py
. Isso garante a consistência dos dados e a segurança do tipo. -
Cache: O módulo
src/data/cache.py
fornece um cache na memória para armazenar respostas da API. Antes de fazer uma chamada de API, o sistema verifica o cache para os dados solicitados. Se os dados forem encontrados no cache e ainda forem válidos, eles serão usados diretamente, evitando a necessidade de uma chamada de API externa.
-
Funções-chave:
-
get_prices(ticker: str, start_date: str, end_date: str)
: Busca dados de preços para um determinado ticker dentro de um intervalo de datas especificado. -
get_financial_metrics(ticker: str, end_date: str, period: str = "ttm", limit: int = 10)
: Recupera métricas financeiras para um determinado ticker. -
get_insider_trades(ticker: str, end_date: str, start_date: str | None = None, limit: int = 1000)
: Recupera dados de negociação de insiders para um determinado ticker. -
get_company_news(ticker: str, end_date: str, start_date: str | None = None, limit: int = 1000)
: Recupera artigos de notícias da empresa para um determinado ticker.
-
-
Chamadas de API externas:
- API FinancialDatasets: Usada para recuperar dados financeiros, incluindo preços de ações, métricas financeiras, negociações de insiders e notícias da empresa.
Seção 3: Gerenciamento de LLM (src/llm
)
Esta seção lida com a configuração e instanciação de Large Language Models (LLMs) de diferentes provedores.
-
Classes/Arquivos-chave:
-
src/llm/models.py
: Define os LLMs disponíveis, seus provedores e funções de utilidade para interagir com eles.
-
-
Fluxo de trabalho:
-
Definição do modelo: O arquivo
src/llm/models.py
define os LLMs disponíveis e seus provedores usando a classeLLMModel
. -
Instanciação do modelo: A função
get_model(model_name: str, model_provider: ModelProvider)
instancia um LLM do provedor especificado usando a chave de API apropriada armazenada em variáveis de ambiente. -
Interação LLM: A função
call_llm
emsrc/utils/llm.py
simplifica o processo de chamar um LLM, lidar com erros e analisar a saída do LLM em um modelo Pydantic.
-
Funções-chave:
-
get_model(model_name: str, model_provider: ModelProvider)
: Instancia um LLM do provedor especificado. -
call_llm(prompt: Any, model_name: str, model_provider: str, pydantic_model: Type[T], agent_name: Optional[str] = None, max_retries: int = 3, default_factory = None)
: Simplifica o processo de chamar um LLM, lidar com erros e analisar a saída do LLM em um modelo Pydantic.
-
Seção 4: Gerenciamento de Fluxo de Trabalho (src/graph
)
Esta seção define a estrutura do fluxo de trabalho do agente usando LangGraph.
-
Classes/Arquivos-chave:
-
src/graph/state.py
: Define a classeAgentState
, que representa o estado do fluxo de trabalho do agente. -
src/main.py
: Cria o fluxo de trabalho LangGraph.
-
-
Fluxo de trabalho:
-
Definição de estado: A classe
AgentState
emsrc/graph/state.py
define os dados que são passados entre os agentes no fluxo de trabalho. Isso inclui a lista de mensagens, o dicionário de dados e os metadados. -
Criação do fluxo de trabalho: A função
create_workflow(selected_analysts=None)
emsrc/main.py
cria o fluxo de trabalho LangGraph. Isso envolve adicionar nós para cada agente selecionado, bem como nós para gerenciamento de risco e gerenciamento de portfólio. -
Execução do fluxo de trabalho: A função
run_hedge_fund
emsrc/main.py
executa o fluxo de trabalho LangGraph. Isso envolve invocar o aplicativo LangGraph compilado com o estado inicial e, em seguida, iterar sobre as mensagens resultantes.
-
Funções-chave:
-
create_workflow(selected_analysts=None)
: Cria o fluxo de trabalho LangGraph. -
run_hedge_fund(...)
: Executa o fluxo de trabalho LangGraph.
-
Seção 5: Backtesting (src/backtester.py
) e Execução Principal (src/main.py
)
Esta seção cobre a funcionalidade de backtesting e o ponto de entrada principal para executar o hedge fund com IA.
-
Classes/Arquivos-chave:
-
src/backtester.py
: Implementa a funcionalidade de backtesting. -
src/main.py
: Serve como o ponto de entrada principal para executar o hedge fund com IA.
-
-
Fluxo de trabalho:
-
Backtesting: A classe
Backtester
emsrc/backtester.py
simula a execução do hedge fund com IA em dados históricos. Ele itera sobre um intervalo de datas, busca dados históricos, executa negociações com base nas decisões do agente e rastreia o desempenho do portfólio. -
Execução Principal: O arquivo
src/main.py
analisa os argumentos da linha de comando, solicita a entrada do usuário (por exemplo, tickers, analistas, modelo), cria o fluxo de trabalho LangGraph e executa o hedge fund com IA.
-
Funções-chave:
-
Backtester.run_backtest()
: Executa a simulação de backtesting. -
run_hedge_fund(...)
: Executa o hedge fund com IA.
-
Esquema do BD
Não há um esquema de banco de dados explícito definido, pois o sistema usa a API FinancialDatasets para recuperação de dados e um cache na memória para armazenamento temporário.
Chamadas de API externas
-
API FinancialDatasets: Esta API é usada para recuperar dados financeiros, incluindo:
- Preços de ações (
/prices/
) - Métricas financeiras (
/financial-metrics/
) - Negociações de insiders (
/insider-trades/
) - Notícias da empresa (
/news/
) - Pesquisa por itens de linha (
/financials/search/line-items
)
- Preços de ações (
Insights
- Design Modular: A base de código é bem organizada em módulos, cada um com uma responsabilidade específica. Isso torna o código mais fácil de entender, manter e estender.
- Arquitetura Baseada em Agentes: O uso de agentes independentes, cada um com sua própria estratégia de investimento, permite um sistema flexível e extensível. Novos agentes podem ser facilmente adicionados ao sistema para incorporar diferentes filosofias de investimento.
- Integração de LLM: A integração de LLMs no processo de tomada de decisão dos agentes é um recurso-chave deste projeto. Os LLMs fornecem raciocínio e explicações semelhantes aos humanos para as decisões de investimento dos agentes.
- Cache: O cache na memória ajuda a reduzir o número de chamadas de API externas e melhora o desempenho do sistema.
- Backtesting: A funcionalidade de backtesting permite avaliar o desempenho do hedge fund com IA em dados históricos. Isso é crucial para validar a eficácia das estratégias de investimento.
-
Rastreamento de Progresso: O módulo
src/utils/progress.py
fornece um mecanismo para rastrear o progresso dos agentes, fornecendo insights valiosos sobre a operação do sistema.
Experiências de Design
- Customização do Agente: O sistema permite que os usuários selecionem quais agentes incluir no fluxo de trabalho. Isso permite que os usuários personalizem o hedge fund com IA de acordo com suas preferências de investimento específicas.
- Flexibilidade: O design modular e a arquitetura baseada em agentes tornam o sistema altamente flexível e extensível. Novos agentes, fontes de dados e estratégias de negociação podem ser facilmente adicionados ao sistema.
Criatividade
- Emulando Investidores Famosos: O conceito de criar agentes de IA que emulam os estilos de investimento de investidores famosos é uma abordagem inovadora e envolvente para explorar o uso de IA em finanças.
- LangGraph: O uso de LangGraph para orquestrar o fluxo de trabalho do agente fornece uma maneira estruturada e flexível de gerenciar as interações entre os agentes.
Github Repo: AI-Powered Hedge Fund
Este conteúdo foi auxiliado por Inteligência Artificiado, mas escrito e revisado por um humano.