Поскольку проблемы оптимизации портфеля средних отклонений требуют оценок для средней и ковариации доходности активов, 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 функция, которая принимает либо цены, либо доходность и оценивает среднее значение и ковариацию доходности активов. Цены или возвраты сохраняются в виде матриц с выборками по строкам и основным средствам по столбцам. Кроме того, цены или возвраты могут храниться в 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 на основе таблицы и объекта расписания.
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 описано в разделе Настройка списка идентификаторов активов.estimateAssetMoments | getAssetMoments | Portfolio | setAssetMoments | setCosts