Поскольку задачи оптимизации портфеля со средними дисперсиями требуют оценок для среднего и ковариации возвратов активов, 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
из моментов. The 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
объект. 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.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
неявно работает с матрицами данных или данных в таблице или объекте расписания, используя те же правила для того, являются ли данные возвратами или ценами.
Чтобы проиллюстрировать использование таблицы и расписания, используйте array2table
и array2timetable
для создания table
и timetable
которые содержат возвраты активов, сгенерированный с portsim
(см. Оценка моментов актива из цен или возвратов). Затем создаются два объекта портфеля с AssetReturns
на основе таблицы и объекта timetable.
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
извлекает метки столбцов из таблицы или объекта timetable:q = estimateAssetMoments(q,assetRetnTable,'GetAssetList',true);
disp(q.AssetList)
'Bonds' 'LargeCap' 'SmallCap' 'Emerging'
'GetAssetList'
флаг установлен на true
и ваши входные данные в матрице, estimateAssetMoments
использует схему маркировки по умолчанию из setAssetList
описывается в разделе Настройка списка идентификаторов основных средств.estimateAssetMoments
| getAssetMoments
| Portfolio
| setAssetMoments
| setCosts