Вычислите максимальное вознаграждение для коэффициента риска за портфель CVaR

Создайте PortfolioCVaR возразите и включите список активов от CAPMUniverse.mat. Используйте simulateNormalScenariosByData симулировать сценарии для каждого из активов. Эти ограничения портфеля требуют полностью инвестированных длинно-единственных портфелей (неотрицательные веса, которые должны суммировать к 1).

rng(1) % Set the seed for reproducibility.
load CAPMuniverse

p = PortfolioCVaR('AssetList',Assets(1:12));
p = simulateNormalScenariosByData(p, Data(:,1:12), 20000 ,'missingdata',true);
p = setProbabilityLevel(p, 0.95);
p = setDefaultConstraints(p);
disp(p)
  PortfolioCVaR with properties:

             BuyCost: []
            SellCost: []
        RiskFreeRate: []
    ProbabilityLevel: 0.9500
            Turnover: []
         BuyTurnover: []
        SellTurnover: []
        NumScenarios: 20000
                Name: []
           NumAssets: 12
           AssetList: {1x12 cell}
            InitPort: []
         AInequality: []
         bInequality: []
           AEquality: []
           bEquality: []
          LowerBound: [12x1 double]
          UpperBound: []
         LowerBudget: 1
         UpperBudget: 1
         GroupMatrix: []
          LowerGroup: []
          UpperGroup: []
              GroupA: []
              GroupB: []
          LowerRatio: []
          UpperRatio: []
        MinNumAssets: []
        MaxNumAssets: []
           BoundType: [12x1 categorical]

Чтобы получить портфель, который максимизирует вознаграждение для коэффициента риска (который эквивалентен отношению Шарпа для портфелей среднего отклонения), поиск на границе эффективности итеративно для porfolio, который минимизирует отрицание вознаграждения для коэффициента риска:

-portfolioreturn-riskfreerateportfolioCVaR.

Для этого используйте sratio функция, заданная в разделе Local Functions, чтобы возвратить отрицательное вознаграждение для коэффициента риска за целевой возврат. Затем передайте эту функцию fminbndfminbnd выполняет итерации через возможные возвращаемые значения и оценивает их связанное вознаграждение для коэффициента риска. fminbnd возвращает оптимальный возврат, для которого максимальное вознаграждение для коэффициента риска достигается (или это минимизирует отрицание вознаграждения для коэффициента риска).

% Obtain the minimum and maximum returns of the portfolio.
pwgtLimits = estimateFrontierLimits(p);
retLimits = estimatePortReturn(p,pwgtLimits);
minret = retLimits(1);
maxret = retLimits(2);

% Search on the frontier iteratively. Find the return that minimizes the
% negative of the reward-to-risk ratio.
fhandle = @(ret) iterative_local_obj(ret,p);
options = optimset('Display', 'off', 'TolX', 1.0e-8);
optret = fminbnd(fhandle, minret, maxret, options);

% Obtain the portfolio weights associated with the return that achieves
% the maximum reward-to-risk ratio.
pwgt = estimateFrontierByReturn(p,optret)
pwgt = 12×1

    0.0885
         0
         0
         0
         0
    0.9115
         0
         0
         0
         0
      ⋮

Используйте plotFrontier построить границу эффективности и estimatePortRisk оценить максимальный портфель вознаграждения для коэффициента риска.

plotFrontier(p);
hold on
% Compute the risk level for the maximum reward-to-risk ratio portfolio.
optrsk = estimatePortRisk(p,pwgt);
scatter(optrsk,optret,50,'red','filled')
hold off

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, scatter.

Локальные функции

Эта локальная функция, которая вычисляет отрицание вознаграждения для коэффициента риска за целевой уровень возврата.

function sratio = iterative_local_obj(ret, obj)
% Set the objective function to the negative of the reward-to-risk ratio.

risk = estimatePortRisk(obj,estimateFrontierByReturn(obj,ret));

if ~isempty(obj.RiskFreeRate)
    sratio = -(ret - obj.RiskFreeRate)/risk;
else
    sratio = -ret/risk;
end

end

Смотрите также

| | | | | | |

Связанные примеры

Больше о

Внешние веб-сайты