网淘吧来吧,欢迎您!

stock-analysis-lianghua技能使用说明

2026-04-01 新闻来源:网淘吧 围观:11
电脑广告
手机广告

股票分析技能

快速分析(独立脚本)

脚本位置:.cursor/skills/stock-analysis/analyze_stock.py(项目根目录也有一份副本analyze_stock.py

当用户要求分析某只股票时,直接执行此脚本:

stock-analysis-lianghua

python .cursor/skills/stock-analysis/analyze_stock.py <股票代码> [选项]

参数

参数说明默认值
symbol(必填)股票代码,如 META, AAPL, 0700.HK, TSLA-
--date,-d分析日期,格式 YYYY-MM-DD今天
--days,-n回看天数90
--indicators-i逗号分隔的指标列表,或all8个核心指标示例

数据源(多源容灾)

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/analyze_stock.py TSLA -i rsi,macd,atr,close_50_sma
python .cursor/skills/stock-analysis/analyze_stock.py NVDA -i all

脚本按以下优先级获取数据,自动容灾切换:

Stooq

  1. (免费、无需API key、不限速)Yahoo Chart API
  2. (直接 HTTP 请求)yfinance
  3. (Ticker.history)本地缓存
  4. tradingagents/dataflows/data_cache/中已有的 CSV)成功获取的数据会自动缓存到

data_cache/目录。报告输出内容

近期行情

  1. - 最近 15 个交易日 OHLCV + 涨跌统计技术指标
  2. - 每个指标的时间序列趋势综合分析
  3. 综合分析- 趋势判断、动量分析、波动率分析、短期信号
  4. 指标汇总表- 所有指标的当前值和信号判断

分析逻辑

脚本内置的分析逻辑对应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, requests

项目架构(LangGraph 分析师节点)

tradingagents/
├── agents/analysts/           # 分析师节点
│   ├── market_analyst.py      # 市场/技术分析
│   ├── fundamentals_analyst.py # 基本面分析
│   ├── news_analyst.py        # 新闻分析
│   └── social_media_analyst.py # 社交媒体情绪分析
├── dataflows/
│   └── interface.py           # 数据接口(工具函数定义)
└── graph/
    └── trading_graph.py       # LangGraph 交易图

分析师节点结构

每个分析师遵循统一模式:create_xxx_analyst(llm, toolkit) -> node_function

核心模板

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import HumanMessage
from ...dataflows.interface import get_market_type

def create_xxx_analyst(llm, toolkit):
    def xxx_analyst_node(state):
        current_date = state["trade_date"]
        ticker = state["company_of_interest"]
        market_type = get_market_type()  # "CN" 或 "US"

        # 1. 根据 market_type 设置 system_message 和 tools
        if market_type == "CN":
            system_message = "..."
            tools = [toolkit.cn_tool_1, toolkit.cn_tool_2]
        else:
            system_message = "..."
            if toolkit.config["online_tools"]:
                tools = [toolkit.online_tool]
            else:
                tools = [toolkit.offline_tool_1, toolkit.offline_tool_2]

        # 2. 构建 prompt(CN/US 可分别定义或共用)
        prompt = ChatPromptTemplate.from_messages([
            ("system",
             "你是一个有帮助的AI助手,与其他助手协作完成任务。"
             "使用提供的工具来推进回答问题。如果你无法完全回答,没关系;"
             "其他拥有不同工具的助手会在你停下的地方继续帮忙。"
             "你可以使用以下工具:{tool_names}\n{system_message}"
             "供参考,当前日期是 {current_date}。我们正在分析的公司是 {ticker}"),
            MessagesPlaceholder(variable_name="messages"),
        ])
        prompt = prompt.partial(
            system_message=system_message,
            tool_names=", ".join([t.name for t in tools]),
            current_date=current_date,
            ticker=ticker,
        )

        # 3. 调用 LLM
        chain = prompt | llm.bind_tools(tools)
        messages = state["messages"].copy()

        # 工具调用次数限制(防止无限循环)
        tool_call_count = sum(
            1 for msg in messages
            if hasattr(msg, 'tool_calls') and msg.tool_calls
        )
        if tool_call_count >= 3:
            final_prompt = ChatPromptTemplate.from_messages([
                ("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 xxx_analyst_node

State 返回字段映射

分析师返回 key说明
市场分析师市场报告技术指标与趋势分析
基本面分析师基本面报告财务与基本面分析
新闻分析师新闻报告新闻与公告分析
社交媒体分析师情绪报告社交媒体情绪分析

可用技术指标(市场分析师)

指标名称必须与以下精确匹配,否则工具调用会失败:

类别指标说明
移动平均线close_50_sma50日简单移动平均线
close_200_sma200日简单移动平均线
close_10_ema10日指数移动平均线
MACDmacdMACD 值
macdsMACD 信号线
macdhMACD 柱状图
动量rsi相对强弱指数
波动率boll/boll_ub/boll_lb布林带(中/上/下轨)
atr平均真实波幅
成交量vwma成交量加权移动平均线

选择指标时最多 8 个,避免冗余(如不要同时选 rsi 和 stochrsi)。

数据工具对照表

分析师A股(CN)工具美股(US)在线工具美股离线工具
市场分析get_akshare_data/在线获取A股数据在线获取雅虎财经数据获取雅虎财经数据
获取股票统计指标报告/_在线在线获取股票统计指标报告获取股票统计指标报告
基本面获取A股资产负债表获取基本面OpenAI数据获取SimFin数据/获取Finnhub数据
获取A股现金流量表/利润表/财务分析
获取A股特色数据
新闻获取公司新闻/获取市场新闻获取全球新闻_openai/获取谷歌新闻获取finnhub新闻/获取Reddit新闻/获取谷歌新闻
社交媒体获取雪球股票信息获取股票新闻_openai获取Reddit股票信息/获取finnhub新闻

工具函数定义在tradingagents/dataflows/interface.py

市场类型配置

通过get_market_type()获取,返回"CN""US"。配置来源于tradingagents/dataflows/config.py

修改指南

新增技术指标

  1. interface.py的 stockstats 工具中添加指标定义
  2. market_analyst.pysystem_message中添加指标描述
  3. 指标名需与 stockstats 库一致

新增分析师类型

  1. tradingagents/agents/analysts/创建新文件
  2. 遵循上方核心模板
  3. trading_graph.py中注册新节点
  4. 返回值 key 需在 state schema 中定义

修改报告格式

所有分析师system_message末尾已要求附加 Markdown 表格总结。如需修改格式,调整system_message的指令即可。

注意事项

  • 工具调用上限默认 3 次,超出后强制生成报告(防死循环)
  • online_tools配置决定使用在线/离线数据源
  • 所有分析师输出中文,system_message统一用中文编写
  • 报告末尾需附 Markdown 表格,方便前端展示

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏

文章底部电脑广告
手机广告位-内容正文底部

相关文章

您是本站第393705名访客 今日有1篇新文章/评论