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