以下示例序列突出显示Portfolio
了Financial Toolbox中对象的功能。具体而言,这些示例使用该Portfolio
对象来说明如何设置均方差投资组合优化问题,这些问题集中在双基金定理、交易成本和营业额约束的影响、如何获取最大化夏普比率的投资组合以及如何建立了两种流行的对冲基金策略-美元中性和130-30投资组合。
设置数据
每个示例都具有用于计算30只“蓝筹”股票每月总回报的矩。尽管这些数据是从真实数据中得出的,但它们仅用于说明目的,并不代表特定资产或市场表现。该数据包含在文件BlueChipStockMoments.mat
中,包括变量列表AssetList
中的资产标识符变量,变量AssetMean
和AssetCovar
中的资产收益的均值和协方差,以及变量CashMean
,CashVar
,MarketMean
,和MarketVar
中的现金和市场回报的均值和方差。由于大多数分析都需要使用资产收益率的标准差作为风险,现金和市场方差的代表,因此将市场的方差转换为标准差。
load BlueChipStockMoments
mret = MarketMean;
mrsk = sqrt(MarketVar);
cret = CashMean;
crsk = sqrt(CashVar);
创建投资组合对象
首先用Portfolio
创建一个“标准” Portfolio
对象,将资产列表、无风险利率以及资产返回时刻合并到该对象中。
p = Portfolio('AssetList',AssetList,'RiskFreeRate',CashMean);
p = setAssetMoments(p,AssetMean,AssetCovar);
为了提供比较的基础,建立一个等权投资组合,并使其成为Portfolio
对象中的初始投资组合。请记住,稍后要建立的对冲投资组合将需要不同的初始投资组合。创建初始投资组合后,estimatePortMoments
函数将估算等权投资组合收益的均值和标准差。
p = setInitPort(p,1/p.NumAssets);
[ersk,eret] = estimatePortMoments(p,p.InitPort);
专门的“帮助”函数portfolioexamples_plot
(请参见工具函数部分)使得可以在此处绘制所有要开发的结果。第一张图显示了根据资产的均值和收益的标准偏差分配的资产。此外,等权重、市场和现金投资组合都绘制在同一图上。请注意,portfolioexamples_plot
函数将每月总回报转换为年化总回报。
clf;
portfolioexamples_plot('Asset Risks and Returns', ...
{
'scatter', mrsk, mret, {
'Market'}}, ...
{
'scatter', crsk, cret, {
'Cash'}}, ...
{
'scatter', ersk, eret, {
'Equal'}}, ...
{
'scatter', sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList, '.r'});
设置投资组合优化问题
使用需要完全投资的仅做多头投资组合(非负权重之和必须等于1
)的setDefaultConstraints
函数来设置“标准”或默认的平均方差投资组合优化问题。给定初始问题,用函数estimateFrontier
和estimatePortMoments
估计函数的有效边界,其中estimateFrontier
估计有效的投资组合,estimatePortMoments
估计投资组合的风险和收益。下图覆盖到前一个图的有效边界上。
p = setDefaultConstraints(p);
pwgt = estimateFrontier(p,20);
[prsk,pret] = estimatePortMoments(p,pwgt);
% Plot efficient frontier
clf;
portfolioexamples_plot('Efficient Frontier', ...
{
'line', prsk, pret}, ...
{
'scatter', [mrsk, crsk, ersk], [mret, cret, eret], {
'Market', 'Cash', 'Equal'}}, ...
{
'scatter', sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList, '.r'});
为有效边界绘制切线
托宾的共同基金定理(Tobin,1958年)说,投资组合分配问题可以看作是在无风险资产和有风险资产之间进行分配的决策。在均值方差框架中,现金可以用作无风险资产的代理,而有效边界上的有效投资组合可以用作风险组合,这样现金和此投资组合之间的任何分配都可以控制有效边界上的所有其他投资组合。此投资组合称为“ 相切”投资组合,因为它位于有效边界上的点,在该点上,源自无风险资产的切线与有效边界相接触。
假设Portfolio
对象已经具有无风险利率,通过创建Portfolio
对象的副本来获得切线,该副本的预算限制允许在0%到100%之间分配现金。由于Portfolio
对象是值对象,因此可以通过将Portfolio
函数或“set”函数的输出分配给Portfolio
对象的新实例来创建副本。该图显示了有效边界,而Tobin的分配形成了有效边界的切线。
q = setBudget(p, 0, 1);
qwgt = estimateFrontier(q,20);
[qrsk,qret] = estimatePortMoments(q,qwgt);
% Plot efficient frontier with tangent line (0 to 1 cash)
clf;
portfolioexamples_plot('Efficient Frontier with Tangent Line', ...
{
'line', prsk, pret}, ...
{
'line', qrsk, qret, [], [], 1}, ...
{
'scatter', [mrsk, crsk, ersk], [mret, cret, eret], {
'Market', 'Cash', 'Equal'}}, ...
{
'scatter', sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList, '.r'});
请注意,现金实际上具有较小的风险,因此切线不会穿过现金资产。
获取风险和回报范围
为了获得风险目标值或收益目标值的有效投资组合,有必要获得有效边界上所有投资组合的风险和收益范围。这是通过estimateFrontierLimits
函数完成的。
[rsk,ret] = estimatePortMoments(p,estimateFrontierLimits(p));
display(rsk);
rsk = 2×1
0.0348
0.0903
display(ret);
ret = 2×1
0.0094
0.0179
每月投资组合收益的范围在0.9%至1.8%之间,投资组合风险的范围在3.5%至9.0%之间。以年度计算,投资组合收益的范围为11.2%至21.5%,投资组合风险的范围为12.1%至31.3%。
寻找具有目标回报率和目标风险的投资组合
考虑到风险和回报的范围内,可以使用以下函数找到具有目标值回报和目标风险有效前沿的具体投资组合:estimateFront