教程 / Python3 / Python 量化金融基础

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 pandas as pd
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 个交易日)折算成年化波动率:

实例

# 年化波动率 = 日收益率标准差 x 根号 252
ann_vol = simple_ret.std() * np.sqrt(252)
print(f"年化波动率: {ann_vol:.2%}")

输出结果如下所示:

年化波动率: 33.74%

注意:示例只有 6 天数据,算出的波动率仅供参考方法。实际研究中通常使用至少一年的日线数据来估计波动率,数据越充分估计越稳定。


绩效指标速览

收益率和波动率组合起来,就能得到评价策略的三大经典指标,这里先建立直觉,具体计算在回测与绩效评估一章完整实践:

指标 回答的问题 计算思路
年化收益率 策略平均一年赚多少 把任意时长的累计收益按复利折算到一年
夏普比率 每承担一单位波动,换来多少超额收益 (年化收益率 - 无风险利率)/ 年化波动率
最大回撤 历史上最深的一次下跌有多惨 净值从峰值跌到谷底的最大幅度

只看收益率选策略是新手最常见的错误:年化 50% 但最大回撤 60% 的策略,大部分人拿不住。

夏普比率之所以重要,是因为它同时看收益和风险:通常认为夏普比率大于 1 的策略比较优秀,小于 0.5 则要谨慎。