Этот пример показывает рабочий процесс для использования ожидаемого недостатка (ES) Дю-Эсканкяно (DE) backtests для прокрутки исследований окна и тестирования нескольких моделей VaR/ES.
Прокручивающийся рабочий процесс окна в этом примере также используется в подверженном риску значения (VaR) backtests в varbacktest
и для ES Acerbi-Szekely backtests в esbacktest
и esbacktestbysim
классы.
Рабочий процесс многоуровневой модели в этом примере также используется в esbacktestbysim
класс. Для esbacktest
и varbacktest
, можно создать отдельный объект с многоуровневыми моделями и несколькими уровнями VaR.
Данные в ESBacktestDistributionData.mat
файл имеет, возвращается, VaR и данные о ES и информация о распределении для трех моделей: нормальный, и t с 5 степенями свободы и t с 10 степенями свободы. Диапазоны данных несколько лет с января 1996 до июля 2003, для в общей сложности 1 966 наблюдений.
Запускать тест по прокручивающемуся окну, одному esbacktestbyde
объект должен быть создан в течение каждого года (или период времени) интереса. В этом примере, каждый год от 1 996 до 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 и информация о распределении для трех моделей: нормальный, и t с 5 и 10 степенями свободы. Диапазоны данных несколько лет с января 1996 до июля 2003, для в общей сложности 1 966 наблюдений. Для простоты этот пример использует только данные от 1 998.
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