等级: 免费版
- 注册:
- 2023-8-21
- 曾用名:
|

楼主 |
发表于 2025-4-2 13:30
|
显示全部楼层
import numpy as np
import pandas as pd
from scipy.optimize import minimize
# 示例数据:假设有三个商品期货品种的历史收益率数据
# 这里使用随机生成的数据作为示例,实际使用时需要替换为真实数据
np.random.seed(0)
num_assets = 3
num_periods = 100
returns = pd.DataFrame(np.random.randn(num_periods, num_assets) * 0.01)
# 计算协方差矩阵
cov_matrix = returns.cov()
# 定义风险贡献函数
def risk_contribution(weights, cov_matrix):
portfolio_volatility = np.sqrt(weights.T @ cov_matrix @ weights)
marginal_risk_contribution = cov_matrix @ weights
risk_contribution = (marginal_risk_contribution * weights) / portfolio_volatility
return risk_contribution
# 定义风险平价目标函数
def risk_parity_objective(weights, cov_matrix):
target_risk = np.ones(len(weights)) / len(weights)
current_risk = risk_contribution(weights, cov_matrix)
return np.sum((current_risk - target_risk) ** 2)
# 定义约束条件
constraints = [
{'type': 'eq', 'fun': lambda x: np.sum(x) - 1}, # 权重之和为 1
{'type': 'ineq', 'fun': lambda x: x} # 权重非负
]
# 初始权重猜测
initial_weights = np.ones(num_assets) / num_assets
# 优化求解
result = minimize(risk_parity_objective, initial_weights, args=(cov_matrix,), constraints=constraints)
# 输出风险平价权重
risk_parity_weights = result.x
print("风险平价权重:", risk_parity_weights)
在金字塔好像很难实现上面的代码功能 |
|