В этом примере показан рабочий процесс использования ожидаемых обратных тестов Du-Escanciano (DE) для анализа окна и проверки нескольких моделей VaR/ES.
Рабочий процесс окна качения в этом примере также используется для обратных тестов значения риска (VaR) в varbacktest
и для задних тестов Acerbi-Szekely ES в esbacktest
и esbacktestbysim
классы.
Рабочий процесс с несколькими моделями в этом примере также используется для esbacktestbysim
класс. Для esbacktest
и varbacktest
можно создать один объект с несколькими моделями и несколькими уровнями VaR.
Данные в ESBacktestDistributionData.mat
файл имеет возвраты, данные VaR и ES, и информацию о распределении для трех моделей: normal, и t с 5 степенями свободы и t с 10 степенями свободы. Данные охватывают несколько лет с января 1996 года по июль 2003 года, в общей сложности за 1966 год наблюдений.
Чтобы запустить тест над скользящим окном, один esbacktestbyde
объект должен быть создан для каждого интересующего года (или периода времени). В этом примере каждый год с 1996 по 2002 год тестируется отдельно. Можно протестировать все уровни VaR вместе, но чтобы упростить выход, в этом примере используется один уровень VaR. Можно также вызвать любой тест или summary
отчет внутри цикла обработки, но этот пример вызывает только runtests
функция.
load ESBacktestDistributionData.mat rng('default'); % For reproducibility Years = 1996:2002; TargetVaRLevel = 0.99; t = table; for TargetYear = Years Ind = year(Dates)==TargetYear; VaRInd = VaRLevel==TargetVaRLevel; ebtde = esbacktestbyde(Returns(Ind),"t",... 'DegreesOfFreedom',10,... 'Location',0,... % Always 0 in this data set 'Scale',T10Scale(Ind),... 'VaRLevel',VaRLevel(VaRInd),... 'PortfolioID',strcat("S&P, ",string(TargetYear)),... 'VaRID',"t(10)"); t = [t; runtests(ebtde)]; end disp(t)
PortfolioID VaRID VaRLevel ConditionalDE UnconditionalDE ___________ _______ ________ _____________ _______________ "S&P, 1996" "t(10)" 0.99 reject reject "S&P, 1997" "t(10)" 0.99 accept reject "S&P, 1998" "t(10)" 0.99 accept accept "S&P, 1999" "t(10)" 0.99 reject accept "S&P, 2000" "t(10)" 0.99 accept accept "S&P, 2001" "t(10)" 0.99 accept accept "S&P, 2002" "t(10)" 0.99 reject accept
Для более совершенного подхода можно использовать массивы esbacktestbyde
а затем при необходимости вызывать различные функции для объектов, соответствующих различным годам.
rng('default'); % For reproducibility NumYears = length(Years); ebtdeArray(NumYears) = esbacktestbyde; TargetVaRLevel = 0.99; for yy = 1:NumYears TargetYear = Years(yy); Ind = year(Dates)==TargetYear; VaRInd = VaRLevel==TargetVaRLevel; ebtdeArray(yy) = esbacktestbyde(Returns(Ind),"t",... 'DegreesOfFreedom',10,... 'Location',0,... % Always 0 in this data set 'Scale',T10Scale(Ind),... 'VaRLevel',VaRLevel(VaRInd),... 'PortfolioID',strcat("S&P, ",string(TargetYear)),... 'VaRID',"t(10)"); end disp(ebtdeArray)
1x7 esbacktestbyde array with properties: PortfolioData VaRData ESData Distribution PortfolioID VaRID VaRLevel
Отображение сводных данных за 2002 год.
disp(summary(ebtdeArray(Years==2002)))
PortfolioID VaRID VaRLevel ObservedLevel ExpectedSeverity ObservedSeverity Observations Failures Expected Ratio Missing ___________ _______ ________ _____________ ________________ ________________ ____________ ________ ________ ______ _______ "S&P, 2002" "t(10)" 0.99 0.98467 1.2169 1.1481 261 4 2.61 1.5326 0
Конкатенируйте условные тесты для всех лет.
condDEResults = table; for yy = 1:NumYears condDEResults = [condDEResults; conditionalDE(ebtdeArray(yy))]; end disp(condDEResults)
PortfolioID VaRID VaRLevel ConditionalDE PValue TestStatistic CriticalValue AutoCorrelation Observations CriticalValueMethod NumLags Scenarios TestLevel ___________ _______ ________ _____________ __________ _____________ _____________ _______________ ____________ ___________________ _______ _________ _________ "S&P, 1996" "t(10)" 0.99 reject 0.0084691 6.9315 3.8415 0.16265 262 "large-sample" 1 NaN 0.95 "S&P, 1997" "t(10)" 0.99 accept 0.85691 0.032512 3.8415 -0.011161 261 "large-sample" 1 NaN 0.95 "S&P, 1998" "t(10)" 0.99 accept 0.87949 0.022989 3.8415 -0.0093851 261 "large-sample" 1 NaN 0.95 "S&P, 1999" "t(10)" 0.99 reject 2.1168e-50 222.89 3.8415 0.92412 261 "large-sample" 1 NaN 0.95 "S&P, 2000" "t(10)" 0.99 accept 0.89052 0.018948 3.8415 -0.0085367 260 "large-sample" 1 NaN 0.95 "S&P, 2001" "t(10)" 0.99 accept 0.92088 0.0098664 3.8415 -0.0061484 261 "large-sample" 1 NaN 0.95 "S&P, 2002" "t(10)" 0.99 reject 3.5974e-05 17.073 3.8415 0.25576 261 "large-sample" 1 NaN 0.95
Подобно esbacktestbysim
объект, esbacktestbyde
объект принимает только одно распределение за раз. Если вам нужно тестировать различные модели один за другим, то необходимо создать различные образцы класса.
В этом примере вы запускаете тест для нормального допущения распределения и t распределений с 5 и 10 степенями свободы. Затем результаты тестирования объединяются для создания отдельного отчета.
Данные в ESBacktestDistributionData.mat
файл имеет возвраты, данные VaR и ES, и информацию о распределении для трех моделей: normal и t с 5 и 10 степенями свободы. Данные охватывают несколько лет с января 1996 года по июль 2003 года, в общей сложности за 1966 год наблюдений. Для простоты в этом примере используются только данные 1998 года.
load ESBacktestDistributionData.mat TargetYear = 1998; Ind = year(Dates)==TargetYear; rng('default'); % For reproducibility
Создайте образец esbacktestbyde
объект для нормального распределения.
ebtdeNormal = esbacktestbyde(Returns(Ind),"normal",... 'Mean',0,... 'StandardDeviation',NormalStd(Ind),... 'VaRLevel',VaRLevel,... 'PortfolioID',strcat("S&P, ",string(TargetYear)),... 'VaRID',"normal"); disp(ebtdeNormal)
esbacktestbyde with properties: PortfolioData: [261x1 double] VaRData: [261x3 double] ESData: [261x3 double] Distribution: [1x1 struct] PortfolioID: "S&P, 1998" VaRID: ["normal" "normal" "normal"] VaRLevel: [0.9500 0.9750 0.9900]
disp(ebtdeNormal.Distribution)
Name: "normal" Mean: 0 StandardDeviation: [261x1 double]
Создайте образец esbacktestbyde
объект для распределения t с 10 степенями свободы.
ebtdeT10 = esbacktestbyde(Returns(Ind),"t",... 'DegreesOfFreedom',10,... 'Location',0,... 'Scale',T10Scale(Ind),... 'VaRLevel',VaRLevel,... 'PortfolioID',strcat("S&P, ",string(TargetYear)),... 'VaRID',"t(10)"); disp(ebtdeT10)
esbacktestbyde with properties: PortfolioData: [261x1 double] VaRData: [261x3 double] ESData: [261x3 double] Distribution: [1x1 struct] PortfolioID: "S&P, 1998" VaRID: ["t(10)" "t(10)" "t(10)"] VaRLevel: [0.9500 0.9750 0.9900]
disp(ebtdeT10.Distribution)
Name: "t" DegreesOfFreedom: 10 Location: 0 Scale: [261x1 double]
Создайте образец esbacktestbyde
объект для распределения t с 5 степенями свободы.
ebtdeT5 = esbacktestbyde(Returns(Ind),"t",... 'DegreesOfFreedom',5,... 'Location',0,... 'Scale',T5Scale(Ind),... 'VaRLevel',VaRLevel,... 'PortfolioID',strcat("S&P, ",string(TargetYear)),... 'VaRID',"t(5)"); disp(ebtdeT5)
esbacktestbyde with properties: PortfolioData: [261x1 double] VaRData: [261x3 double] ESData: [261x3 double] Distribution: [1x1 struct] PortfolioID: "S&P, 1998" VaRID: ["t(5)" "t(5)" "t(5)"] VaRLevel: [0.9500 0.9750 0.9900]
disp(ebtdeT5.Distribution)
Name: "t" DegreesOfFreedom: 5 Location: 0 Scale: [261x1 double]
Запустите тесты, а затем конкатенируйте результаты.
testResults = [runtests(ebtdeNormal); runtests(ebtdeT10); runtests(ebtdeT5)]; disp(testResults)
PortfolioID VaRID VaRLevel ConditionalDE UnconditionalDE ___________ ________ ________ _____________ _______________ "S&P, 1998" "normal" 0.95 accept accept "S&P, 1998" "normal" 0.975 accept accept "S&P, 1998" "normal" 0.99 accept reject "S&P, 1998" "t(10)" 0.95 accept accept "S&P, 1998" "t(10)" 0.975 accept accept "S&P, 1998" "t(10)" 0.99 accept accept "S&P, 1998" "t(5)" 0.95 accept accept "S&P, 1998" "t(5)" 0.975 accept accept "S&P, 1998" "t(5)" 0.99 accept accept
Отображение результатов для уровня VaR 0.99
.
TargetVaRLevel = 0.99; disp(testResults(testResults.VaRLevel == TargetVaRLevel,:))
PortfolioID VaRID VaRLevel ConditionalDE UnconditionalDE ___________ ________ ________ _____________ _______________ "S&P, 1998" "normal" 0.99 accept reject "S&P, 1998" "t(10)" 0.99 accept accept "S&P, 1998" "t(5)" 0.99 accept accept
esbacktest
| esbacktestbyde
| esbacktestbysim
| varbacktest