TSL语言基础 > 数学与统计教程 > 优化方法 > 组合优化 > 组合优化接口

CombinatorialOptimizer    

定义
CombinatorialOptimizer(PFInfoData;Constraints: Array;BegT;EndT:Date);
参数
名称类型说明
PFInfoData Array组合基本信息,配置比例
Constraints Array优化模型类型及约束条件信息
BegTDate数据开始时间
EndTDate数据截止时间
返回
优化目标;
组合权重;
最优权重下的约束条件值。
表9-5          输入参数PFInfoData字段
字段 含义 类型 单位 缺省值 备注
IndexId 指数代码 Varchar SH000300 优化模型0、1、3
StockId 股票代码 Varchar 优化模型0、1、2、3
StockName 股票名称 Varchar
Weight 初始权重 Numeric (%) 等比例
Industry 行业名称 Varchar 申万一级行业

注意:上表备注中的0、1、2、3表示在对应的优化目标下,该字段不为空,优化模型详细请参考优化模型函数说明:
表9-6            约束信息Constraints
字段 类型 单位 缺省值 备注
优化模型 Int % 0(跟踪误差最小) 详细参考:表9-7
收益数据类型 Int 0 0涨幅,1对数收益率
组合收益计算 Int 0 0:Rebalance 1:非Rebalance
权重和 Real % 100 0,1,2,3
分层优化 Bool False 使用分层优化方法 (仅对模型0,1有效)
是否用行业指数 Bool True False:使用基准提供的个股计算复合指数 (“分层优化”为真时有效)
基准数据 Array 分层优化不使用行业指数时非空 格式参考:表9-5 (“分层优化”为真时有效)
是否返回优化参数 Bool False False:不返回优化信息 (“分层优化”为真时有效)
行业约束 Array (%) 0<=W行业<=100 详细参考:表9-8
股票约束 Array (%) 0<=W股票<=100 详细参考:表9-9
组合期望收益 Real (%) 不能缺省 仅对优化模型2有意义
收益率协方差矩阵 Array (%) 取数据计算 仅对优化模型2有意义
期望收益率序列 Array (%) 取数据计算 仅对优化模型2有意义
组合跟踪误差约束 Real (%) 不能缺省 仅对优化模型3有意义

表9-7              优化模型
参数 含义 备注
0 跟踪误差最小 指数跟踪模型优化
1 信息比率最大 指数跟踪模型优化
2 风险最小 Markowitz均值—方差模型
3 收益最大 Roll收益模型

表9-8             行业约束
字段 类型 含义 是否非空 备注
Industry Varchar 行业名称 1 “ALL”全部的行业范围为Lb到Ub
Lb Array 下界 1
Ub Array 上界 1

注:表示某个行业的配比在Lb与Ub之间,如果Lb=Ub,则表示该行业的配比等于Lb。
  • 范例

    例如:
    //约束1, 5<= 申万采掘占比<=10
    //约束2,申万房地产占比=30
    IndustryConstraints := array(
                ('Industry':'申万采掘','Lb':5,'Ub':10),
                ('Industry':'申万房地产','Lb':30,'Ub':30));
    表9-9             股票约束
    字段 类型 含义 是否非空 备注
    StockID Varchar 股票代码 1 “All”全部的股票范围均为Lb到Ub
    Lb Array 下界 1
    Ub Array 上界 1

    例如:
    //约束1, 1<= SH000002占比<=3
    //约束2,SH600000占比=5
    IndustryConstraints := array(
                ('StockId':'SZ000002','Lb':1,'Ub':3),
                ('StockId':'SH600000','Lb':5,'Ub':5));
    算法

    组合的收益有两种算法
    1.每天同比例配置,即,每天的权重都不变;
    2.首日配置后,一直不操作的计算方法,此时,由于个股每天变化,这个权重亦是每天都变化的。
    各种模型的输出各有不同:
    1)跟踪误差优化
    TE:优化后的跟踪误差,单位(%)
    NoOptimizationTE:初始值的跟踪误差,单位(%)
    Weight:优化后的新权重,单位(%)
    OptimizeInformation:优化信息
    2)信息比例优化
    InformationRatio:优化后的信息比率
    NoOptimizationTE:初始值的信息比率
    Weight:优化后的新权重,单位(%)
    OptimizeInformation:优化信息
    3)风险最小优化
    VAR:优化后的风险,单位(%)
    Return:优化后的收益,单位(%)
    Weight:优化后的新权重,单位(%)
    OptimizeInformation:优化信息
    4)收益最大优化
    Return:优化后的收益,单位(%)
    TE:优化后的跟踪误差,单位(%)
    Weight:优化后的新权重,单位(%)
    OptimizeInformation:优化信息
    组合优化模型的使用,用户可以在Tinysoft.net上打开参考函数CombinatorialOptimizer_Demo。这里附上更简单的一个例子:
    //风险最小模型
    //输入参数1,组合的信息
    PFInfoData := array(
           ("StockId":"SZ000002","Industry":"申万房地产"),
           ("StockId":"SH600000","Industry":"申万金融服务"),
           ("StockId":"SH600031","Industry":"申万机械设备"),
           ("StockId":"SH601857","Industry":"申万采掘"),
           ("StockId":"SH600366","Industry":"申万有色金属"),
           ("StockId":"SH600123","Industry":"申万采掘"),
           ("StockId":"SH600085","Industry":"申万医药生物"));
    //输入参数2,约束信息
    Constraints := array();
    Constraints[0,'优化模型'] := 2;
    Constraints[0,'权重和'] := 100.0;
    Constraints[0,'组合期望收益']:= 0.1;
    Threshold := array(('StockId':'SZ000002','Lb':15,'Ub':40));
    Constraints[0,'股票约束']:= Threshold;
    //输入参数3,开始时间
    BegT := inttodate(20110630);
    //输入参数4,截止时间
    EndT := inttodate(20110930);
    Return CombinatorialOptimizer(PFInfoData,Constraints,BegT,EndT);

    结果是:array("VAR":3.48,"Return":0.1,"Weight":(15.00,0.00,0.00,25.35,29.82, 29.57,0.26),"OptimizeInformation":"优化成功")。
相关