金融数据源获取:主流财经新闻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次。我在项目中遇到过,跑回测时一不小心就超限,然后被限流半小时。所以建议你做好请求频率控制。
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"]
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被滥用,账户被封了。
正确的做法是:
- 使用环境变量:把API Key存在系统环境变量中,代码里用
os.getenv()读取 - 创建配置文件:用
config.ini或.env文件,但记得加入.gitignore - 权限最小化:只申请你需要的权限,不要图省事全勾上
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的特点、适用场景、安全要点都串起来了。你写代码前,先对着这张图想清楚:我现在处于哪个阶段?该用哪个API?
好了,数据源这块就讲到这里。你拿到API Key后,先跑通上面的代码示例,确保能拿到数据。下一章咱们开始处理这些新闻文本,把它变成可用的情绪因子。