Files
playbook/skills/tsl-api-reference/references/codegen/module/black-litterman.md
T
2026-08-14 17:15:41 +08:00

4.8 KiB

组合优化 / 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:无约束优化

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:有约束优化

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:不考虑投资者观点

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)))