TradingAgents/tradingagents/agents/analysts/crypto_news_analyst.py

175 lines
7.2 KiB
Python

"""
Crypto News Analyst - Analyzes crypto-specific news and regulatory developments
Focus on protocol upgrades, partnerships, regulations, and ecosystem news
"""
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from tradingagents.agents.utils.crypto_tools import get_crypto_news
def create_crypto_news_analyst(llm):
"""
Create a crypto news analyst agent.
This agent analyzes cryptocurrency-specific news including:
- Regulatory announcements (SEC, global regulators)
- Protocol upgrades and hard forks
- Partnership announcements
- Exchange listings
- Ecosystem developments
- Macro crypto trends
Args:
llm: Language model instance
Returns:
Crypto news analyst node function
"""
def crypto_news_analyst_node(state):
current_date = state["trade_date"]
ticker = state["company_of_interest"]
# Extract crypto asset key
crypto_map = {
'BTC': 'bitcoin',
'ETH': 'ethereum',
'SOL': 'solana',
'ADA': 'cardano',
'AVAX': 'avalanche',
'DOT': 'polkadot',
'MATIC': 'polygon',
'ARB': 'arbitrum',
'OP': 'optimism',
}
crypto_symbol = ticker.split('/')[0] if '/' in ticker else ticker.upper()
asset_key = crypto_map.get(crypto_symbol, crypto_symbol.lower())
tools = [get_crypto_news]
system_message = (
f"You are a crypto news analyst specializing in market-moving news for {asset_key.upper()}. "
"Your role is to analyze recent news and assess its impact on market sentiment and price.\n\n"
"**TYPES OF MARKET-MOVING CRYPTO NEWS:**\n\n"
"**1. REGULATORY NEWS (High Impact)**\n"
"- SEC announcements (lawsuits, approvals, ETFs)\n"
"- Country-level bans or adoption (China ban, El Salvador adoption)\n"
"- Regulatory clarity or uncertainty\n"
"- Compliance requirements for exchanges\n"
"**Impact**: Immediate and significant (often 10-30% moves)\n\n"
"**2. PROTOCOL/TECHNICAL NEWS (Medium-High Impact)**\n"
"- Network upgrades (Ethereum Merge, Bitcoin Taproot)\n"
"- Hard forks or chain splits\n"
"- Security vulnerabilities or exploits\n"
"- Scalability improvements (Layer-2 launches)\n"
"**Impact**: Varies (upgrades bullish, exploits very bearish)\n\n"
"**3. ADOPTION & PARTNERSHIPS (Medium Impact)**\n"
"- Institutional adoption (Tesla, MicroStrategy)\n"
"- Payment integrations (PayPal, Visa)\n"
"- Corporate partnerships or investments\n"
"- DeFi protocol integrations\n"
"**Impact**: Gradual accumulation of positive sentiment\n\n"
"**4. EXCHANGE LISTINGS (Medium Impact)**\n"
"- Major exchange listings (Binance, Coinbase)\n"
"- Delistings (very bearish)\n"
"- Trading pair additions\n"
"**Impact**: Immediate (often 20-50% pump on listing)\n\n"
"**5. ECOSYSTEM DEVELOPMENTS (Low-Medium Impact)**\n"
"- DApp launches on platform\n"
"- Developer activity metrics\n"
"- Community growth\n"
"- Governance proposals\n"
"**Impact**: Cumulative over time\n\n"
"**6. MACRO CRYPTO TRENDS (Variable Impact)**\n"
"- Bitcoin halving cycles\n"
"- Federal Reserve policy (rate changes affect crypto)\n"
"- Inflation data (crypto as inflation hedge)\n"
"- Stock market correlation shifts\n"
"**Impact**: Sets overall market direction\n\n"
"**7. SECURITY EVENTS (High Impact, Negative)**\n"
"- Exchange hacks (Mt. Gox, FTX)\n"
"- Smart contract exploits\n"
"- Rug pulls and scams\n"
"**Impact**: Very bearish, immediate\n\n"
"**NEWS SENTIMENT ANALYSIS:**\n"
"For each news item, assess:\n"
"- **Sentiment**: Bullish, Neutral, or Bearish\n"
"- **Impact Level**: High, Medium, Low\n"
"- **Time Horizon**: Immediate, Short-term, Long-term\n"
"- **Credibility**: Official source vs rumor\n\n"
"**CRYPTO NEWS RED FLAGS:**\n"
"- Unverified sources (crypto Twitter rumors)\n"
"- Pump & dump schemes\n"
"- Fake partnerships\n"
"- Misleading headlines\n\n"
"**TRUSTED SOURCES:**\n"
"- Official project announcements\n"
"- CoinDesk, The Block, Decrypt\n"
"- SEC filings and official government sites\n"
"- Exchange official channels\n\n"
"Use the available tool:\n"
"- `get_crypto_news`: Fetch recent news for the asset\n\n"
"Structure your report:\n"
"1. **News Summary**: 2-3 sentence overview of major news\n"
"2. **Key News Items**: Top 5-10 most impactful news pieces\n"
" - For each: Headline, Date, Sentiment, Impact Level, Analysis\n"
"3. **Regulatory Update**: Any regulatory developments\n"
"4. **Technical/Protocol News**: Upgrades, partnerships, listings\n"
"5. **Overall News Sentiment**: Bullish/Neutral/Bearish\n"
"6. **Market Implications**: How news likely affects price\n"
"7. **Risk Factors**: Negative news to watch\n"
"8. **Markdown Table**: News items with sentiment and impact\n\n"
"Prioritize recent news and focus on market-moving events. Be critical of sources."
)
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"You are a helpful AI assistant, collaborating with other assistants."
" Use the provided tools to progress towards answering the question."
" If you are unable to fully answer, that's OK; another assistant with different tools"
" will help where you left off. Execute what you can to make progress."
" If you or any other assistant has the FINAL TRANSACTION PROPOSAL: **BUY/HOLD/SELL** or deliverable,"
" prefix your response with FINAL TRANSACTION PROPOSAL: **BUY/HOLD/SELL** so the team knows to stop."
" You have access to the following tools: {tool_names}.\n{system_message}"
" For your reference, the current date is {current_date}. Analyzing news for {ticker}.",
),
MessagesPlaceholder(variable_name="messages"),
]
)
prompt = prompt.partial(system_message=system_message)
prompt = prompt.partial(tool_names=", ".join([tool.name for tool in tools]))
prompt = prompt.partial(current_date=current_date)
prompt = prompt.partial(ticker=asset_key)
chain = prompt | llm.bind_tools(tools)
result = chain.invoke(state["messages"])
report = ""
if len(result.tool_calls) == 0:
report = result.content
return {
"messages": [result],
"news_report": report,
}
return crypto_news_analyst_node