estimateMaxSharpeRatio

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

Описание

пример

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

пример

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

Примеры

свернуть все

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

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

Figure contains an axes. The axes with title \bfEfficient Frontier contains 2 objects of type line.

Оцените эффективный портфель, который максимизирует коэффициент Шарпа. The estimateMaxSharpeRatio функция максимизирует отношение Шарпа среди портфелей на эффективной границе. Этот пример использует 'direct' метод для Portfolio объект (p), который не задает ошибку отслеживания и использует только линейные ограничения. The setSolver функция используется для управления SolverType и 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');

Figure contains an axes. The axes with title \bfEfficient Frontier contains 2 objects of type line.

Оцените эффективный портфель, который максимизирует коэффициент Шарпа. The estimateMaxSharpeRatio функция максимизирует отношение Шарпа среди портфелей на эффективной границе. Этот пример использует 'direct' метод для Portfolio объект (p), который задает ошибку отслеживания, использует нелинейные ограничения. The setSolver функция используется для управления SolverType и 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');

Figure contains an axes. The axes with title \bfEfficient Frontier contains 2 objects of type line.

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

Figure contains an axes. The axes with title \bfEfficient Frontier with Capital Allocation Line contains 40 objects of type line, scatter, text. These objects represent EF, EF with riskfree.

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

The 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 в объекте Портфолио. Если вы покидаете RiskFreeRate unset, принято как 0. Если максимальный возврат портфеля меньше RiskFreeRate, решение устанавливается следующим pwgt при максимальном возврате и полученном коэффициенте Шарпа будет отрицательным.

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

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

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. 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).

Подробнее о

свернуть все

Коэффициент Шарпа

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

The 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 (раздел 8,2 Cornuejols [1]). Затем после некоторых замен мы можем преобразовать исходную задачу в следующую форму ,

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

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

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

Ссылки

[1] Cornuejols, G. and Reha Tütüncв. Методы оптимизации в финансах. Cambridge University Press, 2007.

Введенный в R2011b