看外资怎么给关注的股票定价。UBS、Citi、摩根士丹利、JPMorgan 这些机构的评级变动、目标价和公开标题会收进来,按股票和机构归在一起;发完之后 1 天、5 天、20 个交易日相对 SPY 走没走,也会记一笔。
本来是给自己看算力、HBM、设备这几条线用的。NVDA、TSM、ASML 这类票,评级和目标价散落在 Finnhub、Yahoo、各家新闻 RSS 里,每天翻一遍很烦。这个站把 upgrade / downgrade / 调目标价收到一张 30 天台账里,再让 LLM 归纳公开标题(Kimi 为主,Qwen 兜底)。数字必须有公开交叉证据才进目标价卡片,模型自己抽出来的不会单独当事实。
采集大约四小时一轮,行情验证每天补。韩股那边会跟一下海力士、三星的本土券商目标价。首页默认看关注池近 30 天;点进股票页能看到现价对一致目标价、公开目标价区间和机构时间线。
git push只更新 GitHub。公网站点由 Cloudflare Workers Static Assets 提供;本机负责采集并自动发布只读快照。代码上线请跑bash deploy.sh。
- 评级变动追踪:Finnhub / Yahoo Finance / Google News RSS / Benzinga / Zacks / StreetInsider 等来源的 upgrade / downgrade / 目标价调整,按
(bank, symbol, action, date)去重,写入 30 天滚动台账 - 韩股覆盖:Google News 韩语 RSS 追踪 SK 海力士 / 三星的本土券商目标价(万韩元换算美元参考)
- 研报观点整合:公开标题、摘要与结构化评级事件按股票和机构归并,标出共识、分歧与仍待验证的风险;不声称持有未公开的完整研报
- 证据优先的目标价:优先 Alpha Vantage 一致预期、结构化评级和可回溯公开标题;LLM 抽出的数字没有外部交叉证据时不进目标价卡片。各家公开目标价按中位数启发式剔除异常值后再画区间
- 市场反应验证:复权收盘价计算观点发布后 1 / 5 / 20 个交易日回报,以相对 SPY 的几何超额收益判断公开倾向有没有被随后价格确认
- 机构倾向蒸馏:按机构汇总看多 / 看空、样本量、方向一致率,以及按看多/看空方向计的 5 日相对 SPY 超额收益;结论写进真实数字,不用全站共用的模板句
- LLM 摘要:Kimi(
kimi-code,JSON mode)生成结构化核心观点,Qwen(阿里云百炼)自动兜底 - 评级回填:Yahoo
from_grade → to_grade回填缺失的旧/新评级与目标价;摘要正则从新闻正文补提取模糊标题里的目标价
| 入口 | 内容 |
|---|---|
/ |
本期观点整合 + 评级台账。默认看关注池近 30 天;首屏只渲染当前一页(30 行),全量事件放进 JSON 岛,第一次筛选/翻页才解析 |
/stocks/<ticker>/ |
现价 vs 一致目标价、公开目标价区间、机构观点时间线 |
/institutions/、/institutions/<slug>/ |
各机构公开倾向、覆盖标的、同向率与市场确认样本 |
/reactions/ |
逐事件 1 / 5 / 20 日绝对与相对回报 |
/topics/ |
目标价、机构观点、市场验证、信号一致性的分析框架 |
/about/ /methodology/ /sources/ /disclosures/ |
品牌、方法、来源与 YMYL 披露 |
首页与子页共用 design_system.py 的主题 token 和组件样式(暗色 / 明亮 / 护眼)。旧 /learn/*、/compare/* 永久重定向到研究方法、目标价框架或对应股票页。
按「能抓取 → 能索引 → 能引用」接,不依赖单独的 GEO 黑科技。Google 对 AI Overviews 的指导仍是先把传统 SEO 做好。
| 入口 | 作用 |
|---|---|
/robots.txt |
允许 Googlebot / Bingbot / OAI-SearchBot;禁止 /api/;GPTBot / CCBot 默认 Disallow |
/sitemap.xml |
首页、有实质内容的关注池股票页、已有数据的机构页、市场验证、分析框架与信任页。没有评级/目标价/新闻的薄股票页不进 sitemap |
/llms.txt |
给生成式系统看的站点说明书;不是 Google AI Overviews 的前置条件 |
| JSON-LD | 首页 CollectionPage;股票/机构/反应页 Article;SoftwareApplication 只挂在 /about/(首页挂应用类型属于错配) |
| 社交卡片 | og:* + twitter:site / creator / image:alt;分享图 /og-image.png |
FAQ 结构化数据至少两组问答才输出。mainEntityOfPage 使用 WebPage 对象而不是裸 URL。
收录检查:python3 ib_research_seo_monitor.py 抓公网域名核对验证 meta、robots、sitemap 和关键页面未回归。
AI 算力 + 存储/HBM + 半导体设备 + 网络主线 30 只:
NVDA AMD AVGO MRVL INTC TSM ARM / MU WDC STX SNDK / ASML AMAT LRCX KLAC / ANET DELL CRWV VRT / MSFT GOOGL AMZN META ORCL IBM PLTR SNOW / AAPL TSLA CRM
改 ib_research_fetcher.py 里的 HOT_SYMBOLS 一处即可全局生效。
pip3 install -r requirements.txt
cp .env.example .env # 仅 FINNHUB_API_KEY 必需,其余缺失自动降级
python3 ib_research_fetcher.py
python3 ib_research_fetcher.py --fast # 读 AV 缓存,适合高频 cron
python3 ib_research_server.py # http://localhost:8081
python3 ib_research_health.py
python3 -m unittest test_ib_research_geo test_institution_intelligence定时任务见 ib_research_cron_runner.py(带锁、日志、异常告警)。每次采集成功且质量检查通过后,publish_cloudflare.py 会在后台导出并发布新的 Cloudflare 静态快照。
本仓库是代码源头;~/.openclaw/workspace 是采集运行环境(数据目录和 .env 留在那边,不被覆盖)。公网请求不再依赖本机 Flask/Tunnel 在线。
bash deploy.sh # 同步代码 → 校验/单测 → 本机预览冒烟 → 发布 Cloudflare
python3 publish_cloudflare.py # 仅重新导出并发布当前只读快照公网 https://fresearch.cc.cd/* 由 Worker route 直接命中静态资产;127.0.0.1:8081 仅保留为本机预览和手动刷新入口。Cloudflare 部署是不可变版本,发布失败时线上继续提供上一版内容。
| 文件 | 职责 |
|---|---|
ib_research_fetcher.py |
抓取 + LLM 摘要,产出 report.json |
ib_research_server.py |
Flask 服务与首页;首屏一页评级行 + JSON 岛 |
ib_research_geo.py |
GEO 子页、sitemap、robots、JSON-LD、llms.txt |
design_system.py |
主题 token、基础样式、公共组件 CSS |
institution_intelligence.py |
按机构聚合方向一致率与按方向计的超额收益 |
collectors/yahoo_provider.py |
Yahoo 评级回填 |
llm_fallback.py |
Kimi 失败时切 Qwen |
ib_research_cron_runner.py |
定时抓取入口 |
ib_research_health.py |
数据新鲜度 / 质量检查 |
ib_research_seo_monitor.py |
公网收录巡检 |
export_static_site.py |
把 Flask 只读页面、JSON API 与图标导出为静态站点 |
publish_cloudflare.py |
带锁构建并通过 Wrangler 发布 Cloudflare 快照 |
wrangler.jsonc |
Workers Static Assets、预览地址与生产 route 配置 |
deploy.sh |
同步到 workspace 并重启服务 |
test_ib_research_geo.py / test_institution_intelligence.py |
页面与机构分析单测 |
| Key | 说明 |
|---|---|
FINNHUB_API_KEY |
Finnhub 评级与新闻(必需) |
ALPHA_VANTAGE_API_KEY |
一致目标价(每日 25 次免费额度,按天缓存) |
TWELVEDATA_API_KEY / MARKETDATA_API_KEY |
行情补充 |
KIMI_API_KEY |
Kimi LLM 摘要 |
LLM_QWEN_API_KEY |
Qwen 兜底(可选) |
IB_RESEARCH_REFRESH_TOKEN |
保护 /refresh 端点(可选) |
IB_RESEARCH_CACHE_DIR |
数据目录(默认 ./data/ib_research) |
IB_RESEARCH_PUBLIC_ORIGIN |
对外 canonical 域名(默认 https://fresearch.cc.cd) |
HTTPS_PROXY |
境外源走本地代理(例 http://127.0.0.1:1082) |
页面上的评级、目标价和研报观点均来自公开可访问的结构化数据、标题或摘要;LLM 只做归纳,无法交叉验证的数字不会作为事实展示。市场验证采用日期级事件与复权价格,同日多家机构发声会标记混杂,样本不足会降低置信度。
「市场确认 / 未确认」只描述公开观点与后续价格之间的关系,不能证明机构持仓或交易台行为,也不能据此断言「唱多出货」或「唱空抄底」。免费方案实测不可用的来源(Barron's 401、Seeking Alpha PerimeterX 403、TipRanks 403 等)不接入。
MIT