exponenta event banner

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 возвращает моменты и веса портфеля. После настройки объекта портфолио моменты и веса получаются в виде отдельных шагов.

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 Целевые возвраты в пределах диапазона эффективных портфолио возвращаются в объект портфолио.

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 Целевые возвраты за пределы диапазона эффективных портфолио возвращаются в объект портфолио.

Когда целевая доходность выходит за пределы диапазона эффективной доходности портфеля, 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

См. также

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

Связанные примеры

Подробнее