定义:CombinatorialOptimizer(PFInfoData,Constraints: Array,BegT,EndT:Date);
参数:
PFInfoData:组合基本信息,配置比例
Constraints:优化模型类型及约束条件信息
BegT:数据开始时间
EndT:数据截止时间
返回值:
优化目标;
组合权重;
最优权重下的约束条件值。
输入参数PFInfoData字段
字段 | 含义 | 类型 | 单位 | 缺省值 | 备注 |
IndexId | 指数代码 | Varchar | | SH000300 | 优化模型0、1、3 |
StockId | 股票代码 | Varchar | | | 优化模型0、1、2、3 |
StockName | 股票名称 | Varchar | | | |
Weight | 初始权重 | Numeric | (%) | 等比例 | |
Industry | 行业名称 | Varchar | | 申万一级行业 | |
注意:上表备注中的0、1、2、3表示在对应的优化目标下,该字段不为空,优化模型详细请参考优化模型函数说明:
约束信息Constraints
字段 | 类型 | 单位 | 缺省值 | 备注 |
优化模型 | Int | % | 0(跟踪误差最小) | 详细参考:表9-7 |
收益数据类型 | Int | | 0 | 0涨幅,1对数收益率 |
组合收益计算 | Int | | 0 | 0:Rebalance1:非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有意义 |
优化模型
参数 | 含义 | 备注 |
0 | 跟踪误差最小 | 指数跟踪模型优化 |
1 | 信息比率最大 | 指数跟踪模型优化 |
2 | 风险最小 | Markowitz均值—方差模型 |
3 | 收益最大 | Roll收益模型 |
行业约束
字段 | 类型 | 含义 | 是否非空 | 备注 |
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));
股票约束
字段 | 类型 | 含义 | 是否非空 | 备注 |
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.首日配置后,一直不操作的计算方法,此时,由于个股每天变化,这个权重亦是每天都变化的。
各种模型的输出各有不同:
跟踪误差优化
TE:优化后的跟踪误差,单位(%)
NoOptimizationTE:初始值的跟踪误差,单位(%)
Weight:优化后的新权重,单位(%)
OptimizeInformation:优化信息
信息比例优化
InformationRatio:优化后的信息比率
NoOptimizationTE:初始值的信息比率
Weight:优化后的新权重,单位(%)
OptimizeInformation:优化信息
风险最小优化
VAR:优化后的风险,单位(%)
Return:优化后的收益,单位(%)
Weight:优化后的新权重,单位(%)
OptimizeInformation:优化信息
收益最大优化
Return:优化后的收益,单位(%)
TE:优化后的跟踪误差,单位(%)
Weight:优化后的新权重,单位(%)
OptimizeInformation:优化信息
组合优化模型的使用,用户可以在Tinysoft.net 上打开参考函数Combinato rialOptimizer_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":"优化成功")。