Rolling Windows и несколько моделей для ожидаемого дефицита (ES) Backtesting by Du и Escanciano

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

См. также

| | |

Похожие темы