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.0900portopt для целевого возврата за пределы области значений эффективных возвратов портфеляВ этом примере показано, как выполнить миграцию 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.1000portopt Использование 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
addInequality | estimateFrontier | estimateFrontierByReturn | estimatePortMoments | pcalims | pcgcomp | pcglims | portcons | Portfolio | portopt | setAssetMoments | setDefaultConstraints | setInequality