【BL】Black-Litterman Portfolio Optimization
导航
- 实验环境
- BL模型
- 数据预处理
- 观点设置
- 从历史数据中估计方差-协方差矩阵
- 定义先验分布的不确定程度
- 市场隐含均衡收益率
- 计算函数实现
- 后验均值和方差
- 在MV框架下求解BL模型
- 代码下载
- 参考资料
实验环境
项目 | 配置 |
---|---|
系统 | Win 10 64bit |
软件 | Matlab 2018b & Matlab 2019b |
BL模型
BL模型在传统MV模型的基础上加入了主观观点,将主观观点和历史数据进行混合,BL模型提供了估计混合后资产均值和方差的分析框架.
Mean-Variance Optimizaiton | Black-Litterman Approach | |
---|---|---|
Asset Mean | Mean of historical asset returns | Blended asset returns from analysis views and equilibrium returns |
Asset Covariance | Covariance of historical asset returns | Covariance of historical asset returns + Estimation uncertainty of the blended asset returns |
数据预处理
使用Matlab自带的数据集dowPortfolio.xlsx
实验,读入数据,设置列名和benchmark
%% 数据读入和预处理
T = readtable('dowPortfolio.xlsx');
names=["AA", "AIG", "WMT", "MSFT", "BA", "GE", "IBM"];
benchmark="DJI"; % 设置道琼斯指数为benchmark% 数据预览
head(T(:, ['Dates' benchmark names]))
得到预览数据如下
预处理数据
%% 预处理,分离资产组合和benchmark
ret = tick2ret(T(:, 2:end));
asset_ret = ret(:, names);
dj_ret=ret(:, benchmark);
num=size(asset_ret, 2);
观点设置
观点向量 q \pmb{q} qqq表示对市场预期走势的预测,方程如下
{ q = P μ + ε ε ∼ N ( 0 , Ω ) Ω = d i a g ( w 1 , w 2 , … , w v ) \left\{ \begin{aligned} &\pmb{q}=\pmb{P}\mu+\varepsilon\\ &\varepsilon\sim N(0, \Omega)\\ &\Omega=diag(w_1, w_2, \dots, w_v) \end{aligned} \right. ⎩⎪⎨⎪⎧qqq=PPPμ+εε∼N(0,Ω)Ω=diag(w1,w2,…,wv)
其中 v v v表示观点数量, k k k表示市场上的资产数量, p \pmb{p} ppp是一个 v × k v\times k v×k的矩阵, q \pmb{q} qqq是一个 v × 1 v\times 1 v×1的向量, Ω \Omega Ω是一个 v × v v\times v v×v的对角矩阵(表示观点之间互相独立),并且矩阵 Ω \Omega Ω的结构也可反映分析师对自己观点的不确定程度, Ω \Omega Ω中的元素 w i w_i wi越小,第 i i i个观点的方差越小,即该观点的把握越大.
设市场观点为
- AIG公司会得到5%的年收益,不确定性为 1 e − 3 1e^{-3} 1e−3,该观点的不确定程度较高.
- WMT会得到3%的年收益,不确定性为 1 e − 3 1e^{-3} 1e−3,该观点的的不确定程度较高.
- MSFT的年收益会超过IBM公司5%,不确定性为 1 e − 5 1e^{-5} 1e−5,该观点是一个强确定性观点.
观点生成代码如下
%% 观点生成
v=3; % 观点的数量为3
P=zeros(v, num); % pick matrix
q=zeros(v, 1);
Omega=zeros(v);% view 1: AIG
P(1, names=="AIG")=1;
q(1)=0.05;
Omega(1, 1)=1e-3;% view 2: WMT
P(2, names=="WMT")=1;
q(2)=0.03;
Omega(2, 2)=1e-3;% view 3: MSFT and IBM
P(3, names=="MSFT")=1;
P(3, names=="IBM")=-1;
q(3)=0.05;
Omega(3, 3)=1e-5;
将三种观点试用表格进行可视化得到
%% 可视化观点矩阵
viewTable=array2table([P q diag(Omega)], "VariableNames", [names "ViewReturn" "ViewsUncertainty"])
观点测量口径是年而原始数据为日度数据,需要对数据口径进行统一
%% 数据口径统一
factor=1/252; %设置一年有252个交易日
q=q*factor; % 收益率日度化
Omega=Omega*factor; % 观点矩阵不确定程度日度化
从历史数据中估计方差-协方差矩阵
%% 估计方差协方差矩阵
Sigma=cov(asset_ret.Variables);
定义先验分布的不确定程度
在BL模型中先验不确定矩阵和历史数据计算得到的方差-协方差矩阵是成正比例关系的,比例系数 τ \tau τ一般是一个很小的常数,越小的 τ \tau τ表示对先验分布 μ \mu μ的确信度越高,Litterman 和 He的论文(参考资料 3)中设置 τ = 0.025 \tau=0.025 τ=0.025,还有的作者使用 τ = 1 / n \tau=1/n τ=1/n,其中 n n n表示历史样本点的数量.
%% 对先验分布的不确定程度C
tau=1/size(asset_ret.Variables, 1);
C=tau*Sigma;
市场隐含均衡收益率
当不存在任何观点时,市场的隐含均衡收益率很可能和同目标函数的均衡优化组合收益率相同,实际上,这可以是任意在没有观点时的最优组合,比如benchmark
,本例中使用线性回归的方法找到追踪道琼斯指数的组合. 函数findMarketPortfolioAndImpliedReturn
输入数据为历史资产收益率和benchmark
收益率,输出为市场组合以及相应的隐含回报率implied returns
.
[wtsMarket, PI]=findMarketPortfolioAndImpliedReturn(asset_ret.Variables, dj_ret.Variables);
计算函数实现
市场隐含收益率通过逆优化(reverse optimization
)方法实现,设置无风险利率(risk-free rate
)为0,在CARA效用函数下的优化目标函数为
arg max w w T μ − δ 2 w T Σ w \argmax_{w} w^T\mu-\frac{\delta}{2}w^T\Sigma w wargmaxwTμ−2δwTΣw
其中 w w w表示 n n n维组合权重向量, μ \mu μ表示 n n n维期望收益率向量, Σ \Sigma Σ是 N × N N\times N N×N的方差-协方差矩阵, δ > 0 \delta>0 δ>0表示风险回避因子,在无约束情况下的解析解为
w = 1 δ Σ − 1 μ w=\frac{1}{\delta}\Sigma^{-1}\mu w=δ1Σ−1μ
所以得到市场组合隐含收益率为
π = δ Σ w m k t (2) \pi=\delta\Sigma w_{mkt}\tag{2} π=δΣwmkt(2)
考虑资产约束等情况的市场隐含收益率的分析见Herold的论文(参考资料 4), 对方程 ( 2 ) (2) (2)两侧同时左乘 w m k t T w_{mkt}^T wmktT,移项可得
δ = w m k t T π w m k t T Σ w m k t = S R σ m \delta=\frac{w_{mkt}^T\pi}{w_{mkt}^T\Sigma w_{mkt}}=\frac{SR}{\sigma_m} δ=wmktTΣwmktwmktTπ=σmSR
计算函数如下
%% 计算市场隐含收益率的接口
function [wtsMarket, PI]=findMarketPortfolioAndImpliedReturn(asset_ret, ben_ret)
Sigma=cov(asset_ret);
n=size(asset_ret, 2);
LB=zeros(1, n);
Aeq=ones(1, n);
Beq=1;
opts=optimoptions('lsqlin', 'Algorithm', 'interior-point', 'Display', 'off');
wtsMarket=lsqlin(asset_ret, ben_ret, [], [], Aeq, Beq, LB, [], [], opts);
SR=mean(ben_ret)/std(ben_ret);
delta=SR/sqrt(wtsMarket'*Sigma*wtsMarket);
PI=delta*Sigma*wtsMarket;
end
后验均值和方差
根据BL公式计 ( 1 ) (1) (1)算混合均值和方差
%% 混合均值和方差
mu_bl=(P'*(Omega\P)+inv(C))\(C\PI+P'*(Omega\q));
cov_bl=inv(P'*(Omega\P)+inv(C));
数表显示结果如下
%% 显示结果
table(names', PI/factor, mu_bl/factor, 'VariableNames', ["Asset_Name", "Prior_Belief_of_ER", "BL_Blended_ER"])
可以发现在后验均值中,MSFT的期望收益率超过IBM大约5%,反映了观点矩阵发生了作用.
在MV框架下求解BL模型
将后验均值和方差代入到MV框架中求解得到BL模型组合权重
%% MV框架下模型求解
% MV模型
port = Portfolio('NumAssets', num, 'lb', 0, 'budget', 1, 'Name', 'Mean Variance');
port = setAssetMoments(port, mean(asset_ret.Variables), Sigma);
wts=estimateMaxSharpeRatio(port); % 目标函数为求解最大Sharpe Ratio% BL模型
portBL = Portfolio('NumAssets', num, 'lb', 0, 'budget', 1, 'Name', 'BL Mean Variance');
portBL = setAssetMoments(portBL, mu_bl, Sigma+cov_bl);
wtsBL=estimateMaxSharpeRatio(portBL); % 目标函数为求解最大Sharpe Ratio
可以发现,在BL模型中,权重不再出现大量集中的情况,分布的相对比较均匀.
%% 打表
table(names', wts, wtsBL, 'VariableNames', ["AssetName", "MV", "MV_BL"])
模型整体结构图如下(图片截取自Matlab官方网站)
代码下载
Black-Litterman model matlab code
参考资料
1.Black-Litterman Portfolio Optimization
2.on the bayesian interpretation of Black Litterman
3.the intuition behind blacklitterman model portfolios
4.Computing implied returns in a meaningful way
【BL】Black-Litterman Portfolio Optimization相关推荐
- 【AP】Robust multi-period portfolio selection(3)
Navigator Pre Blog Link Robust conterparts of multi-period portfolio problems The relationship betwe ...
- 【AP】Robust multi-period portfolio selection(2)
Navigator Pre Blog Link Robust multi-period portfolio selection(1) Robust optimization and asymmetri ...
- 【Matlab】笔记:matlab Optimization Tool使用一——pattern search
matlab optimization tool使用我还并不熟悉,在这里记录一下,我自己第一次使用optimization tool的过程~ 首先,如何调用optimization tool工具出来呢 ...
- 【CVPR2022】TeachAugment: Data Augmentation Optimization Using Teacher Knowledge
cvpr2022一篇关于数据增强的文章,最近想扩增数据集,看看能不能用到吧. 原文链接:https://arxiv.org/abs/2202.12513 知乎同步更新,id为cocotaini,笔记链 ...
- 【控制】粒子群优化(PSO,Particle Swarm Optimization)算法及 Matlab 仿真实现
文章目录 定义 对比模拟捕食 通俗解释 粒子抽象 关于速度和位置 速度和位置的更新 标准PSO算法流程 标准PSO算法的流程 PSO流程图解 学习因子 c1.c2c_1.c_2c1.c2 分析 仿 ...
- 安卓玩机搞机技巧综合资源-----“另类更新“偷渡”操作步骤 无需解锁bl 无需内侧用户【十三】
接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 [一] 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your de ...
- 【深度学习笔记】优化算法( Optimization Algorithm)
本文依旧是吴恩达<深度学习工程师>课程的笔记整理与拓展. 一.优化算法的目的与挑战 优化算法主要是用来加快神经网络的训练速度,使得目标函数快速收敛. 优化问题面临的挑战有病态解.鞍点.梯度 ...
- 【论文 CCF C】An adaptive portfolio trading system
An adaptive portfolio trading system: A risk-return portfolio optimization using recurrent reinforce ...
- 【Paper】2009_Controllability of Multi-Agent Systems from a Graph-Theoretic Perspective
[Rahmani, Amirreza and Ji, Meng and Mesbahi, Mehran and Egerstedt, Magnus. Controllability of Multi- ...
最新文章
- IOS8开发之实现App消息推送
- php的bom头会影响格式,phpBOM头(字符#65279;)出现的原因以及解决方法_PHP程序员博客|高蒙个人博客...
- c盘users的用户名怎么改_做完这几个操作,我从C盘中清理了30G垃圾文件
- Ubuntu上安装Hadoop集群
- @PostConstruct注解详解
- Docker第三方项目小结
- 中国宽带可调谐飞秒激光器行业市场供需与战略研究报告
- 面试必备 | 带你彻底搞懂 Python 生成器。
- 计算机 矩阵乘法,计算机算法:Strassen矩阵相乘算法
- 重新定义高端存储架构,华为Dorado V6树立全闪存新标杆
- 2017年第十七届迪培思广州国际广告展会刊(参展商名录)
- qq空间不能访问解决方法
- 拒酒词,社交必备!!!
- python计算机视觉编程——基本的图像操作和处理
- 将数字转换成大写金额
- STM32超低功耗入门之停止模式
- 微信打开网址提示已停止访问该网页 怎么办?
- 把16 支球队随机分为4 个组。
- Activiti流程操作
- rpmbuild 介绍