PortfolioMAD

Создайте объект PortfolioMAD для оптимизации и анализа портфеля по среднему абсолютному отклонению

Описание

The PortfolioMAD объект реализует оптимизацию портфеля средних абсолютных отклонений, где MAD обозначает «среднее абсолютное отклонение». PortfolioMAD объекты поддерживают функции, специфичные для оптимизации портфеля MAD.

Основным рабочим процессом для оптимизации портфеля MAD является создание образца PortfolioMAD объект, который полностью задает задачу оптимизации портфеля и для работы с PortfolioMAD объект для получения и анализа эффективных портфелей. Для получения дополнительной информации о рабочем процессе при использовании PortfolioMAD объекты, см. раздел Рабочий процесс объекта PortfolioMAD.

Можно использовать PortfolioMAD объект несколькими способами. Чтобы настроить задачу оптимизации портфеля в PortfolioMAD объект, самый простой синтаксис:

p = PortfolioMAD;
Этот синтаксис создает PortfolioMAD объект, p, таким образом, что все свойства объекта пусты.

The PortfolioMAD объект также принимает наборы аргументов пары "имя-значение" для свойств и их значений. The PortfolioMAD объект принимает входы для свойств с общим синтаксисом:

	p = PortfolioMAD('property1',value1,'property2',value2, ... );

Если a PortfolioMAD объект существует, синтаксис разрешает первый (и только первый аргумент) из PortfolioMAD объект, который будет существующим объектом с последующими аргументами пары "имя-значение" для свойств, которые будут добавлены или изменены. Для примера, учитывая существующее PortfolioMAD объект в pОбщий синтаксис:

p = PortfolioMAD(p,'property1',value1,'property2',value2, ... );

Входные параметры не зависят от регистра, но должны быть полностью заданы. Кроме сложения, несколько свойств могут быть заданы с помощью альтернативных имен аргумента (см. Ярлыки для Имен свойства). The PortfolioMAD объект пытается обнаружить размерности задачи из входов и, после того, как набор, последующие входы могут подвергаться различным скалярным или матричным операциям расширения, которые упрощают общий процесс для формирования задачи. В сложение a PortfolioMAD объект является объектом значения, так что, данный портфель pследующий код создает два объекта, p и q, которые являются различными:

q = PortfolioMAD(p, ...)

После создания PortfolioMAD объект, можно использовать связанные функции объекта, чтобы задать ограничения портфеля, проанализировать эффективную границу и подтвердить модель портфеля.

Для получения более подробной информации о теоретическом базисе для условной оптимизации портфеля в группе риска, смотрите Теорию оптимизации портфеля.

Создание

Описание

пример

p = PortfolioMAD создает пустой PortfolioMAD объект для оптимизации и анализа портфеля средних абсолютных отклонений. Затем можно добавить элементы в PortfolioMAD объект с использованием поддерживаемых функций «add» и «set». Для получения дополнительной информации смотрите Создание объекта PortfolioMAD.

пример

p = PortfolioMAD(Name,Value) создает PortfolioMAD объект (p) и устанавливает Свойства используя пары "имя-значение". Для примера, p = PortfolioMAD('AssetList',Assets(1:12)). Можно задать несколько пары "имя-значение".

пример

p = PortfolioMAD(p,Name,Value) создает PortfolioMAD объект (p) с использованием ранее созданного PortfolioMAD p объекта и устанавливает Свойства используя пары "имя-значение". Можно задать несколько пары "имя-значение".

Входные параметры

расширить все

Ранее построенные PortfolioMAD объект, заданный с помощью PortfolioMAD.

Свойства

расширить все

Настройка объекта

Имена или символы активов во вселенной, заданные как массив ячеек из векторов символов или строковые массивы.

Типы данных: cell | string

Начальный портфель, заданный как вектор.

Типы данных: double

Имя для образца из PortfolioMAD объект, заданный как вектор символов.

Типы данных: char | string

Количество активов во вселенной, заданное как целочисленный скаляр.

Типы данных: double

Ограничения, накладываемые на объекты портфеля

Линейная матрица ограничений равенства, заданная как матрица.

Типы данных: double

Линейная матрица ограничений неравенства, заданная как матрица.

Типы данных: double

Ограничение равенства, заданный как вектор.

Типы данных: double

Линейный вектор ограничения неравенства, заданный как вектор.

Типы данных: double

Веса группы A, которые будут ограничены весами группы B, заданными в виде матрицы.

Типы данных: double

Веса группы B, заданные как матрица.

Типы данных: double

Матрица принадлежности к группе, заданная как матрица.

Типы данных: double

Нижнее ограничение, заданное как вектор.

Типы данных: double

Нижнее ограничение бюджета, заданное как скаляр.

Типы данных: double

Ограничение нижней группы, заданное как вектор.

Типы данных: double

Минимальное соотношение ассигнований между GroupA и GroupB, заданный как вектор.

Типы данных: double

Верхнее ограничение, заданное как вектор.

Типы данных: double

Верхнее ограничение бюджета, заданное как скаляр.

Типы данных: double

Ограничение верхней группы, заданное как вектор.

Типы данных: double

Максимальное соотношение распределений между GroupA и GroupB, заданный как вектор.

Типы данных: double

Тип границ для каждого веса актива, заданный как скалярный вектор символов или строка, или массив ячеек из векторов символов или строковые массивы. Для получения дополнительной информации см. setBounds.

Типы данных: char | cell | string

Минимальное количество активов, выделенных в портфеле, заданное в виде скалярного числового значения. Для получения дополнительной информации см. setMinMaxNumAssets.

Типы данных: double

Максимальное количество активов, выделенных в портфеле, заданное в виде скалярного числового значения. Для получения дополнительной информации см. setMinMaxNumAssets.

Типы данных: double

Ограничение оборота на покупки, заданное как скаляр.

Типы данных: double

Ограничение оборота на продажах, заданное как скаляр.

Типы данных: double

Ограничение оборота, заданное как скаляр.

Типы данных: double

Моделирование объекта портфеля

Пропорциональные затраты на покупку, заданные как вектор.

Типы данных: double

Безрисковая ставка, заданная как скаляр.

Типы данных: double

Уровень вероятности «значение под риском», который составляет 1 − (вероятность потерь), задается как скаляр.

Типы данных: double

Количество сценариев, заданное как целочисленный скаляр.

Типы данных: double

Пропорциональные затраты на продажу, заданные как вектор.

Типы данных: double

Функции объекта

setAssetListНастройка списка идентификаторов для активов
setInitPortНастройка начального или текущего портфеля
setDefaultConstraintsНастройте ограничения портфеля с неотрицательными весами, которые равны 1
estimateAssetMomentsОценка среднего и ковариационная возвратов активов из данных
setCostsНастройка пропорциональных транзакционных издержек
addEqualityДобавьте линейные ограничения равенства для весов портфеля к существующим ограничениям
addGroupRatioДобавьте ограничения группового соотношения для весов портфеля к существующим ограничениям группового соотношения
addGroupsДобавьте ограничения группы для весов портфеля к существующим ограничениям группы
addInequalityДобавьте линейные ограничения неравенства для весов портфеля к существующим ограничениям
getBoundsПолучите ограничения для весов портфеля из объекта портфеля
getBudgetПолучите ограничения бюджета из объекта портфеля
getCostsПолучите транзакционные затраты на покупку и продажу из объекта портфеля
getEqualityПолучите массивы ограничений равенства из объекта портфеля
getGroupRatioПолучите массивы ограничений группового отношения из объекта портфеля
getGroupsПолучите массивы ограничений группы из объекта портфеля
getInequalityПолучите массивы ограничений неравенства из объекта портфеля
getOneWayTurnoverПолучите односторонние ограничения оборота от объекта портфеля
setGroupsНастройте групповые ограничения для весов портфеля
setInequalityНастройте линейные ограничения неравенства для весов портфеля
setBoundsУстановите ограничения для весов портфеля для объекта портфеля
setMinMaxNumAssetsУстановите ограничения кардинальности на количество активов, вложенных в объект портфеля
setBudgetНастройка бюджетных ограничений
setCostsНастройка пропорциональных транзакционных издержек
setDefaultConstraintsНастройте ограничения портфеля с неотрицательными весами, которые равны 1
setEqualityНастройте линейные ограничения равенства для весов портфеля
setGroupRatioНастройте ограничения группового соотношения для весов портфеля
setInitPortНастройка начального или текущего портфеля
setOneWayTurnoverНастройка односторонних ограничений по обороту портфеля
setTurnoverНастройка ограничения на максимальный оборот портфеля
checkFeasibilityПроверяйте допустимость входа портфелей по объекту портфеля
estimateBoundsОцените глобальные нижнюю и верхнюю границы для набора портфелей
estimateFrontierОценка заданного количества оптимальных портфелей на эффективной границе
estimateFrontierByReturnОценка оптимальных портфелей с целевыми возвратами портфеля
estimateFrontierByRiskОценка оптимальных портфелей с целевыми портфельными рисками
estimateFrontierLimitsОценка оптимальных портфелей в конечных точках эффективной границы
plotFrontierПостройте эффективную границу
estimatePortReturnСреднее расчетное значение возвратов портфеля
estimatePortRiskОценка портфельного риска согласно прокси по риску, связанной с соответствующим объектом
setSolverВыберите основной решатель и укажите связанные опции решателя для оптимизации портфеля
setProbabilityLevelУстановите уровень вероятности для вычислений VaR и CVaR
setScenariosУстановите сценарии возвратов активов по прямой матрице
getScenariosПолучите сценарии из объекта портфеля
simulateNormalScenariosByDataСимулируйте многомерные сценарии нормального возврата активов из данных
simulateNormalScenariosByMomentsСимулируйте многомерные сценарии нормального возврата активов из среднего и ковариационного значений возвратов активов
estimateScenarioMomentsОценка среднего и ковариационная сценариев возврата активов
estimatePortStdОценка стандартного отклонения возвратов портфеля

Примеры

свернуть все

Можно создать объект PortfolioMAD, p, без входных параметров и отобразить его с помощью disp.

p = PortfolioMAD;
disp(p);
  PortfolioMAD with properties:

         BuyCost: []
        SellCost: []
    RiskFreeRate: []
        Turnover: []
     BuyTurnover: []
    SellTurnover: []
    NumScenarios: []
            Name: []
       NumAssets: []
       AssetList: []
        InitPort: []
     AInequality: []
     bInequality: []
       AEquality: []
       bEquality: []
      LowerBound: []
      UpperBound: []
     LowerBudget: []
     UpperBudget: []
     GroupMatrix: []
      LowerGroup: []
      UpperGroup: []
          GroupA: []
          GroupB: []
      LowerRatio: []
      UpperRatio: []
    MinNumAssets: []
    MaxNumAssets: []
       BoundType: []

Этот подход предоставляет способ настроить задачу оптимизации портфеля с PortfolioMAD функция. Затем можно использовать связанные функции набора, чтобы задать и изменить наборы свойств в PortfolioMAD объект.

Можно использовать PortfolioMAD объект непосредственно для настройки «стандартной» задачи оптимизации портфеля. Заданные сценарии возвратов активов в переменной AssetScenarios, эта задача полностью задана следующим образом:

m = [ 0.05; 0.1; 0.12; 0.18 ];
C = [ 0.0064 0.00408 0.00192 0; 
    0.00408 0.0289 0.0204 0.0119;
    0.00192 0.0204 0.0576 0.0336;
    0 0.0119 0.0336 0.1225 ];
m = m/12;
C = C/12;

AssetScenarios = mvnrnd(m, C, 20000);

p = PortfolioMAD('Scenarios', AssetScenarios, ...
'LowerBound', 0, 'LowerBudget', 1, 'UpperBudget', 1)
p = 
  PortfolioMAD with properties:

         BuyCost: []
        SellCost: []
    RiskFreeRate: []
        Turnover: []
     BuyTurnover: []
    SellTurnover: []
    NumScenarios: 20000
            Name: []
       NumAssets: 4
       AssetList: []
        InitPort: []
     AInequality: []
     bInequality: []
       AEquality: []
       bEquality: []
      LowerBound: [4x1 double]
      UpperBound: []
     LowerBudget: 1
     UpperBudget: 1
     GroupMatrix: []
      LowerGroup: []
      UpperGroup: []
          GroupA: []
          GroupB: []
      LowerRatio: []
      UpperRatio: []
    MinNumAssets: []
    MaxNumAssets: []
       BoundType: []

Обратите внимание, что LowerBound значение свойства подвергается скалярному расширению, так как AssetScenarios предоставляет размерности задачи.

Использование последовательности шагов является альтернативным способом выполнить ту же задачу настройки «стандартной» задачи оптимизации портфеля MAD, заданную AssetScenarios переменная:

m = [ 0.05; 0.1; 0.12; 0.18 ];
C = [ 0.0064 0.00408 0.00192 0;
0.00408 0.0289 0.0204 0.0119;
0.00192 0.0204 0.0576 0.0336;
0 0.0119 0.0336 0.1225 ];

m = m/12;
C = C/12;

AssetScenarios = mvnrnd(m, C, 20000);

p = PortfolioMAD;
p = setScenarios(p, AssetScenarios);
p = PortfolioMAD(p, 'LowerBound', 0);
p = PortfolioMAD(p, 'LowerBudget', 1, 'UpperBudget', 1);

plotFrontier(p);

Figure contains an axes. The axes with title \bfEfficient Frontier contains an object of type line.

Этот способ работает, потому что вызовы в PortfolioMAD находятся в этом конкретном порядке. В этом случае вызов для инициализации AssetScenarios предоставляет размерности для задачи. Если бы вы сделали этот шаг последним, вам пришлось бы явно измерить LowerBound свойство следующим образом:

m = [ 0.05; 0.1; 0.12; 0.18 ];
C = [ 0.0064 0.00408 0.00192 0;
0.00408 0.0289 0.0204 0.0119;
0.00192 0.0204 0.0576 0.0336;
0 0.0119 0.0336 0.1225 ];

m = m/12;
C = C/12;

AssetScenarios = mvnrnd(m, C, 20000);

p = PortfolioMAD;
p = PortfolioMAD(p, 'LowerBound', zeros(size(m)));
p = PortfolioMAD(p, 'LowerBudget', 1, 'UpperBudget', 1);
p = setScenarios(p, AssetScenarios);

plotFrontier(p);

Figure contains an axes. The axes with title \bfEfficient Frontier contains an object of type line.

Если вы не указали размер LowerBound но вместо этого введите скалярный аргумент, PortfolioMAD объект принимает, что вы определяете проблему с одним активом, и вызывает ошибку при вызове, чтобы задать сценарии с четырьмя активами.

Можно создать объект PortfolioMAD, p с PortfolioMAD объект использует ярлыки для имен свойства.

m = [ 0.05; 0.1; 0.12; 0.18 ];
C = [ 0.0064 0.00408 0.00192 0;
0.00408 0.0289 0.0204 0.0119;
0.00192 0.0204 0.0576 0.0336;
0 0.0119 0.0336 0.1225 ];

m = m/12;
C = C/12;

AssetScenarios = mvnrnd(m, C, 20000);

p = PortfolioMAD('scenario', AssetScenarios, 'lb', 0, 'budget', 1)
p = 
  PortfolioMAD with properties:

         BuyCost: []
        SellCost: []
    RiskFreeRate: []
        Turnover: []
     BuyTurnover: []
    SellTurnover: []
    NumScenarios: 20000
            Name: []
       NumAssets: 4
       AssetList: []
        InitPort: []
     AInequality: []
     bInequality: []
       AEquality: []
       bEquality: []
      LowerBound: [4x1 double]
      UpperBound: []
     LowerBudget: 1
     UpperBudget: 1
     GroupMatrix: []
      LowerGroup: []
      UpperGroup: []
          GroupA: []
          GroupB: []
      LowerRatio: []
      UpperRatio: []
    MinNumAssets: []
    MaxNumAssets: []
       BoundType: []

Несмотря на то, что не рекомендуемый, вы можете задать свойства непосредственно, однако проверка ошибок на ваших входах не выполняется.

m = [ 0.05; 0.1; 0.12; 0.18 ];
C = [ 0.0064 0.00408 0.00192 0; 
    0.00408 0.0289 0.0204 0.0119;
    0.00192 0.0204 0.0576 0.0336;
    0 0.0119 0.0336 0.1225 ];
m = m/12;
C = C/12;

AssetScenarios = mvnrnd(m, C, 20000);

p = PortfolioMAD;

p = setScenarios(p, AssetScenarios);

p.LowerBudget = 1;
p.UpperBudget = 1;
p.LowerBound = zeros(size(m));
disp(p);
  PortfolioMAD with properties:

         BuyCost: []
        SellCost: []
    RiskFreeRate: []
        Turnover: []
     BuyTurnover: []
    SellTurnover: []
    NumScenarios: 20000
            Name: []
       NumAssets: 4
       AssetList: []
        InitPort: []
     AInequality: []
     bInequality: []
       AEquality: []
       bEquality: []
      LowerBound: [4x1 double]
      UpperBound: []
     LowerBudget: 1
     UpperBudget: 1
     GroupMatrix: []
      LowerGroup: []
      UpperGroup: []
          GroupA: []
          GroupB: []
      LowerRatio: []
      UpperRatio: []
    MinNumAssets: []
    MaxNumAssets: []
       BoundType: []

Сценарии не могут быть назначены непосредственно объекту PortfolioMAD. Сценарии всегда должны быть заданы через любой из PortfolioMAD function, the setScenarios function, или любой из функций симуляции сценария.

Создайте эффективные портфели:

load CAPMuniverse

p = PortfolioMAD('AssetList',Assets(1:12));
p = simulateNormalScenariosByData(p, Data(:,1:12), 20000 ,'missingdata',true);
p = setDefaultConstraints(p);

plotFrontier(p);

Figure contains an axes. The axes with title \bfEfficient Frontier contains an object of type line.

pwgt = estimateFrontier(p, 5);

pnames = cell(1,5);
for i = 1:5
	pnames{i} = sprintf('Port%d',i);
end

Blotter = dataset([{pwgt},pnames],'obsnames',p.AssetList);

disp(Blotter);
            Port1        Port2       Port3       Port4      Port5
    AAPL     0.029787    0.076199     0.11265    0.13397    0    
    AMZN            0           0           0          0    0    
    CSCO            0           0           0          0    0    
    DELL    0.0089177           0           0          0    0    
    EBAY            0           0           0          0    0    
    GOOG      0.16094      0.3516     0.54479    0.74898    1    
    HPQ      0.056856    0.023073           0          0    0    
    IBM       0.46074     0.37919     0.29379    0.11705    0    
    INTC            0           0           0          0    0    
    MSFT      0.28277     0.16994    0.048762          0    0    
    ORCL            0           0           0          0    0    
    YHOO            0           0           0          0    0    

Подробнее о

расширить все

Ссылки

[1] Полный список ссылок на объект PortfolioMAD см. в разделе Оптимизация портфеля.

Введенный в R2013b