В этом примере показано, как оценить подверженный риску значения (VaR) с помощью трех методов и выполнить анализ VaR backtesting. Эти три метода:
Нормальное распределение
Историческая симуляция
Экспоненциал взвесил скользящее среднее значение (EWMA)
Подверженный риску значения статистический метод, который определяет количество уровня риска, сопоставленного с портфелем. VaR измеряет максимальную сумму потери по горизонту требуемого времени и на данном доверительном уровне.
Backtesting измеряет точность вычислений VaR. Используя методы VaR, прогноз потерь вычисляется и затем по сравнению с фактическими потерями в конце следующего дня. Степень различия между предсказанными и фактическими потерями указывает, недооценивает ли модель VaR или переоценивает риск. По сути, backtesting смотрит ретроспективно на данные и помогает оценить модель VaR.
Эти три метода оценки, используемые в этом примере, оценивают VaR в 95% и 99% доверительных уровней.
Загрузите данные. Данные, используемые в этом примере, от временных рядов возвратов на индексе S&P от 1 993 до 2003.
load VaRExampleData.mat
Returns = tick2ret(sp);
DateReturns = dates(2:end);
SampleSize = length(Returns);
Задайте окно оценки как 250 торговых дней. Тестовое окно запускается в первый день в 1 996 и пробегает конец выборки.
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 backtesting смотрит ретроспективно на данные, 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 th-квантиль последнего 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 backtesting состоит в том, чтобы оценить производительность моделей VaR. Оценка VaR в 95%-м доверии нарушена только приблизительно 5% времени, и отказы VaR не кластеризируются. Кластеризация отказов VaR указывает на отсутствие независимости через время, потому что модели VaR не спешат реагировать на изменяющееся состояние рынка.
Общий первый шаг в анализе VaR backtesting должен построить возвраты и оценки 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 >= datestr('5-Aug-1998','local')) & (DatesTest <= datestr('31-Oct-1998','local')); 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 backtesting. В Risk Management Toolbox™, varbacktest
поддержка объектов несколько статистических тестов для анализа VaR backtesting. В этом примере запустите путем сравнения различных результатов испытаний для подхода нормального распределения в 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. 95% и 99% уровней VaR имеют в большей части (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, кажется, выполняет лучше в 2 002, все же все методы проваливают тесты независимости.
Чтобы получить больше понимания тестов независимости, изучите условную независимость покрытия (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 дней. Однако медиана времени между отказами в течение года 2 002 области значений между 5 и 7.5 для этих трех методов. Этот результат предлагает, чтобы половина времени, два последовательных отказа произошли в течение 5 - 7 дней, намного более часто, чем 20 ожидаемых дней. Следовательно, больше непройденных тестов происходит. Для нормального метода первый квартиль равняется 1, означая, что 25% отказов происходят в дни подряд.
Nieppola, О. Бэктестинг подверженные риску значения модели. Хельсинская школа экономики. 2009.
Дэнилссон, J. Финансовое прогнозирование риска: теория и практика прогнозирования риска рынка, с реализацией в R и MATLAB®. Финансы Вайли, 2012.