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