Поскольку задачи оптимизации портфеля среднего отклонения требуют оценок для среднего значения, и ковариация актива возвращается, объект 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.0102NumAssets с моментов. Объект 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. Объект 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.0144p содержит необработанные моменты, объект 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.0102estimateAssetMoments также извлекает имена актива или идентификаторы от 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, описанного в Подготовке Списка Идентификаторов Актива.Portfolio | estimateAssetMoments | getAssetMoments | setAssetMoments | setCosts