简介
比较好的一个投资模型
题目
投资的收益和风险
市场上有n种资产\(s_i(i=1,2,…,n)\)可以选择,现用数额为M的相当大的资金作一个时期的投资。这n中资产在这一时期内购买\(s_i\)的平均收益率为\(r_i\),风险损失率为\(q_i\),投资越分散,总的风险越少,总体风险可用投资的\(s_i\)中最大的一个风险来度量。
购买\(s_i\)时要付交易费,费率为\(p_i\),当购买额不超过给定值\(u_i\)时,交易费按购买\(u_i\)计算。另外,假定同期银行存款利率是\(r_0\),既无交易费又无风险(\(r_0=5%\))。
已知n=4时相关数据如表1.1所列。
\(s_i\) \(r_i/\)% \(q_i/\)% \(p_i/\)% \(u_i/\)元
\(s_1\) 28 2.5 1 103
\(s_2\) 21 1.5 2 198
\(s_3\) 23 5.5 4.5 52
\(s_4\) 25 2.6 6.5 40
试给该公司设计一种投资组合方案,即用给定资金M,有选择购买若干资产或存银行生息,使净收益尽可能大,总体风险尽可能小。
解答
1.2.2 符号规定和基本假设
- 符号规定
(1) \(s_i\)表示第i种投资项目,如股票、债券等,\(i=0,1,…,n\), 其中\(s_0\)指存入银行。
(2) \(r_i\),\(p_i\),\(q_i\),分别表示\(s_i\)的平均收益率、交易费率、风险损失率,\(i=0,1,…,n\),其中\(p_0=0,q_0=0\)。
(3) \(u_i\)表示\(s_i\)的交易定额,\(i=1,2,…,n\)。
(4) \(x_i\)表示投资项目\(s_i\)的资金,\(i=0,1,…,n\).
(5) a表示投资风险度。
(6) Q表示总体收益。 - 基本假设
(1) 投资数额M相当大,为了便于计算,假设M = 1。
(2) 投资越分散,总的风险越小。
(3) 总体风险用投资项目\(s_i\)中最大的一个风险来度量。
(4) n+1中资产\(s_i\)是相互独立的。
(5) 在投资的这一时期内, \(r_i,p_i,q_i\) 为定值,不受以外因素影响。
(6) 净收益和总体风险只受\(r_i,p_i,q_i\)影响,不受其他因素干扰。
1.2.3 模型的分析与建立
(1) 总体风险用所投资的s_i中最大的一个分享来衡量,即
\(max\{q_i x_i | i=1,2,…,n\}\) # \(q_i\)表示风险损失率,\(x_i\)表示投入的资金
(2) 购买\(s_i (i=1,2,…,n)\)所付交易费是一个分段函数,即
// \(x_i\)是金额,\(p_i\)是交易费率 但是不清楚为啥 当金额小于\(u_i\)的时候,交易费是\(p_i u_i\) 可能是缺少生活经验吧。
因为题目给定的定值\(u_i\)(单位:元)相对总投资M很少,\(p_i u_i\)更小,这样购买\(s_i\)的净收益可以简化为\((r_i-p_i ) x_i\)。
(3) 要使净收益尽可能大,总体风险尽可能小,总体风险尽可能小,这是一个多目标规划模型。
目标函数为
约束条件为
// 注 目标函数就是 要收益最大,风险最小。
// 注 约束条件就是 \(sum(x_i+x_i p_i)=M\) 就是真正投入到项目中的钱 + 交的费率 = 总投资额M
(4) 模型简化
在实际投资中,投资者承受风险的程度不一样,若给定风险一个界限a,使最大的一个分线率为a, 即\((q_i x_i)/M≤a(i=1,2,…,n)\),可找到相应的投资方案。这样把多目标规划变成一个目标的线性规划。
模型一 固定风险水平,优化收益
$$\max \sum_{i=0}^{n}\left(r_{i}-p_{i}\right) x_{i}$$
1.2.4 模型一的求解
// 注 求所投资收益的最大值也就是求最小负收益
// 注 \(0.05 * x_0\) 就是存银行的收益,0.28 – 0.01 = 0.27 也就是投资\(x_1\)的收益率
// 注 \(0.025x_1\) 怎么来的呢?\(2.5% x_1\) 就是其风险,风险要小于一个给定值,在这个约束下求得的最大的值。
1.2.5 结果分析
风险 a 与 收益 Q之间的关系如图1.1所示。从图1.1可以看出:
风险大,收益也大。
当投资越分散时,投资者承担的风险越小,这与题意一致。冒险的投资者会出现集中投资的情况,饱受的投资者则尽量分散投资。
在a=0.006附近有一个转折点,在这一点左边,风险增加很少时,利润增长很快;在这一点右边,风险增加很大时,利润增长很缓慢。所以对于风险和收益没有特殊偏好的投资者来说,应该选择曲线的转折点作为最优投资组合,大约是a=0.6%,Q=20%,所对应的投资方案为
风险度\(a=0.006\),收益\(Q=0.2019,x_0 =0, x_1 = 0.24, x_2=0.4,x_3 = 0.1091,x_4=0.2212\)。
1.2.6 代码附录
clc,clear
a = 0;
hold on; % hold on point in printer
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 * ones(4, 1);
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')
// linprog注
// LB = zeros(5, 1) 表示 x_0, x_1, x_2, x_3, x_4 都是大于等于0的值
// A =
0 0.0250 0 0 0
0 0 0.0150 0 0
0 0 0 0.0550 0
0 0 0 0 0.0260
// ones(4,1)
ans =
1
1
1
1
// A, b 表示 AX≤b 也就是那些个不等式 也就是风险要小于一个给定的值
// Aeq beq 应该是等式 x_0+1.01x_1+1.02x_2+1.045x_3+1.065x_4=1
// c 表示 cX 求最小值 linprog 应该默认求的是最小值。