exponenta event banner

estimateMaxSharpeRatio

Оценка эффективности портфеля для максимизации коэффициента резкости для объекта портфеля

Описание

пример

[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. The axes with title \bfEfficient Frontier contains 2 objects of type line.

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

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

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

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).

Подробнее

свернуть все

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

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

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

Совет

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

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

Алгоритмы

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

MaximizeμTx−rfxTCx,s.t.∑xi=1,  0≤xi≤1,

где λ и C - средняя и ковариационная матрица, а rf - безрисковая скорость.

Если мкТ x - rf ≤ 0 для всех x портфолио, которое максимизирует отношение Шарпа, является таковым с максимальной доходностью.

Если мкТ x - rf > 0, пусть t = 1 мкТх rf

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

Минимизируйте yTCy, s.t. ∑yi=t, t >  0,  0≤yi≤t , мкTy rft  = 1.

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

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

Ссылки

[1] Корнуэйолс, Г. и Реха Тютюнджю. Методы оптимизации в Финансах. Издательство Кембриджского университета, 2007 год.

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