exponenta event banner

estimateFrontierByRisk

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

Описание

пример

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

пример

[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 функция позволяет установить ограничения на количество инвестированных активов (так называемые ограничения по кардинальности). Это задает общее количество выделенных активов, удовлетворяющих ограничениям привязки, которые находятся между 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%. В этом примере используется значение по умолчанию'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
    0.2655    0.4991    0.3830
    0.0570    0.1239    0.1461
    0.1412    0.2382    0.4709

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

Для получения эффективных портфелей, которые имеют целевые портфельные риски, 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(начальное число) сбрасывает генератор случайных чисел для получения документированных результатов. Нет необходимости сбрасывать генератор случайных чисел для моделирования сценариев.

Для получения эффективных портфелей, которые имеют целевые портфельные риски, 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);

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около-NumPorts матрица. pwgt возвращается для Portfolio, PortfolioCVaR, или PortfolioMAD входной объект (obj).

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

Примечание

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

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

Продажи по отношению к первоначальному портфелю для оптимальных портфелей на эффективной границе, возвращаемые как NumAssetsоколо-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