Следующая последовательность примеров подсвечивает функции Portfolio
объект в Financial Toolbox™. А именно, примеры используют Portfolio
возразите, чтобы показать, как настроить задачи оптимизации портфеля среднего отклонения, которые фокусируются на теореме 2D фонда, ударе операционных издержек и ограничениях оборота, как получить портфели, которые максимизируют отношение Шарпа, и как настроить две популярных стратегии хедж-фонда - нейтральный в отношении доллара и 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
(см. раздел Utility Functions), позволяет построить все результаты, которые будут разработаны здесь. Этот первый график показывает распределение отдельных активов согласно их средним значениям и стандартным отклонениям возвратов. Кроме того, равный вес, рынок и наличные портфели построены на том же графике. Обратите внимание на то, что 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 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'});
Теорема взаимного фонда Тобина (Тобин 1958) говорит, что проблема выделения портфеля может быть просмотрена как решение выделить между безрисковым активом и опасным портфелем. В среде среднего отклонения наличные деньги могут служить прокси для безрискового актива, и эффективный портфель на границе эффективности служит опасным портфелем, таким образом, что любое выделение между наличными деньгами и этим портфелем доминирует над всеми другими портфелями на границе эффективности. Этот портфель называется портфелем касания, потому что он расположен в точке на границе эффективности, где линия касательной, которая происходит в безрисковом активе, касается границы эффективности.
Учитывая, что Portfolio
объект уже имеет безрисковый уровень, получите линию касательной путем создания копии Portfolio
объект с ограничением бюджета, которое разрешает выделение между 0% и 100% наличными. Начиная с Portfolio
объект является объектом значения, легко создать копию путем присвоения выхода любого Portfolio
или "набор" функционирует к новому экземпляру 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 AA 3.1928e-22 AIG 5.5874e-21 AXP 4.3836e-21 BA 6.257e-22 C 8.7778e-21 GE 4.3302e-22 GM 5.3508e-22 HD 9.4473e-21 HON 2.2103e-22 IBM 3.8403e-20 INTC 2.2585 JNJ 9.2162 MCD 3.7312e-22 MMM 16.603 MO 15.388 MRK 1.641e-21 MSFT 4.4467 PFE 1.5991e-21 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 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 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 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'});
Отношение Шарпа (Шарп 1966) является мерой возврата к риску, который играет важную роль в анализе портфеля. А именно, портфель, который максимизирует отношение Шарпа, является также портфелем касания на границе эффективности от теоремы взаимного фонда. Максимум портфель отношения Шарпа расположен на границе эффективности с функциональным estimateMaxSharpeRatio
и dataset
объект используется, чтобы перечислить активы в этом портфеле.
p = setInitPort(p, 0); swgt = estimateMaxSharpeRatio(p); [srsk,sret] = estimatePortMoments(p,swgt); % Plot 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.9674e-15 AIG 1.9059e-15 AXP 1.0567e-15 BA 5.6013e-16 C 2.0055e-15 CAT 2.9716e-15 DD 3.1346e-16 DIS 5.9556e-16 GE 5.6145e-15 GM 7.3246e-16 HD 2.0342e-11 HON 3.309e-16 HPQ 2.0307e-15 IBM 8.8746e-15 INTC 2.6638 JNJ 9.0044 JPM 5.4026e-16 KO 2.4602e-16 MCD 8.7472e-16 MMM 15.502 MO 13.996 MRK 3.2239e-16 MSFT 4.4777 PFE 7.3425e-16 PG 7.4588 SBC 3.8329e-16 UTX 6.0056 VZ 3.9079e-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 that shows 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 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 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.
Дж. Линтнер. "Оценка Активов Риска и Выбор Risky Investments в Портфелях Запаса и Капитальных бюджетах". Анализ Экономики и Статистики. Издание 47, № 1, стр 13-37, 1965.
Х. М. Марковиц. Выбор портфеля: эффективная диверсификация инвестиций. John Wiley & Sons, Inc., 1959.
В. Ф. Шарп. "Производительность Взаимного фонда". Журнал Бизнеса. Издание 39, № 1, Часть 2, стр 119-138, 1966.
Дж. Тобин. "Настройка ликвидности как Поведение К Риску". Анализ Экономических Исследований. Издание 25, № 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