做了几年金融相关的数据分析,发现很多概念刚开始接触时挺懵的。书上写得太学术,网上的解释又太碎片化。这篇文章整理下工作中常见的金融基础知识,尽量用大白话说清楚。
主要面向跟我一样半路出家做金融数据分析的同行,或者刚入行的新人。
收益率相关
年化收益率
年化收益率不是实际收益率,是把短期收益换算成一年的收益。
举个例子:
- 你买了个理财产品,7天赚了100块,本金1万
- 7天收益率 = 100/10000 = 1%
- 年化收益率 = 1% × (365/7) ≈ 52.14%
看起来很高对吧?但实际上你7天只赚了1%。年化收益率只是个参考指标,不代表你持有一年真能赚这么多。
计算公式:
年化收益率 = (投资收益 / 本金) × (365 / 投资天数)
为什么要算年化:
- 方便比较不同期限的产品
- 比如7天的和30天的,直接比收益率没法看,换成年化就好对比了
累计收益率 vs 区间收益率
累计收益率:从买入到现在,总共赚了多少(或亏了多少)
累计收益率 = (当前净值 - 买入净值) / 买入净值
举例:
- 买入时基金净值 1.0,现在 1.2
- 累计收益率 = (1.2 - 1.0) / 1.0 = 20%
区间收益率:某个时间段内的收益
比如看某基金今年的表现,就算1月1日到现在的区间收益率。
复合收益率
这个容易搞混。很多人以为每年赚10%,10年就是100%。其实不是。
单利计算:
- 第1年:10000 × 10% = 1000,本金变11000
- 第2年:10000 × 10% = 1000,本金变12000
- …
- 10年后:10000 + 1000×10 = 20000(赚了100%)
复利计算(实际情况):
- 第1年:10000 × 10% = 1000,本金变11000
- 第2年:11000 × 10% = 1100,本金变12100
- 第3年:12100 × 10% = 1210,本金变13310
- …
- 10年后:10000 × (1+10%)^10 ≈ 25937(赚了159%)
复利的威力就在这,时间越长差距越大。
复合收益率 = (1 + 年收益率1) × (1 + 年收益率2) × ... - 1
风险指标
最大回撤
这个很重要,特别是看基金的时候。
最大回撤:从历史最高点跌到最低点,最大的跌幅。
举例:
- 某基金净值走势:1.0 → 1.5 → 1.2 → 1.8 → 1.3
- 从1.5跌到1.2,回撤 = (1.2-1.5)/1.5 = -20%
- 从1.8跌到1.3,回撤 = (1.3-1.8)/1.8 = -27.8%
- 最大回撤就是 -27.8%
为什么重要:
- 告诉你这个产品最惨的时候跌了多少
- 心理承受能力有多强,看这个指标就知道能不能拿得住
def max_drawdown(returns):
"""计算最大回撤"""
cumulative = (1 + returns).cumprod()
running_max = cumulative.expanding().max()
drawdown = (cumulative - running_max) / running_max
return drawdown.min()
波动率(标准差)
波动率就是收益率的标准差,反映收益的稳定性。
- 波动率高:赚的时候多赚,亏的时候多亏,坐过山车
- 波动率低:收益稳定,但可能收益也不高
举例:
- 基金A:月收益率分别是 2%, 3%, 2.5%, 2.8%,波动率小
- 基金B:月收益率分别是 10%, -5%, 8%, -3%,波动率大
虽然两个基金平均收益率可能差不多,但B的体验会差很多。
import numpy as np
returns = [0.02, 0.03, 0.025, 0.028]
volatility = np.std(returns)
print(f"波动率: {volatility:.4f}")
夏普比率
夏普比率 = (投资收益率 - 无风险收益率) / 波动率
这个指标衡量的是:每承担1单位风险,能获得多少超额收益。
- 夏普比率越高,说明性价比越好
- 一般认为夏普比率 > 1 就不错了
举例:
- 基金A:年化收益15%,波动率10%,无风险利率3%
- 夏普比率 = (15% - 3%) / 10% = 1.2
- 基金B:年化收益12%,波动率5%,无风险利率3%
- 夏普比率 = (12% - 3%) / 5% = 1.8
虽然A收益高,但B的性价比更好(承受更小的风险获得了不错的收益)。
def sharpe_ratio(returns, risk_free_rate=0.03):
"""计算夏普比率"""
excess_return = returns.mean() - risk_free_rate
return excess_return / returns.std()
估值指标
市盈率(PE)
PE = 股价 / 每股收益
简单说就是:花多少钱买1块钱的利润。
- PE = 10,意味着按现在的盈利水平,10年能回本
- PE = 50,50年回本
- PE 越低,理论上越便宜
动态PE vs 静态PE:
- 静态PE:用去年的每股收益算
- 动态PE:用今年预期的每股收益算
- TTM PE:用最近12个月的收益算(比较常用)
坑点:
- 不能跨行业比较。银行股PE普遍低(5-10倍),科技股普遍高(30-100倍)
- 亏损的公司PE没意义(收益是负的)
市净率(PB)
PB = 股价 / 每股净资产
- PB = 1,意味着股价等于净资产,公司清算了你能拿回本金
- PB < 1,理论上被低估了
- PB > 1,市场看好公司未来
适用场景:
- 银行、地产这种资产重的行业,看PB比较有意义
- 轻资产公司(互联网、咨询),PB参考价值不大
ROE(净资产收益率)
ROE = 净利润 / 净资产
衡量公司用股东的钱赚钱的能力。
- ROE = 20%,意味着股东投100块,一年能赚20块
- ROE 越高越好,巴菲特选股喜欢看这个指标
- 一般认为 ROE > 15% 就是不错的公司
杜邦分析: ROE 可以拆解成三个部分:
ROE = 净利率 × 总资产周转率 × 权益乘数
= (净利润/营业收入) × (营业收入/总资产) × (总资产/净资产)
拆开来看能知道公司赚钱是靠什么:
- 净利率高:赚钱能力强
- 周转率高:资产利用效率高
- 权益乘数高:杠杆大(可能风险也大)
债券相关
到期收益率(YTM)
买债券最关心的就是到期能赚多少。
到期收益率:持有到期,考虑了票面利息和价格差,综合的年化收益。
举例:
- 某债券面值100,现价95,票面利率5%,还有2年到期
- 每年利息:100 × 5% = 5元
- 2年总利息:10元
- 价格差:100 - 95 = 5元
- 总收益:15元
- 年化收益:15 / 2 / 95 ≈ 7.89%
实际计算更复杂(要考虑复利),但思路就是这样。
久期(Duration)
久期衡量债券价格对利率变化的敏感度。
简单理解:
- 久期 = 5年,利率上升1%,债券价格大约下跌5%
- 久期越长,利率风险越大
为什么会这样?
- 利率涨了,新发的债券收益率高,老债券就不值钱了
- 到期时间越长的债券,受影响越大
修正久期:
修正久期 = 久期 / (1 + 到期收益率)
价格变化% ≈ -修正久期 × 利率变化%
常见比率
换手率
换手率 = 成交量 / 流通股本
反映股票交易的活跃度。
- 换手率高:交易活跃,可能有人在炒作
- 换手率低:没什么人关注,流动性差
一般:
- 日换手率 < 3%:冷清
- 3% - 7%:正常
- 7% - 15%:活跃
- > 15%:很活跃(要小心是不是庄家在操作)
资产负债率
资产负债率 = 负债总额 / 资产总额
衡量公司的负债水平。
- 资产负债率 = 50%,意味着一半资产是借的钱
- 一般不超过60%算安全
- 但不同行业差异很大:
- 银行、地产:70-80%都正常(靠杠杆赚钱)
- 制造业:40-60%
- 科技公司:20-40%
流动比率和速动比率
流动比率 = 流动资产 / 流动负债 速动比率 = (流动资产 - 存货) / 流动负债
衡量公司短期偿债能力。
- 流动比率 > 2,一般认为安全
- 速动比率 > 1,比较安全
为什么要减去存货?
- 存货不一定能快速变现
- 比如房地产公司,楼盘卖不出去就是一堆存货
量化策略中的指标
α(阿尔法)和 β(贝塔)
这两个概念来自资本资产定价模型(CAPM)。
β(贝塔):
- 衡量相对于大盘的波动
- β = 1:跟大盘同步涨跌
- β > 1:比大盘波动大(高风险高收益)
- β < 1:比大盘稳定
α(阿尔法):
- 衡量跑赢大盘的超额收益
- α > 0:跑赢大盘
- α = 0:跟大盘持平
- α < 0:跑输大盘
from scipy import stats
# 假设这是某股票和大盘的日收益率
stock_returns = [0.01, 0.02, -0.01, 0.03, 0.005]
market_returns = [0.008, 0.015, -0.008, 0.025, 0.004]
# 计算 beta
beta, alpha, r_value, p_value, std_err = stats.linregress(market_returns, stock_returns)
print(f"Beta: {beta:.2f}")
print(f"Alpha: {alpha:.4f}")
信息比率(IR)
信息比率 = 超额收益 / 跟踪误差
衡量主动管理能力。
- IR > 0.5:管理能力不错
- IR > 1:很优秀
跟夏普比率类似,但信息比率关注的是相对基准的表现,夏普比率关注的是绝对收益。
实际应用案例
分析基金表现
import pandas as pd
import numpy as np
# 假设有基金的日收益率数据
fund_data = pd.read_csv('fund_returns.csv', parse_dates=['date'])
# 计算累计收益
fund_data['cumulative_return'] = (1 + fund_data['daily_return']).cumprod() - 1
# 年化收益率
annual_return = fund_data['daily_return'].mean() * 252
# 年化波动率
annual_volatility = fund_data['daily_return'].std() * np.sqrt(252)
# 夏普比率(假设无风险利率3%)
sharpe = (annual_return - 0.03) / annual_volatility
# 最大回撤
cumulative = (1 + fund_data['daily_return']).cumprod()
running_max = cumulative.expanding().max()
drawdown = (cumulative - running_max) / running_max
max_dd = drawdown.min()
print(f"年化收益率: {annual_return:.2%}")
print(f"年化波动率: {annual_volatility:.2%}")
print(f"夏普比率: {sharpe:.2f}")
print(f"最大回撤: {max_dd:.2%}")
股票筛选
# 筛选条件:ROE > 15%, PE < 20, PB < 3
stock_data = pd.read_csv('stock_metrics.csv')
filtered = stock_data[
(stock_data['ROE'] > 0.15) &
(stock_data['PE'] < 20) &
(stock_data['PB'] < 3) &
(stock_data['debt_ratio'] < 0.6)
]
print(f"符合条件的股票: {len(filtered)} 只")
print(filtered[['code', 'name', 'ROE', 'PE', 'PB']].head(10))
常见误区
1. 只看收益不看风险
很多人选基金只看近1年收益排名,完全不看波动率和最大回撤。结果买了高风险产品,一跌30%受不了就割肉了。
正确做法:
- 看夏普比率,综合考虑风险收益
- 看最大回撤,确认自己能不能承受
2. PE越低越好
有些股票PE很低(比如5倍),但可能是因为:
- 行业不景气
- 公司业绩在走下坡路
- 市场不看好未来
正确做法:
- 结合PB、ROE、增长率综合看
- 对比同行业平均水平
- 看历史PE区间(PE百分位)
3. 过度相信历史收益
“过去10年年化收益20%“不代表未来也能做到。
正确做法:
- 看基金经理是否换人
- 看策略是否还适用当前市场
- 考虑均值回归
4. 忽略时间价值
今天的100块和一年后的100块价值不一样。
正确做法:
- 用折现现金流(DCF)估值
- 考虑通货膨胀
- 理解复利的威力
工具推荐
Python 库
# 基础数据处理
import pandas as pd
import numpy as np
# 金融计算
import pandas_datareader as pdr # 获取金融数据
import yfinance as yf # Yahoo Finance 数据
# 量化分析
import ffn # 金融指标计算
import empyrical # 回测指标
import pyfolio # 组合分析
# 可视化
import matplotlib.pyplot as plt
import seaborn as sns
数据源
- Wind、同花顺iFinD:专业数据终端(贵)
- Tushare:免费的中国股票数据
- AkShare:各种金融数据(免费)
- Yahoo Finance:全球股票数据(免费)
总结
金融指标说白了就是几个目的:
- 衡量收益:赚了多少钱(年化收益率、累计收益率)
- 衡量风险:波动有多大、最惨的时候跌多少(波动率、最大回撤)
- 衡量性价比:承担风险能换来多少收益(夏普比率、信息比率)
- 估值判断:现在是便宜还是贵(PE、PB、ROE)
数据分析的时候,不要死记公式,理解背后的商业逻辑更重要。同一个指标,在不同行业、不同阶段,意义可能完全不同。
最后说一句:金融市场没有完美的指标,组合使用才能看得更全面。
这些是我工作中整理的笔记,肯定有不完善的地方。有问题欢迎留言讨论。