119 lines
4.8 KiB
Markdown
119 lines
4.8 KiB
Markdown
# 组合优化 / Black-Litterman
|
|
|
|
## `black_Litterman_Model(sigma, w_b, lambda, tau, p, q, lc, if_con, conset)`
|
|
|
|
声明:function
|
|
|
|
求解 Black-Litterman 模型的资产配置权重与组合指标
|
|
|
|
<!-- tags: BlackLitterman 观点融合 均衡收益 资产配置 组合权重 -->
|
|
|
|
| 参数 | 类型 | 说明 |
|
|
| -------- | ------- | --------------------------------------------------------------------------------------- |
|
|
| `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)))
|
|
```
|