金融数据源获取:主流财经新闻API

做新闻情绪因子,第一步不是写代码,而是找数据。

我见过太多人一上来就调包、写策略,结果卡在数据获取上。说白了,没有数据源,后面全是空中楼阁。今天咱们就把这块地基打牢。

主流财经新闻API有哪些?

目前市面上能用的财经新闻API,我挑三个最常用的来讲。每个我都亲自踩过坑,你听听看。

1. Alpha Vantage

这个API我用了三年多。它提供新闻情绪数据,而且是专门针对金融市场的。你想想看,它会把新闻分类成" bullish"、"bearish"、"neutral",省去你不少预处理工作。

我个人习惯用它的 NEWS_SENTIMENT 端点。举个例子:

import requests

API_KEY = "你的API_KEY"
url = "https://www.alphavantage.co/query"
params = {
    "function": "NEWS_SENTIMENT",
    "tickers": "AAPL",
    "apikey": API_KEY
}
response = requests.get(url, params=params)
data = response.json()
print(data["feed"][0]["title"])  # 第一条新闻标题

嗯,这里要注意:免费版每分钟只能请求5次。我在项目中遇到过,跑回测时一不小心就超限,然后被限流半小时。所以建议你做好请求频率控制。

避坑指南:Alpha Vantage的免费API Key有速率限制。我曾经因为没加time.sleep(),导致整个数据采集脚本崩掉。建议用time.sleep(12)控制每分钟不超过5次请求。

2. NewsAPI

这个API覆盖面广,但问题也明显——它不专门针对金融。你搜"Apple",可能出来的是iPhone评测,而不是苹果公司的财报新闻。

我建议这样用:

  • 指定关键词为股票代码 + "stock" 或 "earnings"
  • 设置 language=en 过滤语言
  • sortBy=publishedAt 保证时效性
import requests

url = "https://newsapi.org/v2/everything"
params = {
    "q": "AAPL stock",
    "apiKey": "你的API_KEY",
    "language": "en",
    "sortBy": "publishedAt",
    "pageSize": 50
}
response = requests.get(url, params=params)
articles = response.json()["articles"]
小技巧:NewsAPI的免费版只能搜一个月内的新闻。如果你要做长期回测,建议用Alpha Vantage或者付费版。

3. Finnhub

这个API我最近才开始用,但体验不错。它提供实时新闻,而且有情感分析标签。说白了,它把新闻情绪打分直接给你了,省去你训练NLP模型的功夫。

import finnhub

client = finnhub.Client(api_key="你的API_KEY")
news = client.company_news("AAPL", "2024-01-01", "2024-01-31")
for item in news[:5]:
    print(item["headline"], item["sentiment"])

数据源选择策略

选哪个API?我建议你按这个逻辑来:

场景 推荐API 理由
快速原型验证 Alpha Vantage 自带情感标签,上手快
大规模回测 Finnhub + NewsAPI 数据量大,覆盖广
实盘交易 付费版Finnhub 延迟低,稳定性高

我个人习惯是:先用Alpha Vantage做原型,验证策略有效后,再切换到Finnhub做实盘。你想想看,免费API跑原型足够了,没必要一开始就花钱。

API Key管理与安全

这块我吃过亏,必须重点讲。

API Key就像你家钥匙。你把它硬编码在代码里,然后上传到GitHub——嗯,我干过这种事。第二天就收到邮件说API Key被滥用,账户被封了。

正确的做法是:

  1. 使用环境变量:把API Key存在系统环境变量中,代码里用 os.getenv() 读取
  2. 创建配置文件:用 config.ini.env 文件,但记得加入 .gitignore
  3. 权限最小化:只申请你需要的权限,不要图省事全勾上
import os
from dotenv import load_dotenv

load_dotenv()  # 加载.env文件

API_KEY = os.getenv("ALPHA_VANTAGE_KEY")
if not API_KEY:
    raise ValueError("API Key未设置!请检查.env文件")
安全红线:永远不要将API Key硬编码在代码中。我曾经在Stack Overflow上看到有人贴代码时忘了删Key,结果评论区全是"你的Key暴露了"。别成为那个人。

知识体系总览

下面这张图,是我梳理的本章知识结构。你保存下来,后面写代码时对照着看。

新闻情绪因子数据源获取 主流财经新闻API 数据源选择策略 API Key管理与安全 Alpha Vantage(自带情感标签) NewsAPI(覆盖面广) Finnhub(实时+情感分析) 原型验证 → Alpha Vantage 回测 → Finnhub + NewsAPI 实盘 → 付费版Finnhub 环境变量存储 配置文件 + .gitignore 权限最小化原则 核心原则:先验证 → 再回测 → 最后实盘

这张图把三个API的特点、适用场景、安全要点都串起来了。你写代码前,先对着这张图想清楚:我现在处于哪个阶段?该用哪个API?

我的建议:刚开始做,别贪多。先选一个API跑通流程,再考虑扩展。我当年就是一口气注册了五个API,结果每个都只用了两次,反而浪费了时间。

好了,数据源这块就讲到这里。你拿到API Key后,先跑通上面的代码示例,确保能拿到数据。下一章咱们开始处理这些新闻文本,把它变成可用的情绪因子。

专注资料整理