范例01:
资产组合为三个申万一级行业指数:农林牧渔、采掘、化工
是用历史数据计算每个资产的预期收益率和协方差矩阵
将预期收益率和协方差矩阵输入 Portopt 函数计算有效前沿和对应的资产权重
SetSysParam(pn_cycle(),cy_day());
r:=pf_GetPortfolioRate(array('SW801010','SW801020','SW801030'),20190101T,20191231T,0);
r:=r[:][1:];
//对预期收益率和协方差矩阵年化
expreturn:=mean(r);
expcov:=Covariance(r);
//计算包括最小风险组合和最大收益率组合在内的10个有效组合
r:=Portopt(expreturn,expcov,10);
return r;
返回结果:
对输出结果“组合收益风险”中的每个预期收益率和标准差画在坐标系上,横坐标为标准差,纵坐标为预期收益率,即得到“有效边界”。如下图:
范例02:参数Portreturn的用法:返回对应收益率下最小方差的资产组合
SetSysParam(pn_cycle(),cy_day());
r:=pf_GetPortfolioRate(array('SW801010','SW801020','SW801030'),20190101T, 20191231T,0);
r:=r[:][1:];
expreturn:=mean(r);
expcov:=Covariance(r);
//返回收益率为10%和15%且方差尽可能小的资产组合
r:=Portopt(expreturn,expcov,10,array(0.1,0.15));
return r;
范例03:
参数Conset的用法:设置资产组合的等式约束和非等式约束,设置方式为矩阵计算;设置单个资产权重的比例上界和下界;
不等式约束:资产1、2的权重总和小于等于0.9实现过程:假设3个资产权重为X=((x1),(x2),(x3)),使矩阵与之相乘A:*X得到(1*x1+1*x2+0*x3)=x1+x2,在函数Portopt中控制约束条件:x1+x2<=B即x1+x2<=0.9,从而实现约束:资产1、2的总权重小于等于0.9
即:A:=array((1,1,0));B:=array(0.9);
等式约束:资产的权重总和等于1
实现过程:假设3个资产权重为X=((x1),(x2),(x3)),使矩阵与之相乘Aeq:*X得到(1*x1+1*x2+1*x3)=x1+x2+x3,在函数Portopt中控制约束条件:x1+x2+x3=Beq即x1+x2+x3=1,从而实现约束:资产2和资产3的权重x1、x2、x3总和等于1
即:Aeq:=array((1,1,1)); Beq:=array(1);
r:=pf_GetPortfolioRate(array('SW801010','SW801020','SW801030'),20190101T,20191231T,0);
r:=r[:][1:];
expreturn:=mean(r);
expcov:=Covariance(r);
A:=array((1,1,0));
B:=array(0.9);
Aeq:=array((1,1,1));
Beq:=array(1);
//各个资产权重下界
Lb:=array(0.2,0,0);
//各个资产权重上界
Ub:=array(0.8,0.8,0.8);
Conset:=array();
Conset['A',0]:=A;
Conset['B',0]:=B;
Conset['Aeq',0]:=Aeq;
Conset['Beq',0]:=Beq;
Conset['Lb',0]:=Lb
Conset['Ub',0]:=Ub;
r:=Portopt(expreturn,expcov,10,array(),Conset);
return r;