查看全集:💎Quantopia量化分析56讲
NumPy作为Python的核心科学计算库,在Quantopian量化平台上发挥着关键作用。它提供高效的多维数组支持及丰富的数学函数,特别适合处理投资组合优化等需要线性代数运算的场景。本文将带您掌握NumPy在金融分析中的核心应用技巧。
import numpy as np
stock_list = [3.5, 5, 2, 8, 4.2]
returns = np.array(stock_list)
print(returns) # 输出: [3.5 5. 2. 8. 4.2]
# 创建二维数组
A = np.array([[1, 2], [3, 4]])
print(A.shape) # 输出: (2, 2)
print(returns[1:3]) # 输出: [5. 2.]
print(A[0, :]) # 输出: [1 2]
print(A[:, 0]) # 输出: [1 3]
print(np.log(returns)) # 对数运算
print(np.max(returns)) # 最大值: 8.0
mean_return = np.mean(returns)
std_dev = np.std(returns)
print(f"均值: {mean_return:.2f}, 标准差: {std_dev:.2f}")
v = np.array([1, 2, np.nan, 4, 5])
# 方法1:过滤NaN
clean_v = v[~np.isnan(v)]
print(np.mean(clean_v)) # 输出: 3.0
# 方法2:使用nan函数
print(np.nanmean(v)) # 输出: 3.0
N = 10 # 10个资产
days = 100 # 100个交易日
returns = np.zeros((N, days))
# 生成基准资产
base_returns = np.random.normal(1.01, 0.03, days)
returns[0] = base_returns
# 生成相关资产
for i in range(1, N):
returns[i] = base_returns + np.random.normal(0.001, 0.02, days)
weights = np.random.uniform(0, 1, N)
weights /= weights.sum() # 归一化权重
portfolio_return = np.dot(weights, [np.mean(r)*100 for r in returns])
print(f"预期组合收益率: {portfolio_return:.2f}%")
A = np.random.rand(3,5)
B = np.random.rand(5,2)
# 合法矩阵乘法
result = np.dot(A, B) # 结果矩阵维度 (3,2)
cov_matrix = np.cov(returns)
weights = weights.reshape(-1, 1) # 转换为列向量
portfolio_var = weights.T @ cov_matrix @ weights
portfolio_vol = np.sqrt(portfolio_var)
print(f"组合波动率: {portfolio_vol[0][0]:.4f}")
投资组合的方差反映了整体风险水平。计算组合方差需要考虑:
如果资产之间完全独立(相关性为0),组合方差计算很简单:
组合方差 = (权重1)² × (资产1方差) + (权重2)² × (资产2方差) + ...
实际上,资产间往往存在相关性,需要考虑协方差:
组合方差 = Σ(权重i × 权重j × 资产i与j的协方差)
其中 i,j 遍历所有资产对
协方差矩阵是一个方阵,包含:
示例代码:
# 计算协方差矩阵
cov_mat = np.cov(returns)
# 计算组合方差
portfolio_variance = np.dot(np.dot(weights, cov_mat), weights.T)
# 计算组合波动率(标准差)
portfolio_volatility = np.sqrt(portfolio_variance)
协方差矩阵是投资组合风险计算的核心,其对角线元素为各资产的方差,非对角线元素为资产间的协方差:
其中:
可以用另一种方法验证:
# 直接用numpy计算组合收益的方差
alt_volatility = np.sqrt(np.var(np.dot(weights, returns), ddof=1))
# 两种方法结果应该相同
print(portfolio_volatility == alt_volatility) # True
组合方差公式:
其中:
%timeit
测试关键运算的性能掌握NumPy的线性代数操作,能够显著提升金融数据分析效率。从简单的收益计算到复杂的组合优化,NumPy为量化分析提供了坚实的数学基础。建议读者结合实际金融场景,深入探索矩阵运算在风险管理、因子分析等领域的应用。