В этом примере показано, как моделировать две стратегии хеджирования с использованием оптимизации портфеля CVaR с помощью PortfolioCVaR объект. Во-первых, моделируется движение цены запаса с помощью gbm объект с simByEuler. Затем оптимизация портфеля CVaR используется для оценки эффективной границы портфелей для доходности на дату горизонта. Наконец, можно сравнить портфель CVaR с портфелем средних отклонений, чтобы продемонстрировать различия между этими двумя типами показателей риска.
Сценарии необходимы для определения и анализа портфеля CVaR. Эти сценарии могут быть созданы несколькими способами, а также получены из исторических наблюдений. В этом примере для создания сценариев используется моделирование геометрического броуновского движения по методу Монте-Карло. Моделирование Монте-Карло приводит к испытаниям цены акций через год. Эти цены акций обеспечивают доходность пяти различных инвестиционных стратегий, которые определяют активы в портфеле CVaR. Эта стратегия создания сценария может быть дополнительно обобщена для моделирования с большим количеством запасов, инструментов и стратегий.
Определите профиль запаса.
% Price at time 0 Price_0 = 200; % Drift (annualized) Drift = 0.08; % Volatility (annualized) Vol = 0.4; % Valuation date Valuation = datetime(2012,1,1); % Investment horizon date Horizon = datetime(2013,1,1); % Risk-free rate RiskFreeRate = 0.03;
Моделирование ценовых движений запаса от даты оценки до даты горизонта с помощью gbm объект с simByEuler.
% Number of trials for the Monte Carlo simulation NTRIALS = 100000; % Length (in years) of the simulation T = date2time(Valuation, Horizon, 1, 1); % Number of periods per trial (approximately 100 periods per year) NPERIODS = round(100*T); % Length (in years) of each time step per period dt = T/NPERIODS; % Instantiate the gbm object StockGBM = gbm(Drift, Vol, 'StartState', Price_0); % Run the simulation Paths = StockGBM.simByEuler(NPERIODS, 'NTRIALS', NTRIALS, ... 'DeltaTime', dt, 'Antithetic', true);
Постройте график моделирования заготовки. Для эффективности постройте только некоторые сценарии.
plot(squeeze(Paths(:,:,1:500))); title('Simulation of a Stock'); xlabel('Time'); ylabel('Price');

Рассчитайте цены различных опционов пут с использованием модели Блэка-Шоулза с blsprice функция.
% Put option with strike at 50% of current underlying price Strike50 = 0.50*Price_0; [~, Put50] = blsprice(Price_0, Strike50, RiskFreeRate, T, Vol); % Put option with strike at 75% of current underlying price Strike75 = 0.75*Price_0; [~, Put75] = blsprice(Price_0, Strike75, RiskFreeRate, T, Vol); % Put option with strike at 90% of current underlying price Strike90 = 0.90*Price_0; [~, Put90] = blsprice(Price_0, Strike90, RiskFreeRate, T, Vol); % Put option with strike at 95% of current underlying price Strike95 = 0.95*Price_0; % Same as strike [~, Put95] = blsprice(Price_0, Strike95, RiskFreeRate, T, Vol);
Цель состоит в том, чтобы найти эффективную границу портфеля для доходности на дату горизонта. Следовательно, получите сценарии из испытаний моделирования Монте-Карло в конце периода моделирования.
Price_T = squeeze(Paths(end, 1, :));
Создайте матрицу сценариев с использованием пяти стратегий. Первая стратегия - это стратегия только для запасов; остальные стратегии - это хеджирование акций опционами пут с различными уровнями цены страйка. Чтобы вычислить доходность на основе цен, полученных с помощью моделирования Монте-Карло для стратегии только для акций, разделите изменение цены акций. (Price_T - Price_0) по начальной цене Price_0. Чтобы рассчитать доходность акций с разными опционами пут, сначала вычислите «наблюдаемую цену» на дату горизонта, то есть цену акций с учетом приобретенного опциона пут. Если цена акций на дату горизонта меньше цены страйка, наблюдаемая цена является ценой страйка. В противном случае наблюдаемая цена является истинной ценой акций. Эта наблюдаемая цена представлена формулой
}.
Затем можно вычислить «начальную стоимость» акции с опционом пут, который задается начальной ценой акции. Price_0 плюс цена опциона пут. Наконец, чтобы рассчитать возврат стратегий опциона пут, разделите наблюдаемую цену за вычетом начальной стоимости на начальную стоимость.
AssetScenarios = zeros(NTRIALS, 5); % Strategy 1: Stock only AssetScenarios(:, 1) = (Price_T - Price_0) ./ Price_0; % Strategy 2: Put option cover at 50% AssetScenarios(:, 2) = (max(Price_T, Strike50) - (Price_0 + Put50)) ./ ... (Price_0 + Put50); % Strategy 2: Put option cover at 75% AssetScenarios(:, 3) = (max(Price_T, Strike75) - (Price_0 + Put75)) ./ ... (Price_0 + Put75); % Strategy 2: Put option cover at 90% AssetScenarios(:, 4) = (max(Price_T, Strike90) - (Price_0 + Put90)) ./ ... (Price_0 + Put90); % Strategy 2: Put option cover at 95% AssetScenarios(:, 5) = (max(Price_T, Strike95) - (Price_0 + Put95)) ./ ... (Price_0 + Put95);
Веса портфеля, связанные с каждым из пяти ранее определенных активов, представляют собой процент от общей стоимости инвестиций в каждую стратегию. Например, рассмотрим портфель с весами [0.5 0 0.5 0]. Веса указывают на то, что лучшее распределение - инвестировать 50% в стратегию только акций, а оставшиеся 50% в опцион пут на уровне 75%.
Постройте график распределения доходности для стратегии только для акций и опциона пут в стратегии 95%. Обратите внимание, что возврат обычно не распределяется. Для портфеля средних отклонений отсутствие симметрии в построенной на графике доходности обычно указывает на плохую производительность портфеля средних отклонений, поскольку дисперсия как мера риска не чувствительна к искаженным распределениям.
% Create histogram figure; % Stock only subplot(2,1,1); histogram(AssetScenarios(:,1),'Normalization','probability') title('Stock-Only Distribution') xlabel('Return') ylabel('Relative Probability') % Put option cover subplot(2,1,2); histogram(AssetScenarios(:,2),'Normalization','probability') title('Put Option at 95% Distribution') xlabel('Return') ylabel('Relative Probability')

Создать PortfolioCVaR с использованием AssetScenarios из моделирования.
p = PortfolioCVaR('Name','CVaR Portfolio Five Hedging Levels',... 'AssetList',{'Stock','Hedge50','Hedge75','Hedge90','Hedge95'},... 'Scenarios', AssetScenarios, 'LowerBound', 0, ... 'Budget', 1, 'ProbabilityLevel', 0.95); % Estimate the efficient frontier to obtain portfolio weights pwgt = estimateFrontier(p); % Plot the efficient frontier figure; plotFrontier(p, pwgt);

Создать Portfolio объект. Использовать AssetScenarios от моделирования для оценки моментов активов. Обратите внимание, что, в отличие от PortfolioCVaR для полного определения портфеля средних отклонений требуется только оценка моментов активов.
pmv = Portfolio('Name','Mean-Variance Portfolio Five Hedging Levels',... 'AssetList',{'Stock','Hedge50','Hedge75','Hedge90','Hedge95'}); pmv = estimateAssetMoments(pmv, AssetScenarios); pmv = setDefaultConstraints(pmv); % Estimate the efficient frontier to obtain portfolio weights pwgtmv = estimateFrontier(pmv); % Plot the efficient frontier figure; plotFrontier(pmv, pwgtmv);

Выберите целевой возврат. В этом случае целевой доходностью является средняя доходность на границе эффективности портфеля CVaR.
% Achievable levels of return pretlimits = estimatePortReturn(p, estimateFrontierLimits(p)); TargetRet = mean(pretlimits); % Target half way up the frontier
Постройте график эффективного портфеля CVaR для возврата TargetRet на эффективной границе CVaR.
% Obtain risk level at target return pwgtTarget = estimateFrontierByReturn(p,TargetRet); % CVaR efficient portfolio priskTarget = estimatePortRisk(p,pwgtTarget); % Plot point onto CVaR efficient frontier figure; plotFrontier(p,pwgt); hold on scatter(priskTarget,TargetRet,[],'filled'); hold off

Постройте график эффективного портфеля CVaR для возврата TargetRet на границе эффективности средней дисперсии. Обратите внимание, что эффективный портфель CVaR находится ниже среднего предела эффективности дисперсии.
% Obtain the variance for the efficient CVaR portfolio pmvretTarget = estimatePortReturn(pmv,pwgtTarget); % Should be TargetRet pmvriskTarget = estimatePortRisk(pmv,pwgtTarget); % Risk proxy is variance % Plot efficient CVaR portfolio onto mean-variance frontier figure; plotFrontier(pmv,pwgtmv); hold on scatter(pmvriskTarget,pmvretTarget,[],'filled'); hold off

Постройте график эффективного портфеля средних отклонений для возврата TargetRet на эффективной границе CVaR. Обратите внимание, что портфель эффективных средних отклонений находится ниже эффективной границы CVaR.
% Obtain the mean-variance efficient portfolio at target return pwgtmvTarget = estimateFrontierByReturn(pmv,TargetRet); % Obtain the CVaR risk for the mean-variance efficient portfolio pretTargetCVaR = estimatePortReturn(p,pwgtmvTarget); % Should be TargetRet priskTargetCVaR = estimatePortRisk(p,pwgtmvTarget); % Risk proxy is CVaR % Plot mean-variance efficient portfolio onto the CVaR frontier figure; plotFrontier(p,pwgt); hold on scatter(priskTargetCVaR,pretTargetCVaR,[],'filled'); hold off

Поскольку средняя дисперсия и CVaR являются двумя различными показателями риска, этот пример иллюстрирует, что эффективный портфель для одного типа показателя риска не эффективен для другого.
Изучите веса портфеля порфолио, которые составляют каждую эффективную границу, чтобы получить более подробное сравнение между средней дисперсией и эффективной границей CVaR.
Постройте график весов, связанных с эффективной границей портфеля средних отклонений.
% Plot the mean-variance portfolio weights figure; area(pwgtmv'); legend(pmv.AssetList); axis([1 10 0 1]) title('Mean-Variance Portfolio Weights Five Hedging Levels'); xlabel('Portfolios from Minimum(1) to Maximum(10) Return'); ylabel('Contribution of each Asset');

Веса, связанные с портфелями средних отклонений по эффективному использованию границ, только две стратегии, 'Stock' и 'Hedge95'. Такое поведение является следствием корреляций между пятью активами в портфеле. Поскольку корреляции между активами близки к 1, стандартное отклонение портфеля является почти линейной комбинацией стандартного отклонения активов. Следовательно, поскольку активы с большей доходностью связаны с активами с большей дисперсией, в эффективной границе наблюдается линейная комбинация только активов с наименьшей и наибольшей доходностью.
Постройте график весов, связанных с эффективной границей портфеля CVaR.
% Plot the CVaR portfolio weights figure; area(pwgt'); legend(p.AssetList); axis([1 10 0 1]) title('CVaR Portfolio Weights Five Hedging Levels'); xlabel('Portfolios from Minimum(1) to Maximum(10) Return'); ylabel('Contribution of each Asset');

Для обоих типов портфелей, среднего отклонения и CVaR, портфель с максимальной ожидаемой доходностью является тем, который распределяет весь вес стратегии только для запаса. Это имеет смысл, потому что опционы put не приобретаются, что переводится в большую доходность. Кроме того, портфель с минимальным отклонением одинаков для обоих показателей риска. Этот портфель - тот, который распределяет все на 'Hedge95' потому что эта стратегия больше всего ограничивает возможные потери. Реальные различия между двумя типами порфолио наблюдаются для уровней возврата между минимальным и максимальным. Там, в отличие от эффективных портфелей, полученных с использованием дисперсии в качестве показателя риска, веса портфелей CVaR варьируются между всеми пятью возможными стратегиями.
checkFeasibility | estimateScenarioMoments | getScenarios | PortfolioCVaR | setCosts | setScenarios | simulateNormalScenariosByData | simulateNormalScenariosByMoments