6.4 带约束的随机序列
若使用模拟的方法求解投资组合的有效前沿面,就需要生成符合下述条件的随机数:
1. 每组随机数的和为1。
2. 每组随机数都必须大于等于0。
经典马科维茨均值-方差模型为:

【例6-9】假设每组要求5个随机数且随机数之和为1, 一般情况下,我们想到的方法是X1从[0,1]中随机取,X2从[0,1-X1]中随机取,依此类推,X5=1-(X1+X2+X3+X4)。根据这种方法生成如下20组随机数:

进行数据统计发现,X1、X2、X3、X4、X5后的均值分别为0.4156、0.2829、0.1380、0.0184、0.0824、0.0406。这样做是有问题的,对于X5的期望几乎是X1的10倍。随机数并未在可行域上均匀分布,这种方法不可取。
实际中,常用生成一组随机数{Xi},Xi=Xi/sum({Xi})的方法生成符合条件的随机序列。这种方法生成的随机序列并未在可行域上均匀分布,它的分布中间密度较大,但与第一种方法相比效果较好。
编写RandSumOne 函数,函数语法为:
X=RandSumOne(M, N, method)
输入参数如下。
● M.N:生成M行N列的随机矩阵,每行的和为1。
● method:初始随机向量的生成方法,1为[0,1]均匀分布,2为正态分布取绝对值。
输出参数X:符合条件的随机序列。
函数代码如下:

【例6-10】测试函数RandSumOneTest.M,通过计算风险与收益的方法将生成的五维随机序列映射到三维空间中。


其中使用的计算投资组合风险与收益的函数为portstats, 其函数语法如下:
[PortRisk, PortReturn)=portstats(ExpReturn, ExpCovariance, PortWts)
输入参数如下。
● ExpRetum:资产预期收益率。
● ExpCovariance:资产的协方差矩阵。
● PortWts:资产权重。
输出参数如下。
● PortRisk:资产组合风险(标准差)。
● PortlReturn:资产组合预期收益(期望)。
测试函数RandSumOneTest的结果如图6-13所示,两种方法的差异在这里表现得不明显。
