You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
swarms/examples/hs_examples/hs_stock_team.py

220 lines
10 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import os
from dotenv import load_dotenv
# Swarm imports
from swarms.structs.agent import Agent
from swarms.structs.hiearchical_swarm import (
HierarchicalSwarm,
SwarmSpec,
)
from swarms.utils.function_caller_model import OpenAIFunctionCaller
load_dotenv()
# ------------------------------------------------------------------------------
# Trading Director: Responsible for orchestrating tasks among multiple stock analysts
# ------------------------------------------------------------------------------
director_llm = OpenAIFunctionCaller(
base_model=SwarmSpec,
api_key=os.getenv("OPENAI_API_KEY"),
system_prompt=(
"You are the Trading Director in charge of coordinating a team of specialized "
"Stock Analysts. Your responsibilities include:\n\n"
"1. **Analyze** the user's request and **break it down** into actionable tasks.\n"
"2. **Assign** tasks to the relevant analysts, explaining **why** each task is "
"important and **what** each analyst should deliver.\n"
"3. **Review** all analyst outputs, providing **feedback** or **clarifications** "
"to ensure thoroughness and accuracy.\n"
"4. **Consolidate** final insights into a cohesive, actionable, and "
"easy-to-understand response for the user.\n\n"
"Guidelines:\n"
"- You can only delegate to the analysts assigned to this swarm.\n"
"- If essential data or clarifications are needed, request them from the user.\n"
"- Be direct, structured, and analytical. Present each key point clearly.\n"
"- Strive for a polished **final output** that addresses the user's request.\n"
"- If uncertainties remain, politely highlight them or request more info.\n\n"
"Overarching Goal:\n"
"Maximize the value of insights provided to the user by thoroughly leveraging "
"each analysts specialization, while maintaining a professional and "
"transparent communication style."
),
temperature=0.5,
max_tokens=8196,
)
def main():
# --------------------------------------------------------------------------
# Agent 1: Macro-Economic-Analysis-Agent
# --------------------------------------------------------------------------
# Focus: Assess macroeconomic factors like inflation, interest rates, GDP growth, etc.
# --------------------------------------------------------------------------
macro_agent = Agent(
agent_name="Macro-Economic-Analysis-Agent",
model_name="gpt-4o",
max_loops=1,
interactive=False,
streaming_on=False,
system_prompt=(
"As the Macro-Economic Analysis Agent, your mission is to:\n\n"
"1. **Identify** the key macroeconomic indicators impacting the market.\n"
"2. **Interpret** how factors like inflation, interest rates, and fiscal "
"policies influence market sentiment.\n"
"3. **Connect** these insights to specific investment opportunities or "
"risks across various sectors.\n\n"
"Guidelines:\n"
"- Provide clear, data-driven rationales.\n"
"- Highlight potential global events or policy decisions that may shift "
"market conditions.\n"
"- Request further details if needed, and state any assumptions or "
"limitations.\n\n"
"Outcome:\n"
"Deliver a concise but thorough macroeconomic overview that the Trading "
"Director can combine with other analyses to inform strategy."
),
)
# --------------------------------------------------------------------------
# Agent 2: Sector-Performance-Analysis-Agent
# --------------------------------------------------------------------------
# Focus: Drill down into sector-level trends, e.g., technology, healthcare, energy, etc.
# --------------------------------------------------------------------------
sector_agent = Agent(
agent_name="Sector-Performance-Analysis-Agent",
model_name="gpt-4o",
max_loops=1,
interactive=False,
streaming_on=False,
system_prompt=(
"As the Sector Performance Analysis Agent, your responsibilities are:\n\n"
"1. **Evaluate** recent performance trends across key sectors—technology, "
"healthcare, energy, finance, and more.\n"
"2. **Identify** sector-specific drivers (e.g., regulatory changes, "
"consumer demand shifts, innovation trends).\n"
"3. **Highlight** which sectors may offer short-term or long-term "
"opportunities.\n\n"
"Guidelines:\n"
"- Focus on factual, data-backed observations.\n"
"- Cite any significant indicators or company-level news that might affect "
"the sector broadly.\n"
"- Clarify the confidence level of your sector outlook and note any "
"uncertainties.\n\n"
"Outcome:\n"
"Provide the Trading Director with actionable insights into sector-level "
"momentum and potential investment focal points."
),
)
# --------------------------------------------------------------------------
# Agent 3: Technical-Analysis-Agent
# --------------------------------------------------------------------------
# Focus: Evaluate price action, volume, and chart patterns to guide short-term
# trading strategies.
# --------------------------------------------------------------------------
technical_agent = Agent(
agent_name="Technical-Analysis-Agent",
model_name="gpt-4o",
max_loops=1,
interactive=False,
streaming_on=False,
system_prompt=(
"As the Technical Analysis Agent, you specialize in interpreting price "
"charts, volume trends, and indicators (e.g., RSI, MACD) to gauge short-term "
"momentum. Your tasks:\n\n"
"1. **Examine** current market charts for significant breakouts, support/resistance "
"levels, or technical signals.\n"
"2. **Identify** short-term trading opportunities or risks based on "
"technically-driven insights.\n"
"3. **Discuss** how these patterns align with or contradict fundamental "
"or macro perspectives.\n\n"
"Guidelines:\n"
"- Keep explanations accessible, avoiding excessive jargon.\n"
"- Point out levels or patterns that traders commonly monitor.\n"
"- Use disclaimers if there is insufficient data or conflicting signals.\n\n"
"Outcome:\n"
"Supply the Trading Director with technical viewpoints to complement broader "
"macro and sector analysis, supporting timely trading decisions."
),
)
# --------------------------------------------------------------------------
# Agent 4: Risk-Analysis-Agent
# --------------------------------------------------------------------------
# Focus: Evaluate risk factors and potential uncertainties, providing disclaimers and
# suggesting mitigations.
# --------------------------------------------------------------------------
risk_agent = Agent(
agent_name="Risk-Analysis-Agent",
model_name="gpt-4o",
max_loops=1,
interactive=False,
streaming_on=False,
system_prompt=(
"As the Risk Analysis Agent, your role is to:\n\n"
"1. **Identify** key risks and uncertainties—regulatory, geopolitical, "
"currency fluctuations, etc.\n"
"2. **Assess** how these risks could impact investor sentiment or portfolio "
"volatility.\n"
"3. **Recommend** risk mitigation strategies or cautionary steps.\n\n"
"Guidelines:\n"
"- Present both systemic (market-wide) and idiosyncratic (company/sector) risks.\n"
"- Be transparent about unknowns or data gaps.\n"
"- Provide disclaimers on market unpredictability.\n\n"
"Outcome:\n"
"Offer the Trading Director a detailed risk framework that helps balance "
"aggressive and defensive positions."
),
)
# --------------------------------------------------------------------------
# Hierarchical Swarm Setup
# --------------------------------------------------------------------------
# - Director: director_llm
# - Agents: [macro_agent, sector_agent, technical_agent, risk_agent]
# - max_loops: Up to 2 feedback loops between director and agents
# --------------------------------------------------------------------------
swarm = HierarchicalSwarm(
name="HierarchicalStockAnalysisSwarm",
description=(
"A specialized swarm consisting of a Trading Director overseeing four "
"Stock Analysts, each focusing on Macro, Sector, Technical, and Risk "
"perspectives."
),
director=director_llm,
agents=[
macro_agent,
sector_agent,
technical_agent,
risk_agent,
],
max_loops=2, # Limit on feedback iterations
)
# --------------------------------------------------------------------------
# Execution
# --------------------------------------------------------------------------
# Example user request for the entire team:
# 1. Discuss key macroeconomic factors (inflation, interest rates, etc.)
# 2. Analyze sector-level performance (technology, healthcare, energy).
# 3. Give short-term technical signals and levels to watch.
# 4. Outline major risks or uncertainties.
# --------------------------------------------------------------------------
user_request = (
"Please provide a comprehensive analysis of the current stock market, "
"covering:\n"
"- Key macroeconomic drivers affecting market momentum.\n"
"- Which sectors seem likely to outperform in the near vs. long term.\n"
"- Any notable technical signals or price levels to monitor.\n"
"- Potential risks or uncertainties that might disrupt market performance.\n"
"Include clear disclaimers about the limitations of these analyses."
"Call the risk analysis agent only"
)
# Run the swarm with the user_request
final_output = swarm.run(user_request)
print(final_output)
if __name__ == "__main__":
main()