Этот пример показывает, как оценить рыночный риск гипотетического портфеля глобальных индексов акций с использованием метода отфильтрованного исторического моделирования (FHS), альтернативного традиционному историческому моделированию и подходам моделирования Монте-Карло. FHS сочетает в себе относительно сложную модельную обработку волатильности (GARCH) с непараметрической спецификацией распределения вероятности доходности активов. Одной из привлекательных особенностей FHS является его способность генерировать относительно большие отклонения (потери и прибыли), не обнаруженные в исходной серии возврата портфеля.
В примере сначала извлекаются отфильтрованные остатки модели и условные волатильности из ряда возврата портфеля с асимметричной моделью GARCH, из которой формируется ряд независимых и идентично распределенных (i.i.d.) стандартизированных остатков. FHS сохраняет непараметрический характер исторического моделирования путем начальной загрузки (выборки с заменой) из стандартизированных остатков. Эти загруженные стандартизированные остатки затем используются для генерации временных путей будущих возвратов активов. Наконец, моделирование оценивает стоимость рискованного (VaR) гипотетического глобального портфеля акций на протяжении одного месяца.
Этот пример иллюстрирует только одну из многих альтернатив и не предназначен для поддержки какой-либо конкретной философии управления рисками. Другую альтернативу можно найти в примере, озаглавленном «Использование теории экстремальной стоимости и копул для оценки рыночного риска».
Необработанные данные состоят из 2665 наблюдений значений дневного закрытия следующих репрезентативных индексов акций, охватывающих даты торгов 27-April-1993 14-July-2003:
Canada: TSX Composite (Ticker ^GSPTSE)
France: CAC 40 (Ticker ^FCHI)
Germany: DAX (Ticker ^GDAXI)
Japan: Nikkei 225 (Ticker ^N225)
UK: FTSE 100 (Ticker ^FTSE)
US: S&P 500 (Ticker ^GSPC)load Data_GlobalIdx1 % Import daily index closings
На следующем графике показаны относительные изменения цен по каждому индексу. Первоначальный уровень каждого индекса был нормализован до единицы для облегчения сопоставления относительных показателей, и никакие корректировки дивидендов явно не учитываются.
figure plot(dates, ret2price(price2ret(Data))) datetick('x') xlabel('Date') ylabel('Index Value') title ('Relative Daily Index Closings') legend(series, 'Location', 'NorthWest')

При подготовке к последующему моделированию укажите вектор веса портфеля. Хотя предполагается одинаково взвешенный портфель, можно изменить весовой вектор, чтобы изучить любой другой состав портфеля или даже одну страну. Следует отметить, что веса портфеля фиксированы на всем горизонте риска и что моделирование игнорирует любые операционные затраты, необходимые для ребалансировки портфеля (предполагается, что ежедневный процесс ребалансировки является самофинансированием).
nIndices = size(Data,2); % # of indices weights = repmat(1/nIndices, nIndices, 1); % Equally weighted portfolio
С учетом весов сформируйте портфельные логарифмические возвратные ряды (иногда называемые геометрическими или непрерывно скомпонованными доходами) из суточных доходностей отдельных индексов. Несмотря на то, что доходность индекса является логарифмической, ряд возвратов портфеля строится путем преобразования сначала индивидуальных логарифмических возвратов в арифметические доходности (изменение цены, деленное на начальную цену), затем взвешивания индивидуальных возвратов арифметического возврата портфеля и, наконец, преобразования обратно в логарифмическую доходность портфеля. При ежедневных данных и коротком горизонте VaR повторные преобразования мало чем отличаются, но в течение более длительных периодов времени различия могут быть значительными.
returns = price2ret(Data,[],'Periodic') * weights; % Arithmetic returns returns = log(1 + returns); % Logarithmic returns T = size(returns, 1); % Historical sample size
Постройте график дневной стоимости закрытия гипотетического портфеля вместе с соответствующей серией возврата для сравнения.
figure subplot(2,1,1) plot(dates, ret2price(returns)) datetick('x') xlabel('Date') ylabel('Closing Level') title('Daily Portfolio Closings') subplot(2,1,2) plot(dates(2:end), returns) datetick('x') xlabel('Date') ylabel('Return') title('Daily Portfolio Logarithmic Returns')

Загрузочный метод FHS требует, чтобы наблюдения были приблизительно независимыми и одинаково распределенными. Однако большинство серий финансовой отдачи демонстрируют некоторую степень автокорреляции и, что более важно, гетероскедастичности.
Например, выборочная функция автокорреляции (ACF) возвратов портфеля обнаруживает некоторую мягкую последовательную корреляцию.
figure
autocorr(returns)
title('Sample ACF of Returns')

Однако выборка ACF возведенных в квадрат возвратов иллюстрирует степень стойкости в дисперсии и подразумевает, что моделирование GARCH может значительно обусловить данные, используемые в последующем способе начальной загрузки.
figure
autocorr(returns.^2)
title('Sample ACF of Squared Returns')

Для создания серии i.i.d. наблюдения, подгонка авторегрессивной модели первого порядка к условному среднему доходности портфеля

и асимметричная экспоненциальная модель GARCH (EGARCH) для условной дисперсии
![$$log[\sigma^2_t] = \kappa + \alpha log[\sigma^2_{t-1}] + \phi (|z_{t-1}| - E[|z_{t-1}|]) + \psi z_{t-1}$$](../examples/econ/win64/Demo_RiskFHS_eq03036858494399792428.png)
Авторегрессивная модель первого порядка компенсирует автокорреляцию, в то время как модель EGARCH компенсирует гетероскедастичность. В частности, модель EGARCH также включает асимметрию (леверидж) в уравнение дисперсии (см. [6]).
Кроме того, стандартизированные остатки каждого индекса моделируются как стандартизированное распределение Стьюдента для компенсации жировых хвостов, часто связанных с доходностью справедливости. То есть

Следующий сегмент кода оценивает модель AR (1) + EGARCH (1,1) и извлекает отфильтрованные остатки и условные отклонения из возвратов портфеля.
model = arima('AR', NaN, 'Distribution', 't', 'Variance', egarch(1,1)); options = optimoptions(@fmincon, 'Display' , 'off', 'Diagnostics', 'off', ... 'Algorithm', 'sqp', 'TolCon' , 1e-7); fit = estimate(model, returns, 'options', options); % Fit the model [residuals, variances] = infer(fit, returns); % Infer residuals and variances
ARIMA(1,0,0) Model (t Distribution):
Value StandardError TStatistic PValue
__________ _____________ __________ __________
Constant 0.00021377 0.00012471 1.7142 0.086488
AR{1} 0.1855 0.019905 9.3189 1.1753e-20
DoF 12.65 2.7038 4.6784 2.8914e-06
EGARCH(1,1) Conditional Variance Model (t Distribution):
Value StandardError TStatistic PValue
_________ _____________ __________ __________
Constant -0.13366 0.03007 -4.4449 8.7947e-06
GARCH{1} 0.98639 0.0030907 319.15 0
ARCH{1} 0.13383 0.019006 7.0417 1.8991e-12
Leverage{1} -0.091884 0.012151 -7.5616 3.9807e-14
DoF 12.65 2.7038 4.6784 2.8914e-06
Сравните остатки модели и соответствующие условные стандартные отклонения, отфильтрованные из необработанных результатов. Нижний график ясно иллюстрирует изменение летучести (гетероскедастичности), присутствующей в отфильтрованных остатках.
figure subplot(2,1,1) plot(dates(2:end), residuals) datetick('x') xlabel('Date') ylabel('Residual') title ('Filtered Residuals') subplot(2,1,2) plot(dates(2:end), sqrt(variances)) datetick('x') xlabel('Date') ylabel('Volatility') title ('Filtered Conditional Standard Deviations')

Фильтруя остатки модели из ряда возврата портфеля, стандартизируйте каждый остаток на соответствующее условное стандартное отклонение. Эти стандартизированные остатки представляют нижележащее нулевое среднее, единичная дисперсия, i.i.d. серия. i.i.d. свойство важно для начальной загрузки и позволяет процедуре выборки безопасно избегать подводных камней выборки из популяции, в которой последовательные наблюдения являются последовательно зависимыми.
standardizedResiduals = residuals ./ sqrt(variances);
Чтобы завершить этот раздел, изучите ACF стандартизированных остатков и квадратичных стандартизированных остатков. Сравнение ACF стандартизированных остатков с соответствующими ACF необработанных возвратов показывает, что стандартизированные остатки теперь приблизительно i.i.d., тем самым гораздо более поддаются последующей начальной загрузке.
figure autocorr(standardizedResiduals) title('Sample ACF of Standardized Residuals') figure autocorr(standardizedResiduals.^2) title('Sample ACF of Squared Standardized Residuals')


Как уже упоминалось, FHS использует стандартизированные остатки для генерации путей будущих возвратов активов и, следовательно, не делает параметрических предположений относительно распределения вероятности этих возвратов. Процедура начальной загрузки создает i.i.d. стандартизированные остатки, соответствующие остаткам, полученным в процессе фильтрации AR (1) + EGARCH (1,1) выше.
Следующий сегмент кода моделирует 20 000 независимых случайных испытаний стандартизированных остатков в течение месячного горизонта в 22 торговых дня.
s = RandStream.getGlobalStream(); reset(s) nTrials = 20000; % # of independent random trials horizon = 22; % VaR forecast horizon bootstrappedResiduals = standardizedResiduals(unidrnd(T, horizon, nTrials));
Использование загруженных стандартизированных остатков в качестве i.i.d. процесс входного шума, повторное введение автокорреляции и гетероскедастичности, наблюдаемых в исходной серии возврата портфеля через Econometrics Toolbox™ filter функция. Чтобы максимально использовать текущую информацию, укажите необходимые остатки, отклонения и возвращаемые значения модели предварительной выборки так, чтобы каждый моделируемый путь развивался из общего начального состояния.
Y0 = returns(end); % Presample returns Z0 = residuals(end)./sqrt(variances(end)); % Presample model standardized residuals V0 = variances(end); % Presample variances portfolioReturns = filter(fit, bootstrappedResiduals, ... 'Y0', Y0, 'Z0', Z0, 'V0', V0);
Смоделировав доходность портфеля глобальных индексов, сообщите о максимальных прибылях и убытках, а также о VaR на различных уровнях доверия за месячный горизонт риска. Также постройте график эмпирической кумулятивной функции распределения (CDF) и функции плотности вероятности (PDF) кумулятивных результатов портфеля.
Поскольку вы работаете с ежедневной логарифмической доходностью, кумулятивная доходность за горизонт риска является просто суммой доходности за каждый промежуточный период.
cumulativeReturns = sum(portfolioReturns); VaR = 100 * quantile(cumulativeReturns, [0.10 0.05 0.01]'); disp(' ') fprintf('Maximum Simulated Loss: %8.4f%s\n' , -100*min(cumulativeReturns), '%') fprintf('Maximum Simulated Gain: %8.4f%s\n\n' , 100*max(cumulativeReturns), '%') fprintf(' Simulated 90%% VaR: %8.4f%s\n' , VaR(1), '%') fprintf(' Simulated 95%% VaR: %8.4f%s\n' , VaR(2), '%') fprintf(' Simulated 99%% VaR: %8.4f%s\n\n', VaR(3), '%') figure h = cdfplot(cumulativeReturns); h.Color = 'Red'; xlabel('Logarithmic Return') ylabel('Probability') title ('Simulated One-Month Global Portfolio Returns CDF') figure bins = -0.3:0.02:0.2; histogram(cumulativeReturns, bins, 'Normalization', 'pdf') xlabel('Logarithmic Return') ylabel('Probability Density') title ('Simulated One-Month Global Portfolio Returns PDF') grid on
Maximum Simulated Loss: 39.7597%
Maximum Simulated Gain: 15.2458%
Simulated 90% VaR: -5.0145%
Simulated 95% VaR: -7.2182%
Simulated 99% VaR: -12.4882%


[1] Барон-Адези, Г., К. Джаннопулос и Л. Воспер. «VaR без корреляций для нелинейных портфелей». Журнал фьючерсных рынков. Том 19, 1999, стр. 583-602.
[2] Брандолини, Д., М. Паллотта и Р. Зенти. «Управление рисками в компании по управлению активами: практический случай». Представлен на EMFA 2001, Лугано, Швейцария. 2000.
[3] Кристофферсен, P.F. Элементы управления финансовыми рисками. Уолтем, Массачусетс: Академическая пресса, 2002.
[4] Дауд, К. Измерение рыночного риска. Западный Сассекс: John Wiley & Sons, 2005.
[5] Макнейл, А. и Р. Фрэй. «Оценка показателя риска, связанного с хвостом, для гетероскедастического финансового временного ряда: подход с предельной стоимостью». Журнал эмпирических финансов. Том 7, 2000, стр. 271-300.
[6] Нельсон, Д. Б. «Условная гетероскедастичность в возвратах активов: новый подход». Эконометрика.. Том 59, № 2, 1991, стр. 347-370.