exponenta event banner

estimateFrontierByReturn

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

Описание

пример

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

Примеры

свернуть все

Для получения эффективных портфелей, которые имеют целевую доходность портфеля, estimateFrontierByReturn функция принимает один или несколько целевых портфельных возвратов и получает эффективные портфели с указанными возвратами. Предположим, что у вас есть набор из четырех активов, где вы хотите получить эффективные портфели с целевой доходностью портфеля 6%, 9% и 12%.

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 = estimateFrontierByReturn(p, [0.06, 0.09, 0.12]);

display(pwgt);
pwgt = 4×3

    0.8772    0.5032    0.1293
    0.0434    0.2488    0.4541
    0.0416    0.0780    0.1143
    0.0378    0.1700    0.3022

Когда какое-либо одно или любое сочетание ограничений из '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);  

Использовать estimateFrontierByReturn оценить оптимальные портфели с целевой доходностью портфеля.

[pwgt, pbuy, psell] = estimateFrontierByReturn(p,[ 0.0072321, 0.0119084 ])
pwgt = 3×2

         0    0.5000
    0.6922         0
    0.3078    0.5000

pbuy = 3×2

         0    0.5000
    0.6922         0
    0.3078    0.5000

psell = 3×2

     0     0
     0     0
     0     0

estimateFrontierByReturn для решения этой проблемы функция использует решатель 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

Для получения эффективных портфелей, которые имеют целевую доходность портфеля, estimateFrontierByReturn функция принимает один или несколько целевых портфельных возвратов и получает эффективные портфели с указанными возвратами. Предположим, что у вас есть набор из четырех активов, где вы хотите получить эффективные портфели с целевой доходностью портфеля 7%, 10% и 13%.

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 = estimateFrontierByReturn(p, [0.07 0.10, 0.13]);

display(pwgt);
pwgt = 4×3

    0.7370    0.3067         0
    0.1502    0.3937    0.4396
    0.0290    0.0997    0.1360
    0.0838    0.1999    0.4244

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

Для получения эффективных портфелей, которые имеют целевую доходность портфеля, estimateFrontierByReturn функция принимает один или несколько целевых портфельных возвратов и получает эффективные портфели с указанными возвратами. Предположим, что у вас есть набор из четырех активов, где вы хотите получить эффективные портфели с целевой доходностью портфеля 7%, 10% и 13%.

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 = estimateFrontierByReturn(p, [0.07 0.10, 0.13]);

display(pwgt);
pwgt = 4×3

    0.7437    0.3146         0
    0.1357    0.3837    0.4425
    0.0326    0.0939    0.1319
    0.0881    0.2079    0.4255

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

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

свернуть все

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

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

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

Примечание

TargetReturn указывает целевые доходности для портфелей на эффективной границе. При наличии TargetReturn значения находятся вне диапазона доходности для эффективных портфелей, TargetReturn заменяется минимальной или максимальной эффективной доходностью портфеля в зависимости от того, ниже или выше целевой доходности диапазона эффективной доходности портфеля.

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

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

свернуть все

Оптимальные портфели на эффективной границе с указанной целевой доходностью от TargetReturn, возвращено как 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.estimateFrontierByReturn(TargetReturn);

Представлен в R2011a