Анализ портфеля с ограничениями оборота

Этот пример показывает, как анализировать характеристики портфеля акций, и затем сравнивает их с границей эффективности. Этот пример стремится ответить на вопрос того, сколько ближе может вы добираться до границы эффективности, только рискуя определенным процентом от портфеля, чтобы избежать операционных издержек.

Импортируйте данные для активов портфеля

Загрузите информацию о текущих активах портфеля из электронной таблицы Microsoft® Excel® в таблицу с помощью функции MATLAB® readtable.

AssetHoldingData = readtable('portfolio.xls');
% Create a normalized current holdings vector that shows the respective
% investments as a percentage of total capital:
W = AssetHoldingData.Value/sum(AssetHoldingData.Value);

Импортируйте данные о рынке для цен акции

Импортируйте данные о рынке от источника данных, поддержанного Datafeed Toolbox™, который составляет три года цен закрытия за запасы, перечисленные в портфеле.

addpath(fullfile(matlabroot,'examples','finance'));
load SharePrices

Создайте объект Portfolio

Класс Portfolio позволяет вам использовать импортированные данные, чтобы создать объект Portfolio. Функция estimateAssetMoments для объекта Portfolio позволяет вам настроить портфель, данный только историческую цену, или возвращает ряд. Оценочное среднее значение функции estimateAssetMoments и ковариация актива возвращаются из данных, даже если там пропускает данные.

P = Portfolio('Name', 'Sample Turnover Constraint Portfolio');
P = estimateAssetMoments(P,data,'DataFormat','Prices');

% You can assign text names to each asset in the portfolio.
P = setAssetList(P,AssetHoldingData.Symbol);

% Provide the current holdings.
P = setInitPort(P,W);

Выполните оптимизацию портфеля без ограничения оборота

Объект Portfolio может оптимизировать активы, учитывая любое количество ограничений. Этот пример демонстрирует использование простого, ограничения по умолчанию, то есть, длинные позиции только и 100%, которые инвестируют в активы.

P = setDefaultConstraints(P);

Визуализируйте эту границу эффективности с функцией plotFrontier.

plotFrontier(P)

Визуализируйте операционные издержки и оборот

Из-за операционных издержек, может быть дорого переключить активы от текущего портфеля до портфеля вдоль этой границы эффективности. Следующий пользовательский график показывает, что необходимо перевернуть между 50% и 75% активов, чтобы добраться до этой границы.

TurnoverPlot(P)

Выполните оптимизацию портфеля с ограничением оборота

Как близко можно добраться до этой границы эффективности, только торгуя частью портфеля? Примите, что вы хотите торговать только определенным процентом от портфеля, чтобы избежать слишком большого количества оборота в ваших активах. Это требование налагает некоторые нелинейные ограничения на проблему и дает проблему с несколькими локальными минимумами. Несмотря на это, объект Portfolio решает проблему, и вы задаете ограничение оборота с помощью функции setTurnover.

P10 = setTurnover(P,0.10);
plotFrontier(P10)

Визуализируйте границу эффективности в различных порогах оборота

Эта граница эффективности намного ближе к начальному портфелю, чем стартовая граница эффективности без ограничений оборота. Чтобы визуализировать это различие, используйте пользовательский функциональный TurnoverConstraintPlot, чтобы визуализировать несколько ограниченных границ эффективности в различных порогах оборота.

turnovers = 0.05:0.05:0.25;
TurnoverConstraintPlot(P,turnovers)
rmpath(fullfile(matlabroot,'examples','finance'));

Объект Portfolio является мощным и эффективным инструментом для выполнения различных задач анализа портфеля. В дополнение к ограничениям оборота можно также оптимизировать объект Portfolio для операционных издержек для покупки и продажи активов портфеля с помощью функции setCosts.