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