estimateFrontierByRisk

Оцените оптимальные портфели с целенаправленными портфельными рисками

Синтаксис

[pwgt,pbuy,psell] = estimateFrontierByRisk(obj,TargetRisk)
[pwgt,pbuy,psell] = estimateFrontierByRisk(___,Name,Value)

Описание

пример

[pwgt,pbuy,psell] = estimateFrontierByRisk(obj,TargetRisk) оценочные оптимальные портфели с целенаправленными портфельными рисками для Portfolio, PortfolioCVaR или объектов PortfolioMAD. Для получения дополнительной информации на соответствующих рабочих процессах при использовании этих различных объектов, смотрите Рабочий процесс Объекта Портфеля, Рабочий процесс Объекта PortfolioCVaR и Рабочий процесс Объекта PortfolioMAD.

пример

[pwgt,pbuy,psell] = estimateFrontierByRisk(___,Name,Value) добавляют дополнительные именем аргументы пары "имя-значение" для объектов PortfolioMAD или Portfolio.

Примеры

свернуть все

Чтобы получить эффективные портфели, которые предназначались для портфельных рисков, функция estimateFrontierByRisk принимает один или несколько целевых портфельных рисков и получает эффективные портфели с заданными рисками. Примите, что у вас есть вселенная четырех активов, где вы хотите получить эффективные портфели с целевыми портфельными рисками 12%, 14% и 16%. Этот пример использует метод 'direct' по умолчанию, чтобы оценить оптимальные портфели с целенаправленными портфельными рисками.

m = [ 0.05; 0.1; 0.12; 0.18 ];
C = [ 0.0064 0.00408 0.00192 0; 
      0.00408 0.0289 0.0204 0.0119;
      0.00192 0.0204 0.0576 0.0336;
      0 0.0119 0.0336 0.1225 ];
 
 p = Portfolio;
 p = setAssetMoments(p, m, C);
 p = setDefaultConstraints(p);
 pwgt = estimateFrontierByRisk(p, [0.12, 0.14, 0.16]);

 display(pwgt);
pwgt = 4×3

    0.3984    0.2659    0.1416
    0.3064    0.3791    0.4474
    0.0882    0.1010    0.1131
    0.2071    0.2540    0.2979

Когда любой или любая комбинация ограничений от 'Conditional' BoundType, MinNumAssets и MaxNumAssets активен, проблема портфеля формулируется как проблема частично-целочисленного программирования, и решатель MINLP используется.

Создайте объект 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.7,'BoundType', 'Conditional', 'NumAssets', 3);                    

При работе с объектом Portfolio функция setMinMaxNumAssets позволяет вам настроить пределы на количестве активов, которые инвестируют (как известный кардинальностью) ограничения. Это определяет общий номер выделенных активов, удовлетворяющих Связанные ограничения, которые являются между MinNumAssets и MaxNumAssets. Установкой MinNumAssets = MaxNumAssets = 2, только два из этих трех активов инвестируют в портфель.

p = setMinMaxNumAssets(p, 2, 2);  

Используйте estimateFrontierByRisk, чтобы оценить оптимальные портфели с целенаправленными портфельными рисками.

[pwgt, pbuy, psell] = estimateFrontierByRisk(p,[0.0324241, 0.0694534 ])
pwgt = 3×2

    0.0000    0.5000
    0.6907         0
    0.3093    0.5000

pbuy = 3×2

    0.0000    0.5000
    0.6907         0
    0.3093    0.5000

psell = 3×2

     0     0
     0     0
     0     0

Функция estimateFrontierByRisk использует решатель MINLP, чтобы решить эту проблему. Используйте функцию setSolverMINLP, чтобы сконфигурировать SolverType и опции.

p.solverTypeMINLP
ans = 
'OuterApproximation'
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

Чтобы получить эффективные портфели, которые предназначались для портфельных рисков, функция estimateFrontierByRisk принимает один или несколько целевых портфельных рисков и получает эффективные портфели с заданными рисками. Примите, что у вас есть вселенная четырех активов, где вы хотите получить эффективные портфели с целевыми портфельными рисками 12%, 14% и 16%. Этот пример использует default'direct' метод, чтобы оценить оптимальные портфели с целенаправленными портфельными рисками. Метод 'direct' использует fmincon, чтобы решить задачу оптимизации, которая максимизирует портфель, возвращаются согласно целевому риску как квадратичное нелинейное ограничение. setSolver задает solverType и SolverOptions для fmincon .

m = [ 0.05; 0.1; 0.12; 0.18 ];
C = [ 0.0064 0.00408 0.00192 0; 
      0.00408 0.0289 0.0204 0.0119;
      0.00192 0.0204 0.0576 0.0336;
      0 0.0119 0.0336 0.1225 ];
       
 p = Portfolio;
 p = setAssetMoments(p, m, C);
 p = setDefaultConstraints(p);
 
 p = setSolver(p, 'fmincon', 'Display', 'off', 'Algorithm', 'sqp', ...
        'SpecifyObjectiveGradient', true, 'SpecifyConstraintGradient', true, ...
        'ConstraintTolerance', 1.0e-8, 'OptimalityTolerance', 1.0e-8, 'StepTolerance', 1.0e-8); 

 pwgt = estimateFrontierByRisk(p, [0.12, 0.14, 0.16]);

 display(pwgt);
pwgt = 4×3

    0.3984    0.2659    0.1416
    0.3064    0.3791    0.4474
    0.0882    0.1010    0.1131
    0.2071    0.2540    0.2979

Чтобы получить эффективные портфели, которые предназначались для портфельных рисков, функция estimateFrontierByRisk принимает один или несколько целевых портфельных рисков и получает эффективные портфели с заданными рисками. Примите, что у вас есть вселенная четырех активов, где вы хотите получить эффективные портфели с целевыми портфельными рисками 12%, 20% и 30%.

m = [ 0.05; 0.1; 0.12; 0.18 ];
C = [ 0.0064 0.00408 0.00192 0; 
    0.00408 0.0289 0.0204 0.0119;
    0.00192 0.0204 0.0576 0.0336;
    0 0.0119 0.0336 0.1225 ];

rng(11);

p = PortfolioCVaR;
p = simulateNormalScenariosByMoments(p, m, C, 2000);
p = setDefaultConstraints(p);
p = setProbabilityLevel(p, 0.95);

pwgt = estimateFrontierByRisk(p, [0.12, 0.20, 0.30]);

display(pwgt);
pwgt = 4×3

    0.5363    0.1387    0.0000
    0.2655    0.4991    0.3830
    0.0568    0.1239    0.1461
    0.1413    0.2382    0.4709

Функциональный rng (seed) сбрасывает генератор случайных чисел, чтобы привести к зарегистрированным результатам. Не необходимо сбросить генератор случайных чисел, чтобы моделировать сценарии.

Чтобы получить эффективные портфели, которые предназначались для портфельных рисков, функция estimateFrontierByRisk принимает один или несколько целевых портфельных рисков и получает эффективные портфели с заданными рисками. Примите, что у вас есть вселенная четырех активов, где вы хотите получить эффективные портфели с целевыми портфельными рисками 12%, 20% и 25%. Этот пример использует метод 'direct' по умолчанию, чтобы оценить оптимальные портфели с целенаправленными портфельными рисками.

m = [ 0.05; 0.1; 0.12; 0.18 ];
C = [ 0.0064 0.00408 0.00192 0; 
    0.00408 0.0289 0.0204 0.0119;
    0.00192 0.0204 0.0576 0.0336;
    0 0.0119 0.0336 0.1225 ];

rng(11);

p = PortfolioMAD;
p = simulateNormalScenariosByMoments(p, m, C, 2000);
p = setDefaultConstraints(p);

pwgt = estimateFrontierByRisk(p, [0.12, 0.20, 0.25]);

display(pwgt);
pwgt = 4×3

    0.1613    0.0000    0.0000
    0.4777    0.2139    0.0037
    0.1118    0.1381    0.1214
    0.2492    0.6480    0.8749

Функциональный rng (seed) сбрасывает генератор случайных чисел, чтобы привести к зарегистрированным результатам. Не необходимо сбросить генератор случайных чисел, чтобы моделировать сценарии.

Чтобы получить эффективные портфели, которые предназначались для портфельных рисков, функция estimateFrontierByRisk принимает один или несколько целевых портфельных рисков и получает эффективные портфели с заданными рисками. Примите, что у вас есть вселенная четырех активов, где вы хотите получить эффективные портфели с целевыми портфельными рисками 12%, 20% и 25%. Этот пример использует метод 'direct' по умолчанию, чтобы оценить оптимальные портфели с целенаправленными портфельными рисками. Метод 'direct' использует fmincon, чтобы решить задачу оптимизации, которая максимизирует портфель, возвращаются согласно целевому риску как квадратичное нелинейное ограничение. setSolver задает solverType и SolverOptions для fmincon .

m = [ 0.05; 0.1; 0.12; 0.18 ];
C = [ 0.0064 0.00408 0.00192 0; 
    0.00408 0.0289 0.0204 0.0119;
    0.00192 0.0204 0.0576 0.0336;
    0 0.0119 0.0336 0.1225 ];

rng(11);

p = PortfolioMAD;
p = simulateNormalScenariosByMoments(p, m, C, 2000);
p = setDefaultConstraints(p);

p = setSolver(p, 'fmincon', 'Display', 'off', 'Algorithm', 'sqp', ...
        'SpecifyObjectiveGradient', true, 'SpecifyConstraintGradient', true, ...
        'ConstraintTolerance', 1.0e-8, 'OptimalityTolerance', 1.0e-8, 'StepTolerance', 1.0e-8); 
    plotFrontier(p);

pwgt = estimateFrontierByRisk(p, [0.12 0.20, 0.25]);

display(pwgt);
pwgt = 4×3

    0.1613    0.0000    0.0000
    0.4777    0.2139    0.0037
    0.1118    0.1381    0.1214
    0.2492    0.6480    0.8749

Входные параметры

свернуть все

Объект для портфеля, заданное использование Portfolio, PortfolioCVaR или объект PortfolioMAD. Для получения дополнительной информации о создании объекта портфеля смотрите

Примечание

Если никакой начальный портфель не задан в obj.InitPort, он принят, чтобы быть 0 так, чтобы pbuy = max(0,pwgt) и psell = max(0,-pwgt). Для получения дополнительной информации об установке начального портфеля смотрите setInitPort.

Типы данных: object

Целевые значения для портфельного риска, заданного как вектор NumPorts.

Примечание

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

Типы данных: double

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: [pwgt,pbuy,psell] = estimateFrontierByRisk(p,‘method’,‘direct’)

Метод, чтобы оценить границу риском для Portfolio или объектов PortfolioMAD, заданных как пара, разделенная запятой, состоящая из 'Method' и вектора символов с одним из следующих значений:

Типы данных: char

Выходные аргументы

свернуть все

Оптимальные портфели на границе эффективности с заданной целью возвращаются из TargetRisk, возвращенного как NumAssets-by-NumPorts матрица. pwgt возвращен для Portfolio, PortfolioCVaR или входного объекта PortfolioMAD (obj).

Покупки относительно начального портфеля для оптимальных портфелей на границе эффективности, возвращенной как NumAssets-by-NumPorts матрица.

Примечание

Если никакой начальный портфель не задан в obj.InitPort, то значение принято, чтобы быть 0, таким образом что pbuy = max(0,pwgt) и psell = max(0,-pwgt).

pbuy возвращен для Portfolio, PortfolioCVaR или входного объекта PortfolioMAD (obj).

Продажи относительно начального портфеля для оптимальных портфелей на границе эффективности, возвращенной как NumAssets-by-NumPorts матрица.

Примечание

Если никакой начальный портфель не задан в obj.InitPort, то значение принято, чтобы быть 0, таким образом что pbuy = max(0,pwgt) и psell = max(0,-pwgt).

psell возвращен для Portfolio, PortfolioCVaR или входного объекта PortfolioMAD (obj).

Советы

Можно также использовать запись через точку, чтобы оценить оптимальные портфели с целенаправленными портфельными рисками.

[pwgt,pbuy,psell] = obj.estimateFrontierByRisk(TargetRisk);

или

[pwgt,pbuy,psell] = obj.estimateFrontierByRisk(TargetRisk,Name,Value);

Введенный в R2011a