Возвраты активов и моменты возвратов активов с использованием объекта портфеля

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

Назначение с использованием функции портфеля

Предположим, что у вас есть среднее и ковариационные возвраты активов в переменных 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
Заметьте, что объект Портфель определяет количество активов в NumAssets из моментов. The 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 объект. A 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
The Portfolio p объекта содержит необработанные моменты, объект q содержит расчетные моменты, в которых NaN значения отбрасываются, и объект r содержит необработанные моменты, которые содержат отсутствующие значения. Каждый раз, когда вы запускаете этот пример, вы получите различные оценки для моментов в q и rи они также будут отличаться от моментов в p.

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

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

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

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
Как видим, моменты совпадают между двумя портфелями. В сложение, estimateAssetMoments также извлекает имена активов или идентификаторы из table или timetable когда имя аргумента 'GetAssetList' установлено на true (его значение по умолчанию является false). Если на 'GetAssetList' значение trueидентификаторы используются для установки AssetList свойство объекта. Чтобы показать это, формирование Portfolio q объекта повторяется из предыдущего примера с 'GetAssetList' флаг установлен на true извлекает метки столбцов из таблицы или объекта timetable:
q = estimateAssetMoments(q,assetRetnTable,'GetAssetList',true);
disp(q.AssetList)
'Bonds'    'LargeCap'    'SmallCap'    'Emerging'
Обратите внимание, если вы устанавливаете 'GetAssetList' флаг установлен на true и ваши входные данные в матрице, estimateAssetMoments использует схему маркировки по умолчанию из setAssetList описывается в разделе Настройка списка идентификаторов основных средств.

См. также

| | | |

Похожие примеры

Подробнее о

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