estimateFrontierByRisk

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

Описание

пример

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

пример

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

Примеры

свернуть все

Чтобы получить эффективные портфели, имеющие целевые портфельные риски, 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 с полунепрерывными ограничениями, чтобы задать xi = 0 или 0.02 <= xi <= 0.5 для всех i = 1... NumAssets.

p = setBounds(p, 0.02, 0.7,'BoundType', 'Conditional', 'NumAssets', 3);                    

При работе с Portfolio объект, setMinMaxNumAssets функция позволяет вам установить пределы на количество вложенных активов (так называемая кардинальность) ограничения. Это устанавливает общее количество распределенных активов, удовлетворяющих ограничениям Bound, которые находятся между 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

The 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%. Этот пример использует 'direct' по умолчанию метод оценки оптимальных портфелей с целевыми портфельными рисками. The 'direct' метод использует fmincon решить задачу оптимизации, которая максимизирует возврат портфеля, удовлетворяющую целевому риску в качестве квадратичного нелинейного ограничения. setSolver задает s olverType и 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
    0.2655    0.4991    0.3830
    0.0570    0.1239    0.1461
    0.1412    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.1610         0         0
    0.4784    0.2137    0.0047
    0.1116    0.1384    0.1200
    0.2490    0.6480    0.8753

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

Чтобы получить эффективные портфели, имеющие целевые портфельные риски, estimateFrontierByRisk функция принимает один или несколько целевых портфельных рисков и получает эффективные портфели с заданными рисками. Предположим, что у вас есть вселенная из четырех активов, где вы хотите получить эффективные портфели с целевыми рисками портфеля 12%, 20% и 25%. Этот пример использует 'direct' по умолчанию метод оценки оптимальных портфелей с целевыми портфельными рисками. The 'direct' метод использует fmincon решить задачу оптимизации, которая максимизирует возврат портфеля, удовлетворяющую целевому риску в качестве квадратичного нелинейного ограничения. setSolver задает s olverType и 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);

Figure contains an axes. The axes with title \bfEfficient Frontier contains an object of type line.

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 - имя аргумента и 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