В этом примере показан рабочий процесс использования ожидаемых обратных тестов 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