TradingAgents/test_crypto_agents.py

325 lines
10 KiB
Python

"""
Test script for crypto agents (Phase 2)
Tests the crypto-specific analyst agents
"""
import os
import sys
# Add project root to path
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from tradingagents.agents.analysts.onchain_analyst import create_onchain_analyst
from tradingagents.agents.analysts.crypto_fundamentals_analyst import create_crypto_fundamentals_analyst
from tradingagents.agents.analysts.crypto_technical_analyst import create_crypto_technical_analyst
from tradingagents.agents.analysts.crypto_news_analyst import create_crypto_news_analyst
from tradingagents.agents.analysts.crypto_sentiment_analyst import create_crypto_sentiment_analyst
def print_section(title):
"""Print formatted section header."""
print("\n" + "=" * 80)
print(f" {title}")
print("=" * 80 + "\n")
def test_crypto_tools():
"""Test crypto tool imports and basic functionality."""
print_section("TESTING CRYPTO TOOLS")
try:
from tradingagents.agents.utils.crypto_tools import (
get_onchain_metrics,
get_crypto_market_data,
get_crypto_fundamentals,
get_crypto_news,
get_tokenomics
)
print("✅ Crypto tools imported successfully")
print("\nAvailable tools:")
print(" - get_onchain_metrics")
print(" - get_exchange_flows")
print(" - get_whale_activity")
print(" - get_crypto_market_data")
print(" - get_crypto_ticker")
print(" - get_crypto_fundamentals")
print(" - get_crypto_news")
print(" - get_order_book_analysis")
print(" - get_tokenomics")
print(" - get_market_overview")
return True
except ImportError as e:
print(f"❌ Failed to import crypto tools: {e}")
return False
def test_onchain_analyst():
"""Test On-Chain Analyst agent creation."""
print_section("TESTING ON-CHAIN ANALYST")
try:
# Create mock LLM (we're just testing structure, not execution)
class MockLLM:
def bind_tools(self, tools):
return self
def invoke(self, state):
class MockResult:
tool_calls = []
content = "Mock on-chain analysis report"
return MockResult()
llm = MockLLM()
onchain_analyst = create_onchain_analyst(llm)
print("✅ On-Chain Analyst created successfully")
print("\nAgent capabilities:")
print(" - Network health metrics")
print(" - Exchange flow analysis")
print(" - Whale activity tracking")
print(" - On-chain valuation (NVT, MVRV)")
# Test state structure
test_state = {
"trade_date": "2024-10-07",
"company_of_interest": "BTC/USDT",
"messages": []
}
result = onchain_analyst(test_state)
print(f"\n✅ Agent execution successful")
print(f" Output keys: {list(result.keys())}")
return True
except Exception as e:
print(f"❌ On-Chain Analyst test failed: {e}")
return False
def test_crypto_fundamentals_analyst():
"""Test Crypto Fundamentals Analyst agent creation."""
print_section("TESTING CRYPTO FUNDAMENTALS ANALYST")
try:
class MockLLM:
def bind_tools(self, tools):
return self
def invoke(self, state):
class MockResult:
tool_calls = []
content = "Mock crypto fundamentals report"
return MockResult()
llm = MockLLM()
fundamentals_analyst = create_crypto_fundamentals_analyst(llm)
print("✅ Crypto Fundamentals Analyst created successfully")
print("\nAgent capabilities:")
print(" - Tokenomics analysis")
print(" - Project fundamentals")
print(" - Market position assessment")
print(" - Competitive analysis")
# Test execution
test_state = {
"trade_date": "2024-10-07",
"company_of_interest": "ETH/USDT",
"messages": []
}
result = fundamentals_analyst(test_state)
print(f"\n✅ Agent execution successful")
print(f" Output keys: {list(result.keys())}")
return True
except Exception as e:
print(f"❌ Crypto Fundamentals Analyst test failed: {e}")
return False
def test_crypto_technical_analyst():
"""Test Crypto Technical Analyst agent creation."""
print_section("TESTING CRYPTO TECHNICAL ANALYST")
try:
class MockLLM:
def bind_tools(self, tools):
return self
def invoke(self, state):
class MockResult:
tool_calls = []
content = "Mock crypto technical analysis report"
return MockResult()
llm = MockLLM()
technical_analyst = create_crypto_technical_analyst(llm)
print("✅ Crypto Technical Analyst created successfully")
print("\nAgent capabilities:")
print(" - 24/7 market analysis")
print(" - Multi-timeframe analysis")
print(" - Order book depth analysis")
print(" - Crypto-specific indicators")
# Test execution
test_state = {
"trade_date": "2024-10-07",
"company_of_interest": "BTC/USDT",
"messages": []
}
result = technical_analyst(test_state)
print(f"\n✅ Agent execution successful")
print(f" Output keys: {list(result.keys())}")
return True
except Exception as e:
print(f"❌ Crypto Technical Analyst test failed: {e}")
return False
def test_crypto_news_analyst():
"""Test Crypto News Analyst agent creation."""
print_section("TESTING CRYPTO NEWS ANALYST")
try:
class MockLLM:
def bind_tools(self, tools):
return self
def invoke(self, state):
class MockResult:
tool_calls = []
content = "Mock crypto news analysis report"
return MockResult()
llm = MockLLM()
news_analyst = create_crypto_news_analyst(llm)
print("✅ Crypto News Analyst created successfully")
print("\nAgent capabilities:")
print(" - Regulatory news analysis")
print(" - Protocol update tracking")
print(" - Partnership announcements")
print(" - Exchange listing monitoring")
# Test execution
test_state = {
"trade_date": "2024-10-07",
"company_of_interest": "SOL/USDT",
"messages": []
}
result = news_analyst(test_state)
print(f"\n✅ Agent execution successful")
print(f" Output keys: {list(result.keys())}")
return True
except Exception as e:
print(f"❌ Crypto News Analyst test failed: {e}")
return False
def test_crypto_sentiment_analyst():
"""Test Crypto Sentiment Analyst agent creation."""
print_section("TESTING CRYPTO SENTIMENT ANALYST")
try:
class MockLLM:
def invoke(self, state):
class MockResult:
content = "Mock crypto sentiment analysis report"
return MockResult()
llm = MockLLM()
sentiment_analyst = create_crypto_sentiment_analyst(llm)
print("✅ Crypto Sentiment Analyst created successfully")
print("\nAgent capabilities:")
print(" - Crypto Twitter sentiment")
print(" - Reddit community analysis")
print(" - Fear & Greed Index interpretation")
print(" - Social volume tracking")
# Test execution
test_state = {
"trade_date": "2024-10-07",
"company_of_interest": "BTC/USDT",
"messages": []
}
result = sentiment_analyst(test_state)
print(f"\n✅ Agent execution successful")
print(f" Output keys: {list(result.keys())}")
return True
except Exception as e:
print(f"❌ Crypto Sentiment Analyst test failed: {e}")
return False
def main():
"""Run all crypto agent tests."""
print("\n" + "=" * 80)
print(" CRYPTO AGENTS TEST SUITE - PHASE 2")
print("=" * 80)
print("\nThis test validates:")
print(" ✓ Crypto tool imports")
print(" ✓ Agent creation and structure")
print(" ✓ Agent execution flow")
print("\nNote: This tests agent structure, not LLM integration")
print(" Full LLM testing requires OpenAI API key\n")
results = {}
# Run tests
results['crypto_tools'] = test_crypto_tools()
results['onchain_analyst'] = test_onchain_analyst()
results['fundamentals_analyst'] = test_crypto_fundamentals_analyst()
results['technical_analyst'] = test_crypto_technical_analyst()
results['news_analyst'] = test_crypto_news_analyst()
results['sentiment_analyst'] = test_crypto_sentiment_analyst()
# Summary
print_section("TEST SUMMARY")
total_tests = len(results)
passed_tests = sum(1 for result in results.values() if result is True)
for name, result in results.items():
status = "✅ PASSED" if result else "❌ FAILED"
print(f"{status:12s} - {name}")
print(f"\nResults: {passed_tests}/{total_tests} tests passed")
if passed_tests == total_tests:
print("\n🎉 All crypto agent tests passed! Phase 2 implementation complete.")
else:
print(f"\n⚠️ {total_tests - passed_tests} test(s) failed. Check error messages above.")
print("\n📊 Crypto Agent Lineup:")
print(" 1. On-Chain Analyst - Blockchain data analysis")
print(" 2. Crypto Fundamentals Analyst - Tokenomics & project analysis")
print(" 3. Crypto Technical Analyst - 24/7 market TA")
print(" 4. Crypto News Analyst - Regulatory & protocol news")
print(" 5. Crypto Sentiment Analyst - Social media sentiment")
print("\nNext steps:")
print(" 1. Integrate agents into TradingAgentsGraph")
print(" 2. Test with real LLM (requires OpenAI API key)")
print(" 3. Create crypto-specific workflows")
print(" 4. Proceed to Phase 3: Backtesting\n")
if __name__ == "__main__":
main()