ENZH

程序员搞投资不缺数据,缺的是一条管道

上一篇讲了公司的三张报表和九个核心指标——你已经知道怎么"读"一家公司了。

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

数据平台按成本和能力分四个层级:

层级成本代表平台最适合
免费$0Yahoo 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.ipynblidar-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_stmtbalance_sheetcash_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.LRR.L(Rolls-Royce)
德国Symbol.DEALV.DE(Allianz)
东京Symbol.T7203.T(Toyota)
香港Symbol.HK0700.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))

为什么要用对数收益率?三个原因:

  1. 可加性。 简单收益率不能直接相加——今天涨 10% 明天跌 10%,你不是回到原点,而是亏了 1%。对数收益率是可加的——日收益率之和等于区间收益率。
  2. 对称性。 简单收益率里,+10% 和 -10% 的幅度不一样(100 涨 10% 到 110,110 跌 10% 到 99)。对数收益率中,+10% 和 -10% 是等幅的。
  3. 正态分布。 对数收益率更接近正态分布——统计建模的基础假设。后面做风险分析、VaR 计算、期权定价,全部依赖这个性质。

程序员类比:简单收益率是 int,对数收益率是 float。前者直观但精度不够,后者是做严肃计算时的标准选择。

描述统计:均值、标准差、方差

returns_stats = simple_returns.agg(['mean', 'std', 'var'])
# mean = 平均日收益率
# std  = 波动率(标准差)
# var  = 方差

标准差是衡量风险的核心指标。标准差越大 = 日波幅越大 = 风险越高。

波动率实战对比

公司标准差 (2023)解读
NuScale (SMR)0.799极高波动——核电初创,每天价格波动可达 80%
NVDA~0.35高波动——AI 热潮周期
KO0.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 只需要改配置。

四个平台对比

FinvizEODHDAlpha VantageOpenBB
覆盖仅美股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 跑一遍。六个练习覆盖本课所有核心工具:

→ 打开 Lesson 3 Colab 练习

  1. 批量拉 10 家公司指标对比表
  2. 手动从原始报表计算 10 个指标(理解分子分母)
  3. Simple vs Log Returns + 波动率对比可视化
  4. VIX 恐慌指数 5 年分析
  5. Google Trends 搜索热度追踪
  6. 全球 Ticker 拉取(伦敦/德国/东京/香港)

这条数据管道是后续所有课程的基础设施。第一课讲了投资的底层逻辑,第二课讲了怎么读公司的源代码,这一课把数据采集的工具链搭好了。

下一课开始用这些数据做真正的分析——增长投资论点的构建。从宏观趋势到具体公司,从 SWOT 分析到 pytrends 验证,用数据驱动每一个投资决策。

Bloomberg Terminal $20K/年。你的 Python 管道,$0/年。数据从来不是壁垒——把数据变成判断的能力才是。


© Xingfan Xia 2024 - 2026 · CC BY-NC 4.0