技能标识:stock-analysis
分析任意股票的技术指标和趋势,或修改 TradingAgentsV2 中的分析师节点。当用户需要分析某只股票、查看技术指标、获取市场趋势判断时,使用独立分析脚本;当需要新增/修改分析师节点时,参考架构模板。
脚本位置:.cursor/skills/stock-analysis/analyzestock.py(项目根目录也有一份副本 analyzestock.py)
当用户要求分析某只股票时,直接执行此脚本:
bash
python .cursor/skills/stock-analysis/analyze_stock.py <股票代码> [选项]
| 参数 | 说明 | 默认值 |
|---|---|---|
| symbol (必填) | 股票代码,如 META, AAPL, 0700.HK, TSLA | - |
| --date, -d |
bash
python .cursor/skills/stock-analysis/analyze_stock.py META
python .cursor/skills/stock-analysis/analyze_stock.py AAPL --date 2025-02-20
python .cursor/skills/stock-analysis/analyze_stock.py 0700.HK --days 60
python .cursor/skills/stock-analysis/analyzestock.py TSLA -i rsi,macd,atr,close50_sma
python .cursor/skills/stock-analysis/analyze_stock.py NVDA -i all
脚本按以下优先级获取数据,自动容灾切换:
成功获取的数据会自动缓存到 data_cache/ 目录。
脚本内置的分析逻辑对应 market_analyst.py 的 prompt:
close50sma, close200sma, close10ema,
macd, macds, macdh,
rsi,
boll, bollub, bolllb,
atr,
vwma
yfinance, stockstats, pandas, requests
tradingagents/
├── agents/analysts/ # 分析师节点
│ ├── market_analyst.py # 市场/技术分析
│ ├── fundamentals_analyst.py # 基本面分析
│ ├── news_analyst.py # 新闻分析
│ └── socialmediaanalyst.py # 社交媒体情绪分析
├── dataflows/
│ └── interface.py # 数据接口(工具函数定义)
└── graph/
└── trading_graph.py # LangGraph 交易图
每个分析师遵循统一模式:createxxxanalyst(llm, toolkit) -> node_function
python
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import HumanMessage
from ...dataflows.interface import getmarkettype
def createxxxanalyst(llm, toolkit):
def xxxanalystnode(state):
currentdate = state[tradedate]
ticker = state[companyofinterest]
markettype = getmarket_type() # CN 或 US
# 1. 根据 markettype 设置 systemmessage 和 tools
if market_type == CN:
system_message = ...
tools = [toolkit.cntool1, toolkit.cntool2]
else:
system_message = ...
if toolkit.config[online_tools]:
tools = [toolkit.online_tool]
else:
tools = [toolkit.offlinetool1, toolkit.offlinetool2]
# 2. 构建 prompt(CN/US 可分别定义或共用)
prompt = ChatPromptTemplate.from_messages([
(system,
你是一个有帮助的AI助手,与其他助手协作完成任务。
使用提供的工具来推进回答问题。如果你无法完全回答,没关系;
其他拥有不同工具的助手会在你停下的地方继续帮忙。
你可以使用以下工具:{toolnames}\n{systemmessage}
供参考,当前日期是 {current_date}。我们正在分析的公司是 {ticker}),
MessagesPlaceholder(variable_name=messages),
])
prompt = prompt.partial(
systemmessage=systemmessage,
tool_names=, .join([t.name for t in tools]),
currentdate=currentdate,
ticker=ticker,
)
# 3. 调用 LLM
chain = prompt | llm.bind_tools(tools)
messages = state[messages].copy()
# 工具调用次数限制(防止无限循环)
toolcallcount = sum(
1 for msg in messages
if hasattr(msg, toolcalls) and msg.toolcalls
)
if toolcallcount >= 3:
finalprompt = ChatPromptTemplate.frommessages([
(system, system_message + \n\n重要提醒:请基于已获取的信息生成最终报告,不要再调用任何工具。),
MessagesPlaceholder(variable_name=messages),
])
result = (final_prompt | llm).invoke(messages)
else:
if not (messages and getattr(messages[-1], role, None) == user):
messages.append(HumanMessage(content=f请分析{ticker}的相关信息,并调用相关工具获取数据。))
result = chain.invoke(messages)
# 4. 返回结果(key 与 state schema 对应)
return {
messages: [result],
xxx_report: result.content,
}
return xxxanalystnode
| 分析师 | 返回 key | 说明 |
|---|---|---|
| marketanalyst | marketreport | 技术指标与趋势分析 |
| fundamentalsanalyst |
指标名称必须与以下精确匹配,否则工具调用会失败:
| 类别 | 指标 | 说明 |
|---|---|---|
| 移动平均线 | close50sma | 50日简单移动平均线 |
选择指标时最多 8 个,避免冗余(如不要同时选 rsi 和 stochrsi)。
| 分析师 | A股(CN)工具 | 美股(US)在线工具 | 美股离线工具 |
|---|---|---|---|
| 市场分析 | getaksharedata / getaksharedataonline | getYFindataonline | getYFindata |
以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:
帮我安装 SkillHub 和 stock-analysis-lianghua-1776299085 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 stock-analysis-lianghua-1776299085 技能
skillhub install stock-analysis-lianghua-1776299085
文件大小: 12.44 KB | 发布时间: 2026-4-16 16:42