摘要
本文系统解析投资组合优化问题,基于Markowitz均值方差理论构建数学模型。通过股票历史收益数据分析,演示如何利用Matlab求解二次规划问题,确定最优资产配置比例。重点讨论无风险资产引入后的模型扩展,验证分离定理的实际应用。结合具体案例,对比分析不同期望收益率下的风险变化趋势,揭示投资组合优化的核心逻辑。
1. 基本投资组合模型
1.1 问题背景
假设投资者在1955年需将资金分配于三种股票(A、B、C),要求年收益率至少15%。通过历史数据(表1)计算股票收益的均值、方差及协方差矩阵,构建均值方差优化模型。
表1 股票收益数据(1943-1954)
年份 | 股票A | 股票B | 股票C | 股票指数 |
---|---|---|---|---|
1943 | 1.300 | 1.225 | 1.149 | 1.258997 |
1944 | 1.103 | 1.290 | 1.260 | 1.197526 |
… | … | … | … | … |
1954 | 1.176 | 1.715 | 1.908 | 1.526236 |
1.2 模型构建
决策变量: x 1 , x 2 , x 3 x_1, x_2, x_3 x1,x2,x3(投资比例)
目标函数:最小化方差(风险)
Minimize V = ∑ i = 1 3 ∑ j = 1 3 x i x j ⋅ Cov ( R i , R j ) \text{Minimize} \quad V = \sum_{i=1}^3 \sum_{j=1}^3 x_i x_j \cdot \text{Cov}(R_i, R_j) MinimizeV=i=1∑3j=1∑3xixj⋅Cov(Ri,Rj)
约束条件:
- 资金全部分配: x 1 + x 2 + x 3 = 1 x_1 + x_2 + x_3 = 1 x1+x2+x3=1
- 期望收益约束: x 1 ⋅ E ( R 1 ) + x 2 ⋅ E ( R 2 ) + x 3 ⋅ E ( R 3 ) ≥ 0.15 x_1 \cdot E(R_1) + x_2 \cdot E(R_2) + x_3 \cdot E(R_3) \geq 0.15 x1⋅E(R1)+x2⋅E(R2)+x3⋅E(R3)≥0.15
1.3 数据计算
通过历史数据计算得到:
- 均值向量:
E ( R ) = [ 0.0890833 , 0.2136667 , 0.2345833 ] E(R) = [0.0890833, 0.2136667, 0.2345833] E(R)=[0.0890833,0.2136667,0.2345833] - 协方差矩阵:
COV = [ 0.01080754 0.01240721 0.01307513 0.01240721 0.05839170 0.05542639 0.01307513 0.05542639 0.09422681 ] \text{COV} = \begin{bmatrix} 0.01080754 & 0.01240721 & 0.01307513 \\ 0.01240721 & 0.05839170 & 0.05542639 \\ 0.01307513 & 0.05542639 & 0.09422681 \end{bmatrix} COV= 0.010807540.012407210.013075130.012407210.058391700.055426390.013075130.055426390.09422681
1.4 Matlab求解代码
% 读取数据
Mean = dlmread('data2.txt');
COV = dlmread('data3.txt');
% 预期收益率目标
TARGET = 0.15;
% 定义二次规划的参数
H = 2 * COV; % 二次项系数矩阵
f = zeros(size(Mean)); % 线性项系数向量
Aeq = ones(1, length(Mean)); % 等式约束系数矩阵
beq = 1; % 等式约束右侧常数
A = -Mean'; % 不等式约束系数矩阵
b = -TARGET; % 不等式约束右侧常数
lb = zeros(size(Mean)); % 变量下界
ub = []; % 变量上界
% 求解二次规划问题
options = optimoptions('quadprog','Display','iter');
X = quadprog(H, f, A, b, Aeq, beq, lb, ub, [], options);
% 输出结果
disp('最优投资比例:');
disp(X);
% 计算最小方差
min_variance = X' * COV * X;
disp(['最小方差: ', num2str(min_variance)]);
1.5 结果分析
最优解:
- 股票A: 53%
- 股票B: 36%
- 股票C: 11%
- 方差(风险): 0.02241378
2. 含无风险资产的投资组合
2.1 模型扩展
引入无风险资产(如国库券,收益率5%),模型变为:
Minimize V = ∑ i = 1 3 ∑ j = 1 3 x i x j ⋅ Cov ( R i , R j ) \text{Minimize} \quad V = \sum_{i=1}^3 \sum_{j=1}^3 x_i x_j \cdot \text{Cov}(R_i, R_j) MinimizeV=i=1∑3j=1∑3xixj⋅Cov(Ri,Rj)
约束条件新增:
x 1 + x 2 + x 3 + x 4 = 1 ( x 4 为无风险资产比例 ) x_1 + x_2 + x_3 + x_4 = 1 \quad (x_4 \text{为无风险资产比例}) x1+x2+x3+x4=1(x4为无风险资产比例)
2.2 分离定理验证
当期望收益率变化时,风险资产比例保持不变,仅无风险资产比例调整。例如:
- 期望收益15%时,无风险资产占34.1%
- 期望收益10%时,无风险资产占67.1%
2.3 Matlab代码对比
% 读取数据
Mean1 = dlmread('data2.txt');
COV1 = dlmread('data3.txt');
% 无风险资产的均值和协方差
risk_free_mean = 0.05;
risk_free_cov = 0;
% 预期收益率目标
TARGET = 0.15;
% 扩展均值向量和协方差矩阵
Mean = [Mean1; risk_free_mean];
n = length(Mean1);
COV = zeros(n + 1, n + 1);
COV(1:n, 1:n) = COV1;
% 定义二次规划的参数
H = 2 * COV; % 二次项系数矩阵
f = zeros(size(Mean)); % 线性项系数向量
Aeq = ones(1, length(Mean)); % 等式约束系数矩阵
beq = 1; % 等式约束右侧常数
A = -Mean'; % 不等式约束系数矩阵
b = -TARGET; % 不等式约束右侧常数
lb = zeros(size(Mean)); % 变量下界
ub = []; % 变量上界
% 求解二次规划问题
options = optimoptions('quadprog', 'Display', 'iter');
X = quadprog(H, f, A, b, Aeq, beq, lb, ub, [], options);
% 输出结果
disp('最优投资比例:');
disp(X);
% 计算最小方差
min_variance = X' * COV * X;
disp(['最小方差: ', num2str(min_variance)]);
3. 结果对比与讨论
3.1 风险-收益曲线
通过MATLAB参数分析(图1),发现当期望收益超过22%时,风险显著上升。
图1 投资回报率与风险关系
clc, clear
load data2.txt, load data3.txt
h = reshape(data3, [3,3]);
a = data2';
target = 0.09;
while target < 0.234
[x, y] = quadprog(2*h, [], -a, -target, ones(1,3), 1, zeros(3,1));
plot(target, y, '*b');
target = target + 0.002;
end
3.2 实际应用建议
- 保守型投资者:增加无风险资产比例
- 激进型投资者:提高高收益股票配置
- 动态调整:根据市场变化更新协方差矩阵
4. 总结
本文通过均值方差模型实现投资组合优化,验证了无风险资产的引入可有效降低风险,并通过分离定理简化配置决策。实际应用中需结合市场动态调整参数,平衡收益与风险。