工作原理
同一篇文章,两次推送
这是双流模式在线路上的实际表现。首先是原始消息,然后是同一篇文章的增强版本,通过链接匹配。
{
"title": "S&P 500, Dow futures inch up as MidEast hopes offset SpaceX, AMD drag",
"link": "https://www.reuters.com/business/...",
"source": "www.reuters.com",
"summary": "Contracts tracking the S&P 500 and the Dow edged up on Wednesday ...",
"language": "en",
"publishDate": "2026-08-05T09:32:26.959Z",
"createdAt": "2026-08-05T09:32:41.103Z"
}{
"title": "S&P 500, Dow futures inch up as MidEast hopes offset SpaceX, AMD drag",
"link": "https://www.reuters.com/business/...",
"sentiment": "positive",
"confidence": "0.9702919721603394",
"categories": ["business", "markets"],
"countries": ["US"],
"companies": [
{
"ticker": "NVDA",
"name": "NVIDIA Corporation",
"exchange": "XNAS",
"isin": "US67066G1040"
},
{
"ticker": "AMD",
"name": "Advanced Micro Devices, Inc.",
"exchange": "XNAS",
"isin": "US0079031078"
}
]
}数据已缩略。每个公司实体包含主要上市信息及按交易所划分的交叉上市信息(MIC 代码),因此一篇文章可映射到多个市场的金融工具。完整字段参考请查看文档。 文档.
快速开始
用您的语言实现双流模式
通过一个客户端订阅两条流。在原始消息上做出反应,在完整数据到达时进行增强处理。只差一个 API 密钥。
import { FinlightApi } from 'finlight-client'
const api = new FinlightApi(
{ apiKey: process.env.FINLIGHT_API_KEY! },
{ takeover: true },
)
const seen = new Map<string, number>()
// Raw stream: instant delivery, react immediately
api.rawWebsocket.connect({ language: 'en' }, (raw) => {
seen.set(raw.link, Date.now())
if (/earnings|acquisition|merger|FDA|rate decision/i.test(raw.title)) {
console.log(`[SIGNAL] ${raw.title} (${raw.source})`)
// your reaction logic here
}
})
// Enriched stream: sentiment, entities, tickers
api.websocket.connect({ language: 'en', includeEntities: true }, (article) => {
const t = seen.get(article.link)
const delta = t ? `${((Date.now() - t) / 1000).toFixed(1)}s after raw` : 'new'
console.log(`[ENRICHED] ${article.title} (${delta})`)
console.log(
` sentiment=${article.sentiment} confidence=${article.confidence}`,
)
console.log(` tickers=${article.companies?.map((c) => c.ticker).join(',')}`)
seen.delete(article.link)
})SDK 自动处理重连、心跳和连接轮换。通过 npm install finlight-client 或 pip install finlight-client 安装。
坦诚对比
如果您打算自己搭建这套系统
一组爬虫加上 RSS 轮询器可以获取标题,对于单一来源且无去重需求的场景,这可能是合理的选择。但成本会在后续显现:同一条新闻从五个聚合器到达五次,发布方的标记变更在凌晨 3 点导致解析器崩溃,以及一个需要与策略一起维护的情感分析模型。通用新闻 API 去掉了爬虫部分,但保留了噪音——因为代码映射和金融相关来源的筛选恰恰是它们跳过的部分。finlight 的工作就是这个中间层:去重接入、实体和代码标注、情感分析,以及将反应速度与数据深度分离的流式架构。
延迟
"约 28 秒"的精确含义
这个市场上的延迟声明混淆了四个不同的时钟:发布方发布时间、提供商发现文章的时间、索引时间、以及到达您的时间。我们只公布一个数字,且为内部实测:原始流平均比同一篇文章的增强版本早约 28 秒送达。这是增强管道的耗时(情感分析、实体解析、代码匹配),原始流完全跳过了这一步。我们不公布端到端的发布到送达时间,因为该数字取决于我们无法控制的发布方时间戳。如果某个供应商给你一个毫秒级的单一数字而不说明衡量的是哪个时钟,请追问。
双流模式将这一时间差转化为优势:原始消息告知您的系统文章已存在,标题过滤器可以立即触发。增强消息在您的持仓逻辑仍然活跃时到达,附带情感评分、置信度和标注的金融工具。如果您只需要对部分文章进行增强处理,可以跳过增强流,按需调用 GET /v2/articles/by-link 获取所需文章的增强数据。
阅读原始流背后的工程故事: How I Cut 28 Seconds Off Financial News Delivery
查询语言
在源头过滤,而非在代码中
流和 REST API 共享同一套查询语言。支持按 ticker:NVDA、exchange:NASDAQ、isin:US0378331005、来源域名、语言进行过滤,支持完整的布尔逻辑(AND、OR、NOT、括号、排除条件如 -source:finance.yahoo.com)。服务端过滤意味着您的系统只处理本来就会采取行动的消息。
(+ticker:TSLA OR +ticker:NVDA) AND ("earnings" OR "guidance") AND NOT crypto可靠性
为无人值守运行的系统而构建
连接按计划轮换,SDK 自动管理心跳和重连。速率限制在边缘执行,行为异常的客户端会快速失败,而不是拖累您的数据流。REST 访问覆盖历史查询和回填,驱动实时流的同一查询也能驱动您的研究工作。
正在进行交易台级别的部署?可提供定制来源、年度开票和优先接入。您指定来源,我们将其纳入您的合同范围。 联系我们
其他连接方式
WebSocket 流之外的选择
双流模式是一种集成方式。finlight 还提供 REST 和 Webhook 推送。
常见问题
交易系统 API 相关问题
使用 finlight 集成交易系统的常见问题。
流式访问从 Pro Standard 方案开始。各方案在请求量、WebSocket 连接数和推送配额上有所不同。当前价格和限额请查看定价页面。
