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

Настройте «стандартную» или стандартную проблему оптимизации портфеля средних отклонений с помощью 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'});

Теорема Тобина о взаимных фондах (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'});

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

Чтобы увидеть, как выглядят эти целевые портфели, используйте 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'});

В дополнение к транзакционным издержкам, 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'});

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

Этот пример иллюстрирует взаимодействия, которые могут происходить с комбинированными ограничениями. В этом случае должны быть выполнены как ограничение оборота относительно начального портфеля с равным весом, так и ограничение отслеживания ошибок относительно портфеля отслеживания. Ограничение оборота имеет максимум 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'});

Коэффициент Шарпа (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'});

% 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

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

Чтобы проиллюстрировать, как использовать инструменты оптимизации портфеля в управлении хедж-фондами, рассматриваются две популярные стратегии с нейтральным для доллара и 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'});

% 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 леверидж составляет 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'});

% 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
Р. К. Гринольд и Р. Н. Кан. Активное управление портфелем. 2-е изд., 2000.
Х. М. Марковиц. «Выбор портфеля». Финансовый журнал. т. 1, № 1, стр. 77-91, 1952.
Дж. Линтнер. «Оценка рисковых активов и выбор рискованных инвестиций в портфели акций и капитальные бюджеты». Обзор экономики и статистики. т. 47, № 1, стр. 13-37, 1965.
Х. М. Марковиц. Выбор портфеля: эффективная диверсификация инвестиций. John Wiley & Sons, Inc., 1959.
В. Ф. Шарп. «Эффективность работы взаимного фонда». Журнал бизнеса. Том 39, № 1, часть 2, стр. 119-138, 1966.
Дж. Тобин. «Предпочтение ликвидности как поведение к риску». Обзор экономических исследований. т. 25, No.1, стр. 65-86, 1958.
Дж. Л. Трейнор и Ф. Блэк. «Как использовать анализ безопасности для улучшения выбора портфеля». Журнал бизнеса. т. 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
addGroups | estimateAssetMoments | estimateBounds | estimateFrontierByRisk | estimateFrontierLimits | estimatePortRisk | plotFrontier | Portfolio | setAssetMoments | setBounds