| import os | |
| import warnings | |
| from crewai import Agent, Task, Crew | |
| from crewai_tools import ScrapeWebsiteTool, SerperDevTool | |
| from crewai import Crew, Process | |
| from langchain_openai import ChatOpenAI | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| warnings.filterwarnings('ignore') | |
| SERPER_API_KEY = os.getenv('SERPER_API_KEY') | |
| SAMBAVERSE_API_KEY = os.getenv('SAMBANOVA_API_KEY') | |
| SAMBANOVA_API_URL = "https://api.sambanova.ai/v1" | |
| search_tool = SerperDevTool() | |
| scrape_tool = ScrapeWebsiteTool() | |
| llm = ChatOpenAI( | |
| model="Meta-Llama-3.1-8B-Instruct-8k", | |
| temperature=0.5, | |
| max_retries=2, | |
| base_url=SAMBANOVA_API_URL, | |
| api_key=SAMBAVERSE_API_KEY, | |
| ) | |
| def crew_creator(stock_selection): | |
| # data_analyst_agent = Agent( | |
| # role="Data Analyst", | |
| # goal="Monitor and analyze market data in real-time " | |
| # "to identify trends and predict market movements.", | |
| # backstory="Specializing in financial markets, this agent " | |
| # "uses statistical modeling and machine learning " | |
| # "to provide crucial insights. With a knack for data, " | |
| # "the Data Analyst Agent is the cornerstone for " | |
| # "informing trading decisions.", | |
| # verbose=True, | |
| # allow_delegation=True, | |
| # tools = [scrape_tool, search_tool], | |
| # llm=llm, | |
| # ) | |
| trading_strategy_agent = Agent( | |
| role="Trading Strategy Developer", | |
| goal="Develop and test various trading strategies based " | |
| "on insights from the Data Analyst Agent.", | |
| backstory="Equipped with a deep understanding of financial " | |
| "markets and quantitative analysis, this agent " | |
| "devises and refines trading strategies. It evaluates " | |
| "the performance of different approaches to determine " | |
| "the most profitable and risk-averse options.", | |
| verbose=True, | |
| allow_delegation=True, | |
| tools = [scrape_tool, search_tool], | |
| llm=llm, | |
| ) | |
| # execution_agent = Agent( | |
| # role="Trade Advisor", | |
| # goal="Suggest optimal trade execution strategies " | |
| # "based on approved trading strategies.", | |
| # backstory="This agent specializes in analyzing the timing, price, " | |
| # "and logistical details of potential trades. By evaluating " | |
| # "these factors, it provides well-founded suggestions for " | |
| # "when and how trades should be executed to maximize " | |
| # "efficiency and adherence to strategy.", | |
| # verbose=True, | |
| # allow_delegation=True, | |
| # tools = [scrape_tool, search_tool], | |
| # llm=llm, | |
| # ) | |
| # risk_management_agent = Agent( | |
| # role="Risk Advisor", | |
| # goal="Evaluate and provide insights on the risks " | |
| # "associated with potential trading activities.", | |
| # backstory="Armed with a deep understanding of risk assessment models " | |
| # "and market dynamics, this agent scrutinizes the potential " | |
| # "risks of proposed trades. It offers a detailed analysis of " | |
| # "risk exposure and suggests safeguards to ensure that " | |
| # "trading activities align with the firm’s risk tolerance.", | |
| # verbose=True, | |
| # allow_delegation=True, | |
| # tools = [scrape_tool, search_tool], | |
| # llm=llm, | |
| # ) | |
| # Task for Data Analyst Agent: Analyze Market Data | |
| # data_analysis_task = Task( | |
| # description=( | |
| # "Continuously monitor and analyze market data for " | |
| # "the selected stock ({stock_selection}). " | |
| # "Use statistical modeling and machine learning to " | |
| # "identify trends and predict market movements." | |
| # ), | |
| # expected_output=( | |
| # "Insights and alerts about significant market " | |
| # "opportunities or threats for {stock_selection}." | |
| # ), | |
| # agent=data_analyst_agent, | |
| # ) | |
| # Task for Trading Strategy Agent: Develop Trading Strategies | |
| strategy_development_task = Task( | |
| description=( | |
| "Develop and refine trading strategies based on " | |
| "the insights from the Data Analyst and " | |
| # "user-defined risk tolerance ({risk_tolerance}). " | |
| # "Consider trading preferences ({trading_strategy_preference})." | |
| ), | |
| expected_output=( | |
| "A set of potential trading strategies for {stock_selection} " | |
| "that align with the user's risk tolerance." | |
| ), | |
| agent=trading_strategy_agent, | |
| ) | |
| # Task for Trade Advisor Agent: Plan Trade Execution | |
| # execution_planning_task = Task( | |
| # description=( | |
| # "Analyze approved trading strategies to determine the " | |
| # "best execution methods for {stock_selection}, " | |
| # "considering current market conditions and optimal pricing." | |
| # ), | |
| # expected_output=( | |
| # "Detailed execution plans suggesting how and when to " | |
| # "execute trades for {stock_selection}." | |
| # ), | |
| # agent=execution_agent, | |
| # ) | |
| # Task for Risk Advisor Agent: Assess Trading Risks | |
| # risk_assessment_task = Task( | |
| # description=( | |
| # "Evaluate the risks associated with the proposed trading " | |
| # "strategies and execution plans for {stock_selection}. " | |
| # "Provide a detailed analysis of potential risks " | |
| # "and suggest mitigation strategies." | |
| # ), | |
| # expected_output=( | |
| # "A comprehensive risk analysis report detailing potential " | |
| # "risks and mitigation recommendations for {stock_selection}." | |
| # ), | |
| # agent=risk_management_agent, | |
| # ) | |
| # Define the crew with agents and tasks | |
| financial_trading_crew = Crew( | |
| agents=[ | |
| # data_analyst_agent, | |
| trading_strategy_agent, | |
| # execution_agent, | |
| # risk_management_agent | |
| ], | |
| tasks=[ | |
| # data_analysis_task, | |
| strategy_development_task, | |
| # execution_planning_task, | |
| # risk_assessment_task | |
| ], | |
| manager_llm = llm, | |
| process=Process.sequential, | |
| verbose=True, | |
| ) | |
| result = financial_trading_crew.kickoff(inputs={ | |
| 'stock_selection': stock_selection, | |
| # 'initial_capital': initial_capital, | |
| # 'risk_tolerance': risk_tolerance, | |
| # 'trading_strategy_preference': trading_strategy_preference, | |
| # 'news_impact_consideration': news_impact_consideration | |
| }) | |
| return str(result) | |
| # print(result) |