Актив возвращается, и моменты актива возвращается Используя объект портфеля

Поскольку задачи оптимизации портфеля среднего отклонения требуют оценок для среднего значения, и ковариация актива возвращается, объект Portfolio имеет несколько способов установить и получить свойства AssetMean (для среднего значения) и AssetCovar (для ковариации). Кроме того, возврат для безрискового актива сохранен в свойстве RiskFreeRate так, чтобы все активы в AssetMean и AssetCovar были опасными активами. Для получения информации о рабочем процессе при использовании объектов Портфеля смотрите Рабочий процесс Объекта Портфеля.

Присвоение Используя функцию портфеля

Предположим, что у вас есть среднее значение, и ковариация актива возвращается в переменных m и C. Свойства в течение моментов возвратов актива установлены с помощью объекта Portfolio:

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;
p = Portfolio('AssetMean', m, 'AssetCovar', C);
disp(p.NumAssets);
disp(p.AssetMean);
disp(p.AssetCovar);
      4

    0.0042
    0.0083
    0.0100
    0.0150

    0.0005    0.0003    0.0002         0
    0.0003    0.0024    0.0017    0.0010
    0.0002    0.0017    0.0048    0.0028
         0    0.0010    0.0028    0.0102
Заметьте, что объект Portfolio определяет количество активов в NumAssets с моментов. Объект Portfolio включает отдельную инициализацию моментов, например:
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;
 
p = Portfolio;
p = Portfolio(p, 'AssetMean', m);
p = Portfolio(p, 'AssetCovar', C);
[assetmean, assetcovar] = p.getAssetMoments
assetmean =

    0.0042
    0.0083
    0.0100
    0.0150


assetcovar =

    0.0005    0.0003    0.0002         0
    0.0003    0.0024    0.0017    0.0010
    0.0002    0.0017    0.0048    0.0028
         0    0.0010    0.0028    0.0102
Функция getAssetMoments позволяет вам получить значения для свойств AssetMean и AssetCovar одновременно.

Присвоение Используя функцию setAssetMoments

Можно также установить свойства момента актива с помощью функции setAssetMoments. Например, учитывая среднее значение и ковариацию актива возвращается в переменных m и C, свойства момента актива могут быть установлены:

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;
 
p = Portfolio;
p = setAssetMoments(p, m, C);
[assetmean, assetcovar] = getAssetMoments(p)
assetmean =

    0.0042
    0.0083
    0.0100
    0.0150

assetcovar =

    0.0005    0.0003    0.0002         0
    0.0003    0.0024    0.0017    0.0010
    0.0002    0.0017    0.0048    0.0028
         0    0.0010    0.0028    0.0102

Скалярное расширение аргументов

И объект Portfolio и функция setAssetMoments выполняют скалярное расширение на аргументах в течение моментов актива, возвращается. При использовании объекта Portfolio количество активов должно быть уже задано в переменной NumAssets. Если NumAssets не был уже установлен, скалярный аргумент интерпретирован как скаляр с набором NumAssets к 1. setAssetMoments обеспечивает дополнительный дополнительный аргумент, чтобы задать количество активов так, чтобы скалярное расширение работало с правильным количеством активов. Кроме того, если или скаляр или вектор вводятся для ковариации актива, возвращается, диагональная матрица формируется таким образом, что скаляр расширяется по диагонали, и вектор становится диагональю. Этот пример демонстрирует скалярное расширение для четырех совместно независимых активов с общим средним 0.1 и общим отклонением 0.03:

p = Portfolio;
p = setAssetMoments(p, 0.1, 0.03, 4);
[assetmean, assetcovar] = getAssetMoments(p)
assetmean =

    0.1000
    0.1000
    0.1000
    0.1000

assetcovar =

    0.0300         0         0         0
         0    0.0300         0         0
         0         0    0.0300         0
         0         0         0    0.0300
Если по крайней мере один аргумент правильно определен размеры, вы не должны включать дополнительный аргумент NumAssets. Этот пример иллюстрирует постоянно-диагональную ковариационную матрицу, и среднее значение актива возвращается для четырех активов:
p = Portfolio;
p = setAssetMoments(p, [ 0.05; 0.06; 0.04; 0.03 ], 0.03);
[assetmean, assetcovar] = getAssetMoments(p)
assetmean =

    0.0500
    0.0600
    0.0400
    0.0300

assetcovar =

    0.0300         0         0         0
         0    0.0300         0         0
         0         0    0.0300         0
         0         0         0    0.0300
Кроме того, скалярное расширение работает с объектом Portfolio, если NumAssets известен или выведен из входных параметров.

Оценка моментов актива от цен или возвращается

Другой способ установить моменты возвратов актива состоит в том, чтобы использовать функцию estimateAssetMoments, которая принимает или цены или возвращает и оценивает среднее значение, и ковариация актива возвращается. Или цены или возвращаются, хранятся как матрицы с выборками, спускающимися по строкам и активам, идущим через столбцы. Кроме того, цены или возвраты могут храниться в table или timetable (см. Оценку Моментов Актива от Данных временных рядов). Чтобы проиллюстрировать использование estimateAssetMoments, сгенерируйте случайные выборки 120 наблюдений за активом, возвращается для четырех активов из среднего значения, и ковариация актива возвращается в переменных m и C с portsim. Поведение по умолчанию portsim создает моделируемые данные с предполагаемым средним значением и ковариацией, идентичной входным моментам m и C. В дополнение к ряду возврата, созданному portsim в переменной X, ценовой ряд создается в переменной Y:

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;
X = portsim(m', C, 120);
Y = ret2tick(X);

Примечание

Оптимизация портфеля требует, чтобы вы использовали совокупные доходы и не только, цена возвращается. Так, "возвраты" должны быть совокупными доходами, и "цены" должны быть ценами совокупного дохода.

Учитывая актив возвращается и цены в переменных X и Y сверху, эта последовательность примеров демонстрирует эквивалентные способы оценить моменты актива для объекта Portfolio. Объект Portfolio создается в p с моментами актива, возвращает набор непосредственно в объекте Portfolio, и второй объект Portfolio создается в q, чтобы получить среднее значение, и ковариация актива возвращается из актива, возвращают данные в X с помощью estimateAssetMoments:

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;
 
X = portsim(m', C, 120);
p = Portfolio('mean', m, 'covar', C);
q = Portfolio;
q = estimateAssetMoments(q, X);
 
[passetmean, passetcovar] = getAssetMoments(p)
[qassetmean, qassetcovar] = getAssetMoments(q)
passetmean =

    0.0042
    0.0083
    0.0100
    0.0150

passetcovar =

    0.0005    0.0003    0.0002         0
    0.0003    0.0024    0.0017    0.0010
    0.0002    0.0017    0.0048    0.0028
         0    0.0010    0.0028    0.0102

qassetmean =

    0.0042
    0.0083
    0.0100
    0.0150

qassetcovar =

    0.0005    0.0003    0.0002    0.0000
    0.0003    0.0024    0.0017    0.0010
    0.0002    0.0017    0.0048    0.0028
    0.0000    0.0010    0.0028    0.0102
Заметьте, как любой подход имеет те же моменты. Поведение по умолчанию estimateAssetMoments должно работать с активом, возвращается. Если, вместо этого, у вас есть цены активов в переменной Y, estimateAssetMoments признает, что аргумент пары "имя-значение" называет 'DataFormat' с соответствующим набором значений к 'prices', чтобы указать, что вход к функции в форме цен активов и не возвращается (значением по умолчанию для аргумента 'DataFormat' является 'returns'). Этот пример сравнивает прямое присвоение моментов в объекте Portfolio p с предполагаемыми моментами от данных цен активов в Y в объекте Portfolio q:
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;
 
X = portsim(m', C, 120);
Y = ret2tick(X);

p = Portfolio('mean',m,'covar',C);
        
q = Portfolio;
q = estimateAssetMoments(q, Y, 'dataformat', 'prices');
 
[passetmean, passetcovar] = getAssetMoments(p)
[qassetmean, qassetcovar] = getAssetMoments(q)
passetmean =

    0.0042
    0.0083
    0.0100
    0.0150

passetcovar =

    0.0005    0.0003    0.0002         0
    0.0003    0.0024    0.0017    0.0010
    0.0002    0.0017    0.0048    0.0028
         0    0.0010    0.0028    0.0102

qassetmean =

    0.0042
    0.0083
    0.0100
    0.0150

qassetcovar =

    0.0005    0.0003    0.0002    0.0000
    0.0003    0.0024    0.0017    0.0010
    0.0002    0.0017    0.0048    0.0028
    0.0000    0.0010    0.0028    0.0102

Оценка моментов актива с Недостающими данными

Часто при работе с несколькими активами, у вас есть недостающие данные, обозначенные значениями NaN в вашем возврате или ценовых данных. Несмотря на то, что Многомерная Нормальная Регрессия вдается в подробности о регрессии с недостающими данными, функция estimateAssetMoments имеет имя аргумента пары "имя-значение" 'MissingData', который указывает с булевым значением, использовать ли недостающую поддержку данных программного обеспечения Financial Toolbox™. Значением по умолчанию для 'MissingData' является false, который удаляет все выборки со значениями NaN. Если, однако, 'MissingData' установлен в true, estimateAssetMoments использует алгоритм ECM, чтобы оценить моменты актива. Этот пример иллюстрирует, как это работает над ценовыми данными с отсутствующими значениями:

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;
 
X = portsim(m', C, 120);
Y = ret2tick(X);
Y(1:20,1) = NaN;
Y(1:12,4) = NaN;

p = Portfolio('mean',m,'covar',C);
        
q = Portfolio;
q = estimateAssetMoments(q, Y, 'dataformat', 'prices');
 
r = Portfolio;
r = estimateAssetMoments(r, Y, 'dataformat', 'prices', 'missingdata', true);

[passetmean, passetcovar] = getAssetMoments(p)
[qassetmean, qassetcovar] = getAssetMoments(q)
[rassetmean, rassetcovar] = getAssetMoments(r)
passetmean =

    0.0042
    0.0083
    0.0100
    0.0150


passetcovar =

    0.0005    0.0003    0.0002         0
    0.0003    0.0024    0.0017    0.0010
    0.0002    0.0017    0.0048    0.0028
         0    0.0010    0.0028    0.0102


qassetmean =

    0.0045
    0.0082
    0.0101
    0.0091


qassetcovar =

    0.0006    0.0003    0.0001   -0.0000
    0.0003    0.0023    0.0017    0.0011
    0.0001    0.0017    0.0048    0.0029
   -0.0000    0.0011    0.0029    0.0112


rassetmean =

    0.0045
    0.0083
    0.0100
    0.0113


rassetcovar =

    0.0008    0.0005    0.0001   -0.0001
    0.0005    0.0032    0.0022    0.0015
    0.0001    0.0022    0.0063    0.0040
   -0.0001    0.0015    0.0040    0.0144
Объект Portfolio p содержит необработанные моменты, объект q, содержит оцененные моменты, в которые отбрасываются значения NaN, и объект r содержит необработанные моменты, которые размещают отсутствующие значения. Каждый раз, когда вы запускаете этот пример, вы будете получать различные оценки за моменты в q и r, и они будут также отличаться с моментов по p.

Оценка моментов актива от данных временных рядов

Функция estimateAssetMoments также признает, что актив возвращается или цены, сохраненные в table или timetable. estimateAssetMoments неявно работает с матрицами данных или данных в объекте таблицы или расписания использование тех же правил для того, являются ли данные возвратами или ценами.

Чтобы проиллюстрировать использование таблицы и расписания, используйте array2timetable и array2timetable, чтобы создать table и timetable, которые содержат актив, возвращается сгенерированный с portsim (см. Оценку Моментов Актива от Цен, или Возвращается). Два объекта портфеля затем создаются с AssetReturns на основе таблицы и объекта расписания.

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;
 
assetRetnScenarios = portsim(m', C, 120);
dates = datetime(datenum(2001,1:120,31), 'ConvertFrom', 'datenum');
assetsName = {'Bonds', 'LargeCap', 'SmallCap', 'Emerging'};
assetRetnTimeTable = array2timetable(assetRetnScenarios,'RowTimes',dates, 'VariableNames', assetsName);      
assetRetnTable = array2table(assetRetnScenarios, 'VariableNames', assetsName);


% Create two Portfolio objects:
% p with predefined mean and covar: q with asset return scenarios to estimate mean and covar.
p = Portfolio('mean', m, 'covar', C);
q = Portfolio;

% estimate asset moments with timetable
q = estimateAssetMoments(q, assetRetnTimeTable);
[passetmean, passetcovar] = getAssetMoments(p)
[qassetmean, qassetcovar] = getAssetMoments(q)

% estimate asset moments with table
q = estimateAssetMoments(q, assetRetnTable);
[passetmean, passetcovar] = getAssetMoments(p)
[qassetmean, qassetcovar] = getAssetMoments(q)
passetmean =

    0.0042
    0.0083
    0.0100
    0.0150


passetcovar =

    0.0005    0.0003    0.0002         0
    0.0003    0.0024    0.0017    0.0010
    0.0002    0.0017    0.0048    0.0028
         0    0.0010    0.0028    0.0102


qassetmean =

    0.0042
    0.0083
    0.0100
    0.0150


qassetcovar =

    0.0005    0.0003    0.0002   -0.0000
    0.0003    0.0024    0.0017    0.0010
    0.0002    0.0017    0.0048    0.0028
   -0.0000    0.0010    0.0028    0.0102


passetmean =

    0.0042
    0.0083
    0.0100
    0.0150


passetcovar =

    0.0005    0.0003    0.0002         0
    0.0003    0.0024    0.0017    0.0010
    0.0002    0.0017    0.0048    0.0028
         0    0.0010    0.0028    0.0102


qassetmean =

    0.0042
    0.0083
    0.0100
    0.0150


qassetcovar =

    0.0005    0.0003    0.0002   -0.0000
    0.0003    0.0024    0.0017    0.0010
    0.0002    0.0017    0.0048    0.0028
   -0.0000    0.0010    0.0028    0.0102
Как вы видите, соответствие моментов между th два портфеля. Кроме того, estimateAssetMoments также извлекает имена актива или идентификаторы от table или timetable, когда имя аргумента набор 'GetAssetList' к true (его значением по умолчанию является false). Если значением 'GetAssetList' является true, идентификаторы используются, чтобы установить свойство AssetList объекта. Чтобы показать это, формирование объекта Portfolio, q повторяется от предыдущего примера с набором флага 'GetAssetList' к извлечениям true метки столбца от объекта таблицы или расписания:
q = estimateAssetMoments(q,assetRetnTable,'GetAssetList',true);
disp(q.AssetList)
'Bonds'    'LargeCap'    'SmallCap'    'Emerging'
Отметьте, устанавливаете ли вы набор флага 'GetAssetList' на true, и ваши входные данные находится в матрице, estimateAssetMoments использует схему маркировки значения по умолчанию от setAssetList, описанного в Подготовке Списка Идентификаторов Актива.

Смотрите также

| | | |

Связанные примеры

Больше о

Внешние веб-сайты