我在重点强调和不理解的地方都做了笔记。
目录
1 问题提出
2 符号规定和基本假设
3 模型的分析与建立
4 模型一
第一个max的式子的意思是(平均收益率-交易费率)*资金=利润。利润当然是最高越好,但是因为matlab只能算最小值,所以就转化为(交易费率-平均收益率)*资金。
第二个约束条件就是把风险控制在一个可控范围内。
第三个则是所有投资项目的金额和交易费的和应该等于本金。
5 建模公式
第四部分已经说了,max变为min,所以需要计算(p-r),结果各个率的表计算。
因为r0时,只有存款利率,就是风险率p0为0,所以系数(p-r)为(0-0.05)=-0.05
这样当第1~4种投资项目时,他们的 交易费率-平均收益率如下所示:
s1 | 0.01-0.28 | -0.27 |
s2 | 0.02-0.21 | -0.19 |
s3 | 0.045-0.23 | -0.185 |
s4 | 0.065-0.25 | -0.185 |
所以min的各个系数就计算出来了,对应如下公式:
前面又提到了(1+交易费)*项目资金=本金和,可以计算出各个项目的系数,即(1+交易费),也就是(1+p)。
投资项目 | 1+交易费率 | 系数 |
s0 | 1+0 | 1 |
s1 | 1+0.01 | 1.01 |
s2 | 1+0.02 | 1.02 |
s3 | 1+0.045 | 1.045 |
s4 | 1+0.065 | 1.065 |
所以恒等公式如下所示:
接下来的约束就是控制风险,因为假设本金为1,所以只需要计算qx,也就是风险损失率*投入资金。又因为投入资金x都应该>=0.
投资项目 | 风险损失率*投入资金 |
s0 | 0*x0 |
s1 | 0.025*x1 |
s2 | 0.015*x2 |
s3 | 0.055*x3 |
s4 | 0.026*x4 |
所以约束公式为:
6.MATLAB编程代码
假设风险从0开始,每次增加0.001,当风险大于等于0.05时停止分析。
值得注意的是,在约束条件下,我们需要设置一个对角矩阵,这样计算结果就是针对某一个项目的资金。diag就是对角矩阵。
a=0;
hold on;
while a<0.05
c=[-0.05 -0.27 -0.19 -0.185 -0.185];
A=[zeros(4,1),diag([0.025 0.015 0.055 0.026])];
b = [a;a;a;a];
Aeq = [1 1.01 1.02 1.045 1.065];
beq = 1;
LB = zeros(5,1);
[x,Q]= linprog(c,A,b,Aeq,beq,LB);
Q=-Q;
plot(a,Q,'*k');
a = a+0.001;
end
xlabel('a'),ylabel('Q')
可以看到A长这个样子:
结果如图所示:
7 结果分析
可以观察到,结果与书上的分析一致。