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