В этом примере показано, как оценить значение риска (VaR) с помощью трех методов и выполнить анализ обратного тестирования VaR. Тремя методами являются:
Нормальное распределение
Историческое моделирование
Экспоненциальное взвешенное скользящее среднее (EWMA)
Стоимостной риск - это статистический метод, который количественно определяет уровень риска, связанного с портфелем. VaR измеряет максимальную величину потерь на определенном временном горизонте и на заданном доверительном уровне.
Обратное тестирование измеряет точность расчетов VaR. С помощью методов VaR рассчитывается прогноз убытков, который затем сравнивается с фактическими убытками в конце следующего дня. Степень разницы между прогнозируемыми и фактическими потерями указывает на то, занижает или завышает риск модель VaR. Таким образом, бэктестинг ретроспективно смотрит на данные и помогает оценить модель VaR.
Три метода оценки, использованные в этом примере, оценивают VaR на 95% и 99% доверительных уровней.
Загрузите данные. Данные, использованные в этом примере, взяты из временного ряда результатов по индексу S&P за период с 1993 по 2003 год.
load VaRExampleData.mat
Returns = tick2ret(sp);
DateReturns = dates(2:end);
SampleSize = length(Returns);
Определите окно оценки как 250 торговых дней. Окно тестирования начинается в первый день 1996 года и продолжается до конца образца.
TestWindowStart = find(year(DateReturns)==1996,1); TestWindow = TestWindowStart : SampleSize; EstimationWindowSize = 250;
Для уровня достоверности VaR 95% и 99% установите дополнение уровня VaR.
pVaR = [0.05 0.01];
Эти значения означают, что существует не более 5% и 1% вероятности, соответственно, что понесенные потери будут больше максимального порога (то есть больше, чем VaR).
Для обычного метода распределения предположим, что прибыль и убыток портфеля обычно распределяются. Используя это предположение, вычислите VaR путем умножения показателя z на каждом доверительном уровне на стандартное отклонение результатов. Поскольку обратное тестирование VaR выглядит ретроспективно на данных, VaR «сегодня» вычисляется на основе значений возвращений за последние N = 250 дней, ведущих к, но не включая, «сегодня».
Zscore = norminv(pVaR); Normal95 = zeros(length(TestWindow),1); Normal99 = zeros(length(TestWindow),1); for t = TestWindow i = t - TestWindowStart + 1; EstimationWindow = t-EstimationWindowSize:t-1; Sigma = std(Returns(EstimationWindow)); Normal95(i) = -Zscore(1)*Sigma; Normal99(i) = -Zscore(2)*Sigma; end figure; plot(DateReturns(TestWindow),[Normal95 Normal99]) xlabel('Date') ylabel('VaR') legend({'95% Confidence Level','99% Confidence Level'},'Location','Best') title('VaR Estimation Using the Normal Distribution Method')

Метод нормального распределения также известен как параметрический VaR, поскольку его оценка включает в себя вычисление параметра для стандартного отклонения возвратов. Преимуществом метода нормального распределения является его простота. Однако слабость метода нормального распределения заключается в предположении, что доходность обычно распределяется. Другое название метода нормального распределения - дисперсионно-ковариационный подход.
В отличие от обычного метода распределения, историческое моделирование (HS) является непараметрическим методом. Он не предполагает определенного распределения возвратов основных средств. Историческое моделирование прогнозирует риск, предполагая, что прошлые прибыли и убытки могут использоваться в качестве распределения прибыли и убытков для следующего периода прибыли. VaR «today» вычисляется как p-й квантиль последних N возвращений до «today».
Historical95 = zeros(length(TestWindow),1); Historical99 = zeros(length(TestWindow),1); for t = TestWindow i = t - TestWindowStart + 1; EstimationWindow = t-EstimationWindowSize:t-1; X = Returns(EstimationWindow); Historical95(i) = -quantile(X,pVaR(1)); Historical99(i) = -quantile(X,pVaR(2)); end figure; plot(DateReturns(TestWindow),[Historical95 Historical99]) ylabel('VaR') xlabel('Date') legend({'95% Confidence Level','99% Confidence Level'},'Location','Best') title('VaR Estimation Using the Historical Simulation Method')

На предыдущем рисунке показано, что кривая исторического моделирования имеет кусочно-постоянный профиль. Причина этого в том, что квантилы не меняются в течение нескольких дней, пока не произойдут экстремальные события. Таким образом, метод исторического моделирования медленно реагирует на изменения волатильности.
Первые два метода VaR предполагают, что все прошлые возвраты имеют одинаковый вес. Метод экспоненциального взвешенного скользящего среднего (EWMA) присваивает неравные веса, в частности экспоненциально уменьшающиеся веса. Самые последние возвраты имеют более высокие веса, потому что они влияют на «сегодняшнюю» отдачу сильнее, чем возвраты дальше в прошлом. Формула для дисперсии EWMA по окну оценки размера
:

где
- нормирующая константа:

Для удобства мы предполагаем бесконечно большое окно оценки для аппроксимации дисперсии:

Значение коэффициента распада, часто используемое на практике, составляет 0,94. Это значение используется в этом примере. Дополнительные сведения см. в разделе Ссылки.
Инициируйте EWMA с помощью фазы прогрева для настройки стандартного отклонения.
Lambda = 0.94; Sigma2 = zeros(length(Returns),1); Sigma2(1) = Returns(1)^2; for i = 2 : (TestWindowStart-1) Sigma2(i) = (1-Lambda) * Returns(i-1)^2 + Lambda * Sigma2(i-1); end
Используйте EWMA в окне тестирования для оценки VaR.
Zscore = norminv(pVaR); EWMA95 = zeros(length(TestWindow),1); EWMA99 = zeros(length(TestWindow),1); for t = TestWindow k = t - TestWindowStart + 1; Sigma2(t) = (1-Lambda) * Returns(t-1)^2 + Lambda * Sigma2(t-1); Sigma = sqrt(Sigma2(t)); EWMA95(k) = -Zscore(1)*Sigma; EWMA99(k) = -Zscore(2)*Sigma; end figure; plot(DateReturns(TestWindow),[EWMA95 EWMA99]) ylabel('VaR') xlabel('Date') legend({'95% Confidence Level','99% Confidence Level'},'Location','Best') title('VaR Estimation Using the EWMA Method')

На предыдущем рисунке EWMA очень быстро реагирует на периоды большой (или малой) отдачи.
В первой части этого примера VaR оценивали в окне теста с помощью трех различных методов и при двух различных уровнях достоверности VaR. Цель обратного тестирования VaR - оценить производительность моделей VaR. Оценка VaR при 95% достоверности нарушается только около 5% времени, а сбои VaR не кластерны. Кластеризация сбоев VaR указывает на отсутствие независимости во времени, поскольку модели VaR медленно реагируют на изменяющиеся рыночные условия.
Общим первым шагом в анализе обратного тестирования VaR является построение графика возвращений и оценок VaR вместе. Постройте график всех трех методов на 95% доверительном уровне и сравните их с результатами.
ReturnsTest = Returns(TestWindow); DatesTest = DateReturns(TestWindow); figure; plot(DatesTest,[ReturnsTest -Normal95 -Historical95 -EWMA95]) ylabel('VaR') xlabel('Date') legend({'Returns','Normal','Historical','EWMA'},'Location','Best') title('Comparison of returns and VaR at 95% for different models')

Чтобы выделить, как различные подходы по-разному реагируют на изменяющиеся рыночные условия, можно увеличить временной ряд, где происходит большое и внезапное изменение стоимости прибыли. Например, примерно в августе 1998 года:
ZoomInd = (DatesTest >= datetime(1998,8,5)) & (DatesTest <= datetime(1998,10,31));
VaRData = [-Normal95(ZoomInd) -Historical95(ZoomInd) -EWMA95(ZoomInd)];
VaRFormat = {'-','--','-.'};
D = DatesTest(ZoomInd);
R = ReturnsTest(ZoomInd);
N = Normal95(ZoomInd);
H = Historical95(ZoomInd);
E = EWMA95(ZoomInd);
IndN95 = (R < -N);
IndHS95 = (R < -H);
IndEWMA95 = (R < -E);
figure;
bar(D,R,0.5,'FaceColor',[0.7 0.7 0.7]);
hold on
for i = 1 : size(VaRData,2)
stairs(D-0.5,VaRData(:,i),VaRFormat{i});
end
ylabel('VaR')
xlabel('Date')
legend({'Returns','Normal','Historical','EWMA'},'Location','Best','AutoUpdate','Off')
title('95% VaR violations for different models')
ax = gca;
ax.ColorOrderIndex = 1;
plot(D(IndN95),-N(IndN95),'o',D(IndHS95),-H(IndHS95),'o',...
D(IndEWMA95),-E(IndEWMA95),'o','MarkerSize',8,'LineWidth',1.5)
xlim([D(1)-1, D(end)+1])
hold off;

Сбой или нарушение VaR происходит, когда результаты имеют отрицательный VaR. Более пристальный взгляд примерно с 27 по 31 августа показывает значительное падение доходности. В даты, начинающиеся с 27 августа, EWMA следует тенденции возвращения внимательно и более точно. Следовательно, EWMA имеет меньше нарушений VaR (два (2) нарушения, желтые алмазы) по сравнению с подходом нормального распределения (семь (7) нарушений, синие звезды) или методом исторического моделирования (восемь (8) нарушений, красные квадраты).
Помимо визуальных инструментов, можно использовать статистические тесты для обратного тестирования VaR. В Toolbox™ управления рисками a varbacktest объект поддерживает несколько статистических тестов для анализа обратного тестирования VaR. В этом примере начните с сравнения различных результатов испытаний для подхода нормального распределения на уровнях VaR 95% и 99%.
vbt = varbacktest(ReturnsTest,[Normal95 Normal99],'PortfolioID','S&P','VaRID',... {'Normal95','Normal99'},'VaRLevel',[0.95 0.99]); summary(vbt)
ans =
2x10 table
PortfolioID VaRID VaRLevel ObservedLevel Observations Failures Expected Ratio FirstFailure Missing
___________ __________ ________ _____________ ____________ ________ ________ ______ ____________ _______
"S&P" "Normal95" 0.95 0.94863 1966 101 98.3 1.0275 7 0
"S&P" "Normal99" 0.99 0.98372 1966 32 19.66 1.6277 7 0
Сводный отчет показывает, что наблюдаемый уровень достаточно близок к определенному уровню VaR. Уровни VaR 95% и 99% имеют максимум (1-VaR_level) x N ожидаемые отказы, где N - количество наблюдений. Коэффициент отказа показывает, что Normal95 Уровень VaR находится в пределах диапазона, тогда как Normal99 Уровень VaR неточен и недооценивает риск. Выполнение всех тестов, поддерживаемых в varbacktest, использовать runtests.
runtests(vbt)
ans =
2x11 table
PortfolioID VaRID VaRLevel TL Bin POF TUFF CC CCI TBF TBFI
___________ __________ ________ ______ ______ ______ ______ ______ ______ ______ ______
"S&P" "Normal95" 0.95 green accept accept accept accept reject reject reject
"S&P" "Normal99" 0.99 yellow reject reject accept reject accept reject reject
VaR 95% проходит тесты частоты, такие как светофор, биномиальные тесты и доля отказов (tl, bin, и pof столбцы). 99% VaR не проходит эти же тесты, как указано yellow и reject результаты. Оба уровня достоверности были отклонены в условной независимости покрытия и времени между отказами независимости (cci и tbfi столбцы). Этот результат говорит о том, что нарушения VaR не являются независимыми, и, вероятно, существуют периоды с несколькими сбоями за короткий промежуток времени. Кроме того, один сбой может повысить вероятность того, что другие сбои последуют в последующие дни. Для получения дополнительной информации о методах тестирования и интерпретации результатов см. varbacktest и индивидуальные тесты.
Использование varbacktest выполните одни и те же тесты для портфеля для трех подходов на обоих уровнях достоверности VaR.
vbt = varbacktest(ReturnsTest,[Normal95 Historical95 EWMA95 Normal99 Historical99 ... EWMA99],'PortfolioID','S&P','VaRID',{'Normal95','Historical95','EWMA95',... 'Normal99','Historical99','EWMA99'},'VaRLevel',[0.95 0.95 0.95 0.99 0.99 0.99]); runtests(vbt)
ans =
6x11 table
PortfolioID VaRID VaRLevel TL Bin POF TUFF CC CCI TBF TBFI
___________ ______________ ________ ______ ______ ______ ______ ______ ______ ______ ______
"S&P" "Normal95" 0.95 green accept accept accept accept reject reject reject
"S&P" "Historical95" 0.95 yellow accept accept accept accept accept reject reject
"S&P" "EWMA95" 0.95 green accept accept accept accept accept reject reject
"S&P" "Normal99" 0.99 yellow reject reject accept reject accept reject reject
"S&P" "Historical99" 0.99 yellow reject reject accept reject accept reject reject
"S&P" "EWMA99" 0.99 red reject reject accept reject accept reject reject
Результаты аналогичны предыдущим результатам, и на уровне 95% результаты частоты в целом приемлемы. Однако результаты частоты на уровне 99% обычно являются отклонениями. Что касается независимости, большинство тестов проходят условный тест независимости покрытия (cci), который проверяет независимость в последующие дни. Обратите внимание, что все тесты не выдерживают контроль наработки между отказами (tbfi), который учитывает время между всеми отказами. Этот результат говорит о том, что все методы имеют проблемы с предположением независимости.
Чтобы лучше понять, как эти результаты меняются при определенных рыночных условиях, посмотрите на 2000 и 2002 годы для уровня доверия VaR 95%.
Ind2000 = (year(DatesTest) == 2000); vbt2000 = varbacktest(ReturnsTest(Ind2000),[Normal95(Ind2000) Historical95(Ind2000) EWMA95(Ind2000)],... 'PortfolioID','S&P, 2000','VaRID',{'Normal','Historical','EWMA'}); runtests(vbt2000)
ans =
3x11 table
PortfolioID VaRID VaRLevel TL Bin POF TUFF CC CCI TBF TBFI
___________ ____________ ________ _____ ______ ______ ______ ______ ______ ______ ______
"S&P, 2000" "Normal" 0.95 green accept accept accept accept accept accept accept
"S&P, 2000" "Historical" 0.95 green accept accept accept accept accept accept accept
"S&P, 2000" "EWMA" 0.95 green accept accept accept accept accept accept accept
Ind2002 = (year(DatesTest) == 2002); vbt2002 = varbacktest(ReturnsTest(Ind2002),[Normal95(Ind2002) Historical95(Ind2002) EWMA95(Ind2002)],... 'PortfolioID','S&P, 2002','VaRID',{'Normal','Historical','EWMA'}); runtests(vbt2002)
ans =
3x11 table
PortfolioID VaRID VaRLevel TL Bin POF TUFF CC CCI TBF TBFI
___________ ____________ ________ ______ ______ ______ ______ ______ ______ ______ ______
"S&P, 2002" "Normal" 0.95 yellow reject reject accept reject reject reject reject
"S&P, 2002" "Historical" 0.95 yellow reject accept accept reject reject reject reject
"S&P, 2002" "EWMA" 0.95 green accept accept accept accept reject reject reject
В 2000 году все три метода прошли все испытания. Однако в 2002 году результаты испытаний были в основном отклонены по всем методам. Метод EWMA, похоже, работает лучше в 2002 году, но все методы не проходят тесты независимости.
Чтобы получить больше информации о тестах независимости, посмотрите на условную независимость покрытия (cci) и наработку на независимость от отказов (tbfi) детали теста за 2002 год. Для получения подробной информации о тестах выполните отдельные функции тестирования.
cci(vbt2002)
ans =
3x13 table
PortfolioID VaRID VaRLevel CCI LRatioCCI PValueCCI Observations Failures N00 N10 N01 N11 TestLevel
___________ ____________ ________ ______ _________ _________ ____________ ________ ___ ___ ___ ___ _________
"S&P, 2002" "Normal" 0.95 reject 12.591 0.0003877 261 21 225 14 14 7 0.95
"S&P, 2002" "Historical" 0.95 reject 6.3051 0.012039 261 20 225 15 15 5 0.95
"S&P, 2002" "EWMA" 0.95 reject 4.6253 0.031504 261 14 235 11 11 3 0.95
В тесте CCI вероятность p 01 отказа в момент времени t, зная, что отказа в момент времени t-1 не было, дается

Вероятность p 11 о наличии отказа в момент времени t, зная, что произошел сбой в момент времени t-1,

От N00, N10, N01, N11 столбцы в результатах теста, значение p 01 составляет около 5% для трех методов, но значения p 11 выше 20%. Поскольку имеются доказательства того, что за сбоем следует другой сбой гораздо чаще, чем 5% времени, этот тест CCI завершается неуспешно.
При проверке независимости времени между отказами посмотрите на минимальные, максимальные и квартили распределения времени между отказами, в столбцах TBFMin, TBFQ1, TBFQ2, TBFQ3, TBFMax.
tbfi(vbt2002)
ans =
3x14 table
PortfolioID VaRID VaRLevel TBFI LRatioTBFI PValueTBFI Observations Failures TBFMin TBFQ1 TBFQ2 TBFQ3 TBFMax TestLevel
___________ ____________ ________ ______ __________ __________ ____________ ________ ______ _____ _____ _____ ______ _________
"S&P, 2002" "Normal" 0.95 reject 53.936 0.00010087 261 21 1 1 5 17 48 0.95
"S&P, 2002" "Historical" 0.95 reject 45.274 0.0010127 261 20 1 1.5 5.5 17 48 0.95
"S&P, 2002" "EWMA" 0.95 reject 25.756 0.027796 261 14 1 4 7.5 20 48 0.95
При уровне VaR 95% ожидается среднее время между отказами 20 дней или один отказ каждые 20 дней. Однако медиана времени между отказами за 2002 год колеблется от 5 до 7,5 для трех методов. Этот результат предполагает, что половина времени, два последовательных сбоя происходят в течение 5-7 дней, гораздо чаще, чем 20 ожидаемых дней. Следовательно, происходит больше сбоев тестирования. Для обычного метода первый квартиль равен 1, что означает, что 25% отказов происходят в последующие дни.
Nieppola, O. Backtesting Value-at-Risk Model. Хельсинкская школа экономики. 2009.
Даниельссон, J. Financial Risk Forecasting: Теория и практика прогнозирования рыночных рисков с внедрением в R и MATLAB ®. Уайли Финанс, 2012.
bin | cc | cci | pof | runtests | summary | tbf | tbfi | tl | tuff | varbacktest