FAQ > 金融建模 > 应用案例 > 组合优化

如何在组合优化框架内(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)优化评价:

    在“符合约束”列中,“满足约束”表示对应的约束类型可以实现。