Примеры оптимизации портфеля

Следующая последовательность примеров подсвечивает функции 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);

Специализированная функция «helper» 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'});

Figure contains an axes. The axes with title \bfAsset Risks and Returns contains 37 objects of type scatter, text.

Настройка задачи оптимизации портфеля

Настройте «стандартную» или задачу оптимизации портфеля средних дисперсий по умолчанию с setDefaultConstraints функция, которая требует полномасштабных портфелей с длинными вложениями (неотрицательные веса, которые должны суммироваться с 1). Учитывая эту начальную задачу, оцените эффективную границу с функциями estimateFrontier и estimatePortMoments, где estimateFrontier оценивает эффективные портфели и estimatePortMoments оценки рисков и возвратов по портфелям. Следующий рисунок накладывает эффективную границу на предыдущий график.

p = setDefaultConstraints(p);

pwgt = estimateFrontier(p,20);
[prsk,pret] = estimatePortMoments(p,pwgt);

% Plot the 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'});

Figure contains an axes. The axes with title \bfEfficient Frontier contains 36 objects of type line, scatter, text.

Иллюстрируйте тангенс- Линию к эффективному фронтиру

Теорема Тобина о взаимных фондах (Tobin 1958) говорит, что проблема распределения портфеля рассматривается как решение распределиться между рискованным активом и рискованным портфелем. В рамках средней дисперсии денежные средства служат прокси для рискованного актива, а эффективный портфель на эффективной границе служит рискованным портфелем, так что любое распределение между наличными и этим портфелем доминирует над всеми другими портфелями на эффективной границе. Этот портфель называется портфелем касательности, потому что он расположен в точке на эффективной границе, где тангенциальная линия, которая берёт начало в безрискованном активе, касается эффективной границы.

Учитывая, что Portfolio объект уже имеет скорость, свободную от риска, получите касательную линию, создав копию Portfolio объект с ограничением бюджета, которое позволяет выделять от 0% до 100% наличными. Начиная с Portfolio объект является объектом значения, легко создать копию путем назначения выхода любой из Portfolio или функций «set» в новый образец Portfolio объект. Этот график показывает эффективную границу с выделениями Тобина, которые образуют тангенс, линию к эффективной границе.

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'});

Figure contains an axes. The axes with title \bfEfficient Frontier with Tangent Line contains 37 objects of type line, scatter, text.

Обратите внимание, что наличные деньги на самом деле имеют небольшой риск, так что касательная линия не проходит через кассовое имущество.

Получение области значений рисков и возвратов

Для получения эффективных портфелей с целевыми значениями либо риска, либо возврата необходимо получить область значений рисков и возвратов среди всех портфелей на эффективной границе. Это достигается с помощью 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%.

Поиск портфеля с целевым возвратом и целевым риском

Учитывая область значений рисков и возвратов, можно найти конкретные портфели на эффективной границе, которые имеют целевые значения для возврата и риска с помощью функций estimateFrontierByReturn и estimateFrontierByRisk.

TargetReturn = 0.20;            % Input target annualized return and risk here.
TargetRisk = 0.15;

% Obtain portfolios with targeted return and risk.

awgt = estimateFrontierByReturn(p,TargetReturn/12);
[arsk,aret] = estimatePortMoments(p,awgt);

bwgt = estimateFrontierByRisk(p,TargetRisk/sqrt(12));
[brsk,bret] = estimatePortMoments(p,bwgt);

% Plot efficient frontier with targeted portfolios.

clf;
portfolioexamples_plot('Efficient Frontier with Targeted Portfolios', ...
	{'line', prsk, pret}, ...
	{'scatter', [mrsk, crsk, ersk], [mret, cret, eret], {'Market', 'Cash', 'Equal'}}, ...
	{'scatter', arsk, aret, {sprintf('%g%% Return',100*TargetReturn)}}, ...
	{'scatter', brsk, bret, {sprintf('%g%% Risk',100*TargetRisk)}}, ...
	{'scatter', sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList, '.r'});

Figure contains an axes. The axes with title \bfEfficient Frontier with Targeted Portfolios contains 40 objects of type line, scatter, text.

Чтобы увидеть, как выглядят эти целевые портфели, используйте dataset объект для настройки «блоттеров», которые содержат веса портфеля и имена активов (которые получаются из Portfolio объект).

aBlotter = dataset({100*awgt(awgt > 0),'Weight'}, 'obsnames', p.AssetList(awgt > 0));

displayPortfolio(sprintf('Portfolio with %g%% Target Return', 100*TargetReturn), aBlotter, false);
Portfolio with 20% Target Return
            Weight 
    CAT      1.1445
    INTC    0.17452
    MO       9.6521
    MSFT    0.85862
    UTX      56.918
    WMT      31.253
bBlotter = dataset({100*bwgt(bwgt > 0),'Weight'}, 'obsnames', p.AssetList(bwgt > 0));

displayPortfolio(sprintf('Portfolio with %g%% Target Risk', 100*TargetRisk), bBlotter, false);
Portfolio with 15% Target Risk
            Weight    
    BA      3.1996e-22
    C       1.8304e-22
    DIS     1.6394e-20
    GE      4.2564e-21
    HD      3.9772e-21
    INTC        2.2585
    JNJ         9.2162
    JPM     2.2817e-21
    KO      1.6585e-21
    MMM         16.603
    MO          15.388
    MSFT        4.4467
    PG           4.086
    UTX         10.281
    WMT         25.031
    XOM          12.69

Транзакции Затраты

The Portfolio объект позволяет учитывать транзакционные издержки как часть задачи оптимизации. Несмотря на то, что для каждого основного средства можно задать отдельные затраты, используйте скалярные функции расширения Portfolio функции объекта для настройки единых транзакционных издержек по всем активам и сравнения эффективных границ с валовыми и чистыми возвратами портфеля.

BuyCost = 0.0020;
SellCost = 0.0020;

q = setCosts(p,BuyCost,SellCost);

qwgt = estimateFrontier(q,20);
[qrsk,qret] = estimatePortMoments(q,qwgt);

% Plot efficient frontiers with gross and net returns.

clf;
portfolioexamples_plot('Efficient Frontier with and without Transaction Costs', ...
	{'line', prsk, pret, {'Gross'}, ':b'}, ...
	{'line', qrsk, qret, {'Net'}}, ...
	{'scatter', [mrsk, crsk, ersk], [mret, cret, eret], {'Market', 'Cash', 'Equal'}}, ...
	{'scatter', sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList, '.r'});

Figure contains an axes. The axes with title \bfEfficient Frontier with and without Transaction Costs contains 37 objects of type line, scatter, text. These objects represent Gross, Net.

Ограничение оборота

В сложение к транзакционным затратам Portfolio объект может обрабатывать ограничения на оборот. Следующий пример демонстрирует, что ограничение оборота создает эффективную границу в районе начального портфеля, который может ограничить торговлю. Кроме того, введение ограничения оборота часто подразумевает, что для перехода от первоначального портфеля к эффективной границе без ограничений может потребоваться несколько сделок. Следовательно, ограничение оборота вводит форму диверсификации времени, которая может распределять сделки в течение нескольких периодов времени. В этом примере обратите внимание, что сумма закупок и продаж от estimateFrontier функция подтверждает, что ограничение оборота выполнено.

BuyCost = 0.0020;
SellCost = 0.0020;
Turnover = 0.2;

q = setCosts(p, BuyCost,SellCost);
q = setTurnover(q,Turnover);

[qwgt,qbuy,qsell] = estimateFrontier(q,20);
[qrsk,qret] = estimatePortMoments(q,qwgt);

% Plot efficient frontier with turnover constraint.

clf;
portfolioexamples_plot('Efficient Frontier with Turnover Constraint', ...
	{'line', prsk, pret, {'Unconstrained'}, ':b'}, ...
	{'line', qrsk, qret, {sprintf('%g%% Turnover', 100*Turnover)}}, ...
	{'scatter', [mrsk, crsk, ersk], [mret, cret, eret], {'Market', 'Cash', 'Equal'}}, ...
	{'scatter', sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList, '.r'});

Figure contains an axes. The axes with title \bfEfficient Frontier with Turnover Constraint contains 37 objects of type line, scatter, text. These objects represent Unconstrained, 20% Turnover.

displaySumOfTransactions(Turnover, qbuy, qsell)
Sum of Purchases by Portfolio along Efficient Frontier (Max. Turnover 20%)
20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 
Sum of Sales by Portfolio along Efficient Frontier (Max. Turnover 20%)
20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 

Ограничение отслеживания-ошибки

The Portfolio объект может обрабатывать ограничения отслеживания-ошибки, где отслеживание-ошибка является относительным риском портфеля по сравнению с портфелем отслеживания. В этом примере поднабор из девяти активов формирует одинаково взвешенный портфель отслеживания. Цель состоит в том, чтобы найти эффективные портфели с ошибками отслеживания, которые находятся в пределах 5% от этого портфеля отслеживания.

ii = [15, 16, 20, 21, 23, 25, 27, 29, 30];	% Indexes of assets to include in the tracking portfolio.

TrackingError = 0.05/sqrt(12);
TrackingPort = zeros(30, 1);
TrackingPort(ii) = 1;
TrackingPort = (1/sum(TrackingPort))*TrackingPort;

q = setTrackingError(p,TrackingError,TrackingPort);

qwgt = estimateFrontier(q,20);
[qrsk,qret] = estimatePortMoments(q,qwgt);

[trsk,tret] = estimatePortMoments(q,TrackingPort);

% Plot the efficient frontier with tracking-error constraint.

clf;
portfolioexamples_plot('Efficient Frontier with 5% Tracking-Error Constraint', ...
	{'line', prsk, pret, {'Unconstrained'}, ':b'}, ...
	{'line', qrsk, qret, {'Tracking'}}, ...
	{'scatter', [mrsk, crsk], [mret, cret], {'Market', 'Cash'}}, ...
	{'scatter', trsk, tret, {'Tracking'}, 'r'});

Figure contains an axes. The axes with title \bfEfficient Frontier with 5% Tracking-Error Constraint contains 7 objects of type line, scatter, text. These objects represent Unconstrained, Tracking.

Комбинированные ограничения оборота и отслеживания-ошибки

Этот пример иллюстрирует взаимодействия, которые могут происходить с комбинированными ограничениями. В этом случае должны быть удовлетворены как ограничение оборота относительно начального портфеля равного веса, так и ограничение ошибки отслеживания относительно портфеля отслеживания. Ограничение оборота имеет максимум 30% оборота, а ограничение ошибки отслеживания имеет максимум 5% ошибки отслеживания. Обратите внимание, что оборот для перехода от начального портфеля к портфелю отслеживания составляет 70%, так что верхняя граница 30% оборота означает, что эффективная граница будет лежать где-то между начальным портфелем и портфелем отслеживания.

Turnover = 0.3;
InitPort = (1/q.NumAssets)*ones(q.NumAssets, 1);

ii = [15, 16, 20, 21, 23, 25, 27, 29, 30];	% Indexes of assets to include in tracking portfolio.

TrackingError = 0.05/sqrt(12);
TrackingPort = zeros(30, 1);
TrackingPort(ii) = 1;
TrackingPort = (1/sum(TrackingPort))*TrackingPort;

q = setTurnover(q,Turnover,InitPort);

qwgt = estimateFrontier(q,20);
[qrsk,qret] = estimatePortMoments(q,qwgt);

[trsk,tret] = estimatePortMoments(q,TrackingPort);
[ersk,eret] = estimatePortMoments(q,InitPort);

% Plot the efficient frontier with combined turnover and tracking-error constraint.

clf;
portfolioexamples_plot('Efficient Frontier with Turnover and Tracking-Error Constraint', ...
	{'line', prsk, pret, {'Unconstrained'}, ':b'}, ...
	{'line', qrsk, qret, {'Turnover & Tracking'}}, ...
	{'scatter', [mrsk, crsk], [mret, cret], {'Market', 'Cash'}}, ...
	{'scatter', trsk, tret, {'Tracking'}, 'r'}, ...
	{'scatter', ersk, eret, {'Initial'}, 'b'});

Figure contains an axes. The axes with title \bfEfficient Frontier with Turnover and Tracking-Error Constraint contains 9 objects of type line, scatter, text. These objects represent Unconstrained, Turnover & Tracking.

Максимизируйте коэффициент Шарпа

Отношение Шарпа (Sharpe 1966) является мерой возврата к риску, которая играет важную роль в анализе портфеля. В частности, портфель, который максимизирует отношение Шарпа, также является портфелем касательности на эффективной границе от теоремы взаимного фонда. Портфель максимального коэффициента Шарпа расположен на эффективном рубеже с функцией estimateMaxSharpeRatio и dataset объект используется для перечисления активов в этом портфеле.

p = setInitPort(p, 0);

swgt = estimateMaxSharpeRatio(p);
[srsk,sret] = estimatePortMoments(p,swgt);

% Plot the efficient frontier with portfolio that attains maximum Sharpe ratio.

clf;
portfolioexamples_plot('Efficient Frontier with Maximum Sharpe Ratio Portfolio', ...
	{'line', prsk, pret}, ...
	{'scatter', srsk, sret, {'Sharpe'}}, ...
	{'scatter', [mrsk, crsk, ersk], [mret, cret, eret], {'Market', 'Cash', 'Equal'}}, ...
	{'scatter', sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList, '.r'});

Figure contains an axes. The axes with title \bfEfficient Frontier with Maximum Sharpe Ratio Portfolio contains 38 objects of type line, scatter, text.

% Set up a dataset object that contains the portfolio that maximizes the Sharpe ratio.

Blotter = dataset({100*swgt(swgt > 0),'Weight'}, 'obsnames', AssetList(swgt > 0));

displayPortfolio('Portfolio with Maximum Sharpe Ratio', Blotter, false);
Portfolio with Maximum Sharpe Ratio
            Weight    
    AA      1.9766e-15
    AIG     1.9146e-15
    AXP     1.0611e-15
    BA      5.6229e-16
    C       2.0142e-15
    CAT     2.9838e-15
    DD      3.1459e-16
    DIS     5.9796e-16
    GE      5.6384e-15
    GM      7.3545e-16
    HD      2.0404e-11
    HON      3.322e-16
    HPQ     2.0397e-15
    IBM     8.9075e-15
    INTC        2.6638
    JNJ         9.0044
    JPM     5.4252e-16
    KO      2.4688e-16
    MCD      8.782e-16
    MMM         15.502
    MO          13.996
    MRK      3.235e-16
    MSFT        4.4777
    PFE     7.3698e-16
    PG          7.4588
    SBC     3.8468e-16
    UTX         6.0056
    VZ      3.9213e-16
    WMT         22.051
    XOM         18.841

Подтвердите, что максимальное отношение Шарпа является максимальным

Следующий график демонстрирует, что этот портфель (который расположен в точке на графиках) действительно максимизирует отношение Шарпа среди всех портфелей на эффективной границе.

psratio = (pret - p.RiskFreeRate) ./ prsk;
ssratio = (sret - p.RiskFreeRate) / srsk;

clf;
subplot(2,1,1);
plot(prsk, pret, 'LineWidth', 2);
hold on
scatter(srsk, sret, 'g', 'filled');
title('\bfEfficient Frontier');
xlabel('Portfolio Risk');
ylabel('Portfolio Return');
hold off

subplot(2,1,2);
plot(prsk, psratio, 'LineWidth', 2);
hold on
scatter(srsk, ssratio, 'g', 'filled');
title('\bfSharpe Ratio');
xlabel('Portfolio Risk');
ylabel('Sharpe Ratio');
hold off

Figure contains 2 axes. Axes 1 with title \bfEfficient Frontier contains 2 objects of type line, scatter. Axes 2 with title \bfSharpe Ratio contains 2 objects of type line, scatter.

Иллюстрируйте, что Sharp является портфолио Tangent

Следующий график демонстрирует, что портфель, который максимизирует коэффициент Шарпа, также является портфелем касательности (в этом случае бюджетное ограничение открывается до разрешения от 0% до 100% наличными).

q = setBudget(p, 0, 1);

qwgt = estimateFrontier(q,20);
[qrsk,qret] = estimatePortMoments(q,qwgt);

% Plot showing that the Sharpe ratio portfolio is the tangency portfolio.

clf;
portfolioexamples_plot('Efficient Frontier with Maximum Sharpe Ratio Portfolio', ...
	{'line', prsk, pret}, ...
	{'line', qrsk, qret, [], [], 1}, ...
	{'scatter', srsk, sret, {'Sharpe'}}, ...
	{'scatter', [mrsk, crsk, ersk], [mret, cret, eret], {'Market', 'Cash', 'Equal'}}, ...
	{'scatter', sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList, '.r'});

Figure contains an axes. The axes with title \bfEfficient Frontier with Maximum Sharpe Ratio Portfolio contains 39 objects of type line, scatter, text.

Нейтральная для доллара структура хедж-фонда

Чтобы проиллюстрировать, как использовать инструменты оптимизации портфеля в управлении хедж-фондами, рассматриваются две популярные стратегии с нейтральными по отношению к доллару и 130-30 портфелями. Нейтральная к доллару стратегия инвестирует одинаково в длинные и короткие позиции, так что чистая позиция портфеля 0. Такой портфель называется «долларово-нейтральным».

Чтобы настроить долларово-нейтральный портфель, начните с «стандартной» задачи портфеля и установите максимальную подверженность в длинных и коротких позициях переменной Exposure. Ограничения для отдельных весов активов равны плюс-минус Exposure. Поскольку чистая позиция должна быть нейтральной по отношению к доллару, бюджетное ограничение 0 и начальный портфель должен быть 0. Наконец, односторонние ограничения оборота обеспечивают необходимые длинные и короткие ограничения, чтобы предотвратить «двойной подсчет» длинных и коротких позиций. Блоттер показывает веса портфеля для долларово-нейтрального портфеля, который максимизирует коэффициент Шарпа. Длинная и короткая позиции получаются от сделок покупки и продажи относительно начального портфеля.

Exposure = 1;

q = setBounds(p, -Exposure, Exposure);
q = setBudget(q, 0, 0);
q = setOneWayTurnover(q, Exposure, Exposure, 0);

[qwgt,qlong,qshort] = estimateFrontier(q,20);
[qrsk,qret] = estimatePortMoments(q,qwgt);

[qswgt,qslong,qsshort] = estimateMaxSharpeRatio(q);
[qsrsk,qsret] = estimatePortMoments(q,qswgt);

% Plot the efficient frontier for a dollar-neutral fund structure with tangency portfolio.

clf;
portfolioexamples_plot('Efficient Frontier with Dollar-Neutral Portfolio', ...
	{'line', prsk, pret, {'Standard'}, 'b:'}, ...
	{'line', qrsk, qret, {'Dollar-Neutral'}, 'b'}, ...
	{'scatter', qsrsk, qsret, {'Sharpe'}}, ...
	{'scatter', [mrsk, crsk, ersk], [mret, cret, eret], {'Market', 'Cash', 'Equal'}}, ...
	{'scatter', sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList, '.r'});

Figure contains an axes. The axes with title \bfEfficient Frontier with Dollar-Neutral Portfolio contains 39 objects of type line, scatter, text. These objects represent Standard, Dollar-Neutral.

% Set up a dataset object that contains the portfolio that maximizes the Sharpe ratio.

Blotter = dataset({100*qswgt(abs(qswgt) > 1.0e-4), 'Weight'}, ...
	{100*qslong(abs(qswgt) > 1.0e-4), 'Long'}, ...
	{100*qsshort(abs(qswgt) > 1.0e-4), 'Short'}, ...
	'obsnames', AssetList(abs(qswgt) > 1.0e-4));

displayPortfolio('Dollar-Neutral Portfolio with Maximum Sharpe Ratio', Blotter, true, 'Dollar-Neutral');
Dollar-Neutral Portfolio with Maximum Sharpe Ratio
            Weight     Long       Short 
    AA       0.5088     0.5088         0
    AIG      3.0394     3.0394         0
    AXP     0.92797    0.92797         0
    BA      -3.4952          0    3.4952
    C        14.003     14.003         0
    CAT      3.7261     3.7261         0
    DD      -18.063          0    18.063
    DIS     -4.8236          0    4.8236
    GE      -3.6178          0    3.6178
    GM      -3.7211          0    3.7211
    HD        1.101      1.101         0
    HON     -1.4349          0    1.4349
    HPQ     0.09909    0.09909         0
    IBM     -8.0585          0    8.0585
    INTC     1.7693     1.7693         0
    JNJ      1.3696     1.3696         0
    JPM     -2.5271          0    2.5271
    KO      -14.205          0    14.205
    MCD        3.91       3.91         0
    MMM      7.5995     7.5995         0
    MO       4.0856     4.0856         0
    MRK       3.747      3.747         0
    MSFT     4.0769     4.0769         0
    PFE      -9.096          0     9.096
    PG       1.6493     1.6493         0
    SBC     -5.2547          0    5.2547
    UTX      5.7454     5.7454         0
    VZ       -2.438          0     2.438
    WMT     0.84844    0.84844         0
    XOM      18.529     18.529         0

Confirm Dollar-Neutral Portfolio
  (Net, Long, Short)
0.0000 76.7350 76.7350 

130/30 Структура Фонда

Наконец, ограничения оборота используются для создания структуры портфеля 130-30, которая является структурой с чистой длинной позицией, но позволяет использовать рычаги с длинными и короткими позициями до максимальной величины кредитного плеча. В случае с портфелем 130-30 кредитное плечо составляет 30%.

Чтобы настроить портфель 130-30, начните с «стандартной» задачи портфеля и установите максимальное значение плеча в переменной Leverage. Границы для отдельных весов активов варьируются между -Leverage и 1 + Leverage. Поскольку позиция нетто должна быть длинной, бюджетное ограничение 1 и, еще раз, начальный портфель 0. Наконец, односторонние ограничения оборота обеспечивают необходимые длинные и короткие ограничения, чтобы предотвратить «двойной подсчет» длинных и коротких позиций. Блоттер показывает веса портфеля для портфеля 130-30, что максимизирует отношение Шарпа. Длинная и короткая позиции получаются от сделок покупки и продажи относительно начального портфеля.

Leverage = 0.3;

q = setBounds(p, -Leverage, 1 + Leverage);
q = setBudget(q, 1, 1);
q = setOneWayTurnover(q, 1 + Leverage, Leverage);

[qwgt,qbuy,qsell] = estimateFrontier(q,20);
[qrsk,qret] = estimatePortMoments(q,qwgt);

[qswgt,qslong,qsshort] = estimateMaxSharpeRatio(q);
[qsrsk,qsret] = estimatePortMoments(q,qswgt);

% Plot the efficient frontier for a 130-30 fund structure with tangency portfolio.

clf;
portfolioexamples_plot(sprintf('Efficient Frontier with %g-%g Portfolio', ...
    100*(1 + Leverage),100*Leverage), ...
	{'line', prsk, pret, {'Standard'}, 'b:'}, ...
	{'line', qrsk, qret, {'130-30'}, 'b'}, ...
	{'scatter', qsrsk, qsret, {'Sharpe'}}, ...
	{'scatter', [mrsk, crsk, ersk], [mret, cret, eret], {'Market', 'Cash', 'Equal'}}, ...
	{'scatter', sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList, '.r'});

Figure contains an axes. The axes with title \bfEfficient Frontier with 130-30 Portfolio contains 39 objects of type line, scatter, text. These objects represent Standard, 130-30.

% Set up a dataset object that contains the portfolio that maximizes the Sharpe ratio.

Blotter = dataset({100*qswgt(abs(qswgt) > 1.0e-4), 'Weight'}, ...
	{100*qslong(abs(qswgt) > 1.0e-4), 'Long'}, ...
	{100*qsshort(abs(qswgt) > 1.0e-4), 'Short'}, ...
	'obsnames', AssetList(abs(qswgt) > 1.0e-4));

displayPortfolio(sprintf('%g-%g Portfolio with Maximum Sharpe Ratio', 100*(1 + Leverage), 100*Leverage), Blotter, true, sprintf('%g-%g', 100*(1 + Leverage), 100*Leverage));
130-30 Portfolio with Maximum Sharpe Ratio
            Weight      Long      Short  
    DD       -9.5565         0     9.5565
    HON      -6.0244         0     6.0244
    INTC      4.0335    4.0335          0
    JNJ       7.1234    7.1234          0
    JPM     -0.44583         0    0.44583
    KO       -13.646         0     13.646
    MMM       20.908    20.908          0
    MO        14.433    14.433          0
    MSFT      4.5592    4.5592          0
    PG        17.243    17.243          0
    SBC     -0.32712         0    0.32712
    UTX       5.3584    5.3584          0
    WMT       21.018    21.018          0
    XOM       35.323    35.323          0

Confirm 130-30 Portfolio
  (Net, Long, Short)
100.0000 130.0000 30.0000 

Ссылки

  1. Р. К. Гринольд и Р. Н. Кан. Активное управление портфелем. 2-е изд., 2000.

  2. Х. М. Марковиц. «Выбор портфеля». Финансовый журнал. Том 1, № 1, с. 77-91, 1952.

  3. Дж. Линтнер. «Оценка рисковых активов и выбор рискованных инвестиций в фондовые портфели и капитальные бюджеты». Обзор экономики и статистики. Том 47, № 1, стр. 13-37, 1965.

  4. Х. М. Марковиц. Выбор портфеля: эффективная диверсификация инвестиций. John Wiley & Sons, Inc., 1959.

  5. У. Ф. Шарп. «Взаимный фонд Эффективности». Журнал бизнеса. Том 39, № 1, Часть 2, стр. 119-138, 1966.

  6. Дж. Тобин. «Выбор ликвидности как поведение по отношению к риску». Обзор экономических исследований. Том 25, No.1, с. 65-86, 1958.

  7. Дж. Л. Трейнор и Ф. Блэк. «Использование анализа безопасности для улучшения выбора портфеля». Журнал бизнеса. Том 46, № 1, с. 68-86, 1973.

Локальные функции

function displaySumOfTransactions(Turnover, qbuy, qsell)
fprintf('Sum of Purchases by Portfolio along Efficient Frontier (Max. Turnover %g%%)\n', ...
    100*Turnover);
fprintf('%.4f ', 100*sum(qbuy)), sprintf('\n\n');
fprintf('\n')
fprintf('Sum of Sales by Portfolio along Efficient Frontier (Max. Turnover %g%%)\n', ...
    100*Turnover);
fprintf('%.4f ', 100*sum(qsell));
end

function displayPortfolio(Description, Blotter, LongShortFlag, portfolioType)
fprintf('%s\n', Description);
disp(Blotter);
if (LongShortFlag)
    fprintf('Confirm %s Portfolio\n', portfolioType);
    fprintf('  (Net, Long, Short)\n');
    fprintf('%.4f ' , [ sum(Blotter.Weight), sum(Blotter.Long), sum(Blotter.Short) ]);
end
end

См. также

| | | | | | | | |

Похожие примеры

Подробнее о

Внешние веб-сайты