portoptВ этом примере показана эффективная граница гипотетического портфеля из трех активов. На ней показано, как определить ожидаемую доходность, стандартные отклонения и корреляции портфеля активов, как преобразовать стандартные отклонения и корреляции в ковариационную матрицу, а также как вычислить и построить график эффективной границы из матрицы доходности и ковариации. Пример также иллюстрирует, как случайным образом генерировать набор весов портфеля и как добавить случайные портфели к существующему графику для сравнения с эффективной границей.
Во-первых, укажите ожидаемую доходность, стандартные отклонения и корреляционную матрицу для гипотетического портфеля из трех активов.
Returns = [0.1 0.15 0.12];
STDs = [0.2 0.25 0.18];
Correlations = [ 1 0.3 0.4
0.3 1 0.3
0.4 0.3 1 ];
Преобразование стандартных отклонений и матрицы корреляции в матрицу дисперсии-ковариации с функцией corr2cov.
Covariances = corr2cov(STDs, Correlations);
Оценка и построение графика эффективной границы в 20 точках вдоль границы с использованием функции portopt и ожидаемые результаты и соответствующая ковариационная матрица. Хотя на активы в портфеле могут накладываться довольно сложные ограничения, для простоты примите ограничения по умолчанию и масштабируйте общую стоимость портфеля до 1 и ограничьте вес положительным (без коротких продаж).
Примечание
portopt был частично удален и больше не будет принимать ConSet или varargin аргументы. Использовать Portfolio вместо этого необходимо решить портфельные задачи, которые больше, чем долгосрочный полностью инвестированный портфель. Сведения о рабочем процессе при использовании объектов портфеля см. в разделе Рабочий процесс объектов портфеля. Дополнительные сведения о переносе portopt код для Portfolio, см. portopt Миграция в объект портфеля.
portopt(Returns, Covariances, 20)

Теперь, когда отображается эффективная граница, случайным образом генерируются веса основных средств для 1000 портфелей, начиная с начального состояния MATLAB ®.
rng('default')
Weights = rand(1000, 3);Предыдущая строка кода генерирует три столбца равномерно распределенных случайных весов, но не гарантирует их сумму в 1. Следующий сегмент кода нормализует веса каждого портфеля таким образом, чтобы итоговая сумма из трех весов представляла действительный портфель.
Total = sum(Weights, 2); % Add the weights Total = Total(:,ones(3,1)); % Make size-compatible matrix Weights = Weights./Total; % Normalize so sum = 1
Учитывая 1000 созданных случайных портфелей, вычислите ожидаемую доходность и риск каждого портфеля, связанный с весами.
[PortRisk, PortReturn] = portstats(Returns, Covariances, ...
Weights);
Наконец, удерживайте текущий график и постройте график доходности и рисков каждого портфеля поверх существующей эффективной границы для сравнения. После печати аннотируйте график заголовком и возвращайте ему статус хранения по умолчанию (все последующие графики стирают существующие данные). Эффективная граница отображается синим цветом, в то время как 1000 случайных портфелей отображаются как набор красных точек на границе или ниже нее.
hold on plot (PortRisk, PortReturn, '.r') title('Mean-Variance Efficient Frontier and Random Portfolios') hold off

blsdelta | blsgamma | blsprice | blsvega | bndconvy | bnddury | bndkrdur | bndprice | corr2cov | portopt | zbtprice | zero2disc | zero2fwd