如何在组合优化框架内(TSPortfolioOptimizer)设置多个非线性约束
可以用TSPortfolioOptimizer类的属性
FMulticon设置多个非线性约束。
例:
{
属性FMulticon为非线性约束多选表,类型为二维数组
1.不设置为空,表示仅用FConType设置一个或不设置非线性约束
2.需包含字段:
1)"类型":约束类型,等同于FConType
2)"上界":约束上界,等同于FThresholdupper
3)"下界":约束下界,等同于FThresholdlower
4)"是否约束":不为1时,该约束设置无效
3.在设置FMulticon的同时,可以用fcontype在额外选择增加一个
非线性约束类型,但是非线性约束类型不可以重复,
FMulticon内部设置的多个非线性约束类型也不可以重复
}
obj:=new TSPortfolioOptimizer();
obj.FBegT:=20200101T;
obj.FEndT:=20201231T;
obj.FIndexId:="SH000905";
//优化样本
obj.FPortfolioData:=array(
("代码":'SH000300'),
("代码":'SH000012'));
obj.FObjType:=1; //优化目标:收益率最大
obj.FConType:=0; //非线性约束类型:跟踪误差
obj.FThresholdupper:=20/100/sqrt(250); //非线性约束上界
obj.FThresholdlower:=0; //非线性约束下界
//非线性约束多选
obj.FMulticon:=array(
("类型":2,"上界":20/100/sqrt(250),"下界":0,"是否约束":1),
("类型":7,"上界":20/100,"下界":0,"是否约束":1));
ret:=obj.PortfolioOptimize();
Return Array(
"优化信息":ret,
"优化后比例":obj.GetPortfolioData(),
"优化评价":obj.GetReturnandRisk()
);
返回结果:
(1)资产优化比例:
(2)优化评价:
在“符合约束”列中,“满足约束”表示对应的约束类型可以实现。