# 组合优化 / Black-Litterman ## `black_Litterman_Model(sigma, w_b, lambda, tau, p, q, lc, if_con, conset)` 声明:function 求解 Black-Litterman 模型的资产配置权重与组合指标 | 参数 | 类型 | 说明 | | -------- | ------- | --------------------------------------------------------------------------------------- | | `sigma` | array | 先验超额收益协方差矩阵,N*N 二维数字数组,N 为证券或资产个数 | | `w_b` | array | 市场基准权重,N*1 二维数字数组,不带百分号 | | `lambda` | numeric | 风险厌恶系数 | | `tau` | numeric | 投资者信心水平 | | `p` | array | 观点选择矩阵,K*N 二维数字数组,K 为观点个数 | | `q` | array | 观点收益向量,K*1 二维数字数组,不带百分号 | | `lc` | array | 观点信心水平,K*1 二维数字数组,不带百分号 | | `if_con` | boolean | 是否启用资产约束;0 表示无约束,1 表示使用 `conset` 中的约束 | | `conset` | array | 可选。默认 1>=w>=0,sum(w)=1。资产约束条件;未传入具体约束时使用默认权重范围和权重和约束 | 返回:array ### 示例 范例01:无约束优化 ```tsl sigma := array( (0.0619, 0.0497, 0.0590), (0.0497, 0.0792, 0.0571), (0.0590, 0.0571, 0.0587) ); wb := `array(0.3863, 0.1137, 0.5); lambda := 2; tau := 0.1; p := array((1, 0, 0), (0, 0.8, 0.2), (1, 0, -1)); q := `array(0.03, 0.02, 0.01); lc := `array(0.8, 0.6, 0.8); if_con := 0; conset := array(); ret := black_Litterman_Model(sigma, wb, lambda, tau, p, q, lc, if_con, conset); echo toStn(ret); return ret; // 输出: // array("比例": // ( // ("基准比例(%)":38.63,"优化后比例(%)":33.1340046966147,"超配比例(%)":-5.49599530338526), // ("基准比例(%)":11.37,"优化后比例(%)":8.85939031514909,"超配比例(%)":-2.51060968485092), // ("基准比例(%)":50.0,"优化后比例(%)":44.8006263351545,"超配比例(%)":-5.19937366484555)),"组合收益风险": // ( // ("组合收益@基准":0.117171829346,"组合收益@优化":0.0965912414780245,"组合风险@基准":0.058585914673,"组合风险@优化":0.0482956207390092))) ``` 范例02:有约束优化 ```tsl sigma := array( (0.0619, 0.0497, 0.0590), (0.0497, 0.0792, 0.0571), (0.0590, 0.0571, 0.0587) ); wb := `array(0.3863, 0.1137, 0.5); lambda := 2; tau := 0.1; p := array((1, 0, 0), (0, 0.8, 0.2), (1, 0, -1)); q := `array(0.03, 0.02, 0.01); lc := `array(0.8, 0.6, 0.8); if_con := 1; conset := array(); conset['x0', 0] := array(1 / 3, 1 / 3, 1 / 3); conset['A', 0] := array(); conset['B', 0] := array(); conset['Aeq', 0] := array((1, 1, 1)); conset['Beq', 0] := array(1); conset['Lb', 0] := array(0.1, 0.1, 0.1); ret := black_Litterman_Model(sigma, wb, lambda, tau, p, q, lc, if_con, conset); echo toStn(ret); return ret; // 输出: // array("比例": // ( // ("基准比例(%)":38.63,"优化后比例(%)":49.6717646083578,"超配比例(%)":11.0417646083578), // ("基准比例(%)":11.37,"优化后比例(%)":10.0,"超配比例(%)":-1.37), // ("基准比例(%)":50.0,"优化后比例(%)":40.3282353916423,"超配比例(%)":-9.67176460835775)),"组合收益风险": // ( // ("组合收益@基准":0.117171829346,"组合收益@优化":0.111408516382479,"组合风险@基准":0.058585914673,"组合风险@优化":0.0642912282013658))) ``` 范例03:不考虑投资者观点 ```tsl sigma := array( (0.0619, 0.0497, 0.0590), (0.0497, 0.0792, 0.0571), (0.0590, 0.0571, 0.0587) ); wb := `array(0.3863, 0.1137, 0.5); lambda := 2; tau := 0.1; p := array(); q := array(); lc := array(); if_con := 1; conset := array(); ret := black_Litterman_Model(sigma, wb, lambda, tau, p, q, lc, if_con, conset); echo toStn(ret); return ret; // 输出: // array("比例": // ( // ("基准比例(%)":38.63,"优化后比例(%)":51.0175236310021,"超配比例(%)":12.3875236310021), // ("基准比例(%)":11.37,"优化后比例(%)":7.9276655591788,"超配比例(%)":-3.4423344408212), // ("基准比例(%)":50.0,"优化后比例(%)":41.0548108098191,"超配比例(%)":-8.94518919018089)),"组合收益风险": // ( // ("组合收益@基准":0.117171829346,"组合收益@优化":0.117407506428773,"组合风险@基准":0.058585914673,"组合风险@优化":0.0589552413368075))) ```