首先说说数据选取:
5只港股,中国电信、中国平安、中国石油、中国银行和中信证券,是从2014年10月到2015年10月一年的数据。
得到数据之后首先算好一些基本的东西:
然后利用Matlab进行计算:
Matlab金融工具箱里面有portopt函数,是专门计算有效边界值的。我大概粗略地想了一下这个问题是一个二次规划的问题,相当于在一个闭区间内,对于每一个给定的期望收益率,求出其对应的最小方差(或标准差)。方差是目标函数,是一个以权重为变量的二次函数。一般来讲求出10个点就能画出大致的边界图。当然如果还要限制其他条件,比如权重有区间范围还要另外加。但总体来讲思路是清晰的。
下面就直接使用portopt函数:
基本语法是,
[PortRisk, PortReturn, PortWts] = portopt(ExpReturn, ExpCovariance, NumPorts, PortReturn, ConSet, varargin)
PortRisk是资产组合的标准差,PortReturn是资产组合的收益率, PortWts是n种资产的权重;
ExpReturn是每种资产的预期收益率,ExpCovariance是资产的协方差矩阵,NumPorts是求出的点的个数(默认值是10), ConSet是其他约束条件(权重范围)
显然,套用该函数[PortRisk,PortReturn,PortWts]=portopt(ExpReturn,ExpCovariance,10),就能得到结果:
(ExpReturn,ExpCovariance均从上面的表格来)
PortRisk =
0.0174
0.0174
0.0176
0.0178
0.0183
0.0191
0.0201
0.0214
0.0228
0.0245
PortReturn =
0.0002
0.0004
0.0005
0.0007
0.0009
0.0011
0.0013
0.0015
0.0017
0.0019
PortWts =
0.3400 0.1200 0.1800 0.3600 0
0.3291 0.1690 0.1128 0.3890 0
0.3182 0.2180 0.0457 0.4181 0
0.2895 0.2859 0 0.4246 0
0.2231 0.3937 0 0.3832 0
0.1566 0.5015 0 0.3419 0
0.0901 0.6093 0 0.3005 0
0.0237 0.7171 0 0.2592 0
0 0.8513 0 0.1487 0
0 1.0000 0 0 0
然后用前面两个矩阵作图(事实上作图的时候我用的100个点):
OK,问题就解决了。
如果想了解得更详细请用help portopt和edit portopt查看。