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

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

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

Загрузите информацию о текущих активах портфеля из электронной таблицы 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™, который составляет три года цен закрытия за запасы, перечисленные в портфеле.

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)

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