Создать 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]
Чтобы получить портфель, который максимизирует отношение вознаграждения к риску (которое эквивалентно отношению Шарпа для портфелей средней дисперсии), выполните поиск на эффективной границе итеративно для порфолио, который минимизирует отрицательное отношение вознаграждения к риску:
Для этого используйте 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

Эта локальная функция, которая вычисляет отрицательное отношение вознаграждения к риску для целевого уровня доходности.
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
checkFeasibility | estimateScenarioMoments | getScenarios | PortfolioCVaR | setCosts | setScenarios | simulateNormalScenariosByData | simulateNormalScenariosByMoments