exponenta event banner

PortfolioMAD

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

Описание

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

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

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

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

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

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

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

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

Имена входных аргументов не чувствительны к регистру, но должны быть полностью указаны. Кроме того, можно указать несколько свойств с альтернативными именами аргументов (см. Ярлыки для имен свойств). PortfolioMAD объект пытается обнаружить размеры проблемы из входных данных, и после установки последующие входные данные могут подвергаться различным скалярным или матричным операциям расширения, которые упрощают общий процесс формирования задачи. Кроме того, 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Оценка стандартного отклонения доходности портфеля

Примеры

свернуть все

Можно создать объект MAD, 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 объект предполагает, что вы определяете проблему с одним основным средством, и создает ошибку при вызове для установки сценариев основных средств с четырьмя основными средствами.

Можно создать объект MAD, 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: []

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

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

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] Полный список ссылок для объекта PortingMAD см. в разделе Оптимизация портфеля.

Представлен в R2013b