76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
#!/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()
|