Хеджирование Используя оптимизацию портфеля 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 object. The axes object with title Simulation of a Stock contains 500 objects of type line.

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

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 objects. Axes object 1 with title Stock-Only Distribution contains an object of type histogram. Axes object 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 object. The axes object with title C V a R blank P o r t f o l i o blank F i v e blank H e d g i n g blank L e v e l s 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 object. The axes object with title M e a n - V a r i a n c e blank P o r t f o l i o blank F i v e blank H e d g i n g blank L e v e l s 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 object. The axes object with title C V a R blank P o r t f o l i o blank F i v e blank H e d g i n g blank L e v e l s 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 object. The axes object with title M e a n - V a r i a n c e blank P o r t f o l i o blank F i v e blank H e d g i n g blank L e v e l s 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 object. The axes object with title C V a R blank P o r t f o l i o blank F i v e blank H e d g i n g blank L e v e l s contains 2 objects of type line, scatter.

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

CVaR и сравнение весов портфеля Среднего Отклонения

Исследуйте веса портфеля porfolios, которые составляют каждую границу эффективности, чтобы получить более подробное сравнение между границами эффективности 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 object. The axes object 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 object. The axes object with title CVaR Portfolio Weights Five Hedging Levels contains 5 objects of type area. These objects represent Stock, Hedge50, Hedge75, Hedge90, Hedge95.

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

Смотрите также

| | | | | | |

Связанные примеры

Больше о

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