Хеджирование с использованием оптимизации портфеля CVaR

В этом примере показано, как смоделировать две стратегии хеджирования с помощью оптимизации портфеля 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');

Figure contains an axes. The axes with title Simulation of a Stock contains 500 objects of type line.

Вычислим цены на различные опции размещения с помощью модели Блэка-Скоулза с 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. Чтобы вычислить возвраты акции с различными опциями пут, сначала вычислите «наблюдаемую цену» на дату горизонта, то есть цену акции с учетом приобретённой опции пут. Если цена акций на дату горизонта меньше цены страйка, то наблюдаемая цена является ценой страйка. В противном случае наблюдаемая цена является истинной ценой акций. Эта наблюдаемая цена представлена формулой

Observedprice=max{PriceT,Strike}.

Затем можно вычислить «начальную стоимость» запаса с помощью опции размещения, которая определяется начальной ценой запаса Price_0 плюс цена опции пут. Наконец, чтобы вычислить возврат стратегий put option, разделите наблюдаемую цену за вычетом начальных затрат на начальные затраты.

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')

Figure contains 2 axes. Axes 1 with title Stock-Only Distribution contains an object of type histogram. Axes 2 with title Put Option at 95% Distribution contains an object of type histogram.

Эффективная граница CVaR

Создайте 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);

Figure contains an axes. The axes with title \bfCVaR Portfolio Five Hedging Levels contains an object of type line.

Сравнение эффективных границ CVaR и среднего отклонения

Создайте 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);

Figure contains an axes. The axes with title \bfMean-Variance Portfolio Five Hedging Levels contains an object of type line.

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

Figure contains an axes. The axes with title \bfCVaR Portfolio Five Hedging Levels contains 2 objects of type line, scatter.

Постройте график эффективного портфеля 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

Figure contains an axes. The axes with title \bfMean-Variance Portfolio Five Hedging Levels contains 2 objects of type line, scatter.

Постройте график эффективного портфеля средних дисперсий для возврата 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

Figure contains an axes. The axes with title \bfCVaR Portfolio Five Hedging Levels contains 2 objects of type line, scatter.

Поскольку среднее отклонение и CVaR являются двумя различными показателями риска, этот пример показывает, что эффективный портфель для одного типа измерения риска не является эффективным для другого.

Сравнение весов портфеля 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');

Figure contains an axes. The axes with title Mean-Variance Portfolio Weights Five Hedging Levels contains 5 objects of type area. These objects represent Stock, Hedge50, Hedge75, Hedge90, Hedge95.

Веса, связанные с портфелями средних дисперсий на эффективной границе, используют только две стратегии, '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');

Figure contains an axes. The axes with title CVaR Portfolio Weights Five Hedging Levels contains 5 objects of type area. These objects represent Stock, Hedge50, Hedge75, Hedge90, Hedge95.

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

См. также

| | | | | | |

Похожие примеры

Подробнее о

Внешние веб-сайты