北太天元求解现代投资组合理论问题的代码

证券在未来的某个时间点的收益率是一个随机变量,我们用它的均值和方差来刻画它,
均值被称为期望收益率, 方差和风险相关。
多个证券在某个时间的收益率是一个随机向量, 均值(r_i) 和协方差矩阵(sigma_ij)分别是期望收益率向量和 风险相关的矩阵。 针对下面的脚本,
MPT theory 给出的模型是下面的二次规划问题:
找投资比例 x = (x_1, x_2, x_3) 使得下面的目标函数
lambda ( \sum_i \sum_j sigma_ij x_i x_j ) - (1-lambda) \sum_i r_i x_i
在满足下面的约束下
\sum_i x_i = 1
x_i >= 0 , i = 1,2,3
最小
%投资组合的计算 (使用北太天元软件)
% 科普部分可以参考 https://www.creditdonkey.com/modern-portfolio-theory.html
% 总共有三个证券,
% 期望收益率 ExpectReturn
% 协方差矩阵 ExpCovariance
% 总的资金看成1,
% 投资三个不同的证券上比例是
%显示的更加紧凑
format compact
format long e
% 假设等权重配置
% 组合中每个证券的预期收益率
ExpectReturn = [0.16 0.2 0.3];
% 组合中证券的协方差矩阵
ExpCovariance = ...
[ 0.1 0 0;
0 0.2 0;
0 0 0.3];
%目标函数 1/2 (x.' * H * x) + f * x;
lambda = 0.7;
H = (2*lambda) * ExpCovariance;
H = sparse(H);
f = -(1-lambda)* ExpectReturn;
%约束
A = ones(1,3);
A = sparse(A);
rl = 1;
ru = 1;
cl = zeros(3,1);
cu = [];
% 相当于portstats 函数 (待查实)
epsilon = 1e-8;
options = optimset('LargeScale', 'off', 'Display', 'off');
load_plugin("optimization");
[PortWts,~,~,output] = optimization::quadprog(H, f, A, rl, ru, cl, cu, options);
% 组合中每个证券的权重 PortWts
PortWts
%目标函数的值
output.fval