Прокрутка Windows и многоуровневых моделей для Ожидаемого недостатка (ES) Backtesting Du и Escanciano

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