#!/usr/bin/env python3 """ mo_dsa_opinion.py — DSA 策略问股(第二意见) 用 DSA 的 15 种策略独立分析一只股票,和 MoFin 自己的分析做交叉验证。 不替代 MoFin,只做参考。 用法: # 分析一只股票 python3 mo_dsa_opinion.py 00700 腾讯控股 # 指定策略 python3 mo_dsa_opinion.py 600519 贵州茅台 --skills ma_golden_cross,chan_theory # 作为 cron job 调用(静默模式,输出到文件) python3 mo_dsa_opinion.py 00700 腾讯控股 --quiet 输出格式: ## 🤖 DSA 策略参考 - 评分: 72/100 - 建议: 持有 - 趋势: 看多 - 策略: ma_golden_cross, bull_trend - 摘要: ... - 风险: ... """ import sys, os, json, argparse sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) def main(): parser = argparse.ArgumentParser(description="DSA 策略问股") parser.add_argument("code", help="股票代码") parser.add_argument("name", nargs="?", default="", help="股票名称") parser.add_argument("--skills", default="ma_golden_cross,bull_trend", help="策略列表,逗号分隔") parser.add_argument("--quiet", action="store_true", help="静默模式") parser.add_argument("--json", action="store_true", help="JSON 输出") args = parser.parse_args() skills = [s.strip() for s in args.skills.split(",") if s.strip()] if not args.quiet: print(f"🔍 DSA 分析 {args.code} {args.name}...", flush=True) print(f" 策略: {', '.join(skills)}", flush=True) from mo_bridge import get_stock_analysis, get_strategy_opinion_text # 先获取新闻和大盘上下文 from mo_bridge import enrich_analysis_context ctx = enrich_analysis_context(args.code, args.name, region="cn") opinion = get_stock_analysis(args.code, args.name, skills=skills) if not opinion: print("❌ DSA 分析失败(LLM 超时或 DSA 不可用)") sys.exit(1) if args.json: print(json.dumps(opinion, ensure_ascii=False, indent=2)) else: print() print(get_strategy_opinion_text(opinion)) # MoFin 对比提示 print() print("---") print("⚠️ 以上是 DSA 独立分析,仅供参考。") print(" MoFin 的分析以 strategy_lifecycle 为准。") print(" 如果两方结论一致 → 增强信心") print(" 如果两方结论冲突 → 关注分歧点,人工判断") if __name__ == "__main__": main()