stock-analysis-lianghua
v1.0.0分析任意股票的技术指标和趋势,或修改 Trading代理sV2 中的分析师节点。当用户需要分析某只股票、查看技术指标、获取市场趋势判断时,使用独立分析脚本;当需要新增/修改分析师节点时,参考架构模板。
运行时依赖
安装命令
点击复制技能文档
股票分析 技能 快速分析(独立脚本)
脚本位置:.cursor/技能s/stock-analysis/analyze_stock.py(项目根目录也有一份副本 analyze_stock.py)
当用户要求分析某只股票时,直接执行此脚本:
python .cursor/技能s/stock-analysis/analyze_stock.py <股票代码> [选项]
参数 参数 说明 默认值 symbol (必填) 股票代码,如 META, AAPL, 0700.HK, TSLA - --date, -d 分析日期,格式 YYYY-MM-DD 今天 --days, -n 回看天数 90 --indicators, -i 逗号分隔的指标列表,或 all 8个核心指标 示例 python .cursor/技能s/stock-analysis/analyze_stock.py META python .cursor/技能s/stock-analysis/analyze_stock.py AAPL --date 2025-02-20 python .cursor/技能s/stock-analysis/analyze_stock.py 0700.HK --days 60 python .cursor/技能s/stock-analysis/analyze_stock.py TSLA -i rsi,macd,atr,close_50_sma python .cursor/技能s/stock-analysis/analyze_stock.py NVDA -i all
数据源(多源容灾)
脚本按以下优先级获取数据,自动容灾切换:
Stooq(免费、无需API key、不限速) Yahoo 图表 API(直接 HTTP 请求) yfinance(Ticker.历史) 本地缓存(trading代理s/dataflows/data_缓存/ 中已有的 CSV)
成功获取的数据会自动缓存到 data_缓存/ 目录。
报告输出内容 近期行情 - 最近 15 个交易日 OHLCV + 涨跌统计 技术指标 - 每个指标的时间序列趋势 综合分析 - 趋势判断、动量分析、波动率分析、短期信号 指标汇总表 - 所有指标的当前值和信号判断 分析逻辑
脚本内置的分析逻辑对应 market_analyst.py 的 prompt:
趋势判断: 基于价格与 50SMA/200SMA 的位置关系(多头/空头排列 + 金叉/死叉) 动量分析: RSI 超买超卖(70/30 阈值)+ MACD 与信号线交叉 + 柱状图方向 波动率: ATR 占股价比例 + 布林带位置 短期信号: 价格与 10EMA 的关系 支持的全部指标 close_50_sma, close_200_sma, close_10_ema, macd, macds, macdh, rsi, boll, boll_ub, boll_lb, atr, vwma
依赖 yfinance, stockstats, pandas, 请求s
项目架构(LangGraph 分析师节点) trading代理s/ ├── 代理s/analysts/ # 分析师节点 │ ├── market_analyst.py # 市场/技术分析 │ ├── fundamentals_analyst.py # 基本面分析 │ ├── news_analyst.py # 新闻分析 │ └── social_media_analyst.py # 社交媒体情绪分析 ├── dataflows/ │ └── interface.py # 数据接口(工具函数定义) └── graph/ └── trading_graph.py # LangGraph 交易图
分析师节点结构
每个分析师遵循统一模式:创建_xxx_analyst(llm, 工具kit) -> node_function
核心模板 from langchAIn_core.prompts 导入 ChatPromptTemplate, MessagesPlaceholder from langchAIn_core.messages 导入 HumanMessage from ...dataflows.interface 导入 获取_market_type
def 创建_xxx_analyst(llm, 工具kit): def xxx_analyst_node(状态): current_date = 状态["trade_date"] ticker = 状态["company_of_interest"] market_type = 获取_market_type() # "CN" 或 "US"
# 1. 根据 market_type 设置 系统_message 和 工具s if market_type == "CN": 系统_message = "..." 工具s = [工具kit.cn_工具_1, 工具kit.cn_工具_2] else: 系统_message = "..." if 工具kit.config["online_工具s"]: 工具s = [工具kit.online_工具] else: 工具s = [工具kit.offline_工具_1, 工具kit.offline_工具_2]
# 2. 构建 prompt(CN/US 可分别定义或共用) prompt = ChatPromptTemplate.from_messages([ ("系统", "你是一个有帮助的AI助手,与其他助手协作完成任务。" "使用提供的工具来推进回答问题。如果你无法完全回答,没关系;" "其他拥有不同工具的助手会在你停下的地方继续帮忙。" "你可以使用以下工具:{工具_names}\n{系统_message}" "供参考,当前日期是 {current_date}。我们正在分析的公司是 {ticker}"), MessagesPlaceholder(variable_name="messages"), ]) prompt = prompt.partial( 系统_message=系统_message, 工具_names=", ".join([t.name for t in 工具s]), current_date=current_date, ticker=ticker, )
# 3. 调用 LLM chAIn = prompt | llm.bind_工具s(工具s) messages = 状态["messages"].copy()
# 工具调用次数限制(防止无限循环) 工具_call_count = sum( 1 for msg in messages if hasattr(msg, '工具_calls') and msg.工具_calls ) if 工具_call_count >= 3: final_prompt = ChatPromptTemplate.from_messages([ ("系统", 系统_message + "\n\n重要提醒:请基于已获取的信息生成最终报告,不要再调用任何工具。"), MessagesPlaceholder(variable_name="messages"), ]) 结果 = (final_prompt | llm).invoke(messages) else: if not (messages and 获取attr(messages[-1], "角色", None) == "user"): messages.应用end(HumanMessage(content=f"请分析{ticker}的相关信息,并调用相关工具获取数据。")) 结果 = chAIn.invoke(messages)
# 4. 返回结果(key 与 状态 模式 对应) return { "messages": [结果], "xxx_报告": 结果.content, }
return xxx_analyst_node
状态 返回字段映射 分析师 返回 key 说明 market_analyst market_报告 技术指标与趋势分析 fundamentals_analyst fundamentals_报告 财务与基本面分析 news_analyst news_报告 新闻与公告分析 social_media_analyst sentiment_报告 社交媒体情绪分析 可用技术指标(市场分析师)
指标名称必须与以下精确匹配,否则工具调用会失败:
类别 指标 说明 移动平均线 close_50_sma 50日简单移动平均线 close_200_sma 200日简单移动平均线 close_10_ema 10日指数移动平均线 MACD macd MACD 值 macds MACD 信号线 macdh MACD 柱状图 动量 rsi 相对强弱指数 波动率 boll / boll_ub / boll_lb 布林带(中/上/下轨) atr 平均真实波幅 成交量 vwma 成交量加权移动平均线
选择指标时最多 8 个,避免冗余(如不要同时选 rsi 和 stochrsi)。
数据工具对照表 分析师 A股(CN)工具 美股(US)在线工具 美股离线工具 市场分析 获取_ak分享_data / 获取_ak分享_data_online 获取_YFin_data_online 获取_YFin_data 获取_stockstats_indicators_报告 / _online 获取_stockstats_indicators_报告_online 获取_stockstats_indicators_报告 基本面 获取_ak分享_balance_shee