关于 SentimentFX
SentimentFX 将 FinBERT 评估的财经新闻标题与 42 种加密货币、外汇、股票、ETF 和大宗商品的日线及日内价格并列提供。投资者和开发者可通过仪表板、REST API 与 MCP 工具查看情绪数据和相关性分析,而非价格预测。
主要功能
- 01使用 FinBERT 评估财经新闻
- 02提供日线及日内价格
- 03分析情绪与价格的相关性
- 04跨资产情绪指数
- 05REST API 与 CSV 导出
适用场景
- 01比较新闻情绪与市场价格
- 02为应用获取个股情绪数据
- 03查看历史相关性与回测
MCP 相关
MCP 服务提供六种工具,用于列出代码、查询用量及获取情绪、摘要、价格和相关性数据。它通过可流式传输的 HTTP 工作,接受 X-API-Key 请求头或 Bearer 令牌;数据调用按 REST API 同等方式计费。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://api.sentimentfx.org/mcpclaude mcp add --transport http org-sentimentfx-market-sentiment https://api.sentimentfx.org/mcp{"mcpServers":{"org-sentimentfx-market-sentiment":{"type":"http","url":"https://api.sentimentfx.org/mcp"}}}在 Cursor 中打开{"servers":{"org-sentimentfx-market-sentiment":{"type":"http","url":"https://api.sentimentfx.org/mcp"}}}在 VS Code 中打开{"mcpServers":{"org-sentimentfx-market-sentiment":{"type":"http","url":"https://api.sentimentfx.org/mcp"}}}{"mcpServers":{"org-sentimentfx-market-sentiment":{"serverUrl":"https://api.sentimentfx.org/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://api.sentimentfx.org/mcp需要授权工具
6此工具无需参数。
详细介绍
SentimentFX
覆盖加密货币、外汇、股票、ETF 和大宗商品 42 个市场的新闻情绪数据集。SentimentFX 抓取财经新闻标题,使用 FinBERT(一种针对金融领域调优的 transformer 模型)为每条标题评分,并将分数与每日和盘中价格一同存储。你可以通过仪表板、按量计费的 REST API,或通过 MCP 工具为 Claude 和其他 AI 客户端读取数据。
产品提供评分后的存档和实时数据流。它不是价格预测工具:仪表板展示相关性和回测结果,供你自行判断信号,并不声称情绪可以预测收益。
在线访问: sentimentfx.org · app.sentimentfx.org · developers.sentimentfx.org · status.sentimentfx.org
功能
- 每 15 分钟从 RSS 源(CoinDesk、CoinTelegraph、Yahoo Finance、r/CryptoCurrency 等)抓取新闻标题,并通过保存的 ScraperAI 配置抓取没有 RSS 的新闻网站
- 使用 FinBERT 为每条新标题评分一次:
positive_prob - negative_prob,得分范围为 -1 到 +1,并在界面中显示为 0–100 - 每小时通过 yfinance 刷新全部 42 个代码的价格(每日 OHLC 和盘中 K 线)
- 在 180 天的时间范围内,计算每日情绪变化与次日收益的相关性,并提供 95% 置信区间和强度标签
- 发布免费的跨资产情绪指数(0–100,恐惧 → 贪婪),根据经过评分的新闻文本构建,而非交易者持仓
- 通过 Stripe 提供付费访问:Pro 仪表板计划、用于 API 的 Data 计划,以及按需提供的完整存档
覆盖范围
| 类别 | 代码 |
|---|---|
| 加密货币(5) | BTC、ETH、SOL、XRP、DOGE |
| 外汇(7) | EURUSD、GBPUSD、USDJPY、AUDUSD、USDCAD、USDCHF、NZDUSD |
| 股票(20) | AAPL、MSFT、GOOGL、AMZN、META、NVDA、TSLA、JPM、BAC、GS、V、MA、XOM、JNJ、AMD、NFLX、WMT、UBER、CRM、PLTR |
| ETF(6) | SPY、QQQ、GLD、SLV、USO、ARKK |
| 大宗商品(4) | GC=F(黄金)、SI=F(白银)、CL=F(原油)、NG=F(天然气) |
价格货币因类别而异。 加密货币以 GBP 报价(Yahoo 上的 BTC-GBP)。外汇货币对为原始汇率。股票、ETF 和大宗商品期货以本币 USD 计价,不进行 GBP 换算。
产品
仪表板(app.sentimentfx.org)
- 情绪与价格走势图、带情绪面板的蜡烛图,以及 0–100 情绪仪表
- 相关性信号、背离卡片、交互式回测模拟器和新闻标题影响面板
- 新闻标题信息流,逐篇显示评分。默认显示编辑精选新闻,社交来源会添加标记。
- 排行榜、历史表现和晨间简报页面
- CSV 导出、电子邮件情绪提醒和晨间简报邮件(Pro)
只有回测通过质量门槛的代码才会触发提醒:样本外净收益为正,且至少 70% 的滚动前向验证折为正。该门槛每日更新。
计划
| 计划 | 价格 | 包含内容 |
|---|---|---|
| Free | £0 | 15 个热门代码(每个类别 3 个)、30 天历史数据、蜡烛图、回测、相关性 |
| Pro | £11.99/月或 £99.99/年 | 全部 42 个代码、完整历史数据、CSV 导出、提醒、晨间简报、每月 15,000 次 API 调用 |
| Data | £49.99/月或 £499.99/年 | Pro 全部功能、每月 200,000 次 API 调用 |
| 免费 API 密钥 | £0 | 每 30 天 1,000 次调用,无需银行卡,达到上限后立即停止 |
批量存档(每条评分后的新闻标题和价格记录,可导出为 CSV 或 JSONL)单独出售。请通过开发者门户上的数据集表单咨询。
开发者 API(api.sentimentfx.org/v1/)
通过 X-API-Key 标头进行身份验证。完整文档请参阅 developers.sentimentfx.org。
| 端点 | 返回内容 | 费用 |
|---|---|---|
GET /v1/sentiment/{ticker}?limit=1-100&sources=news|social|all | 最新的已评分标题,每条都包含 source_kind | 每返回 25 行消耗 1 个额度 |
GET /v1/summary/{ticker}?days=1-365&sources=news|social | 每日平均情绪 | 每返回 1 天消耗 1 个额度 |
GET /v1/prices/{ticker}?days=1-365 | 每日收盘价,包含 currency 字段 | 每返回 1 天消耗 1 个额度 |
GET /v1/correlation/{ticker} | 180 天的 Pearson r、p 值、95% 置信区间、强度 | 1 个额度 |
GET /v1/usage | 计划、用量、额度、重置日期、速率限制 | 免费 |
社交帖子(Reddit、StockTwits、X)会被收集,但单独存放。默认情况下,所有情绪数值都只基于新闻;sources=social 则仅返回社交帖子。查询完成后,系统会根据实际返回的行数计费。每次调用不单独计费:额度用尽的密钥会收到 402 insufficient_quota,直到额度补充;也可以申请更高额度。404 不收费,超出范围的参数会在任何处理开始前被拒绝,并返回 422。每个响应都包含 X-Quota-* 和 X-RateLimit-* 标头。错误采用统一封装:{"error": {"type": "...", "message": "..."}}。
# Get a free key (1,000 calls every 30 days, no card)
curl -X POST https://api.sentimentfx.org/api/keys/generate \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]"}'
# Use it
curl https://api.sentimentfx.org/v1/summary/BTC?days=7 \
-H "X-API-Key: sfx_your_key_here"
Sentiment Index 是公开的,无需密钥:GET https://api.sentimentfx.org/sentiment-index。与其他所有情绪数值一样,它仅基于新闻构建。
MCP 服务(api.sentimentfx.org/mcp)
同一数据通过六个 Model Context Protocol 工具提供:list_tickers 和 get_usage(均免费),以及 get_sentiment、get_summary、get_prices 和 get_correlation,其计费方式与对应的 /v1 端点完全相同。它使用可流式传输的 HTTP,并支持相同的 X-API-Key 标头;无法设置自定义标头的客户端(例如 Claude API 的 MCP 连接器)可使用 Authorization: Bearer <key>。注册表清单位于 server.json,发布步骤见 docs/publishing-mcp-registry.md。
{
"mcpServers": {
"sentimentfx": {
"type": "http",
"url": "https://api.sentimentfx.org/mcp",
"headers": { "X-API-Key": "sfx_your_key_here" }
}
}
}
架构
RSS feeds (15 min) ─┐
ScraperAI replay ───┼→ scraper.py / ai_sources.py → dedup by URL → FinBERT → headlines
HN Algolia (admin) ─┘
yfinance (hourly) → prices.py / candles.py → prices, candles
headlines + prices → /dashboard, /candles, /correlation, /backtest … → React dashboard
→ /v1/* and /mcp → API and MCP clients
→ /sentiment-index → public index page
定时任务(在 API 进程中运行的 APScheduler):
| 任务 | 时间 | 内容 |
|---|---|---|
scrape_rss_only | 每 15 分钟 | 抓取全部 42 个代码的 RSS 和 ScraperAI 标题 |
scrape_all | 每小时整点(:00) | 刷新所有代码的每日价格,并检查情绪提醒(仅在启用时使用 GNews) |
scrape_intraday_prices | 每小时第 5 分钟(:05) | 获取日内蜡烛图 |
| Signal-quality refresh | 每日 05:00 UTC | 重新运行用于决定是否触发提醒的回测 |
| Alert outcome settlement | 每日 06:15 UTC | 为过往提醒评分,以记录跟踪结果 |
| Morning brief | 每日伦敦时间 07:00 | 向订阅者发送 Claude 撰写的简报 |
| API usage reset | 每月 1 日 | 重置每月调用次数。免费密钥按生命周期调用次数计量,因此不会因重置而补充额度。 |
FinBERT 仅处理此前未见过的标题。模型(约 400 MB)会在首次评分调用时下载并加载,而不是在导入时加载。
未启用的数据源。 GNews、StockTwits 和 X/Twitter 抓取器仍保留在代码中,但已关闭。将 GNEWS_ENABLED、STOCKTWITS_ENABLED 或 X_ENABLED 设为 true,即可重新启用对应数据源。StockTwits 之所以关闭,是因为 Cloudflare 会屏蔽服务器 IP,而且针对新闻调优的模型对散户聊天内容的评分效果较差。
仓库布局
| 路径 | 说明 |
|---|---|
backend/app/main.py | 所有 FastAPI 路由、调度器、Stripe webhook 和计费 |
backend/app/scraper.py, ai_sources.py | 标题抓取器。ScraperAI 配置位于 app/scraperai_configs/。 |
backend/app/sentiment.py | FinBERT 流水线 |
backend/app/prices.py, candles.py | yfinance 日线和日内价格 |
backend/app/sentiment_index.py | 跨资产指数(5 个类别等权) |
backend/app/mcp_server.py | MCP 工具,挂载于 /mcp |
backend/app/brief.py | Claude 撰写的晨报 |
backend/app/trend_signal.py, funding_monitor.py | 个人用途工具,并非产品功能 |
backend/build_scraper_config.py | 用于生成 ScraperAI 配置的离线工具。需要单独的 venv;运行时不会使用。 |
frontend/ | React + Vite 仪表盘 |
landing/ | 营销网站、排行榜、指数页面和各股票代码的 SEO 页面 |
developers/ | 开发者门户和 API 文档 |
status/ | 状态页面 |
开始使用
后端
cd backend
python -m venv venv
source venv/Scripts/activate # Windows (Git Bash); venv/bin/activate on macOS/Linux
pip install -r requirements.txt
python -m uvicorn app.main:app --reload # http://localhost:8000
项目没有 .env.example。请创建 backend/.env,并填写以下变量。
| 变量 | 用途 |
|---|---|
DATABASE_URL | PostgreSQL。必需:应用导入时会创建表,因此没有可连接的数据库,应用就无法启动。 |
ANTHROPIC_API_KEY | 晨报。导入时读取,因此任意值都能让应用启动。 |
SUPABASE_URL, SUPABASE_SERVICE_KEY | 用户账户和等级 |
STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET | 结账和 webhook |
RESEND_API_KEY | 等待名单、提醒和 API 密钥邮件 |
ADMIN_SECRET | 管理、回填和清理端点使用的 ?token= |
MCP_ALLOWED_HOSTS | 可选。MCP 端点接受的主机。默认包含端口 8000 上的 localhost 和 127.0.0.1;其他端口会返回 421。 |
GNEWS_ENABLED, GNEWS_API_KEY, STOCKTWITS_ENABLED, X_ENABLED, X_NITTER_BASE | 可选。未启用的数据源。 |
前端
cd frontend
npm install
npm run dev # http://localhost:5173
在 frontend/.env 中设置 VITE_SUPABASE_ANON_KEY 以启用登录(VITE_GA_ID 为可选项)。API 基础 URL 硬编码在 src/lib/constants.js 中,值为 https://api.sentimentfx.org,因此本地前端默认会连接生产环境,除非你修改该值。
测试
cd backend
pip install -r requirements-dev.txt
python -m pytest tests/ -v
请使用 python -m pytest,不要直接运行 pytest:tests/ 中没有 __init__.py,因此直接运行 pytest 无法导入 app。测试仅用于基本检查,会验证应用能否启动以及核心路由是否正常响应,并且需要可连接的 DATABASE_URL。每次向 main 推送以及每个 PR,CI 都会使用一次性 Postgres 运行这些测试。项目没有前端测试套件。
情绪评分
score = positive_probability - negative_probability
取值范围为 -1(最负面)到 +1(最正面),UI 会将其显示为 0–100。中性标题的得分会接近 0,而不是被强制设为恰好 0;旧的“标签 × 置信度”方法正是存在这个问题。FinBERT 仅对标题评分,即使系统存储了完整的文章正文也是如此。
部署
- **后端:**通过
Procfile+nixpacks.toml部署到 Railway,域名为api.sentimentfx.org。启动命令为uvicorn app.main:app --host 0.0.0.0 --port $PORT。仅使用 CPU 运行。 - **仪表盘、营销网站、开发者门户:**分别对应独立的 Vercel 项目(
frontend/、landing/、developers/),每个项目都会从main自动部署。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。