#!/usr/bin/env python3 """ 美股快速分析脚本(简化版) 用法: cd backend && python3 ../scripts/analyze_stock_simple.py AAPL cd backend && python3 ../scripts/analyze_stock_simple.py AAPL TSLA NVDA """ import sys import os import asyncio # 添加项目路径 sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'backend')) from app.services.yfinance_service import get_yfinance_service from app.crypto_agent.llm_signal_analyzer import LLMSignalAnalyzer from app.utils.logger import logger async def analyze(symbol: str): """分析单只股票""" print(f"\n{'='*60}") print(f"📊 分析 {symbol}") print(f"{'='*60}") try: # 获取服务和数据 yf_service = get_yfinance_service() llm = LLMSignalAnalyzer() # 获取行情 ticker = yf_service.get_ticker(symbol) if not ticker: print(f"❌ 无法获取行情") return price = ticker['lastPrice'] change = ticker['priceChangePercent'] print(f"价格: ${price:,.2f} ({change:+.2f}%)") # 获取K线数据 data = yf_service.get_multi_timeframe_data(symbol) print(f"K线: {list(data.keys())}") # LLM分析 print(f"\n🤖 LLM分析中...") result = await llm.analyze(symbol, data, symbols=[symbol], position_info=None) # 输出结果 summary = result.get('analysis_summary', '') signals = result.get('signals', []) print(f"\n状态: {summary}") if signals: print(f"\n🎯 发现 {len(signals)} 个信号:") for sig in signals: action = sig.get('action', 'wait') grade = sig.get('grade', 'D') conf = sig.get('confidence', 0) action_text = {'buy': '🟢 做多', 'sell': '🔴 做空'}.get(action, action) grade_icon = {'A': '⭐⭐⭐', 'B': '⭐⭐', 'C': '⭐'}.get(grade, '') print(f"\n {action_text} [{grade}{grade_icon}] {conf}%") entry = sig.get('entry_price') sl = sig.get('stop_loss') tp = sig.get('take_profit') if entry and sl and tp: print(f" 入场: ${entry:,.2f}") print(f" 止损: ${sl:,.2f}") print(f" 止盈: ${tp:,.2f}") reason = sig.get('reason', '') if reason: print(f" 理由: {reason[:100]}...") else: print(f"\n⏸️ 无交易信号") except Exception as e: print(f"❌ 错误: {e}") async def main(): symbols = sys.argv[1:] if len(sys.argv) > 1 else ['AAPL'] print(f"🤖 美股快速分析") print(f"股票: {', '.join(symbols)}") for symbol in symbols: await analyze(symbol.upper()) print(f"\n✅ 完成") if __name__ == "__main__": asyncio.run(main())