Вычисление максимального коэффициента вознаграждения к риску для портфеля 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]

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

-portfolioreturn-riskfreerateportfolioCVaR.

Для этого используйте sratio функция, заданная в разделе Локальные функции, для возврата отрицательного отношения вознаграждения к риску для целевого возврата. Затем передайте эту функцию в fminbnd. fminbnd выполняет итерацию возможных значений возврата и оценивает связанное с ними отношение вознаграждения к риску. 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. The axes with title \bfEfficient Frontier 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

См. также

| | | | | | |

Похожие примеры

Подробнее о

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