В этом примере показано, как проанализировать характеристики портфеля акций, а затем сравнить их с эффективной границей. Этот пример призван ответить на вопрос о том, насколько близко вы можете добраться до эффективной границы, только рискуя определенным процентом портфеля, чтобы избежать транзакционных издержек.
Загрузите информацию о текущих портфельных активах из электронной таблицы 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 SharePricesPortfolio Объект Portfolio позволяет использовать импортированные данные для создания Portfolio объект. estimateAssetMoments функция для Portfolio позволяет вам настроить портфолио, задав только историческую цену или ряд возвратов. The estimateAssetMoments function оценивает среднее и ковариацию возвратов активов из данных, даже если отсутствуют данные.
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);
The 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)

The Portfolio объект является мощным и эффективным инструментом для выполнения различных задач портфельного анализа. В дополнение к ограничениям оборота можно также оптимизировать Portfolio объект для транзакционных затрат на покупку и продажу портфельных активов с помощью setCosts функция.
addGroups | estimateAssetMoments | estimateBounds | estimateFrontierByRisk | estimateFrontierLimits | estimatePortRisk | plotFrontier | Portfolio | setAssetMoments | setBounds