摘要
本文深入探讨投资组合优化中的关键模型,包括存在无风险资产、考虑交易成本和利用股票指数简化等场景。通过LINGO模型解析与MATLAB代码实现,详细展示了如何平衡收益与风险,验证分离定理的普适性,并引入交易成本因素构建更现实的优化模型。文章特别演示了利用股票指数简化协方差矩阵计算的高效方法,通过线性回归和二次规划技术降低计算复杂度。案例结果表明,科学配置资产可显著降低投资风险,为金融决策提供量化支持。
关键词:投资组合优化 二次规划 分离定理 交易成本 股票指数 风险最小化 MATLAB实现
1. 存在无风险资产的投资组合模型
1.1 问题描述与模型建立
当市场上存在无风险资产(如国库券)时,投资组合模型需要相应调整。假设国库券年收益率为固定值5%,其风险(方差)为0。此时投资组合模型仍保持二次规划形式:
目标函数(风险最小化):
min
∑
i
=
1
n
∑
j
=
1
n
x
i
x
j
cov
(
R
i
,
R
j
)
\min \sum_{i=1}^{n} \sum_{j=1}^{n} x_i x_j \text{cov}(R_i,R_j)
mini=1∑nj=1∑nxixjcov(Ri,Rj)
约束条件:
{
∑
i
=
1
n
x
i
=
1
∑
i
=
1
n
E
(
R
i
)
x
i
≥
Target
x
i
≥
0
,
i
=
1
,
.
.
.
,
n
\begin{cases} \sum_{i=1}^{n} x_i = 1 \\ \sum_{i=1}^{n} E(R_i)x_i \geq \text{Target} \\ x_i \geq 0, \quad i=1,...,n \end{cases}
⎩
⎨
⎧∑i=1nxi=1∑i=1nE(Ri)xi≥Targetxi≥0,i=1,...,n
其中无风险资产的协方差为0。
1.2 MATLAB实现与结果分析
MATLAB代码:
% 加载股票数据
load('data2.txt'); % 均值数据
load('data3.txt'); % 协方差矩阵数据
% 定义无风险资产参数
rf_mean = 0.05;
rf_var = 0;
% 构建扩展的均值向量和协方差矩阵
mean_vec = [data2; rf_mean];
cov_mat = zeros(4,4);
cov_mat(1:3,1:3) = reshape(data3,3,3);
% 设置目标收益率
target = 0.15;
% 二次规划求解
H = 2*cov_mat;
f = zeros(4,1);
A = -mean_vec';
b = -target;
Aeq = ones(1,4);
beq = 1;
lb = zeros(4,1);
[x,fval] = quadprog(H,f,A,b,Aeq,beq,lb);
disp('最优投资比例:');
disp(x');
disp(['最小风险:', num2str(fval)]);
计算结果如下表所示:
资产 | 股票A | 股票B | 股票C | 国库券 |
---|---|---|---|---|
比例 | 8.7% | 42.9% | 14.3% | 34.1% |
风险(方差)从原来的0.0224降低到0.0208,验证了无风险资产可以降低整体投资风险。特别值得注意的是,风险资产之间的投资比例保持不变,仅调整了风险资产与无风险资产的比例,这一现象被称为"分离定理"。
2. 考虑交易成本的投资组合模型
2.1 交易成本建模
实际投资中,交易成本不可忽视。假设每次交易收取1%的费用,模型需要引入新的变量:
- y i y_i yi:购买股票i的比例
- z i z_i zi:出售股票i的比例
- c i c_i ci:当前持有股票i的比例
新约束条件:
{
x
i
=
c
i
+
y
i
−
z
i
∑
x
i
+
0.01
∑
(
y
i
+
z
i
)
=
1
y
i
⋅
z
i
=
0
(
不能同时买卖
)
\begin{cases} x_i = c_i + y_i - z_i \\ \sum x_i + 0.01\sum(y_i + z_i) = 1 \\ y_i \cdot z_i = 0 \quad (\text{不能同时买卖}) \end{cases}
⎩
⎨
⎧xi=ci+yi−zi∑xi+0.01∑(yi+zi)=1yi⋅zi=0(不能同时买卖)
2.2 MATLAB实现
% 当前持仓比例
current_hold = [0.5; 0.35; 0.15];
% 定义优化问题
H = 2*reshape(data3,3,3);
f = zeros(3,1);
A = -data2';
b = -0.15;
% 使用quadprog直接求解不考虑交易成本的解
[x_nofee,~] = quadprog(H,f,A,b,[],[],zeros(3,1),ones(3,1));
% 考虑交易成本的模型需要更复杂的处理
% 这里使用fmincon进行求解
options = optimoptions('fmincon','Algorithm','sqp','Display','off');
% 初始值
x0 = current_hold;
% 非线性约束:交易成本
nonlcon = @(x)deal([],sum(x)+0.01*sum(max(x-current_hold,0)+max(current_hold-x,0))-1);
[x_fee,risk_fee] = fmincon(@(x)x'*reshape(data3,3,3)*x,x0,...
A,b,[],[],zeros(3,1),ones(3,1),nonlcon,options);
% 计算交易量
buy = max(x_fee - current_hold,0);
sell = max(current_hold - x_fee,0);
transaction_cost = 0.01*sum(buy+sell);
disp('考虑交易成本后的最优比例:');
disp(x_fee');
disp(['交易成本:', num2str(transaction_cost)]);
disp(['调整后风险:', num2str(risk_fee)]);
2.3 结果对比分析
情景 | 股票A | 股票B | 股票C | 风险值 | 交易成本 |
---|---|---|---|---|---|
原始持仓 | 50% | 35% | 15% | 0.0235 | - |
不考虑交易成本 | 53% | 36% | 11% | 0.0224 | 0 |
考虑交易成本 | 51% | 37% | 12% | 0.0226 | 0.0024 |
结果表明,考虑交易成本后,最优投资组合会适度调整以平衡交易费用和风险降低带来的收益。
3. 利用股票指数简化投资组合模型
3.1 线性回归方法
当股票数量庞大时,计算协方差矩阵变得困难。利用股票指数简化模型的基本假设是:
R
i
=
u
i
+
b
i
M
+
e
i
R_i = u_i + b_i M + e_i
Ri=ui+biM+ei
其中
M
M
M为股票指数,
e
i
e_i
ei为误差项。
通过线性回归可以估计参数
u
i
u_i
ui和
b
i
b_i
bi,进而简化协方差计算:
Cov
(
R
i
,
R
j
)
=
b
i
b
j
σ
M
2
+
δ
i
j
σ
e
i
2
\text{Cov}(R_i,R_j) = b_i b_j \sigma_M^2 + \delta_{ij}\sigma_{e_i}^2
Cov(Ri,Rj)=bibjσM2+δijσei2
3.2 MATLAB实现
% 加载完整数据
data = [1.300 1.225 1.149 1.258997
1.103 1.290 1.260 1.197526
... % 其他数据行
1.176 1.715 1.908 1.526236];
% 提取股票收益和指数数据
stock_returns = data(:,1:3)-1;
index_returns = data(:,4)-1;
% 计算指数统计量
m0 = mean(index_returns);
s20 = var(index_returns);
s0 = std(index_returns);
% 对各股票进行回归
X = [ones(12,1), index_returns];
beta = zeros(3,2);
residuals = zeros(12,3);
for i=1:3
[b,bint,r] = regress(stock_returns(:,i),X);
beta(i,:) = b';
residuals(:,i) = r;
s2(i) = sum(r.^2)/10; % 无偏估计
end
% 构建简化的协方差矩阵
simplified_cov = beta(:,2)*beta(:,2)'*s20 + diag(s2);
% 使用简化协方差矩阵进行优化
H = 2*simplified_cov;
f = zeros(3,1);
A = -mean(stock_returns)';
b = -0.15;
Aeq = ones(1,3);
beq = 1;
lb = zeros(3,1);
[x_simplified,risk_simplified] = quadprog(H,f,A,b,Aeq,beq,lb);
disp('基于股票指数简化的最优投资比例:');
disp(x_simplified');
disp(['简化模型风险值:', num2str(risk_simplified)]);
3.3 模型比较
方法 | 股票A | 股票B | 股票C | 风险值 |
---|---|---|---|---|
完整协方差矩阵 | 53% | 36% | 11% | 0.0224 |
指数简化模型 | 54% | 27% | 19% | 0.0231 |
简化模型虽然风险略高,但大大降低了计算复杂度,特别适合大规模股票组合优化。
4. 其他目标下的投资组合模型
4.1 最小收益最大化模型
保守投资者可能更关注最坏情况下的收益,模型可表示为:
max
min
{
R
1
(
x
)
,
R
2
(
x
)
,
.
.
.
,
R
k
(
x
)
}
\max \min \{R_1(x), R_2(x), ..., R_k(x)\}
maxmin{R1(x),R2(x),...,Rk(x)}
其中
R
i
(
x
)
R_i(x)
Ri(x)表示第i种情景下的投资组合收益。
4.2 MATLAB实现
% 定义两种情景下的收益
scenario1 = [1.0, 1.2]; % 股票A和B在情景1下的收益
scenario2 = [1.5, 0.7]; % 股票A和B在情景2下的收益
% 建立线性规划模型
f = [0; 0; -1]; % 目标函数系数
A = [-scenario1(1), -scenario1(2), 1;
-scenario2(1), -scenario2(2), 1];
b = [0; 0];
Aeq = [1, 1, 0];
beq = 1;
lb = [0; 0; -inf];
[x,fval] = linprog(f,A,b,Aeq,beq,lb);
disp('保守型投资比例:');
disp(x(1:2)');
disp(['保证的最小收益:', num2str(-fval)]);
结论
本文系统介绍了多种投资组合优化模型及其MATLAB实现,主要结论包括:
-
无风险资产的引入可以显著降低投资组合风险,且风险资产间比例保持不变的分离定理成立
-
交易成本会改变最优投资组合结构,实际应用中必须考虑
-
利用股票指数回归可以大幅简化协方差矩阵计算,适用于大规模投资组合优化
-
不同风险偏好的投资者应选择不同的优化目标,从方差最小化到最坏情景收益最大化
这些模型为投资决策提供了量化工具,但实际应用时还需结合市场基本面分析,以应对模型未考虑的外部因素。