Поскольку задачи оптимизации портфеля среднего отклонения требуют оценок для среднего значения, и ковариация актива возвращается, 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 с моментов. 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 функция, которая принимает или цены или возвращается и оценивает среднее значение, и ковариация актива возвращается. Или цены или возвращаются, хранятся как матрицы с выборками, спускающимися по строкам и активам, идущим через столбцы. Кроме того, цены или возвраты могут храниться в a 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.0144Portfolio объект p содержит необработанные моменты, объект q содержит оцененные моменты в который NaN значения отбрасываются, и объект r содержит необработанные моменты, которые вмещают отсутствующие значения. Каждый раз, когда вы запускаете этот пример, вы будете получать различные оценки за моменты в q и r, и они будут также отличаться с моментов по p. estimateAssetMoments функция также признает, что актив возвращается или цены, сохраненные в a table или timetable. estimateAssetMoments неявно работает с матрицами данных или данных в объекте таблицы или расписания использование тех же правил для того, являются ли данные возвратами или ценами.
Чтобы проиллюстрировать использование таблицы и расписания, использовать array2table и array2timetable создать a table и a 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 также имена актива извлечений или идентификаторы от a 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 описанный в Подготовке Списка Идентификаторов Актива.estimateAssetMoments | getAssetMoments | Portfolio | setAssetMoments | setCosts