集成股票分析能力,使用 Yahoo Finance 获取精确行情数据,本地计算技术指标(MA/MACD/RSI/100分评分),使用 Tavily 搜索新闻舆情,使用混元大模型(hunyuan-chat-integrator)生成智能分析报告。当应用需要股票分析功能时使用此 Skill。触发场景:股票分析、行情数据获取、技术指标计算、投资决策支持。输出 Markdown 格式报告,支持 Web App 展示。
不适用于:
用户输入股票代码
→ Yahoo Finance (yahoo-finance2) 获取精确 OHLCV 历史数据
→ 本地计算 MA5/10/20/60, MACD, RSI, 100分评分
→ Tavily (@tavily/core) 搜索最新新闻舆情
→ 混元大模型 (hunyuan-chat) 将结构化数据+7条交易规则 → 生成智能分析报告
→ 输出 Markdown 报告 Web App 展示
npm install yahoo-finance2 @tavily/core tencentcloud-sdk-nodejs-hunyuan @uiw/react-markdown-preview
yahoo-finance2:获取精确历史 K 线和实时行情@tavily/core:新闻搜索tencentcloud-sdk-nodejs-hunyuan:混元大模型(分析报告生成)@uiw/react-markdown-preview:Markdown 渲染组件
读取本 Skill 中的 lib/stock-analysis.ts 并复制到项目中。
同时需要 hunyuan-chat-integrator 的 lib/hunyuan-chat.ts,确保两个文件在同一目录下。
本 Skill 依赖以下 Skill:
web-search-integrator:提供 Tavily 搜索能力(Genie 环境零配置)hunyuan-chat-integrator:提供混元大模型能力(Genie 环境零配置)Genie 环境提供默认的零配置支持:
tavily.auth-proxy.local 代理hunyuan.tencent_cloud.auth-proxy.local 代理import { createStockAnalyzer } from './lib/stock-analysis';
const analyzer = createStockAnalyzer();
如需使用自有凭证:
# Tavily API Key(可选)
TAVILY_WEB_SEARCH_API_KEY=tvly-your-api-key-here
# 腾讯云凭证(可选,混元大模型)
TENCENTCLOUD_SECRET_ID=your-secret-id
TENCENTCLOUD_SECRET_KEY=your-secret-key
import { createStockAnalyzer } from './lib/stock-analysis';
const analyzer = createStockAnalyzer();
// 分析一只股票(支持 A 股、美股、港股)
const result = await analyzer.analyze('600519'); // 贵州茅台
// result.markdown 是混元大模型生成的智能分析报告
console.log(result.markdown);
// result.technicalAnalysis 是本地计算的精确技术指标
console.log(result.technicalAnalysis.signalScore); // 评分 0-100
console.log(result.technicalAnalysis.buySignal); // STRONG_BUY | BUY | HOLD | WAIT | SELL | STRONG_SELL
import { createStockAnalyzer } from './lib/stock-analysis';
import MarkdownPreview from '@uiw/react-markdown-preview';
// React 组件中
const [report, setReport] = useState<string>('');
const handleAnalyze = async (stockCode: string) => {
const analyzer = createStockAnalyzer();
const result = await analyzer.analyze(stockCode);
setReport(result.markdown);
};
// 渲染
<MarkdownPreview
source={report}
wrapperElement={{ "data-color-mode": "light" }}
/>
| 数据源 | 内容 | 说明 |
|---|---|---|
| Yahoo Finance | OHLCV 历史数据、实时报价、PE/PB | 精确数值,非搜索结果。支持速率限制重试机制 |
| 本地计算 | MA5/10/20/60、MACD(12,26,9)、RSI(6/12/24)、量比、乖离率 | 零延迟、100%精确 |
| 评分系统 | 100分制综合评分 | 基于 6 维度加权计算 |
| Tavily | 最新新闻、舆情 | 网络搜索最近一周新闻,自动过滤低质量来源(如 tipranks.com) |
| 维度 | 权重 | 满分条件 |
|---|---|---|
| 趋势 | 30 分 | 强势多头(MA5>MA10>MA20,发散上行) |
| 乖离率 | 20 分 | MA5 偏离 < 2%(回踩买点区间) |
| 量能 | 15 分 | 缩量回调(洗盘特征) |
| 支撑 | 10 分 | 价格在 MA5/MA10 获得支撑 |
| MACD | 15 分 | 零轴上方金叉 |
| RSI | 10 分 | 超卖区间(RSI < 30) |
| 评分区间 | 信号 | 操作建议 |
|---|---|---|
| 75-100 + 多头趋势 | 强烈买入 | 积极介入 |
| 60-74 + 多头/弱多头 | 买入 | 正常建仓 |
| 45-59 | 持有 | 维持仓位 |
| 30-44 | 观望 | 等待更好时机 |
| 0-29 或空头趋势 | 卖出 / 强烈卖出 | 退出仓位 |
评分系统计算完成后,所有结构化数据(行情、技术指标、评分结果、新闻)被送入混元大模型,由 LLM 结合 7 条核心交易规则 生成深度分析报告:
混元大模型输出结构清晰的 Markdown 报告(决策仪表盘):
# {股票名称}({代码}) 决策仪表盘
> 📅 日期 | 评分 **X/100** | 看多/震荡/看空 | **信号**
## 📊 核心结论 - 一句话判断 + 空仓/持仓建议表格
## 📈 趋势分析 - 均线系统表格 + 价格位置表格 + 量能特征
## 🔧 技术指标 - MACD表格 + RSI表格
## 📰 舆情分析 - 情绪判断 + 1-3条相关新闻
## 🎯 操作计划 - 买卖点位表格 + 仓位建议 + 检查清单
## 📋 评分明细 - 综合评分 + 优势/风险
> ⚠️ 风险提示
报告特点:
@uiw/react-markdown-preview 渲染// src/services/stock-analysis.service.ts
import { createStockAnalyzer } from '../lib/stock-analysis';
export class StockAnalysisService {
private analyzer = createStockAnalyzer();
async analyzeStock(code: string) {
return this.analyzer.analyze(code);
}
async getAnalysisMarkdown(code: string): Promise<string> {
const result = await this.analyzer.analyze(code);
return result.markdown;
}
}
// src/routes/stock.routes.ts
import { Router } from 'express';
import { StockAnalysisService } from '../services/stock-analysis.service';
const router = Router();
const service = new StockAnalysisService();
// 获取分析结果(JSON 格式,包含 markdown 和结构化数据)
router.get('/analyze/:code', async (req, res) => {
const result = await service.analyzeStock(req.params.code);
res.json(result);
});
// 下载 Markdown
router.get('/analyze/:code/download/md', async (req, res) => {
const markdown = await service.getAnalysisMarkdown(req.params.code);
res.setHeader('Content-Type', 'text/markdown; charset=utf-8');
res.setHeader('Content-Disposition', `attachment; filename="${req.params.code}_analysis.md"`);
res.send(markdown);
});
// src/components/StockAnalysis.tsx
import React, { useState } from 'react';
import MarkdownPreview from '@uiw/react-markdown-preview';
export function StockAnalysis() {
const [code, setCode] = useState('');
const [report, setReport] = useState('');
const [loading, setLoading] = useState(false);
const handleAnalyze = async () => {
setLoading(true);
const res = await fetch(`/api/analyze/${code}`);
const data = await res.json();
setReport(data.markdown);
setLoading(false);
};
return (
<div>
<input value={code} onChange={e => setCode(e.target.value)} placeholder="输入股票代码" />
<button onClick={handleAnalyze} disabled={loading}>
{loading ? '分析中...' : '开始分析'}
</button>
{report && (
<MarkdownPreview
source={report}
wrapperElement={{ "data-color-mode": "light" }}
/>
)}
</div>
);
}
| 市场 | 代码格式 | 示例 |
|---|---|---|
| A 股(沪深) | 6 位数字 | 600519, 000001, 300750 |
| 美股 | 字母 Ticker | AAPL, TSLA, NVDA |
| 港股 | 5 位数字 | 00700, 09988, 01810 |
.env 文件中行情数据不完整
新闻搜索结果为空
混元大模型返回为空
lib/stock-analysis.tsweb-search-integrator(Tavily 搜索)、hunyuan-chat-integrator(混元大模型)