exponenta event banner

Возврат основных средств и моменты возврата основных средств с использованием объекта портфеля

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

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 описано в разделе Настройка списка идентификаторов активов.

См. также

| | | |

Связанные примеры

Подробнее

Внешние веб-сайты