投资组合优化模型:从理论到MATLAB实现

摘要

本文深入探讨投资组合优化中的关键模型,包括存在无风险资产、考虑交易成本和利用股票指数简化等场景。通过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=1nj=1nxixjcov(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=1i=1nE(Ri)xiTargetxi0,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+yizixi+0.01(yi+zi)=1yizi=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.02240
考虑交易成本51%37%12%0.02260.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实现,主要结论包括:

  1. 无风险资产的引入可以显著降低投资组合风险,且风险资产间比例保持不变的分离定理成立

  2. 交易成本会改变最优投资组合结构,实际应用中必须考虑

  3. 利用股票指数回归可以大幅简化协方差矩阵计算,适用于大规模投资组合优化

  4. 不同风险偏好的投资者应选择不同的优化目标,从方差最小化到最坏情景收益最大化

这些模型为投资决策提供了量化工具,但实际应用时还需结合市场基本面分析,以应对模型未考虑的外部因素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值