Поскольку задачи оптимизации портфеля со средними дисперсиями требуют оценок для среднего и ковариации возвратов активов, 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.0102NumAssets из моментов. 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.getAssetMomentsassetmean =
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.0102getAssetMoments функция позволяет вам получить значения для 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.0300NumAssets аргумент. Этот пример иллюстрирует матрицу ковариации с постоянной диагональю и среднее значение возвратов активов для четырех активов: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.0300Portfolio объект, если 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.0102estimateAssetMoments для работы с возвратами активов. Если вместо этого цены основных средств указаны в переменной 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.0144Portfolio 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.0102estimateAssetMoments также извлекает имена активов или идентификаторы из 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 описывается в разделе Настройка списка идентификаторов основных средств.estimateAssetMoments | getAssetMoments | Portfolio | setAssetMoments | setCosts