簡介
比較好的一個投資模型
題目
投資的收益和風險
市場上有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 應該默認求的是最小值。