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