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