estimateMaxSharpeRatio

Оцените, что эффективный портфель максимизирует отношение Шарпа для объекта Portfolio

Синтаксис

[pwgt,pbuy,psell] = estimateMaxSharpeRatio(obj)
[pwgt,pbuy,psell] = estimateMaxSharpeRatio(___,Name,Value)

Описание

пример

[pwgt,pbuy,psell] = estimateMaxSharpeRatio(obj) оценочный эффективный портфель, чтобы максимизировать отношение Шарпа для объекта Portfolio. Для получения дополнительной информации на рабочем процессе, смотрите Рабочий процесс Объекта Портфеля.

пример

[pwgt,pbuy,psell] = estimateMaxSharpeRatio(___,Name,Value) добавляют дополнительные аргументы пары "имя-значение".

Примеры

свернуть все

Оцените эффективный портфель, который максимизирует отношение Шарпа. Функция estimateMaxSharpeRatio максимизирует отношение Шарпа среди портфелей на границе эффективности. Этот пример использует метод 'direct' по умолчанию, чтобы оценить максимум отношение Шарпа. Для получения дополнительной информации о 'direct' метод, см. Алгоритмы.

p = Portfolio('AssetMean',[0.3, 0.1, 0.5], 'AssetCovar',...
[0.01, -0.010,  0.004; -0.010,  0.040, -0.002;  0.004, -0.002,  0.023]);
p = setDefaultConstraints(p);
plotFrontier(p, 20);
weights = estimateMaxSharpeRatio(p);
[risk, ret] = estimatePortMoments(p, weights);
hold on
plot(risk,ret,'*r');

Оцените эффективный портфель, который максимизирует отношение Шарпа. Функция estimateMaxSharpeRatio максимизирует отношение Шарпа среди портфелей на границе эффективности. Этот пример использует метод 'direct' для объекта Portfolio (p), который не задает ошибку отслеживания и только использует линейные ограничения. Функция setSolver используется, чтобы управлять SolverType and SolverOptions. В этом случае SolverType является quadprog. Для получения дополнительной информации о методе 'direct' см. Алгоритмы.

p = Portfolio('AssetMean',[0.3, 0.1, 0.5], 'AssetCovar',...
[0.01, -0.010,  0.004; -0.010,  0.040, -0.002;  0.004, -0.002,  0.023]);
p = setDefaultConstraints(p);
plotFrontier(p, 20);
p = setSolver(p,'quadprog','Display','off','ConstraintTolerance',1.0e-8,'OptimalityTolerance',1.0e-8,'StepTolerance',1.0e-8,'MaxIterations',10000); 
weights = estimateMaxSharpeRatio(p); 
[risk, ret] = estimatePortMoments(p, weights);
hold on
plot(risk,ret,'*r');

Оцените эффективный портфель, который максимизирует отношение Шарпа. Функция estimateMaxSharpeRatio максимизирует отношение Шарпа среди портфелей на границе эффективности. Этот пример использует метод 'direct' для объекта Portfolio (p), который указывает, что ошибка отслеживания использует нелинейные ограничения. Функция setSolver используется, чтобы управлять SolverType and SolverOptions. В этом случае fmincon является SolverType.

p = Portfolio('AssetMean',[0.3, 0.1, 0.5], 'AssetCovar',...
[0.01, -0.010,  0.004; -0.010,  0.040, -0.002;  0.004, -0.002,  0.023],'lb', 0,'budget', 1);
plotFrontier(p, 20);

p = setSolver(p, 'fmincon', 'Display', 'off', 'Algorithm', 'sqp', ...
        'SpecifyObjectiveGradient', true, 'SpecifyConstraintGradient', true, ...
        'ConstraintTolerance', 1.0e-8, 'OptimalityTolerance', 1.0e-8, 'StepTolerance', 1.0e-8); 

weights = estimateMaxSharpeRatio(p);        

te = 0.08;
p = setTrackingError(p,te,weights);

[risk, ret] = estimatePortMoments(p,weights);
hold on
plot(risk,ret,'*r');

Функция estimateMaxSharpeRatio максимизирует отношение Шарпа среди портфелей на границе эффективности. В случае Портфеля с безрисковым активом существует несколько эффективных портфелей, которые максимизируют отношение Шарпа на строке капитального актива. Из-за природы 'direct' и методов 'iterative', (pwgts) весов портфеля вывод из каждого из этих методов может отличаться, но отношение Шарпа является тем же самым. Этот пример демонстрирует сценарий, где pwgts отличается, и отношение Шарпа является тем же самым.

load BlueChipStockMoments

mret = MarketMean;
mrsk = sqrt(MarketVar);
cret = CashMean;
crsk = sqrt(CashVar);

p = Portfolio('AssetList', AssetList, 'RiskFreeRate', CashMean);
p = setAssetMoments(p, AssetMean, AssetCovar);

p = setInitPort(p, 1/p.NumAssets);
[ersk, eret] = estimatePortMoments(p, p.InitPort);

p = setDefaultConstraints(p);
pwgt = estimateFrontier(p, 20);
[prsk, pret] = estimatePortMoments(p, pwgt);
pwgtshpr_fully = estimateMaxSharpeRatio(p,'Method','direct');
[riskshpr_fully, retshpr_fully] = estimatePortMoments(p,pwgtshpr_fully);

q = setBudget(p, 0, 1);
qwgt = estimateFrontier(q, 20);
[qrsk, qret] = estimatePortMoments(q, qwgt);

Постройте границу эффективности со строкой касательной (0 к наличным деньгам 1).

pwgtshpr_direct = estimateMaxSharpeRatio(q,'Method','direct');
pwgtshpr_iter = estimateMaxSharpeRatio(q,'Method','iterative');
[riskshpr_diret, retshpr_diret] = estimatePortMoments(q,pwgtshpr_direct);
[riskshpr_iter, retshpr_iter] = estimatePortMoments(q,pwgtshpr_iter);

clf;
portfolioexamples_plot('Efficient Frontier with Capital Allocation Line', ...
                {'line', prsk, pret, {'EF'}, '-r', 2}, ...
                {'line', qrsk, qret, {'EF with riskfree'}, '-b', 1}, ...
                {'scatter', [mrsk, crsk, ersk, riskshpr_fully, riskshpr_diret, riskshpr_iter], ...
    [mret, cret, eret, retshpr_fully , retshpr_diret, retshpr_iter], {'Market', 'Cash', 'Equal','Sharpe fully invest', 'Sharpe diret','Sharpe iter'}}, ...
                {'scatter', sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList, '.r'});  

Когда безрисковый актив не доступен портфелю, или другими словами, портфель полностью инвестируют, граница эффективности изогнута, соответствуя красной линии в вышеупомянутой фигуре. Поэтому существует уникальное (риск, возвратитесь), точка, которая максимизирует отношение Шарпа, которое оба найдут 'iterative' и методы 'direct'. Если портфелю позволяют вложить капитал в безрисковый актив, часть красной строки границы эффективности заменяется строкой распределения капитала, приводящей к границе эффективности портфеля с безрисковыми инвестициями (синяя строка). Весь (риск, возвратитесь), точки на прямой синей строке совместно используют то же отношение Шарпа. Кроме того, вероятно, что 'iterative' и методы 'direct' заканчиваются с различными точками, поэтому существуют различные выделения портфеля.

Создайте объект Portfolio для трех активов.

AssetMean = [ 0.0101110; 0.0043532; 0.0137058 ];
AssetCovar = [ 0.00324625 0.00022983 0.00420395;
               0.00022983 0.00049937 0.00019247;
               0.00420395 0.00019247 0.00764097 ];  
p = Portfolio('AssetMean', AssetMean, 'AssetCovar', AssetCovar);
p = setDefaultConstraints(p);           

Используйте setBounds с полунепрерывными ограничениями, чтобы установить кси = 0 или 0.02 <= xi <= 0.5 для всего i = 1... NumAssets.

p = setBounds(p, 0.02, 0.5,'BoundType', 'Conditional', 'NumAssets', 3);                    

При работе с объектом Portfolio функция setMinMaxNumAssets позволяет вам настроить ограничения кардинальности для длинно-единственного портфеля. Это устанавливает ограничения кардинальности для объекта Portfolio, где общее количество выделенных активов, удовлетворяющих ненулевые полунепрерывные ограничения, между MinNumAssets и MaxNumAssets. Установкой MinNumAssets = MaxNumAssets = 2, только два из этих трех активов инвестируют в портфель.

p = setMinMaxNumAssets(p, 2, 2);  

Используйте estimateMaxSharpeRatio , чтобы оценить, что эффективный портфель максимизирует отношение Шарпа.

weights = estimateMaxSharpeRatio(p,'Method','iterative')
weights = 3×1

    0.0000
    0.5000
    0.5000

Функция estimateMaxSharpeRatio использует решатель MINLP, чтобы решить эту проблему. Используйте функцию setSolverMINLP, чтобы сконфигурировать SolverType и опции.

p.solverOptionsMINLP
ans = struct with fields:
                           MaxIterations: 1000
                    AbsoluteGapTolerance: 1.0000e-07
                    RelativeGapTolerance: 1.0000e-05
                  NonlinearScalingFactor: 1000
                  ObjectiveScalingFactor: 1000
                                 Display: 'off'
                           CutGeneration: 'basic'
                MaxIterationsInactiveCut: 30
                      ActiveCutTolerance: 1.0000e-07
                  IntMasterSolverOptions: [1x1 optim.options.Intlinprog]
    NumIterationsEarlyIntegerConvergence: 30

Входные параметры

свернуть все

Объект для портфеля, заданное использование объекта Portfolio.

Примечание

Безрисковый уровень получен из свойства RiskFreeRate в объекте Portfolio. Если вы оставляете сброс RiskFreeRate, он принят, чтобы быть 0. Если макс. возврат портфеля является меньше, чем RiskFreeRate, решение установлено как pwgt при макс. возврате, и получившееся отношение Шарпа будет отрицательно.

Для получения дополнительной информации о создании объекта портфеля смотрите

Типы данных: object

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: [pwgt,pbuy,psell] = estimateMaxSharpeRatio(p,'Method’,'iterative')

Метод, чтобы оценить отношение Шарпа, заданное как пара, разделенная запятой, состоящая из 'Method' и вектора символов с одним из следующих значений:

Примечание

Если вы используете estimateMaxSharpeRatio с объектом Portfolio с полунепрерывным и ограничениями кардинальности, заданными setBounds и setMinMaxNumAssets, можно только использовать метод 'iterative'.

Типы данных: char

Выходные аргументы

свернуть все

Портфель на границе эффективности отношение Шарпа имеющее, возвращенное как вектор NumAssets.

Покупки относительно начального портфеля для портфеля на границе эффективности отношение Шарпа имеющее, возвращенное как вектор NumAssets.

pbuy возвращен для входного объекта Portfolio (obj).

Продажи относительно начального портфеля для портфеля на границе эффективности с максимумом отношение Шарпа, возвращенное как вектор NumAssets.

psell возвращен для входного объекта Portfolio (obj).

Больше о

свернуть все

Отношение Шарпа

Отношение Шарпа является отношением различия между средним значением портфеля, возвращается, и безрисковый уровень, разделенный на стандартное отклонение портфеля, возвращается.

Функция estimateMaxSharpeRation максимизирует отношение Шарпа среди портфелей на границе эффективности.

Советы

Можно также использовать запись через точку, чтобы оценить эффективный портфель, который максимизирует отношение Шарпа.

[pwgt,pbuy,psell] = obj.estimateMaxSharpeRatio;

Алгоритмы

Максимизация отношения Шарпа выполняется или использованием 'direct' или методом 'iterative'. Для метода 'direct' рассмотрите следующий сценарий. Максимизировать отношение Шарпа к:

MaximizeμTxrfxTCx,s.t.xi=1,  0xi1,

где μ и C являются средней и ковариационной матрицей и r, f является безрисковым уровнем.

Если μ T x - r f ≤ 0 для всего x портфель, который максимизирует отношение Шарпа, является тем с максимальным возвратом.

Если μ T x - r f> 0, позволить t=1μTxrf

и y = t x (раздел Cornuejols [1] 8.2). Затем после некоторых замен, мы можем преобразовать исходную проблему в следующую форму,

Minimize yTCy, s.t. yi=t, t>0, 0yi t, μTyrft=1. 

Только одна оптимизация должна быть решена, отсюда имя “прямой”. Веса портфеля могут быть восстановлены x * = y * / t *.

Для метода 'iterative' идея состоит в том, чтобы итеративно исследовать портфели на различных уровнях возврата на границе эффективности и определить местоположение той с максимумом отношение Шарпа. Поэтому несколько задач оптимизации решены во время процесса вместо только одного в методе 'direct'. Следовательно, метод 'iterative' является медленным по сравнению с методом 'direct'.

Ссылки

[1] Cornuejols, G. и Reha Tütüncü. Методы оптимизации в финансах. Издательство Кембриджского университета, 2007.

Введенный в R2011a

Для просмотра документации необходимо авторизоваться на сайте