exponenta event banner

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

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

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

Затраты по операциям

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 

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

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.

Покажите, что Шарп - это портфолио касательных

Следующий график демонстрирует, что портфель, который максимизирует отношение Шарпа, также является портфелем касательности (в этом случае бюджетное ограничение открывается для разрешения между 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

См. также

| | | | | | | | |

Связанные примеры

Подробнее

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