estimateMaxSharpeRatio

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

Описание

пример

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

Figure contains an axes object. The axes object with title E f f i c i e n t blank F r o n t i e r contains 2 objects of type line.

Оцените эффективный портфель, который максимизирует отношение Шарпа. 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');

Figure contains an axes object. The axes object with title E f f i c i e n t blank F r o n t i e r contains 2 objects of type line.

Оцените эффективный портфель, который максимизирует отношение Шарпа. 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');

Figure contains an axes object. The axes object with title E f f i c i e n t blank F r o n t i e r contains 2 objects of type line.

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 object. The axes object with title E f f i c i e n t blank F r o n t i e r blank w i t h blank C a p i t a l blank A l l o c a t i o n blank L i n e 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 с полунепрерывными ограничениями, чтобы установить кси = 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,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).

Больше о

свернуть все

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

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

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.

Представленный в R2011b