Python 量化金融基础
Python 量化金融基础 做量化不需要金融科班出身,但必须看懂一批反复出现的核心概念。 这一篇集中讲清楚两类术语:量化交易术语和金融市场基本概念,并动手计算最基础的两个量——收益率与波动率。 掌握本篇内容后,阅读后续的
做量化不需要金融科班出身,但必须看懂一批反复出现的核心概念。
这一篇集中讲清楚两类术语:量化交易术语和金融市场基本概念,并动手计算最基础的两个量——收益率与波动率。
掌握本篇内容后,阅读后续的策略与回测章节就不会有语言障碍。
量化交易核心术语
以下术语贯穿整个教程,先混个脸熟,后续章节会反复实践:
| 术语 | 含义 |
|---|---|
| 策略(Strategy) | 定义了在何时、以何种条件买卖的交易系统,可以基于技术指标、统计模型或机器学习 |
| 因子(Factor) | 用于衡量资产特征的数值,如均线、市值、市盈率等,是构建策略的原材料 |
| 信号(Signal) | 根据策略和因子生成的交易指令,告诉程序何时买入或卖出 |
| 回测(Backtesting) | 在历史数据上模拟执行策略并评估表现的过程,是验证策略的必经环节 |
| Alpha | 策略相对于市场基准的超额收益,正的 Alpha 表示策略跑赢了基准 |
| Beta | 策略相对市场整体波动的敏感度,Beta 大于 1 表示比市场波动更剧烈 |
| 夏普比率(Sharpe Ratio) | 风险调整后收益指标,计算方式为(策略收益率 - 无风险利率)/ 策略波动率,越高越好 |
| 最大回撤(Maximum Drawdown) | 历史上一段时期内从最高点到最低点的最大跌幅,衡量策略最惨时亏多少 |
| 资金管理(Money Management) | 通过仓位控制、分散投资等手段保护资金的方法 |
金融市场基本概念
下面这些概念描述的是金融市场本身的运作方式:
| 概念 | 含义 |
|---|---|
| 股票(Stock) | 公司的所有权凭证,购买股票即成为股东,有权分享公司利润 |
| 投资组合(Portfolio) | 由多种资产(股票、债券、期货等)构成的一揽子投资,通过分散降低风险 |
| 风险管理(Risk Management) | 识别、衡量和控制投资中潜在风险的方法,量化领域主要依靠统计模型 |
| 收益(Return) | 投资的盈利,通常以百分比表示,需要结合风险一起评估 |
| 算法交易(Algorithmic Trading) | 用预定的规则和数学模型驱动计算机自动交易 |
| 量化模型(Quantitative Model) | 用数学和统计学工具分析、预测金融市场行为的模型 |
| 高频交易(High-Frequency Trading) | 以极快的速度进行大量交易,从微小价差中获利 |
| 套利(Arbitrage) | 同时买卖同一或相似资产,利用价差获取低风险利润 |
| 蒙特卡洛模拟(Monte Carlo Simulation) | 生成大量随机样本来评估投资组合风险和收益的数学技术 |
提示:术语不用死记硬背。建议遇到不认识的词先查表,在后续章节的实际代码中见到它们时,理解会自然加深。
动手计算:收益率与波动率
收益和风险是量化世界的两根基准线,它们都有标准的计算方式。
简单收益率与对数收益率
收益率衡量价格的变化幅度,常用的有两种口径:
简单收益率是价格变化的比例,直观易懂;对数收益率是价格比值的自然对数,具有可加性,多期收益直接相加即可,研究中更常用。
实例
import numpy as np
# 某股票连续 6 天的收盘价
prices = pd.Series(
[100, 102, 101, 105, 107, 106],
index=pd.date_range("2024-01-01", periods=6),
)
# 简单收益率:今日价格相对昨日的变化比例
simple_ret = prices.pct_change().dropna()
print(simple_ret.round(4).to_string())
# 对数收益率:价格比值的自然对数
log_ret = np.log(prices / prices.shift(1)).dropna()
print(log_ret.round(4).to_string())
输出结果如下所示:
2024-01-02 0.0200 2024-01-03 -0.0098 2024-01-04 0.0396 2024-01-05 0.0190 2024-01-06 -0.0093 Freq: D 2024-01-02 0.0198 2024-01-03 -0.0099 2024-01-04 0.0388 2024-01-05 0.0189 2024-01-06 -0.0094 Freq: D
第一天买入价 100 元、涨到 102 元,简单收益率就是 2%,与直觉一致。
两种收益率在涨跌幅很小时数值几乎相同,涨跌幅越大差异越明显,后面章节两种都会用到。
波动率与年化
波动率(Volatility)衡量收益率的波动剧烈程度,通常用收益率的标准差表示。
日波动率数值太小不直观,行业惯例是乘以 252 的平方根(一年约有 252 个交易日)折算成年化波动率:
实例
ann_vol = simple_ret.std() * np.sqrt(252)
print(f"年化波动率: {ann_vol:.2%}")
输出结果如下所示:
年化波动率: 33.74%
注意:示例只有 6 天数据,算出的波动率仅供参考方法。实际研究中通常使用至少一年的日线数据来估计波动率,数据越充分估计越稳定。
绩效指标速览
收益率和波动率组合起来,就能得到评价策略的三大经典指标,这里先建立直觉,具体计算在回测与绩效评估一章完整实践:
| 指标 | 回答的问题 | 计算思路 |
|---|---|---|
| 年化收益率 | 策略平均一年赚多少 | 把任意时长的累计收益按复利折算到一年 |
| 夏普比率 | 每承担一单位波动,换来多少超额收益 | (年化收益率 - 无风险利率)/ 年化波动率 |
| 最大回撤 | 历史上最深的一次下跌有多惨 | 净值从峰值跌到谷底的最大幅度 |
只看收益率选策略是新手最常见的错误:年化 50% 但最大回撤 60% 的策略,大部分人拿不住。
夏普比率之所以重要,是因为它同时看收益和风险:通常认为夏普比率大于 1 的策略比较优秀,小于 0.5 则要谨慎。