Ожидаемый недостаток (ES) рабочий процесс Backtesting Используя симуляцию

Этот пример показывает ожидаемый недостаток (ES) backtesting рабочий процесс с помощью объекта esbacktestbysim. Тесты, поддержанные в объекте esbacktestbysim, требуют как входные параметры не только тестовые данные (Portfolio, VaR и данные ES), но также и информация о распределении протестированной модели.

Класс esbacktestbysim поддерживает три теста - условное выражение, безусловное, и квантиль - которые основаны на Acerbi-Szekely (2014). Эти тесты используют дистрибутивные предположения, чтобы моделировать, возвращают сценарии, принимая, что дистрибутивные предположения правильны (нулевая гипотеза). Моделируемые сценарии находят распределение типичных значений для тестовой статистики и значения тестов. esbacktestbysim поддерживает нормальные и t дистрибутивы шкалы местоположения (с постоянным числом степеней свободы в тестовом окне).

Шаг 1. Загрузите ES backtesting данные.

Используйте файл ESBacktestBySimData.mat, чтобы загрузить данные в рабочую область. Этот пример работает с числовым массивом Returns. Этот массив представляет акцию, возвращается. Соответствующие данные VaR и доверительные уровни VaR находятся в VaR и VaRLevel. Ожидаемые данные о недостатке содержатся в ES.

load ESBacktestBySimData

Шаг 2. Сгенерируйте ES backtesting график.

Используйте функцию plot, чтобы визуализировать ES backtesting данные. Этот тип визуализации является общим первым шагом при выполнении ES backtesting анализ. Этот график отображает данные о возвратах против данные о ES и VaR.

VaRInd = 2;
figure;
plot(Dates,Returns,Dates,-VaR(:,VaRInd),Dates,-ES(:,VaRInd))
legend('Returns','VaR','ES')
title(['Test Data, ' num2str(VaRLevel(VaRInd)*100) '% Confidence'])
grid on

Шаг 3. Создайте объект esbacktestbysim.

Создайте объект esbacktestbysim с помощью esbacktestbysim. Информация о Distribution используется, чтобы моделировать, возвращается, чтобы оценить значение тестов. Симуляция, чтобы оценить значение запущена по умолчанию, когда вы создаете объект esbacktestbysim. Поэтому результаты испытаний доступны, когда вы создаете объект. Можно установить дополнительный входной параметр пары "имя-значение" 'Simulate' на false избегать симуляции, в этом случае можно использовать функцию simulate прежде, чем запросить для результатов испытаний.

rng('default'); % for reproducibility
IDs = ["t(dof) 95%","t(dof) 97.5%","t(dof) 99%"];
IDs = strrep(IDs,"dof",num2str(DoF));
ebts = esbacktestbysim(Returns,VaR,ES,Distribution,...
   'DegreesOfFreedom',DoF,...
   'Location',Mu,...
   'Scale',Sigma,...
   'PortfolioID',"S&P",...
   'VaRID',IDs,...
   'VaRLevel',VaRLevel);
disp(ebts)
  esbacktestbysim with properties:

    PortfolioData: [1966x1 double]
          VaRData: [1966x3 double]
           ESData: [1966x3 double]
     Distribution: [1x1 struct]
      PortfolioID: "S&P"
            VaRID: ["t(10) 95%"    "t(10) 97.5%"    "t(10) 99%"]
         VaRLevel: [0.9500 0.9750 0.9900]
disp(ebts.Distribution) % distribution information stored in the 'Distribution' property
                Name: "t"
    DegreesOfFreedom: 10
            Location: 0
               Scale: [1966x1 double]

Шаг 4. Сгенерируйте сводный отчет ES.

Сводный отчет ES предоставляет информацию о серьезности нарушений, то есть, как большой потеря сравнивается с VaR в дни, когда VaR был нарушен. ObservedSeverity (или наблюдаемое среднее отношение серьезности) столбец является отношением потери для VaR за дни, когда VaR нарушен. ExpectedSeverity (или ожидаемое среднее отношение серьезности) столбец показывает среднее значение отношения ES к VaR в дни, когда VaR нарушен.

S = summary(ebts);   
disp(S)
    PortfolioID        VaRID        VaRLevel    ObservedLevel    ExpectedSeverity    ObservedSeverity    Observations    Failures    Expected    Ratio     Missing
    ___________    _____________    ________    _____________    ________________    ________________    ____________    ________    ________    ______    _______

       "S&P"       "t(10) 95%"        0.95         0.94812            1.3288              1.4515             1966          102         98.3      1.0376       0   
       "S&P"       "t(10) 97.5%"     0.975         0.97202            1.2652              1.4134             1966           55        49.15       1.119       0   
       "S&P"       "t(10) 99%"        0.99         0.98627            1.2169              1.3947             1966           27        19.66      1.3733       0   

Шаг 5. Запустите отчет для всех тестов.

Запустите все тесты и сгенерируйте отчет только относительно принятия или отклоните результаты.

t = runtests(ebts);
disp(t)
    PortfolioID        VaRID        VaRLevel    Conditional    Unconditional    Quantile
    ___________    _____________    ________    ___________    _____________    ________

       "S&P"       "t(10) 95%"        0.95        reject          accept         reject 
       "S&P"       "t(10) 97.5%"     0.975        reject          reject         reject 
       "S&P"       "t(10) 99%"        0.99        reject          reject         reject 

Шаг 6. Запустите условный тест.

Запустите отдельный тест для условного теста (также известный как первый тест Acerbi-Szekely). Второй вывод (s) содержит моделируемые тестовые значения статистической величины, принимая, что дистрибутивные предположения правильны. Каждая строка s вывод совпадает с VaRID в соответствующей строке t вывод. Используйте эти моделируемые статистические данные, чтобы определить значение тестов.

[t,s] = conditional(ebts);
disp(t)
    PortfolioID        VaRID        VaRLevel    Conditional    ConditionalOnly    PValue    TestStatistic    CriticalValue    VaRTest    VaRTestResult    VaRTestPValue    Observations    Scenarios    TestLevel
    ___________    _____________    ________    ___________    _______________    ______    _____________    _____________    _______    _____________    _____________    ____________    _________    _________

       "S&P"       "t(10) 95%"        0.95        reject           reject             0       -0.092302        -0.043941       "pof"        accept           0.70347           1966          1000         0.95   
       "S&P"       "t(10) 97.5%"     0.975        reject           reject         0.001        -0.11714        -0.052575       "pof"        accept           0.40682           1966          1000         0.95   
       "S&P"       "t(10) 99%"        0.99        reject           reject         0.003        -0.14608        -0.085433       "pof"        accept           0.11536           1966          1000         0.95   
whos s
  Name      Size              Bytes  Class     Attributes

  s         3x1000            24000  double              

Шаг 7. Визуализируйте значение условного теста.

Визуализируйте значение условного теста с помощью гистограмм, чтобы показать распределение типичных значений (результаты симуляции). В гистограммах звездочка показывает значение тестовой статистической величины, наблюдаемой для фактических возвратов. Это - визуализация автономного условного теста. Итоговый условный результат испытаний также зависит от предварительного VaR backtest, как показано в условном тесте вывод.

NumVaRs = height(t);
figure;
for VaRInd = 1:NumVaRs
   subplot(NumVaRs,1,VaRInd)
   histogram(s(VaRInd,:));
   hold on;
   plot(t.TestStatistic(VaRInd),0,'*');
   hold off;
   Title = sprintf('Conditional: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd));
   title(Title)
end

Шаг 8. Запустите безусловный тест.

Запустите отдельный тест для безусловного теста (также известный как второй тест Acerbi-Szekely).

[t,s] = unconditional(ebts);
disp(t)
    PortfolioID        VaRID        VaRLevel    Unconditional    PValue    TestStatistic    CriticalValue    Observations    Scenarios    TestLevel
    ___________    _____________    ________    _____________    ______    _____________    _____________    ____________    _________    _________

       "S&P"       "t(10) 95%"        0.95         accept        0.093       -0.13342         -0.16252           1966          1000         0.95   
       "S&P"       "t(10) 97.5%"     0.975         reject        0.031       -0.25011          -0.2268           1966          1000         0.95   
       "S&P"       "t(10) 99%"        0.99         reject        0.008       -0.57396         -0.38264           1966          1000         0.95   

Шаг 9. Визуализируйте значение безусловного теста.

Визуализируйте значение безусловного теста с помощью гистограмм, чтобы показать распределение типичных значений (результаты симуляции). В гистограммах звездочка показывает значение тестовой статистической величины, наблюдаемой для фактических возвратов.

NumVaRs = height(t);
figure;
for VaRInd = 1:NumVaRs
   subplot(NumVaRs,1,VaRInd)
   histogram(s(VaRInd,:));
   hold on;
   plot(t.TestStatistic(VaRInd),0,'*');
   hold off;
   Title = sprintf('Unconditional: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd));
   title(Title)
end

Шаг 10. Запустите тест квантиля.

Запустите отдельный тест для теста квантиля (также известный как третий тест Acerbi-Szekely).

[t,s] = quantile(ebts);
disp(t)
    PortfolioID        VaRID        VaRLevel    Quantile    PValue    TestStatistic    CriticalValue    Observations    Scenarios    TestLevel
    ___________    _____________    ________    ________    ______    _____________    _____________    ____________    _________    _________

       "S&P"       "t(10) 95%"        0.95       reject     0.002       -0.10602         -0.055798          1966          1000         0.95   
       "S&P"       "t(10) 97.5%"     0.975       reject         0       -0.15697         -0.073513          1966          1000         0.95   
       "S&P"       "t(10) 99%"        0.99       reject         0       -0.26561          -0.10117          1966          1000         0.95   

Шаг 11. Визуализируйте значение теста квантиля.

Визуализируйте значение теста квантиля с помощью гистограмм, чтобы показать распределение типичных значений (результаты симуляции). В гистограммах звездочка показывает значение тестовой статистической величины, наблюдаемой для фактических возвратов.

NumVaRs = height(t);
figure;
for VaRInd = 1:NumVaRs
   subplot(NumVaRs,1,VaRInd)
   histogram(s(VaRInd,:));
   hold on;
   plot(t.TestStatistic(VaRInd),0,'*');
   hold off;
   Title = sprintf('Quantile: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd));
   title(Title)
end

Шаг 12. Запустите новую симуляцию, чтобы оценить значение тестов.

Запустите симуляцию снова с помощью 5 000 сценариев, чтобы сгенерировать новый набор результатов испытаний. Если начальными результатами испытаний для одного из тестов является граница, использование большей симуляции может помочь разъяснить результаты испытаний.

ebts = simulate(ebts,'NumScenarios',5000);
t = unconditional(ebts);  % new results for unconditional test
disp(t)
    PortfolioID        VaRID        VaRLevel    Unconditional    PValue    TestStatistic    CriticalValue    Observations    Scenarios    TestLevel
    ___________    _____________    ________    _____________    ______    _____________    _____________    ____________    _________    _________

       "S&P"       "t(10) 95%"        0.95         accept        0.0984      -0.13342         -0.17216           1966          5000         0.95   
       "S&P"       "t(10) 97.5%"     0.975         reject        0.0456      -0.25011         -0.24251           1966          5000         0.95   
       "S&P"       "t(10) 99%"        0.99         reject        0.0104      -0.57396         -0.40089           1966          5000         0.95   

Смотрите также

| | | | |

Связанные примеры

Больше о