portopt Миграция на объект портфеля

Миграция portopt Без выходных аргументов

В этом примере показано, как выполнить миграцию portopt без выходных аргументов для объекта Portfolio.

Основные portopt функциональность представлена как:

ExpReturn = [ 0.0054; 0.0531; 0.0779; 0.0934; 0.0130 ];

ExpCovariance = [ 0.0569,  0.0092,  0.0039,  0.0070,  0.0022;
	0.0092,  0.0380,  0.0035,  0.0197,  0.0028;
	0.0039,  0.0035,  0.0997,  0.0100,  0.0070;
	0.0070,  0.0197,  0.0100,  0.0461,  0.0050;
	0.0022,  0.0028,  0.0070,  0.0050,  0.0573 ];

NumPorts = 10;

portopt(ExpReturn, ExpCovariance, NumPorts);

Как перенести portopt синтаксис без выходные аргументы для объекта Portfolio:

ExpReturn = [ 0.0054; 0.0531; 0.0779; 0.0934; 0.0130 ];

ExpCovariance = [ 0.0569,  0.0092,  0.0039,  0.0070,  0.0022;
	0.0092,  0.0380,  0.0035,  0.0197,  0.0028;
	0.0039,  0.0035,  0.0997,  0.0100,  0.0070;
	0.0070,  0.0197,  0.0100,  0.0461,  0.0050;
	0.0022,  0.0028,  0.0070,  0.0050,  0.0573 ];

NumPorts = 10;

p = Portfolio;
p = setAssetMoments(p, ExpReturn, ExpCovariance);
p = setDefaultConstraints(p);

plotFrontier(p, NumPorts);

Без выходных аргументов, portopt строит графики эффективной границы. Объект Portfolio имеет сходное поведение, хотя объект Portfolio записывает в текущую фигуру окно, а не создает новое окно при каждом построении графика.

Миграция portopt с выходными аргументами

В этом примере показано, как выполнить миграцию portopt с выходными аргументами в объект Portfolio.

С выходными аргументами, основной функциональностью portopt возвращает портфельные моменты и веса. После настройки объекта Portfolio моменты и веса получаются отдельными шагами.

ExpReturn = [ 0.0054; 0.0531; 0.0779; 0.0934; 0.0130 ];

ExpCovariance = [ 0.0569,  0.0092,  0.0039,  0.0070,  0.0022;
	0.0092,  0.0380,  0.0035,  0.0197,  0.0028;
	0.0039,  0.0035,  0.0997,  0.0100,  0.0070;
	0.0070,  0.0197,  0.0100,  0.0461,  0.0050;
	0.0022,  0.0028,  0.0070,  0.0050,  0.0573 ];

NumPorts = 10;

[PortRisk, PortReturn, PortWts] = portopt(ExpReturn, ExpCovariance, NumPorts);

display(PortWts);
PortWts =

    0.2103    0.2746    0.1157    0.1594    0.2400
    0.1744    0.2657    0.1296    0.2193    0.2110
    0.1386    0.2567    0.1436    0.2791    0.1821
    0.1027    0.2477    0.1575    0.3390    0.1532
    0.0668    0.2387    0.1714    0.3988    0.1242
    0.0309    0.2298    0.1854    0.4587    0.0953
         0    0.2168    0.1993    0.5209    0.0629
         0    0.1791    0.2133    0.5985    0.0091
         0    0.0557    0.2183    0.7260         0
         0         0         0    1.0000         0

Как перенести portopt синтаксис с выходными аргументами:

ExpReturn = [ 0.0054; 0.0531; 0.0779; 0.0934; 0.0130 ];

ExpCovariance = [ 0.0569,  0.0092,  0.0039,  0.0070,  0.0022;
	0.0092,  0.0380,  0.0035,  0.0197,  0.0028;
	0.0039,  0.0035,  0.0997,  0.0100,  0.0070;
	0.0070,  0.0197,  0.0100,  0.0461,  0.0050;
	0.0022,  0.0028,  0.0070,  0.0050,  0.0573 ];

NumPorts = 10;

p = Portfolio;
p = setAssetMoments(p, ExpReturn, ExpCovariance);
p = setDefaultConstraints(p);

PortWts = estimateFrontier(p, NumPorts);
[PortRisk, PortReturn] = estimatePortMoments(p, PortWts);

display(PortWts);
PortWts =

    0.2103    0.1744    0.1386    0.1027    0.0668    0.0309         0         0         0         0
    0.2746    0.2657    0.2567    0.2477    0.2387    0.2298    0.2168    0.1791    0.0557         0
    0.1157    0.1296    0.1436    0.1575    0.1714    0.1854    0.1993    0.2133    0.2183         0
    0.1594    0.2193    0.2791    0.3390    0.3988    0.4587    0.5209    0.5985    0.7260    1.0000
    0.2400    0.2110    0.1821    0.1532    0.1242    0.0953    0.0629    0.0091         0         0

Объект Portfolio возвращает PortWts с портфелями, идущими вниз по столбцам, а не по строкам. Риски портфеля и возвраты все еще находятся в формате столбца.

Миграция portopt для целевых возвратов в области значений эффективных возвратов портфеля

В этом примере показано, как выполнить миграцию portopt целевые возвраты в области значений эффективных возвращений портфеля в объект Portfolio.

portopt может получить портфели с определенными целевыми уровнями доходности, но требует, чтобы целевые возвраты попадали в область значений эффективных возвратов. Объект Portfolio обрабатывает это путем выбора портфелей в концах эффективной границы.

ExpReturn = [ 0.0054; 0.0531; 0.0779; 0.0934; 0.0130 ];

ExpCovariance = [ 0.0569,  0.0092,  0.0039,  0.0070,  0.0022;
	0.0092,  0.0380,  0.0035,  0.0197,  0.0028;
	0.0039,  0.0035,  0.0997,  0.0100,  0.0070;
	0.0070,  0.0197,  0.0100,  0.0461,  0.0050;
	0.0022,  0.0028,  0.0070,  0.0050,  0.0573 ];

NumPorts = 10;

TargetReturn = [ 0.05; 0.06; 0.07; 0.08; 0.09 ];

[PortRisk, PortReturn, PortWts] = portopt(ExpReturn, ExpCovariance, [], TargetReturn);

disp(' Efficient    Target');
disp([PortReturn, TargetReturn]);
 Efficient    Target
    0.0500    0.0500
    0.0600    0.0600
    0.0700    0.0700
    0.0800    0.0800
    0.0900    0.0900

Как перенести portopt синтаксис для целевых возвратов в области значений эффективных возвращений портфеля в объект Portfolio:

ExpReturn = [ 0.0054; 0.0531; 0.0779; 0.0934; 0.0130 ];

ExpCovariance = [ 0.0569,  0.0092,  0.0039,  0.0070,  0.0022;
	0.0092,  0.0380,  0.0035,  0.0197,  0.0028;
	0.0039,  0.0035,  0.0997,  0.0100,  0.0070;
	0.0070,  0.0197,  0.0100,  0.0461,  0.0050;
	0.0022,  0.0028,  0.0070,  0.0050,  0.0573 ];

NumPorts = 10;

TargetReturn = [ 0.05; 0.06; 0.07; 0.08; 0.09 ];

p = Portfolio;
p = setAssetMoments(p, ExpReturn, ExpCovariance);
p = setDefaultConstraints(p);

PortWts = estimateFrontierByReturn(p, TargetReturn);
[PortRisk, PortReturn] = estimatePortMoments(p, PortWts);

disp(' Efficient    Target');
disp([PortReturn, TargetReturn]);
 Efficient    Target
    0.0500    0.0500
    0.0600    0.0600
    0.0700    0.0700
    0.0800    0.0800
    0.0900    0.0900

Миграция portopt для целевого возврата за пределы области значений эффективных возвратов портфеля

В этом примере показано, как выполнить миграцию portopt целевые возвраты за пределы области значений эффективных возвратов портфеля в объект Portfolio.

Когда целевая отдача находится вне области значений эффективных возвратов портфеля, portopt генерирует ошибку. Объект Portfolio эффективно обрабатывает это путем выбора портфелей в концах эффективной границы.

ExpReturn = [ 0.0054; 0.0531; 0.0779; 0.0934; 0.0130 ];

ExpCovariance = [ 0.0569,  0.0092,  0.0039,  0.0070,  0.0022;
	0.0092,  0.0380,  0.0035,  0.0197,  0.0028;
	0.0039,  0.0035,  0.0997,  0.0100,  0.0070;
	0.0070,  0.0197,  0.0100,  0.0461,  0.0050;
	0.0022,  0.0028,  0.0070,  0.0050,  0.0573 ];

NumPorts = 10;

TargetReturn = [ 0.05; 0.06; 0.07; 0.08; 0.09; 0.10 ];

[PortRisk, PortReturn, PortWts] = portopt(ExpReturn, ExpCovariance, [], TargetReturn);

disp(' Efficient    Target');
disp([PortReturn, TargetReturn]);
> In portopt at 85 
Error using portopt (line 297)
One or more requested returns are greater than the maximum achievable return of 0.093400.

Как перенести portopt синтаксис для целевых возвратов вне области значений эффективных возвращений портфеля в объект Portfolio:

ExpReturn = [ 0.0054; 0.0531; 0.0779; 0.0934; 0.0130 ];

ExpCovariance = [ 0.0569,  0.0092,  0.0039,  0.0070,  0.0022;
	0.0092,  0.0380,  0.0035,  0.0197,  0.0028;
	0.0039,  0.0035,  0.0997,  0.0100,  0.0070;
	0.0070,  0.0197,  0.0100,  0.0461,  0.0050;
	0.0022,  0.0028,  0.0070,  0.0050,  0.0573 ];

NumPorts = 10;

TargetReturn = [ 0.05; 0.06; 0.07; 0.08; 0.09; 0.10 ];

p = Portfolio;
p = setAssetMoments(p, ExpReturn, ExpCovariance);
p = setDefaultConstraints(p);

PortWts = estimateFrontierByReturn(p, TargetReturn);
[PortRisk, PortReturn] = estimatePortMoments(p, PortWts);

disp(' Efficient    Target');
disp([PortReturn, TargetReturn]);
Warning: One or more target return values are outside the feasible range [
0.0427391, 0.0934 ].
	Will return portfolios associated with endpoints of the range for these
    values. 
> In Portfolio/estimateFrontierByReturn (line 106) 
 Efficient    Target
    0.0500    0.0500
    0.0600    0.0600
    0.0700    0.0700
    0.0800    0.0800
    0.0900    0.0900
    0.0934    0.1000

Миграция portopt Использование portcons Выход для ConSet

В этом примере показано, как выполнить миграцию portopt когда ConSet выход из portcons используется с portopt.

portopt принимает в качестве входов выходы от portcons, pcalims, pcglims, и pcgcomp. Этот пример фокусируется на portcons. portcons настраивает линейные ограничения для portopt в форме A*Port <= b. В матричном ConSet = [ A, b ] и разбить на отдельные A и b массивы с A = ConSet(:,1:end-1); и b = ConSet(:,end);. В сложение, чтобы проиллюстрировать задачу по умолчанию с дополнительными ограничениями группы, рассмотрим три группы. Активы 2, 3 и 4 могут составлять до 80% портфеля, активы 1 и 2 могут составлять до 70% портфеля, а активы 3, 4 и 5 могут составлять до 90% портфеля.

ExpReturn = [ 0.0054; 0.0531; 0.0779; 0.0934; 0.0130 ];

ExpCovariance = [ 0.0569,  0.0092,  0.0039,  0.0070,  0.0022;
	0.0092,  0.0380,  0.0035,  0.0197,  0.0028;
	0.0039,  0.0035,  0.0997,  0.0100,  0.0070;
	0.0070,  0.0197,  0.0100,  0.0461,  0.0050;
	0.0022,  0.0028,  0.0070,  0.0050,  0.0573 ];

NumPorts = 10;

Groups = [ 0 1 1 1 0; 1 1 0 0 0; 0 0 1 1 1 ];
GroupBounds = [ 0, 0.8; 0, 0.7; 0, 0.9 ];

LowerGroup = GroupBounds(:,1);
UpperGroup = GroupBounds(:,2);

ConSet = portcons('default', 5, 'grouplims', Groups, LowerGroup, UpperGroup);

[PortRisk, PortReturn, PortWts] = portopt(ExpReturn, ExpCovariance, NumPorts, [], ConSet);

disp([PortRisk, PortReturn]);
Error using portopt (line 83)
In the current and future releases, portopt will no longer accept ConSet or varargin arguments.
'It will only solve the portfolio problem for long-only fully-invested portfolios.    
To solve more general problems, use the Portfolio object.
See the release notes for details, including examples to make the conversion.

Для миграции portopt в объект Portfolio, когда ConSet выход из portcons используется с portopt:

ExpReturn = [ 0.0054; 0.0531; 0.0779; 0.0934; 0.0130 ];

ExpCovariance = [ 0.0569,  0.0092,  0.0039,  0.0070,  0.0022;
	0.0092,  0.0380,  0.0035,  0.0197,  0.0028;
	0.0039,  0.0035,  0.0997,  0.0100,  0.0070;
	0.0070,  0.0197,  0.0100,  0.0461,  0.0050;
	0.0022,  0.0028,  0.0070,  0.0050,  0.0573 ];

NumPorts = 10;

Groups = [ 0 1 1 1 0; 1 1 0 0 0; 0 0 1 1 1 ];
GroupBounds = [ 0, 0.8; 0, 0.7; 0, 0.9 ];

LowerGroup = GroupBounds(:,1);
UpperGroup = GroupBounds(:,2);

ConSet = portcons('default', 5, 'grouplims', Groups, LowerGroup, UpperGroup);

A = ConSet(:,1:end-1);
b = ConSet(:,end);

p = Portfolio;
p = setAssetMoments(p, ExpReturn, ExpCovariance);
p = setInequality(p, A, b);					% implement group constraints here

PortWts = estimateFrontier(p, NumPorts);
[PortRisk, PortReturn] = estimatePortMoments(p, PortWts);

disp([PortRisk, PortReturn]);
0.1288    0.0427
0.1292    0.0465
0.1306    0.0503
0.1328    0.0540
0.1358    0.0578
0.1395    0.0615
0.1440    0.0653
0.1504    0.0690
0.1590    0.0728
0.1806    0.0766

Ограничения вводятся непосредственно в объект Portfolio с setInequality или addInequality функций.

Интегрирование выхода из portcons, pcalims, pcglims, и pcgcomp с объектом портфеля

В этом примере показано, как интегрировать выход из pcalims, pcalims, pcglims, или pcgcomp с реализацией объекта Portfolio.

portcons, pcalims, pcglims, и pcgcomp настройка линейных ограничений для portopt в форме A*Port <= b. Хотя некоторые функции допускают два выходов, предположим, что выход является одной матрицей ConSet. Разбить на отдельные A и b массивы с:

  • A = ConSet(:,1:end-1);

  • b = ConSet(:,end);

В сложение, чтобы проиллюстрировать задачу по умолчанию с дополнительными ограничениями группы, рассмотрим три группы:

  • Активы 2, 3 и 4 могут составлять до 80% портфеля.

  • Активы 1 и 2 могут составлять до 70% портфеля.

  • Активы 3, 4 и 5 могут составлять до 90% портфеля.

Groups = [ 0 1 1 1 0; 1 1 0 0 0; 0 0 1 1 1 ];
GroupBounds = [ 0, 0.8; 0, 0.7; 0, 0.9 ];

Чтобы интегрировать ConSet выход portcons с реализацией объекта Portfolio:

ExpReturn = [ 0.0054; 0.0531; 0.0779; 0.0934; 0.0130 ];

ExpCovariance = [ 0.0569,  0.0092,  0.0039,  0.0070,  0.0022;
	0.0092,  0.0380,  0.0035,  0.0197,  0.0028;
	0.0039,  0.0035,  0.0997,  0.0100,  0.0070;
	0.0070,  0.0197,  0.0100,  0.0461,  0.0050;
	0.0022,  0.0028,  0.0070,  0.0050,  0.0573 ];

NumPorts = 10;

Groups = [ 0 1 1 1 0; 1 1 0 0 0; 0 0 1 1 1 ];
GroupBounds = [ 0, 0.8; 0, 0.7; 0, 0.9 ];

LowerGroup = GroupBounds(:,1);
UpperGroup = GroupBounds(:,2);

ConSet = portcons('default', 5, 'grouplims', Groups, LowerGroup, UpperGroup);

A = ConSet(:,1:end-1);
b = ConSet(:,end);

p = Portfolio;
p = setAssetMoments(p, ExpReturn, ExpCovariance);
p = setDefaultConstraints(p);				% implement default constraints here
p = setInequality(p, A, b);					% implement group constraints here

PortWts = estimateFrontier(p, NumPorts);
[PortRisk, PortReturn] = estimatePortMoments(p, PortWts);

disp([PortRisk, PortReturn]);
    0.1288    0.0427
    0.1292    0.0465
    0.1306    0.0503
    0.1328    0.0540
    0.1358    0.0578
    0.1395    0.0615
    0.1440    0.0653
    0.1504    0.0690
    0.1590    0.0728
    0.1806    0.0766

Чтобы интегрировать выходные данные pcalims и pcglims с реализацией объекта Portfolio:

ExpReturn = [ 0.0054; 0.0531; 0.0779; 0.0934; 0.0130 ];

ExpCovariance = [ 0.0569,  0.0092,  0.0039,  0.0070,  0.0022;
	0.0092,  0.0380,  0.0035,  0.0197,  0.0028;
	0.0039,  0.0035,  0.0997,  0.0100,  0.0070;
	0.0070,  0.0197,  0.0100,  0.0461,  0.0050;
	0.0022,  0.0028,  0.0070,  0.0050,  0.0573 ];

NumPorts = 10;

Groups = [ 0 1 1 1 0; 1 1 0 0 0; 0 0 1 1 1 ];
GroupBounds = [ 0, 0.8; 0, 0.7; 0, 0.9 ];

LowerGroup = GroupBounds(:,1);
UpperGroup = GroupBounds(:,2);

AssetMin = [ 0; 0; 0; 0; 0 ];
AssetMax = [ 0.8; 0.8; 0.8; 0.8; 0.8 ];

[Aa, ba] = pcalims(AssetMin, AssetMax);
[Ag, bg] = pcglims(Groups, LowerGroup, UpperGroup);

p = Portfolio;
p = setAssetMoments(p, ExpReturn, ExpCovariance);
p = setDefaultConstraints(p);				% implement default constraints first
p = addInequality(p, Aa, ba);				% implement bound constraints here
p = addInequality(p, Ag, bg);				% implement group constraints here

PortWts = estimateFrontier(p, NumPorts);
[PortRisk, PortReturn] = estimatePortMoments(p, PortWts);

disp([PortRisk, PortReturn]);
0.1288    0.0427
0.1292    0.0465
0.1306    0.0503
0.1328    0.0540
0.1358    0.0578
0.1395    0.0615
0.1440    0.0653
0.1504    0.0690
0.1590    0.0728
0.1806    0.0766

См. также

| | | | | | | | | | | |

Похожие примеры

Подробнее о