TradingAgents/verify_regime_integration.py

64 lines
2.3 KiB
Python

import pandas as pd
from tradingagents.engines.regime_detector import RegimeDetector, DynamicIndicatorSelector
from tradingagents.agents.utils.agent_utils import get_stock_data
from io import StringIO
import json
def verify_regime():
print("🔬 Verifying Regime Detector Integration...")
ticker = "AAPL"
print(f"Fetching data for {ticker}...")
# Simulate what market_analyst_node does
try:
# Use invoke for StructuredTool
# Provide dates (using a recent 1-year window relative to now implicitly, or fixed dates if tool supports it)
# Assuming Alpaca data is available for this range
raw_data = get_stock_data.invoke({
"symbol": ticker,
"start_date": "2024-01-01",
"end_date": "2024-12-31",
"format": "csv"
})
if "Error" in raw_data:
print(f"❌ FAIL: Data fetch error: {raw_data}")
return
# Data has '#' comments in header, and is standard CSV
df = pd.read_csv(StringIO(raw_data), comment='#')
print(f"✅ Data fetched: {len(df)} rows")
print(f"COLUMNS: {df.columns.tolist()}")
print(f"HEAD:\n{df.head()}")
if 'Close' not in df.columns:
# Try case insensitive or check if it's in index?
# Sometimes to_string creates a weird header structure
pass
print("❌ FAIL: 'Close' column missing")
return
# Run Detector
print("Running RegimeDetector...")
regime, metrics = RegimeDetector.detect_regime(df['Close'])
print(f"✅ DETECTED REGIME: {regime.value}")
print(f" Volatility: {metrics['volatility']:.2%}")
print(f" Trend Strength: {metrics['trend_strength']:.2f}")
# Run Selector
optimal_params = DynamicIndicatorSelector.get_optimal_parameters(regime)
print(f"✅ RECOMMENDED STRATEGY: {optimal_params['strategy']}")
print(f" Indicators: {[k for k in optimal_params.keys() if 'period' in k]}")
print("\n🎉 INTEGRATION VERIFIED: The engine is analyzing data correctly.")
except Exception as e:
print(f"❌ FAIL: Exception: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
verify_regime()