Этот пример показывает, как оценить значение риска (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 «сегодня» вычисляется как p-й квантиль последнего N возврата до «сегодня».
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) нарушения, желтые алмазы) по сравнению с подходом Normal Distribution (семь (7) нарушений, синие звезды) или методом Исторической симуляции (восемь (8) нарушений, красные квадраты).
Помимо визуальных инструментов, вы можете использовать статистические тесты для обратного тестирования VaR. В Risk Management Toolbox™ a varbacktest
объект поддерживает несколько статистических тестов для обратного тестирования VaR. В этом примере начните с сравнения различных результатов теста для подхода нормального распределения на уровнях 95% и 99% VaR.
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
95% VaR проходит частотные тесты, такие как светофор, биномиальный и доля отказов (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 годы для 95% доверительного уровня VaR.
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 Models. Хельсинкская школа экономики. 2009.
Даниэлссон, Дж. Прогнозирование финансовых рисков: теория и практика прогнозирования рыночных рисков с реализацией в R и MATLAB ®. Wiley Finance, 2012.
bin
| cc
| cci
| pof
| runtests
| summary
| tbf
| tbfi
| tl
| tuff
| varbacktest