股海罗盘(gh-data)— A 股股票量化分析技能
无需 MCP,纯 Python HTTP 直连采集 + WebAPI 量化分析。
配置
{
"skills": {
"entries": {
"ghdata_analyze": {
"config": {
"webapi_url": "http://api.topeasychina.com:15099/api",
"webapi_timeout": 30,
"doc_dir": "./doc"
}
}
}
}
}
| 配置项 | 默认值 | 说明 |
|---|---|---|
webapi_url |
http://api.topeasychina.com:15099/api |
WebAPI 地址(含端口) |
webapi_timeout |
30 |
HTTP 请求超时(秒) |
doc_dir |
./doc |
报告输出目录 |
配置生效规则(优先级从高到低):
- 上述
config配置{技能目录}/settings.json文件- 环境变量
GHDATA_API_URL- 代码默认值
🚀 核心工作流(每次分析必须执行)
每次分析一只股票,必须完成以下三阶段:
阶段 A:数据采集 ─→ 阶段 B:量化分析 ─→ 阶段 C:报告输出
HTTP直连公开API POST WebAPI分析API 生成DOCX报告+K线图
(新浪/腾讯/东方财富) (技术指标/信号/预测) (16维/评分/预判)
阶段 A:16 维数据采集
技能内置 Python 模块 ghdata/data_fetcher.py,直接 HTTP 采集以下数据源:
| # | 数据维度 | 数据源 | 函数 |
|---|---|---|---|
| 1 | 实时行情 | 新浪 + 腾讯双源交叉 | fetch_realtime(code) |
| 2 | 日K线数据 | 腾讯 ifzq.gtimg.cn | fetch_kline(code, days) |
| 3 | 今日分时 | 腾讯 qt.gtimg.cn 分钟数据 | fetch_today_tick(code) |
| 4 | 资金流向 | 同花顺 stockpage.10jqka | fetch_money_flow(code, days) |
| 5 | 融资融券 | 东方财富 DataCenter | fetch_margin_trading(code, days) |
| 6 | 机构持仓 | 东方财富 DataCenter | fetch_main_holdings(code) |
| 7 | 股东增减持 | 东方财富 DataCenter | fetch_shareholder_trade(code) |
| 8 | 高管持股变动 | 东方财富 DataCenter | fetch_executive_change(code) |
| 9 | 财务数据 | 东方财富 DataCenter | fetch_financial(code) |
| 10 | 资产负债表 | 东方财富 DataCenter | fetch_balance_sheet(code) |
| 11 | 利润表 | 东方财富 DataCenter | fetch_income_statement(code) |
| 12 | 现金流量表 | 东方财富 DataCenter | fetch_cashflow(code) |
| 13 | 分红历史 | 东方财富 DataCenter | fetch_dividend(code) |
| 14 | 券商研报 | 东方财富 DataCenter | fetch_research_report(code) |
| 15 | 机构调研 | 东方财富 DataCenter | fetch_institutional_survey(code) |
| 16 | 限售解禁 | 东方财富 DataCenter | fetch_unlock_data(code) |
Python 代码(直接在 CMD 中执行):
import sys, os
sys.path.insert(0, os.path.dirname(__file__))
from ghdata import data_fetcher as fetcher
from ghdata import config
def collect_all(code: str) -> dict:
"""16维数据一次性采集(全部HTTP直连,零外部依赖)"""
data = {}
data["realtime"] = fetcher.fetch_realtime(code) # 实时行情
data["kline"] = fetcher.fetch_kline(code, 120) # 日K线
data["tick"] = fetcher.fetch_today_tick(code) # 今日分时
data["moneyFlow"] = fetcher.fetch_money_flow(code, 10) # 资金流向
data["margin"] = fetcher.fetch_margin_trading(code, 10) # 融资融券
data["holdings"] = fetcher.fetch_main_holdings(code) # 机构持仓
data["shareholder"] = fetcher.fetch_shareholder_trade(code) # 股东增减持
data["executive"] = fetcher.fetch_executive_change(code) # 高管变动
data["financial"] = fetcher.fetch_financial(code) # 业绩报表
data["balance"] = fetcher.fetch_balance_sheet(code) # 资产负债表
data["income"] = fetcher.fetch_income_statement(code) # 利润表
data["cashflow"] = fetcher.fetch_cashflow(code) # 现金流量表
data["dividend"] = fetcher.fetch_dividend(code) # 分红历史
data["research"] = fetcher.fetch_research_report(code) # 券商研报
data["survey"] = fetcher.fetch_institutional_survey(code)# 机构调研
data["unlock"] = fetcher.fetch_unlock_data(code) # 限售解禁
data["industry"] = fetcher.fetch_industry_info(code) # 行业板块
return data
阶段 B:量化分析(WebAPI)
采集完数据后,调用 WebAPI 进行量化分析:
from ghdata import db_manager as db
# 调用 WebAPI 获取全量分析结果
result = db.kline_analyze(code, today_kline=None)
# 返回包含:
# indicators → MA5/MA10/MA20/MA60/MACD/KDJ/RSI/量比
# signals → 偏多/偏空/中性 汇总
# patterns → 大涨后规律/大跌后规律/支撑/阻力
# accuracy → 全部历史/近60日/近30日 准确率
# prediction → 方向/T+1/T+2/中期方向 + 价格区间
# learning → 自学习规律跟踪摘要
WebAPI 地址通过配置中的 webapi_url 设置。
阶段 C:报告生成
from ghdata import reporter
from ghdata import chart
# 1. 生成 K 线图
chart.generate_kline_chart(klines, ...)
# 2. 生成 14 章完整 DOCX 报告
reporter.generate(code, extra_data={
"holdings": {"points": [...], "conclusion": "..."},
"money_flow": {"points": [...], "conclusion": "..."},
# ... 其他维度数据
})
📊 14 章分析报告结构(最终定版)
| # | 章节 | 核心内容 | 展示格式 | 数据源 |
|---|---|---|---|---|
| 一 | 公司概况 | 主营业务 + 行业地位 + 市值 | 段落 | WebAPI |
| 二 | 实时行情 | 最新价/涨跌/PE/PB/市值 | 表格 | 新浪+腾讯 |
| 三 | 机构持仓分析 | 机构家数/持股/变动 | 数据表 + analysis_points | extra_data.holdings |
| 四 | 资金流向分析 | 近10日净流入/大单占比 | 数据表 + analysis_points | extra_data.money_flow |
| 五 | 融资融券分析 | 融资余额/净买/占比 | 数据表 + analysis_points | extra_data.margin_trading |
| 六 | 高管及大股东行为 | 增持/减持记录 | 数据表 + analysis_points | extra_data.shareholder_trade |
| 七 | 核心财务分析 | 7.1业绩/7.2利润/7.3资产/7.4现金流 | 数据表 + fin_analysis(短段落) | extra_data.financial_report |
| 八 | 合理股价分析 | 8.1PE/8.2PB/8.3综合区间+术语表 | 表格+段落(EPS/BVPS由PE/PB和最新价动态计算,禁止硬编码) | WebAPI |
| 九 | 分红历史 | 近年分红方案 | 数据表 + analysis_points | extra_data.dividend |
| 十 | 综合评分 | 5维度加权评分 | 加权总分公式展示 | 本地计算 |
| 十一 | K线技术分析 | 11.1均线/11.2MACD/11.3KDJ/11.4RSI/11.5信号总表 | 指标表 + 信号总表 | WebAPI indicators |
| 十二 | 方向预测 | 12.1方向判定与评分→12.2准确率→12.3 T+1→12.4 T+2→12.5周方向+判断依据 | 表格化依据 | WebAPI prediction |
| 十三 | 历史规律总结 | 4条规律(大涨后/大跌后/支撑位/阻力位)场景化展示 | 场景化展示 | WebAPI patterns |
| 十四 | 风险提示 | 6条动态风险 | 列表 | 综合生成 |
三种分析展示格式
| 函数 | 适用场景 | 展示方式 |
|---|---|---|
| analysis_points(标题, [要点列表], 结论=) | 机构/资金/两融/高管/分红 | 数据表下方 → 编号表格 + 加粗结论行 |
| fin_analysis(标题, 段落) | 财务四大表解读(业绩/利润/资产/现金流) | 数据表下方 → 简短段落(1~2句话,白话解读) |
| 信号总表 | 技术面综合 | 统一表格 → 汇总行(偏多X/偏空Y/中性Z) |
fin_analysis 使用规则(财务解读)
四张财务表(7.1业绩/7.2利润/7.3资产/7.4现金流)每张都必须带有 fin_analysis 解读或结论,不能只有数据表没有下文。每张表结束后都必须有一段白话解读,告诉用户这个数意味着什么。
正确的做法(数据在前,解读在后):
┌──────────────┬──────────┬──────────┐
│ 指标 │ 本期 │ 同比 │
├──────────────┼──────────┼──────────┤
│ 营业收入 │ 3500亿 │ +12.5% │
│ 营业利润 │ 420亿 │ +18.3% │
│ 净利润 │ 320亿 │ +52.0% │
└──────────────┴──────────┴──────────┘
▶ 利润表解读:本期净利润320亿,同比大增52%,主要受益于产品价格高位运行和产能提升。盈利能力持续增强,毛利率和净利率均创近年新高。
错误的做法(只有数据没有结论): ❌ 不允许
┌──────────────┬──────────┬──────────┐
│ 指标 │ 本期 │ 同比 │
├──────────────┼──────────┼──────────┤
│ 营业收入 │ 3500亿 │ +12.5% │
│ ... │ ... │ ... │
└──────────────┴──────────┴──────────┘
财务报表的 fin_analysis 必须回答三个问题:
- 好不好? — 盈利能力是增强还是减弱
- 为什么? — 变化的核心驱动因素(量/价/成本)
- 趋势如何? — 未来可能的方向
🔑 APIKey 管理
技能首次使用自动生成本地标识 Key,保存在 ~/.ghdata/ghdataapikey。
| 版本 | 每日限额 | 费用 |
|---|---|---|
| 🆓 免费版 | 3 次/工具/日 | 免费 |
| 💰 付费版 | 100 次/工具/日 | 需购买 |
购买地址: https://www.oraskl.com/ghdata-admin
付费后替换文件内容: 将购买的密钥写入 ~/.ghdata/ghdataapikey
使用原则:
- APIKey 是付费资源,不要随便消耗调用次数
- 同一只股票同一日仅调用一次 WebAPI,分析结果复用
- 调用前先检查是否已有缓存数据,避免重复请求
- 非必要不调
db_manager.analyze_kline(),尤其批量操作时垫高用量
📈 综合评分加权公式(定版)
总分 = 基本面×0.35 + 估值面×0.20 + 技术面×0.15 + 资金面×0.20 + 情绪面×0.10
评级:≥80优秀 🏆 | ≥65良好 ✅ | ≥50一般 ⚠️ | <50较差 ❌
| 维度 | 权重 | 说明 |
|---|---|---|
| 基本面 | 35% | 营收/利润/ROE 趋势 |
| 估值面 | 20% | PE/PB 历史分位 |
| 技术面 | 15% | 均线/MACD/KDJ/RSI 信号 |
| 资金面 | 20% | 主力资金流向/大单占比 |
| 情绪面 | 10% | 换手率/量比/市场情绪 |
🔴 方向预测铁律(Andy 铁律 — 必须严格遵循)
1. 方向预测展现顺序
方向预测章节内容必须按以下顺序排列:
方向判定(结论) → 准确率(可信度) → T+1(具体价格) → T+2 → 周方向 → 判断依据(理由)
符合「结论→支撑」的认知逻辑。
2. 方向判定 + 置信度
📈 方向:偏多 🎯 评分:6.5/10 [████████░░░░░░░]
方向:偏多 / 震荡偏多 / 震荡 / 震荡偏空 / 偏空
评分:0~10 分,附进度条
3. 历史准确率 — 三时段展示(Andy 铁律)
方向预测前必须输出历史准确率,分三时段展示:
历史准确率:
✅ 全部历史:6/8 = 75.0% [█████████░░░░░░░] (正确数/总数)
⚠️ 近60日:4/7 = 57.1% [███████░░░░░░░░░] (正确数/总数)
❌ 近30日:1/3 = 33.3% [████░░░░░░░░░░░░] (正确数/总数)
规则:
- ❌ 不展示偏多方向准确率(Andy 明确要求去掉,仅保留上述三行)
- ✅ 展示全部准确率 + 近60日 + 近30日
- 格式:
时段:Z.Z% [███████░░░░░░░] (正确数/总数) - 按「全部→60日→30日」顺序排列
- 进度条总长 20 格
4. 股价预测范围 — 三要素铁律
做量化股价预测时,必须同时输出以下三个范围要素:
| 要素 | 含义 | 示例 |
|---|---|---|
| 预测股价范围 | 综合判断的合理波动区间(最低~最高) | 6.85 ~ 7.10 元 |
| 最高值范围 | 压力位上方的极限高值区 | 7.05 ~ 7.15 元 |
| 最低值范围 | 支撑位下方的极限低值区 | 6.78 ~ 6.88 元 |
| 置信度 | 本次预测的可信程度(0~100%) | 75% |
没有范围只有方向 = 无效预测。用户要的是「多少钱能买、多少钱能卖」,不是「涨还是跌」。
5. T+1 预测(下一交易日)
📅 T+1预测:偏多 置信度:75%
预测区间: 6.85 ~ 7.10 元
最高值范围: 7.05 ~ 7.15 元
最低值范围: 6.78 ~ 6.88 元
价格中心: 6.98 元
💡 短线可关注
必须包含:
- 方向判定
- 置信度
- 预测区间(最低~最高)
- 最高值范围 / 最低值范围
- 预期价格中心
- 操作建议
6. T+2 预测(格式同上)
📅 T+2预测:偏多 置信度:70%
预测区间: 6.80 ~ 7.15 元
最高值范围: 7.10 ~ 7.20 元
最低值范围: 6.72 ~ 6.82 元
价格中心: 6.98 元
💡 可持票待涨
7. 周方向
📅 周方向:震荡偏多
✅ MA60上方支撑,中期趋势向上
必须包含周方向(Andy 确认)。
8. 判断依据 — 二维表展示
判断依据:
┌──────────┬──────────────────────────────────────────┬──────────┐
│ 维度 │ 内容 │ 信号 │
├──────────┼──────────────────────────────────────────┼──────────┤
│ 📐 技术面 │ 均线多头排列 MA5>MA10>MA20 │ 偏多 │
│ 📐 技术面 │ MACD零轴上金叉,红柱扩大 │ 偏多 │
│ 🔍 模式 │ 近3日量价齐升,突破箱体上沿 │ 偏多 │
│ 🛡️ 支撑 │ 20日均线支撑有效,回踩不破 │ 偏多 │
│ ⚠️ 风险 │ RSI进入超买区(72),注意短线回调风险 │ 偏空 │
└──────────┴──────────────────────────────────────────┴──────────┘
3~5条依据,涵盖:技术面 + 模式识别 + 支撑/压力 + 风险因素
📈 历史规律展示格式(定版)
场景化标题
用用户秒懂的语言,不用工程师腔:
| ❌ 旧格式 | ✅ 新格式 |
|---|---|
| 大涨后回调特征 | 某天突然大涨超过3%,之后3天会怎样? |
| 大跌后反弹规律 | 某天突然暴跌超过3%,之后3天能抄底吗? |
| 阻力位规律 | 股价涨到这个位置总是过不去? |
| 支撑位规律 | 股价跌到这里就跌不动了? |
展示模板
🔥 某天突然大涨超过3%,之后3天会怎样?
📈 历史上出现 12次
✅/⚠️ 准确率 75.0% [███████████░░░░░░░]
总共出现12次 | 符合9次 | 准确率75.0%
💡 操作参考:大涨后逢高减仓,不宜追高
📌 最近案例:2026-06-15 大涨4.2%,之后3日累计+1.1%
已识别规律(由服务端 POST /api/klineanalyze 自动返回)
| 规律 | 说明 |
|---|---|
| 大涨后回调规律 | >3%大涨后3日上涨概率低,不宜追高 |
| 大跌后反弹规律 | <-3%大跌后3日反弹概率高,可低吸 |
| 阻力位规律 | 统计历史上攻失败价位 |
| 支撑位规律 | 统计历史回踩获撑价位 |
| 回调性质判断 | MACD绿柱长度+KDJ极端程度区分趋势性下跌vs震荡回调 |
上述规律由服务端
KlineAnalyzeService.MinePatterns()自动计算。
注意: C# 中??运算符优先级低于-,格式%说明符会×100,已踩坑修复。
📚 自学习规律跟踪
API 返回 learningSummary 字段,从 stock_patterns 表读取历史规律记录。
展示格式
📚 规律学习摘要
──────────────────────────────────────────
规律#1(大涨后回调)第5次验证:大涨后3日下跌概率上升 ✅
方向准确率:68%→75%(+7次验证)
──────────────────────────────────────────
规律#2(大跌后反弹)第3次验证:大跌后反弹有效性稳定 ⚠️
方向准确率:62%→63%(+2次验证)
处理逻辑
- 按
pattern_type分组 - 统计验证次数(
verifyCount) - 对比最新与上一次的概率变化,生成更新描述
- 同时输出方向准确率(全部历史预测)
📐 T+1/T+2/周方向推算逻辑
DB 的 predictions 表没有 t1_direction/t2_direction/weekly_direction 数据(PredictorService 只算主方向)。
KlineAnalyzeService 在返回前通过 SubDirectionEstimator 自动推算:
| 主方向 | T+1/T+2 推算规则 |
|---|---|
| 偏多 / 偏空 | T+1/T+2 跟随主方向 |
| 震荡偏多 | 除非单日暴跌 >1.8%,才修正为「震荡」 |
| 震荡偏空 | 除非单日暴涨 >1.8%,才修正为「震荡」 |
| 震荡 | 根据涨跌幅判断偏向 |
🌟 报告内容人性化原则
- 场景化标题: 把「大涨后回调特征」改为「某天突然大涨超过3%,之后3天会怎样?」— 用户秒懂
- 可视化符号:
✅/❌/📈/📉/🔴/🟢比文字更快传递信息 - 操作建议: 每次规律后给一句操作参考(如「大涨后逢高减仓」),用户看报告是为了决策
- 出现次数+准确率单独展示: 拆成「总共出现N次 | 符合M次 | 准确率Z% + 进度条」
- 数据单位人性化: volume(股)→手,amount(元)→万元/亿元
📝 更高质量报告
如需生成排版更精美的报告(灵活字体/颜色/布局/多图组合),LLM 可自行编写脚本调用 ghdata/data_fetcher.py 的数据采集函数生成 DOCX,reporter.py 仅作为兜底方案。
🔴 铁律:WebAPI 无数据时付费内容占位策略
当服务端量化引擎返回空数据(APIKey无效或额度用完),严禁使用本地纯数学规则生成虚假预测。
原因: 本地纯数学规则没有历史回测验证、没有准确率追踪、没有自学习积累,输出结果无可靠度评估,等于给客户幻觉数据。
✅ 正确做法:生成付费内容占位章节,而非直接跳过。 章节十一(K线技术分析)、十二(方向预测)、十三(历史规律总结)在检测不到量化数据时,自动生成红色标记的付费内容提示 + 该章节付费后可查看内容的详细描述。这样客户即使没有付费也能看到付费后能获得什么,利于转化销售。
占位展示效果
🔴 【付费内容】十一、K线技术分析 当前APIKey无效或额度已用完,以下为付费后可查看的完整内容预览:
📌 均线分析:MA5/MA10/MA20/MA60数值及排列形态...
📌 MACD指标:DIF/DEA数值、金叉/死叉信号...
📌 ...
💳 购买APIKey:https://www.oraskl.com/ghdata-admin
处理流程
服务端量化引擎请求 → 检测返回数据是否有效
├─ 有数据 → 正常生成完整分析(章节十一~十三全内容)
└─ 无数据 → 生成付费内容占位
(含红字付费标记 + 内容预览 + 购买链接)
⚠️ 数据注意事项
- 新浪财经
hq.sinajs.cn是实时收盘价最可靠来源 - 腾讯分钟数据 成交量是累计值!需差分计算
- 同花顺资金流向 收盘价可能不准确,须用新浪验证
- 股票代码: 60xxx/68xxx=上海,00xxx/30xxx=深圳
- 今日K线(todayKline): 盘中必传(客户端自拉腾讯API实时K线,18:00前DB无今日数据);收市后可不传(18:00日更新服务已将今日K线写入DB)
- K线图(LINE_CHART): 仍需通过
generate_kline_chart工具生成PNG(工具内部自拉腾讯API) - 技术指标/信号/规律/准确率: 均由服务端统一计算(POST
/api/klineanalyze),客户端不再本地计算 - 无数据=无价值: 降级版(lite)对用户毫无意义,要么拿全数据出完整版,要么不出
- 🔴 禁止硬编码: 任何代码和规则中不得出现针对某只股票的特化数据(如
eps_est=0.26这种特定股票的EPS、行业描述、行业PE/PB均值等)。所有数据必须从API实时获取或从已有数据动态计算(如 EPS = price / PE)。SKILL.md 中的示例必须使用通用占位符,不得出现具体股票名称。
DOCX 报告数据单位人性化
| 字段 | 原始单位 | 报告展示单位 |
|---|---|---|
| volume | 股 | 手(÷100) |
| amount | 元 | 万元(÷10000)或亿元(÷100000000) |
| 流通市值/总市值 | 元 | 亿元 |
📄 风险提示与免责声明
本报告仅供参考,不构成任何投资建议。投资者据此操作,风险自担。
数据来源:新浪财经(hq.sinajs.cn)、腾讯财经(qt.gtimg.cn/ifzq.gtimg.cn)、东方财富(datacenter-web.eastmoney.com)、同花顺(stockpage.10jqka.com.cn)
股票投资有风险,历史数据不代表未来表现。
