estimateFrontierByReturn

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

Описание

пример

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

Примеры

свернуть все

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

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

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

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

свернуть все

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

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

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

Примечание

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

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

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

свернуть все

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

Введенный в R2011a