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

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

Отношение Шарпа (Шарп 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.
Дж. Линтнер. "Оценка Активов Риска и Выбор 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
addGroups | estimateAssetMoments | estimateBounds | estimateFrontierByRisk | estimateFrontierLimits | estimatePortRisk | plotFrontier | Portfolio | setAssetMoments | setBounds