程序员搞投资不缺数据,缺的是一条管道
上一篇讲了公司的三张报表和九个核心指标——你已经知道怎么"读"一家公司了。
Bloomberg Terminal 每年 $20K+,华尔街交易员的标配。yfinance 免费,一个 pip install 就能拉到同一只股票的 132 个属性。散户和机构的数据差距,比多数人以为的要小得多。真正的差距不在数据本身,在于你有没有一条系统化的管道把数据变成决策。
这篇文章的核心判断:
一、金融数据分三类,对应三种决策维度。 基本面数据看公司值不值得买,技术数据看什么时候买,非金融数据看数字之外的信号。程序员类比:单元测试(正确性)、监控(行为)、用户反馈(上下文)。
二、yfinance 是个人投研的最佳起点,但你必须知道它的边界。 132 个属性、三张财务报表、历史价格——够做 80% 的分析。但它是爬虫驱动、社区维护、数据非权威、没有实时流——生产环境需要付费 API。
三、非金融数据是散户真正的 alpha 来源。 VIX 恐慌指数、新闻情绪、Google Trends 搜索热度——这些数据免费或低成本,机构用得不比你多。你的 cron job + Alpha Vantage 情绪 API,就是你的投资预警系统。
四、选数据库跟选 npm 包一个道理——star 数不是全部。 最后更新时间、社区活跃度、交易所覆盖范围、数据时效性、成本结构——八个维度评估,别被 GitHub star 骗了。
一、三类数据:你的三个信息维度
金融数据不是铁板一块。它有三个维度,每个维度回答不同的问题。
| 类型 | 频率 | 数据示例 | 回答的问题 |
|---|---|---|---|
| 基本面 (Fundamental) | 季度 / 年度 | Revenue, EPS, D/E, P/E, Cash Flow | 这家公司值不值得买? |
| 技术面 (Technical) | 实时 / 日线 | Price, Volume, MA, RSI | 什么时候买/卖? |
| 非金融 (Nonfinancial) | 不定期 | 新闻情绪、社交媒体、ESG、内部人交易 | 数字之外的信号是什么? |
程序员类比:
- 基本面 = 单元测试。 验证系统的核心逻辑是否正确。公司赚不赚钱、债能不能还、增长快不快——这是你下注前必须通过的测试。
- 技术面 = 监控系统。 你的服务跑得好好的(基本面没变),但延迟突然飙了(价格异动)。监控不告诉你"为什么",但告诉你"现在发生了什么"。
- 非金融数据 = 用户反馈。 Metrics 全绿,但 App Store 评分从 4.5 掉到 3.2——你不会在仪表盘上看到原因,但用户在告诉你出了问题。新闻情绪、搜索热度、内部人买卖就是金融世界的"用户反馈"。
三者要交叉验证。基本面说公司很好(单元测试通过),但技术面在暴跌(监控报警),非金融数据显示 CEO 在疯狂减持(用户评分暴跌)——三个维度拼在一起,才是完整的画面。
二、数据平台全景:从免费到 Bloomberg
数据平台按成本和能力分四个层级:
| 层级 | 成本 | 代表平台 | 最适合 |
|---|---|---|---|
| 免费 | $0 | Yahoo Finance, Google Finance | 快速查询、基础筛选 |
| 付费咨询 | $10-350/年 | Seeking Alpha, Motley Fool | 策划分析、社区洞察 |
| Fintech API | $0-1200/年 | EODHD, Alpha Vantage, OpenBB | 编程访问、自动化 |
| 企业级 | $20K+/年 | Bloomberg Terminal, Refinitiv | 机构交易、实时数据、全覆盖 |
免费层:够用但有限
Yahoo Finance 是全球最流行的免费金融数据源。你不需要注册就能看到任何上市公司的报表、历史股价、分析师评级。缺点:没有官方 API(yfinance 是第三方爬虫),数据可能有延迟。
Google Finance 界面更干净,跟 Google Sheets 无缝集成。如果你只想在表格里跟踪几只股票,=GOOGLEFINANCE("NVDA", "price") 就够了。
对个人投资者来说,免费层足够起步。
付费咨询层:花钱买时间
Seeking Alpha($240/年):社区作者分析 + 量化评分 + 华尔街分析师摘要。它的价值是帮你省研究时间——但永远要独立验证别人的分析。
Motley Fool($99-349/年):股票推荐 + 长期 track record。更偏"告诉你买什么"的风格。
Fintech API 层:程序员的甜蜜点
这是对我们最有价值的层级。编程访问意味着自动化、回测、批量分析。
- EODHD:77 个交易所,全球覆盖最广
- Alpha Vantage:独家的 NEWS_SENTIMENT 情绪 API
- OpenBB:开源,统一接口切换多个数据源
后面会逐个深入拆解。
企业层:Bloomberg Terminal
$20K+/年。实时数据、专业终端聊天、全资产类别覆盖。华尔街的标配。
有一个关于 Bloomberg 的经典笑话:"如果你需要问价格,你用不起它。"("If you need to ask the price, you can't afford it.")
好消息是:对个人投资者来说,yfinance + Alpha Vantage + OpenBB 的组合,能覆盖 Bloomberg 90% 的数据需求,成本接近零。你缺的是实时流和机构级的 SLA,不是数据本身。
决策框架
| 需求 | 推荐 |
|---|---|
| 个人投研 | yfinance(免费,足够) |
| 国际市场 | EODHD 或 OpenBB |
| 新闻情绪分析 | Alpha Vantage(NEWS_SENTIMENT) |
| 美股筛选 | Finviz |
| 生产级系统 | 付费 API + SLA(EODHD 付费版、Bloomberg) |
三、Jupyter Notebook:你的投研 IDE
程序员写代码有 VS Code。投资研究有 Jupyter Notebook。
Jupyter 是交互式 Python 环境——代码、输出、Markdown 笔记在同一个文档里。跑一个 cell,看到结果,接着写下一个。探索性分析的最佳工具。
几个关键优势:
- 增量执行:不需要每次跑全部代码。拉完数据之后,在不同 cell 里反复调试分析逻辑——数据不用重新拉。
- 可视化内联:图表直接渲染在 notebook 里,不需要额外窗口。
- 导出分享:导出成 HTML/PDF,直接发给别人看。
- Markdown 混排:分析思路、假设、结论——用 Markdown cell 记录在代码旁边,三个月后回来还能看懂。
Google Colab = 免费的云端 Jupyter + GPU。 不需要本地安装任何东西,打开浏览器就能写代码。本系列的所有代码都在 Colab 上可以直接运行。
推荐工作流:一个 notebook 对应一个研究问题。 nvda-valuation-analysis.ipynb、lidar-sector-screening.ipynb——就像一个 repo 对应一个项目。
四、yfinance 深度拆解:免费的 132 维向量
yfinance 是个人投研的主力工具。免费、开源、社区维护。一个 ticker 对象就能拉到从财务报表到历史价格的几乎所有数据。
核心数据访问
import yfinance as yf
ticker = yf.Ticker("NVDA")
# 三张年度财务报表
income_stmt = ticker.income_stmt # Revenue, COGS, Net Income...
balance_sheet = ticker.balance_sheet # Assets, Liabilities, Equity
cash_flow = ticker.cash_flow # Operating, Investing, Financing
# 历史价格 (OHLCV DataFrame)
hist = ticker.history(period="5y")
# 列: Open, High, Low, Close, Volume, Dividends, Stock Splits
income_stmt、balance_sheet、cash_flow 返回的都是 pandas DataFrame,行是字段名,列是报告期。上一篇讲的所有报表分析,数据来源就是这里。
ticker.info:132 个属性的字典
info = ticker.info
# 返回一个 dict,约 132 个 key-value 对
# 估值
info['marketCap'] # 市值
info['trailingPE'] # P/E (TTM)
info['forwardPE'] # P/E (Forward)
info['pegRatio'] # PEG
info['priceToSalesTrailing12Months'] # P/S
# 盈利能力
info['returnOnAssets'] # ROA
info['returnOnEquity'] # ROE
info['profitMargins'] # 利润率
# 流动性和负债
info['currentRatio'] # 流动比率
info['quickRatio'] # 速动比率
info['debtToEquity'] # D/E
# 分红
info['dividendYield'] # 分红率
info['payoutRatio'] # 派息比例
# 基本信息
info['sector'] # 行业
info['industry'] # 子行业
info['fullTimeEmployees'] # 全职员工数
132 个属性——你在 Lesson 2 学到的所有指标(P/E、PEG、ROE、D/E、Current Ratio 等),yfinance 全部帮你算好了,直接取就行。
collect_ratios():一次拉所有关键指标
def collect_ratios(symbol):
t = yf.Ticker(symbol)
info = t.info
return {
'P/E (TTM)': info.get('trailingPE'),
'P/E (FWD)': info.get('forwardPE'),
'PEG': info.get('pegRatio'),
'P/S': info.get('priceToSalesTrailing12Months'),
'P/B': info.get('priceToBook'),
'ROA': info.get('returnOnAssets'),
'ROE': info.get('returnOnEquity'),
'Profit Margin': info.get('profitMargins'),
'Current Ratio': info.get('currentRatio'),
'Quick Ratio': info.get('quickRatio'),
'D/E': info.get('debtToEquity'),
'Dividend Yield': info.get('dividendYield'),
'Payout Ratio': info.get('payoutRatio'),
'EPS (TTM)': info.get('trailingEps'),
'Market Cap': info.get('marketCap'),
}
一个函数调用,15 个核心指标全出来了。传入 "NVDA" 或 "KO" 或 "WMT",同一套结构化数据。这就是程序员做投研的效率优势。
手动计算:从原始报表到指标
ticker.info 提供了预计算的指标,但有时候你想从原始 DataFrame 手动算。好处:验证 yfinance 给的数字对不对,理解每个指标的计算逻辑。
import yfinance as yf
t = yf.Ticker("NVDA")
bs = t.balance_sheet
is_ = t.income_stmt
cf = t.cash_flow
# ======= 流动性 =======
current_ratio = (
bs.loc['Current Assets'].iloc[0] /
bs.loc['Current Liabilities'].iloc[0]
)
quick_ratio = (
(bs.loc['Current Assets'].iloc[0] - bs.loc['Inventory'].iloc[0]) /
bs.loc['Current Liabilities'].iloc[0]
)
# ======= 负债 =======
de_ratio = (
bs.loc['Total Debt'].iloc[0] /
bs.loc['Stockholders Equity'].iloc[0]
)
interest_coverage = (
is_.loc['EBIT'].iloc[0] /
abs(is_.loc['Interest Expense'].iloc[0])
)
# ======= 盈利 =======
eps = is_.loc['Net Income'].iloc[0] / t.info['sharesOutstanding']
fcf = (
cf.loc['Operating Cash Flow'].iloc[0] -
cf.loc['Capital Expenditure'].iloc[0]
)
fcf_per_share = fcf / t.info['sharesOutstanding']
# ======= 盈利能力 =======
roa = is_.loc['Net Income'].iloc[0] / bs.loc['Total Assets'].iloc[0]
roe = is_.loc['Net Income'].iloc[0] / bs.loc['Stockholders Equity'].iloc[0]
profit_margin = is_.loc['Net Income'].iloc[0] / is_.loc['Total Revenue'].iloc[0]
10 个指标,全部从三张原始报表手动推导。.iloc[0] 取的是最新一期的数据。
这段代码的教学意义在于——每个指标都是两个数字的除法。 Current Ratio 是流动资产除以流动负债,ROE 是净利润除以股东权益。没有黑魔法,只有除法。当你理解了分子和分母是什么,指标就不再是抽象概念了。
Ticker 命名规则:全球交易所
yfinance 不只覆盖美股。不同交易所有不同的 ticker 后缀:
| 交易所 | 格式 | 示例 |
|---|---|---|
| 美国(NYSE/NASDAQ) | 直接用符号 | NVDA, AAPL |
| 伦敦 | Symbol.L | RR.L(Rolls-Royce) |
| 德国 | Symbol.DE | ALV.DE(Allianz) |
| 东京 | Symbol.T | 7203.T(Toyota) |
| 香港 | Symbol.HK | 0700.HK(腾讯) |
这意味着你用同一套代码就能分析全球上市公司。yf.Ticker("0700.HK").info 拉腾讯的数据,跟拉 NVDA 完全一样。
收益率计算:简单收益 vs 对数收益
技术分析的基础是收益率。两种计算方式:
简单收益率(Simple Returns):
hist = yf.Ticker("NVDA").history(period="1y")
simple_returns = hist['Close'].pct_change() # (P1 - P0) / P0
直觉上好理解:今天收盘 110,昨天 100,收益率 10%。
对数收益率(Log Returns):
import numpy as np
log_returns = np.log(hist['Close'] / hist['Close'].shift(1))
为什么要用对数收益率?三个原因:
- 可加性。 简单收益率不能直接相加——今天涨 10% 明天跌 10%,你不是回到原点,而是亏了 1%。对数收益率是可加的——日收益率之和等于区间收益率。
- 对称性。 简单收益率里,+10% 和 -10% 的幅度不一样(100 涨 10% 到 110,110 跌 10% 到 99)。对数收益率中,+10% 和 -10% 是等幅的。
- 正态分布。 对数收益率更接近正态分布——统计建模的基础假设。后面做风险分析、VaR 计算、期权定价,全部依赖这个性质。
程序员类比:简单收益率是 int,对数收益率是 float。前者直观但精度不够,后者是做严肃计算时的标准选择。
描述统计:均值、标准差、方差
returns_stats = simple_returns.agg(['mean', 'std', 'var'])
# mean = 平均日收益率
# std = 波动率(标准差)
# var = 方差
标准差是衡量风险的核心指标。标准差越大 = 日波幅越大 = 风险越高。
波动率实战对比
| 公司 | 标准差 (2023) | 解读 |
|---|---|---|
| NuScale (SMR) | 0.799 | 极高波动——核电初创,每天价格波动可达 80% |
| NVDA | ~0.35 | 高波动——AI 热潮周期 |
| KO | 0.135 | 低波动——防御性消费品 |
NuScale 的波动率是 Coca-Cola 的 6 倍。同样投入 $10K,NuScale 一天可以上下波动 $8K,Coca-Cola 只波动 $1.3K。
这组数字解释了为什么 Buffett 买 KO 不买 NuScale。低波动 + 稳定分红 = 可预测的现金流。高波动可能赚更多,但也可能一夜归零。你的风险承受能力决定了你应该在这个频谱的哪个位置。
yfinance 的局限性
用 yfinance 之前,你必须知道它不是什么:
- 爬虫驱动。yfinance 从 Yahoo Finance 网站抓取数据。Yahoo 改了页面结构,yfinance 就可能挂掉。
- 会被限速。请求太频繁会触发 Yahoo 的速率限制。
- 数据非权威。Yahoo Finance 不是 SEC 官方数据源。偶尔有错误。
- 没有实时流。数据始终有延迟。日内交易不能靠它。
- 社区维护。不是 Yahoo 的官方产品。维护取决于社区志愿者。
底线:个人投研足够用,做学习和分析完全没问题。但不要拿它做生产级的自动交易系统——那需要付费 API 和 SLA 保障。
五、商业数据源:当 yfinance 不够用
四个主要选择,各有定位。
Finviz:美股筛选的瑞士军刀
| 特性 | 详情 |
|---|---|
| 覆盖 | 仅美股 |
| 成本 | $24.96/月(Elite) |
| 核心优势 | 70+ 筛选条件的 screener |
| 输出 | REST API + CSV 导出 |
| 限制 | 无国际市场 |
Finviz 的 screener 是它的杀手功能。按 P/E、市值、sector、分红率、技术指标组合筛选——70+ 个维度。再加上 sector/industry 热力图,一眼看出哪个板块在涨、哪个在跌。
如果你只投美股,Finviz Elite 的性价比很高。
EODHD:全球覆盖最广
| 特性 | 详情 |
|---|---|
| 覆盖 | 77 个交易所 |
| 成本 | Freemium(免费版:20 次/天) |
| 数据 | EOD 价格、基本面、分红、期权 |
| 格式 | JSON REST API |
import requests
API_KEY = "your_api_key"
url = f"https://eodhd.com/api/eod/AAPL.US?api_token={API_KEY}&fmt=json"
data = requests.get(url).json()
EODHD 的优势是全球覆盖。你在 yfinance 上拉不到的小众交易所数据,EODHD 很可能有。77 个交易所——从纽约到东京到约翰内斯堡。
免费版每天 20 次 API 调用,做研究够用;做批量分析需要付费($240-1200/年)。
Alpha Vantage:情绪分析的独家武器
| 特性 | 详情 |
|---|---|
| 成本 | 免费版(25 次/天)+ 付费 |
| 独家功能 | NEWS_SENTIMENT API |
| 输出 | REST API, JSON |
| 限制 | 免费版速率低 |
from alpha_vantage.timeseries import TimeSeries
ts = TimeSeries(key='YOUR_API_KEY', output_format='pandas')
data, meta = ts.get_daily(symbol='AAPL', outputsize='full')
Alpha Vantage 的独特卖点是 NEWS_SENTIMENT endpoint。它对新闻文章做情绪分析,返回 -1.0 到 1.0 的情绪评分。
- -1.0:极度看空
- 0.0:中性
- +1.0:极度看多
这个功能是 Alpha Vantage 独有的。yfinance 没有,EODHD 没有,Finviz 也没有。后面在"持续监控"部分会详细展示怎么用。
OpenBB:开源的统一接口
| 特性 | 详情 |
|---|---|
| 成本 | 开源免费 |
| 覆盖 | 多资产:股票、债券、加密货币、外汇 |
| 架构 | 模块化——一个参数切换数据源 |
| 优势 | 统一 API,多后端 |
from openbb import obb
# 同一个接口,不同数据源
data_yf = obb.equity.price.historical("AAPL", provider="yfinance")
data_av = obb.equity.price.historical("AAPL", provider="alpha_vantage")
data_eodhd = obb.equity.price.historical("AAPL", provider="eodhd")
OpenBB 的设计哲学跟程序员非常对味:一个 API,多个后端。 换一个 provider 参数,同样的调用就能切到不同的数据源。
这在实践中很有价值。你可以用 yfinance 做日常研究(免费),关键决策时切到 EODHD 或 Alpha Vantage 交叉验证。代码不需要改,只换 provider 参数。
程序员类比:OpenBB 就像数据库的 ORM。你写一套查询逻辑,后端从 MySQL 换成 PostgreSQL 只需要改配置。
四个平台对比
| Finviz | EODHD | Alpha Vantage | OpenBB | |
|---|---|---|---|---|
| 覆盖 | 仅美股 | 77 交易所 | 美股为主 | 多资产 |
| 成本 | $25/月 | $0-1200/年 | $0-50/月 | 免费 |
| 独特优势 | Screener + 热力图 | 全球最广 | 情绪 API | 统一接口 |
| 编程友好度 | 中等 | 高 | 高 | 最高 |
| 最适合 | 美股筛选 | 国际投资 | 情绪分析 | 多源集成 |
六、选库六问:别被 star 数骗了
GitHub 上金融数据库有几十个。怎么选?
评估一个金融数据库跟评估一个 npm 包的逻辑一样——star 数只是一个维度。一个 10K star 但两年没更新的库,不如一个 2K star 但每周都在发版的库。
八个评估维度:
| 维度 | 检查什么 |
|---|---|
| 时效性 | 最近一次更新/发版是什么时候?金融数据 API 经常变,停更的库很快就会挂 |
| 社区 | GitHub star、contributor 数量、Stack Overflow 活跃度 |
| 跨平台 | Windows/Mac/Linux 都能跑? |
| 交易所覆盖 | 仅美股还是全球?覆盖多少个交易所? |
| 文档质量 | 英文文档?代码示例?API reference 完整度? |
| 数据时效 | 实时 vs EOD vs 延迟? |
| 可靠性 | 官方 API vs 爬虫?有没有速率限制?uptime 保证? |
| 成本 | 免费版有什么限制?付费后价格怎么随用量变化? |
实战评估
拿 yfinance 套这八个维度:
| 维度 | yfinance 表现 |
|---|---|
| 时效性 | 活跃更新 ✅ |
| 社区 | 13K+ star, 活跃 issue 区 ✅ |
| 跨平台 | 全平台 ✅ |
| 交易所覆盖 | 全球主要交易所 ✅ |
| 文档 | 基本文档 + 社区教程 ⚠️ |
| 数据时效 | 延迟(非实时)⚠️ |
| 可靠性 | 爬虫驱动,可能被限速 ⚠️ |
| 成本 | 完全免费 ✅ |
5 个绿灯、3 个黄灯。个人投研完全够用。但如果你在做量化交易系统——"爬虫驱动"和"非实时"两个黄灯就变成红灯了。
七、非金融数据:数字之外的信号
前六节都在讲"公司自己产生的数据"——报表、价格、指标。这一节讲"公司之外的数据"。
| 数据类型 | 来源 | 用途 |
|---|---|---|
| 情绪 (Sentiment) | Alpha Vantage NEWS_SENTIMENT, 社交媒体 | 市场情绪、舆论转向 |
| 资金流向 (Movement/Flow) | 期权异动、暗池成交 | 机构仓位 |
| 人口统计 (Demographic) | 人口普查、就业数据 | 行业需求预测 |
| 恐慌指数 (VIX) | CBOE Volatility Index | 全市场恐惧/自满程度 |
VIX:市场的恐慌温度计
VIX 是 CBOE 编制的波动率指数,被叫做"恐慌指数"(Fear Index)。它衡量的是 S&P 500 期权的隐含波动率——本质上是市场对未来 30 天波动程度的预期。
| VIX 区间 | 市场情绪 |
|---|---|
| < 15 | 自满(低恐惧) |
| 15-25 | 正常 |
| 25-35 | 恐惧升高 |
| > 35 | 极度恐慌 |
VIX 的使用逻辑是逆向的:
- VIX < 15,市场太舒服了。历史上每次 VIX 长期低于 15,接下来通常会有一波调整。"所有人都不怕的时候,恰恰应该小心。"
- VIX > 35,所有人都在恐慌。这往往是买入的好时机——Lesson 2 讲的经济周期 Trough 阶段。
VIX 不告诉你具体买什么或卖什么。它是一个宏观信号——全市场的恐惧温度。跟个股分析配合使用:基本面分析说一只股票被低估,VIX 同时 > 35 说明市场在恐慌抛售一切——两个信号叠加,置信度上升。
import yfinance as yf
vix = yf.Ticker("^VIX")
vix_hist = vix.history(period="1y")
current_vix = vix_hist['Close'].iloc[-1]
print(f"Current VIX: {current_vix:.2f}")
情绪数据:新闻 API
Alpha Vantage 的 NEWS_SENTIMENT endpoint 是零售投资者能用到的最直接的情绪数据源。它对每篇提到某个 ticker 的新闻文章做情绪评分。
情绪数据的价值在于趋势变化,不是绝对值。一只股票的情绪从 0.3 持续下滑到 -0.2,比"今天情绪是 0.1"这个静态数字有意义得多。
资金流向:期权和暗池
期权异动(options flow)和暗池成交(dark pool prints)反映的是大资金的动向。大量看涨期权突然出现,可能有机构在提前布局。
这类数据对散户来说获取成本较高,需要专门的服务(如 Unusual Whales、FlowAlgo)。了解它的存在就行,不需要在起步阶段投入。
人口和经济数据
人口普查、就业数据、消费者信心指数——这些是宏观面的非金融数据。逻辑是:如果某个年龄段的人口在快速增长,跟这个年龄段消费习惯相关的行业可能受益。
美国劳工统计局(BLS)的就业数据、美联储的经济数据(FRED)都是免费的。
企业级非金融数据源
AWS Data Exchange 和 Snowflake Marketplace 提供更高级的非金融数据集——卫星图像分析(停车场车流量 → 零售业绩预测)、信用卡消费数据、供应链追踪。这是对冲基金的领域,个人投资者用不到,但知道它存在有助于理解"institutional alpha 从哪来"。
程序员类比:非金融数据就像你的应用之外的遥测。你的 app metrics 全绿(基本面没问题),但 App Store 评分在暴跌(用户情绪恶化)、竞品下载量在飙升(市场份额流失)、Twitter 上用户在骂你(舆论转向)。这些信号不在你的仪表盘里,但它们在告诉你真相。
八、持续监控:投资不是一次性查询
买入一只股票不是终点——它是监控的起点。你的投资论点(investment thesis)需要持续验证。
Google Trends:搜索热度 = 公众注意力
from pytrends.request import TrendReq
pytrends = TrendReq()
pytrends.build_payload(
["LiDAR", "autonomous driving"],
timeframe='today 12-m'
)
interest = pytrends.interest_over_time()
pytrends 拉的是 Google 搜索趋势数据。它不是金融指标,但它是公众注意力的代理变量。
使用场景:你在 上一篇 做了 LiDAR 行业的投资论点。三个月后,你用 pytrends 发现 "LiDAR" 的搜索热度在持续下降,而 "autonomous driving" 的热度在转向 "camera-only self-driving"。这不是卖出信号,但它是论点可能在弱化的早期预警。
Google Trends 的数据是相对值(0-100),不是绝对搜索量。适合看趋势变化,不适合做精确的量化分析。
Alpha Vantage 情绪监控
import requests
url = "https://www.alphavantage.co/query"
params = {
"function": "NEWS_SENTIMENT",
"tickers": "LAZR,INVZ",
"apikey": API_KEY,
}
response = requests.get(url, params=params).json()
# 返回每篇新闻文章的情绪评分(per ticker)
这个 API 返回的数据结构包含每篇新闻文章的标题、来源、发布时间,以及对每个 ticker 的情绪评分(-1.0 到 1.0)。
监控逻辑:每周跑一次这个 API,追踪你持仓股票的平均情绪趋势。搜索热度下降 + 新闻情绪下降 = 你的投资论点可能正在瓦解。 这是最早的预警信号之一——比股价反应更早。
你的投资 cron job
把 Google Trends 和 Alpha Vantage 情绪监控组合起来,就是你的投资论点监控系统:
# 伪代码:每周跑一次的监控脚本
def weekly_thesis_check(tickers, keywords):
# 1. 搜索热度
pytrends.build_payload(keywords, timeframe='today 3-m')
trend_data = pytrends.interest_over_time()
trend_declining = check_trend_direction(trend_data)
# 2. 新闻情绪
sentiment_data = get_alpha_vantage_sentiment(tickers)
avg_sentiment = compute_average_sentiment(sentiment_data)
sentiment_declining = avg_sentiment < previous_avg_sentiment
# 3. 预警
if trend_declining and sentiment_declining:
alert("投资论点可能在弱化,建议重新评估")
elif trend_declining:
alert("搜索热度下降,关注中")
elif sentiment_declining:
alert("新闻情绪恶化,关注中")
这不是自动交易系统——它是预警系统。检测到信号之后,你还是要回去做基本面分析、看报表、判断论点是否真的在破裂。
程序员类比:这就是你的 PagerDuty。不替代 on-call 工程师的判断,但在问题发生前叫醒你。
九、综合:从数据到决策的管道架构
九个章节的内容拼在一起,就是一条完整的投研数据管道:
数据采集层
├── yfinance (免费核心)
│ ├── 基本面: income_stmt, balance_sheet, cash_flow
│ ├── 技术面: history(), 收益率, 波动率
│ └── 指标: ticker.info (132 属性)
├── Alpha Vantage (情绪信号)
│ └── NEWS_SENTIMENT API
├── pytrends (注意力信号)
│ └── Google 搜索热度
└── VIX (恐慌信号)
└── ^VIX 指数
↓
分析层
├── Jupyter Notebook (交互式分析)
├── collect_ratios() (指标快照)
├── 手动计算 (验证 + 深入)
└── 描述统计 (波动率, 收益分布)
↓
监控层
├── 周度情绪追踪
├── 搜索热度趋势
└── VIX 恐慌阈值
↓
决策层
└── 人工判断 (数据辅助, 不替代)
你的核心技术栈:
| 组件 | 工具 | 成本 | 用途 |
|---|---|---|---|
| 核心数据 | yfinance | 免费 | 报表、价格、指标 |
| 情绪信号 | Alpha Vantage | 免费(25 次/天) | 新闻情绪评分 |
| 注意力信号 | pytrends | 免费 | Google 搜索趋势 |
| 恐慌信号 | VIX (via yfinance) | 免费 | 市场恐惧温度 |
| 国际扩展 | EODHD / OpenBB | 免费-付费 | 非美股覆盖 |
| 筛选工具 | Finviz | $25/月 | 美股 70+ 维度筛选 |
| 分析环境 | Jupyter / Colab | 免费 | 交互式研究 |
总成本:$0。 全部用免费层就能搭建完整的个人投研数据管道。
动手练习
理论看完了,打开 Colab 跑一遍。六个练习覆盖本课所有核心工具:
- 批量拉 10 家公司指标对比表
- 手动从原始报表计算 10 个指标(理解分子分母)
- Simple vs Log Returns + 波动率对比可视化
- VIX 恐慌指数 5 年分析
- Google Trends 搜索热度追踪
- 全球 Ticker 拉取(伦敦/德国/东京/香港)
这条数据管道是后续所有课程的基础设施。第一课讲了投资的底层逻辑,第二课讲了怎么读公司的源代码,这一课把数据采集的工具链搭好了。
下一课开始用这些数据做真正的分析——增长投资论点的构建。从宏观趋势到具体公司,从 SWOT 分析到 pytrends 验证,用数据驱动每一个投资决策。
Bloomberg Terminal $20K/年。你的 Python 管道,$0/年。数据从来不是壁垒——把数据变成判断的能力才是。