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.0900
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; 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 с функциями addInequality
или setInequality
.
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
| addInequality
| estimateFrontier
| estimateFrontierByReturn
| estimatePortMoments
| pcalims
| pcgcomp
| pcglims
| portcons
| portopt
| setAssetMoments
| setDefaultConstraints
| setInequality