Laborany 股票分析助手
install
source · Clone the upstream repo
git clone https://github.com/laborany/laborany
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/laborany/laborany "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/stock-analyzer" ~/.claude/skills/laborany-laborany-6765d4 && rm -rf "$T"
manifest:
skills/stock-analyzer/SKILL.mdsource content
Stock Analyzer
股票综合分析与可视化报告生成器。
工作流程
┌─────────────────────────────────────────────────────────────────┐ │ INPUT: 股票代码/名称 │ │ 例: "AAPL", "苹果", "600519", "茅台" │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ STEP 1: 识别股票 │ │ ├─ 解析输入,确定股票代码和市场 │ │ ├─ 美股: 直接使用代码 (AAPL, MSFT, GOOGL) │ │ └─ A股: 补全代码 (茅台 → 600519.SS) │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ STEP 2: K线数据采集 (核心步骤) │ │ ├─ [mcp__laborany_web__read_page] 从金融数据API获取历史OHLCV数据 │ │ ├─ 数据周期: 日K线,默认获取60-120个交易日 │ │ └─ 数据字段: 日期/开盘/最高/最低/收盘/成交量 │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ STEP 3: 技术指标计算 (基于K线原始数据) │ │ ├─ 均线系统: MA5 / MA10 / MA20 / MA60 │ │ ├─ MACD指标: DIF / DEA / MACD柱状图 │ │ ├─ RSI指标: RSI6 / RSI12 / RSI24 │ │ ├─ KDJ指标: K值 / D值 / J值 │ │ └─ 布林带: 上轨 / 中轨 / 下轨 │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ STEP 4: 辅助数据采集 (并行执行) │ │ ├─ [mcp__laborany_web__search] 搜索近期新闻和市场情绪 │ │ ├─ [mcp__laborany_web__search] 搜索财报数据和分析师评级 │ │ └─ [mcp__laborany_web__search] 搜索行业动态和政策影响 │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ STEP 5: 智能分析 │ │ ├─ 技术面: 基于计算出的指标进行趋势研判 │ │ ├─ 基本面: PE/PB/ROE/营收增长 估值分析 │ │ ├─ 消息面: 新闻情绪/行业动态/政策影响 │ │ └─ 综合: 多维度交叉验证,生成交易建议 │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ STEP 6: 生成可视化报告 │ │ ├─ 使用 assets/template.html 作为基础模板 │ │ ├─ 填充数据: K线图/MACD图/RSI图/KDJ图/成交量图 │ │ └─ 输出: {股票代码}_analysis.html │ └─────────────────────────────────────────────────────────────────┘
执行指南
Step 1: 识别股票
根据用户输入识别目标股票:
| 输入类型 | 示例 | 处理方式 |
|---|---|---|
| 美股代码 | AAPL, MSFT | 直接使用 |
| 美股名称 | 苹果, 微软 | mcp__laborany_web__search 查询对应代码 |
| A股代码 | 600519, 000858 | 补充后缀 (.SS 上交所 / .SZ 深交所) |
| A股名称 | 茅台, 五粮液 | mcp__laborany_web__search 查询对应代码 |
Step 2: K线数据采集
这是核心步骤,需要获取真实的历史K线数据用于后续技术指标计算。
数据源选择
| 市场 | 推荐数据源 | API示例 |
|---|---|---|
| 美股 | Yahoo Finance | |
| 美股 | Alpha Vantage | |
| A股 | 新浪财经 | |
| A股 | 东方财富 | 通过 mcp__laborany_web__search 搜索 "{股票代码} 历史K线数据" |
使用 mcp__laborany_web__read_page 获取数据
# 美股示例 (Yahoo Finance) mcp__laborany_web__read_page URL: https://query1.finance.yahoo.com/v8/finance/chart/AAPL?interval=1d&range=3mo Prompt: 提取JSON中的K线数据,返回格式化的OHLCV数组 # A股示例 (新浪财经) mcp__laborany_web__read_page URL: https://money.finance.sina.com.cn/quotes_service/api/json_v2.php/CN_MarketData.getKLineData?symbol=sh600519&scale=240&ma=no&datalen=120 Prompt: 提取K线数据数组,包含日期、开盘、最高、最低、收盘、成交量
K线数据结构
采集后的数据应整理为以下结构:
const klineData = { dates: ["2024-01-02", "2024-01-03", ...], // 日期数组 open: [185.50, 186.20, ...], // 开盘价数组 high: [187.30, 188.10, ...], // 最高价数组 low: [184.80, 185.50, ...], // 最低价数组 close: [186.80, 187.50, ...], // 收盘价数组 volume: [52340000, 48920000, ...] // 成交量数组 };
Step 3: 技术指标计算
基于采集的K线原始数据,计算以下技术指标。参考 references/technical-indicators.md 获取详细公式。
3.1 移动平均线 (MA)
// MA计算公式: MA(N) = SUM(Close, N) / N function calculateMA(closes, period) { const result = []; for (let i = 0; i < closes.length; i++) { if (i < period - 1) { result.push(null); } else { const sum = closes.slice(i - period + 1, i + 1).reduce((a, b) => a + b, 0); result.push(+(sum / period).toFixed(2)); } } return result; } // 计算各周期均线 const ma5 = calculateMA(closes, 5); const ma10 = calculateMA(closes, 10); const ma20 = calculateMA(closes, 20); const ma60 = calculateMA(closes, 60);
3.2 MACD 指标
// EMA计算 function calculateEMA(data, period) { const k = 2 / (period + 1); const result = [data[0]]; for (let i = 1; i < data.length; i++) { result.push(data[i] * k + result[i - 1] * (1 - k)); } return result; } // MACD计算 function calculateMACD(closes) { const ema12 = calculateEMA(closes, 12); const ema26 = calculateEMA(closes, 26); const dif = ema12.map((v, i) => +(v - ema26[i]).toFixed(4)); const dea = calculateEMA(dif, 9); const macd = dif.map((v, i) => +((v - dea[i]) * 2).toFixed(4)); return { dif, dea, macd }; }
3.3 RSI 指标
function calculateRSI(closes, period = 14) { const changes = []; for (let i = 1; i < closes.length; i++) { changes.push(closes[i] - closes[i - 1]); } const result = [null]; for (let i = period; i <= changes.length; i++) { const slice = changes.slice(i - period, i); const gains = slice.filter(x => x > 0).reduce((a, b) => a + b, 0); const losses = Math.abs(slice.filter(x => x < 0).reduce((a, b) => a + b, 0)); const rs = losses === 0 ? 100 : gains / losses; result.push(+(100 - 100 / (1 + rs)).toFixed(2)); } // 填充前面的null while (result.length < closes.length) { result.unshift(null); } return result; } const rsi6 = calculateRSI(closes, 6); const rsi12 = calculateRSI(closes, 12); const rsi24 = calculateRSI(closes, 24);
3.4 KDJ 指标
function calculateKDJ(highs, lows, closes, period = 9) { const k = [], d = [], j = []; for (let i = 0; i < closes.length; i++) { if (i < period - 1) { k.push(50); d.push(50); j.push(50); continue; } const highSlice = highs.slice(i - period + 1, i + 1); const lowSlice = lows.slice(i - period + 1, i + 1); const hh = Math.max(...highSlice); const ll = Math.min(...lowSlice); const rsv = hh === ll ? 50 : ((closes[i] - ll) / (hh - ll)) * 100; const kVal = i === period - 1 ? rsv : (2/3) * k[i-1] + (1/3) * rsv; const dVal = i === period - 1 ? kVal : (2/3) * d[i-1] + (1/3) * kVal; const jVal = 3 * kVal - 2 * dVal; k.push(+kVal.toFixed(2)); d.push(+dVal.toFixed(2)); j.push(+jVal.toFixed(2)); } return { k, d, j }; }
3.5 布林带 (BOLL)
function calculateBOLL(closes, period = 20, multiplier = 2) { const middle = calculateMA(closes, period); const upper = [], lower = []; for (let i = 0; i < closes.length; i++) { if (i < period - 1) { upper.push(null); lower.push(null); continue; } const slice = closes.slice(i - period + 1, i + 1); const mean = middle[i]; const variance = slice.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / period; const std = Math.sqrt(variance); upper.push(+(mean + multiplier * std).toFixed(2)); lower.push(+(mean - multiplier * std).toFixed(2)); } return { upper, middle, lower }; }
Step 4: 辅助数据采集
使用 mcp__laborany_web__search 工具并行采集辅助数据:
# 新闻资讯 "{股票代码} latest news {当前年份}" "{股票名称} 最新消息 {当前年份}" # 财报分析 "{股票代码} earnings report analysis {当前年份}" "{股票代码} 财报 业绩 分析" # 行业动态 "{股票代码} industry analysis {当前年份}" "{行业名称} 政策 监管 {当前年份}"
Step 5: 智能分析
基于K线数据计算的技术指标和采集的辅助数据,进行多维度分析:
5.1 技术面分析
根据计算出的指标进行趋势研判:
| 指标 | 多头信号 | 空头信号 |
|---|---|---|
| MA排列 | MA5 > MA10 > MA20 > MA60 | MA5 < MA10 < MA20 < MA60 |
| MACD | DIF上穿DEA (金叉) | DIF下穿DEA (死叉) |
| RSI | RSI < 30 (超卖反弹) | RSI > 70 (超买回调) |
| KDJ | K上穿D且J < 20 | K下穿D且J > 80 |
| BOLL | 价格触及下轨反弹 | 价格触及上��回落 |
信号强度判断:
- 强信号:3个以上指标同向
- 中等信号:2个指标同向
- 弱信号:仅1个指标
5.2 基本面分析
- 估值指标:PE/PB 与行业对比
- 成长性:营收/利润增长率
- 盈利能力:ROE/毛利率/净利率
5.3 消息面分析
- 新闻情绪:正面/负面/中性
- 行业动态:竞争格局变化
- 政策影响:监管/宏观政策
5.4 综合建议
- 短期策略(1-2周)
- 中期策略(1-3月)
- 风险提示
Step 6: 生成可视化报告
6.1 CHART_DATA 数据结构
生成报告时,需要构建完整的图表数据对象:
const chartData = { // ═══════════════════════════════════════════════════════════════ // 基础K线数据 // ═══════════════════════════════════════════════════════════════ dates: ["2024-01-02", "2024-01-03", ...], // K线数据: [开盘, 收盘, 最低, 最高] (ECharts candlestick格式) kline: [ [185.50, 186.80, 184.80, 187.30], [186.20, 187.50, 185.50, 188.10], // ... ], // 成交量 volume: [52340000, 48920000, ...], // ═══════════════════════════════════════════════════════════════ // 均线数据 // ═══════════════════════════════════════════════════════════════ ma5: [null, null, null, null, 186.20, 186.80, ...], ma10: [null, null, null, null, null, null, null, null, null, 185.90, ...], ma20: [...], ma60: [...], // ═══════════════════════════════════════════════════════════════ // MACD指标 // ═══════════════════════════════════════════════════════════════ dif: [0, 0.12, 0.25, 0.38, ...], dea: [0, 0.02, 0.07, 0.13, ...], macd: [0, 0.20, 0.36, 0.50, ...], // ═══════════════════════════════════════════════════════════════ // RSI指标 // ═══════════════════════════════════════════════════════════════ rsi6: [null, null, null, null, null, 55.32, 58.21, ...], rsi12: [...], rsi24: [...], // ═══════════════════════════════════════════════════════════════ // KDJ指标 // ═══════════════════════════════════════════════════════════════ k: [50, 50, 50, 50, 50, 50, 50, 50, 52.30, 55.80, ...], d: [50, 50, 50, 50, 50, 50, 50, 50, 51.10, 52.67, ...], j: [50, 50, 50, 50, 50, 50, 50, 50, 54.70, 62.06, ...], // ═══════════════════════════════════════════════════════════════ // 布林带 // ═══════════════════════════════════════════════════════════════ bollUpper: [null, ..., 192.50, 193.20, ...], bollMiddle: [null, ..., 186.80, 187.10, ...], bollLower: [null, ..., 181.10, 181.00, ...] };
6.2 模板占位符
| 占位符 | 说明 | 示例值 |
|---|---|---|
| 股票代码 | AAPL |
| 股票名称 | 苹果公司 |
| 当前价格 | $187.50 |
| 涨跌幅 | +2.35% |
| 涨跌方向CSS类 | price-up / price-down |
| 分析日期 | 2024-01-15 |
| 技术指标HTML | 见下方示例 |
| 基本面指标HTML | 见下方示例 |
| 新闻列表HTML | 见下方示例 |
| 短期策略文本 | 建议持有观望... |
| 中期策略文本 | 可逢低布局... |
| 风险提示文本 | 注意市场波动... |
| 综合分析文本 | 技术面显示... |
| 图表JSON数据 | 见上方结构 |
6.3 指标HTML模板
<!-- 技术指标项模板 --> <div class="indicator-item"> <div class="indicator-label">MA趋势</div> <div class="indicator-value signal-bullish">多头排列</div> </div> <div class="indicator-item"> <div class="indicator-label">MACD</div> <div class="indicator-value signal-bullish">金叉 (DIF: 0.85)</div> </div> <div class="indicator-item"> <div class="indicator-label">RSI(14)</div> <div class="indicator-value signal-neutral">55.32 (中性)</div> </div> <div class="indicator-item"> <div class="indicator-label">KDJ</div> <div class="indicator-value signal-bearish">K:78 D:72 J:90</div> </div>
6.4 输出文件
保存为
{股票代码}_analysis.html,例如:AAPL_analysis.html
输出示例
生成的 HTML 报告包含:
- 头部概览 - 股票名称、代码、当前价格、涨跌幅
- K线图表 - 交互式K线图 + MA均线叠加
- MACD图表 - DIF/DEA曲线 + MACD柱状图
- 技术指标面板 - MA趋势/MACD/RSI/KDJ 信号状态
- 基本面指标 - PE/PB/ROE等关键财务指标
- 新闻时间线 - 近期重要新闻列表
- 策略建议卡片 - 短期/中期操作建议 + 风险提示
注意事项
- 所有分析仅供参考,不构成投资建议
- K线数据来源于公开API,可能存在延迟
- 技术指标计算基于历史数据,不代表未来走势
- 建议结合其他专业工具交叉验证