%// Black-Litterman example code for MatLab (meucci.m)
%// Copyright (c) Jay Walters, blacklitterman.org, 2008-2013.
%//
%// Redistribution and use in source and binary forms,
%// with or without modification, are permitted provided
%// that the following conditions are met:
%//
%// Redistributions of source code must retain the above
%// copyright notice, this list of conditions and the following
%// disclaimer.
%//
%// Redistributions in binary form must reproduce the above
%// copyright notice, this list of conditions and the following
%// disclaimer in the documentation and/or other materials
%// provided with the distribution.
%//
%// Neither the name of blacklitterman.org nor the names of its
%// contributors may be used to endorse or promote products
%// derived from this software without specific prior written
%// permission.
%//
%// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
%// CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
%// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
%// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
%// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
%// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
%// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
%// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
%// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
%// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
%// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
%// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
%// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
%// DAMAGE.
%//
%// For more details on the Black-Litterman model you can also view
%// "The BlackLitterman Model: A Detailed Exploration", by this author
%// at the following url.
%// http://papers.ssrn.com/sol3/papers.cfm?abstract_id=1314585
%//
%// meuccibl
%// This function performs the Black-Litterman blending of the prior
%// and the views into a new posterior estimate of the returns as
%// described in the various papers by Meucci.
%// Inputs
%// delta - Risk tolerance from the equilibrium portfolio
%// weq - Weights of the assets in the equilibrium portfolio
%// sigma - Prior covariance matrix
%// tau - Coefficiet of uncertainty in the prior estimate of the mean (pi)
%// P - Pick matrix for the view(s)
%// Q - Vector of view returns
%// Omega - Matrix of variance of the views (diagonal)
%// Outputs
%// Er - Posterior estimate of the mean returns
%// w - Unconstrained weights computed given the Posterior estimates
%// of the mean and covariance of returns.
%//
function [er, w] = meuccibl(delta, weq, sigma, tau, P, Q, Omega)
%// Reverse optimize and back out the equilibrium returns
%// This is formula (12) page 6.
pi = weq * sigma * delta;
%// We use tau * sigma many places so just compute it once
ts = tau * sigma;
%// Compute posterior estimate of the mean
%// This is a simplified version of formula (8) on page 4.
er = pi' + ts * P' * inv(P * ts * P' + Omega) * (Q - P * pi');
%// Compute posterior weights based on uncertainty in mean
w = (er' * inv(delta * sigma))';
end