exponenta event banner

varbacktest

Создать varbacktest объект для выполнения набора обратных тестов стоимости и риска (VaR)

Описание

Общий рабочий процесс:

  1. Загрузите или создайте данные для анализа обратного тестирования VaR.

  2. Создать varbacktest объект. Дополнительные сведения см. в разделе Создание varbacktest.

  3. Используйте summary создание сводного отчета для данных о количестве наблюдений и количестве отказов.

  4. Используйте runtests для одновременного выполнения всех тестов.

  5. Для получения дополнительной информации о тестах выполните следующие отдельные тесты:

    • tl - Тест светофора

    • bin - Биномиальный тест

    • pof - Доля отказов

    • tuff - Время до первого отказа

    • cc - Условное покрытие смешано

    • cci - Независимость от условного покрытия

    • tbf - Время между отказами смешанное

    • tbfi - Время между отказами независимость

    Дополнительные сведения см. в разделе Рабочий процесс обратного тестирования VaR.

Создание

Описание

пример

vbt = varbacktest(PortfolioData,VaRData) создает varbacktest (vbt) объект с использованием данных о результатах портфеля и соответствующих данных о стоимости риска (VaR). vbt объект имеет следующие свойства:

  • PortfolioData - NumRowsоколо-1 числовой массив, содержащий копию PortfolioData

  • ВаРДата - NumRowsоколо-NumVaRs числовой массив, содержащий копию VaRData

  • Идентификатор проекта - строка, содержащая PortfolioID

  • ВаРИД - 1около-NumVaRs строковый вектор, содержащий VaRIDs для соответствующих столбцов в VaRData

  • VaRLevel - 1около-NumVaRs числовой массив, содержащий VaRLevels для соответствующих столбцов в VaRData.

Примечание

  • Необходимые входные аргументы для PortfolioData и VaRData все они должны состоять из одних и тех же единиц. Эти аргументы могут быть выражены как прибыль или как прибыль и убытки. Нет проверок в varbacktest объект относительно единиц этих аргументов.

  • Если отсутствуют значения (NaNs) в данных для PortfolioData или VaRData, строка данных отбрасывается перед применением тестов. Поэтому для моделей с разным количеством отсутствующих значений сообщается разное количество наблюдений. Сообщенное число наблюдений равно исходному количеству строк минус количество отсутствующих значений. Чтобы определить, есть ли отброшенные строки, используйте 'Missing' в столбце summary отчет.

пример

vbt = varbacktest(___,Name,Value) Задает свойства, используя пары имя-значение и любой из аргументов предыдущего синтаксиса. Например, vbt = varbacktest(PortfolioData,VaRData,'PortfolioID','Equity100','VaRID','TotalVaR','VaRLevel',.99). Можно указать несколько пар имя-значение в качестве необязательных аргументов пара имя-значение.

Входные аргументы

развернуть все

Данные о результатах портфеля, указанные как NumRowsоколо-1 числовой массив, NumRowsоколо-1 таблица или NumRowsоколо-1 график с числовым столбцом, содержащим данные о результатах портфеля. PortfolioData вход устанавливает собственность PortfolioData.

Примечание

Необходимые входные аргументы для PortfolioData и VaRData все они должны состоять из одних и тех же единиц. Эти аргументы могут быть выражены как прибыль или как прибыль и убытки. Нет проверок в varbacktest объект относительно единиц этих аргументов.

Типы данных: double | table | timetable

Данные о стоимостном риске (VaR), указанные с помощью NumRowsоколо-NumVaRs числовой массив, NumRowsоколо-NumVaRs таблица или NumRowsоколо-NumVaRs расписание с числовыми столбцами. VaRData задает свойство VaRData.

Если VaRData имеет более одного столбца (NumVaRs> 1), PortfolioData тестируется для каждого столбца в VaRData. По умолчанию a 0.95 Уровень достоверности VaR используется для всех столбцов в VaRData. (Использование VaRLevel для указания различных уровней достоверности VaR.)

Условность заключается в том, что VaR - это положительная сумма. Поэтому сбой регистрируется, когда убыток (отрицательный из данных портфеля) превышает VaR, то есть когда

 -PortfolioData > VaRData

Например, VaR 1 000 000 (положительный) нарушается всякий раз, когда результат хуже, чем убыток 1 000 000 (негатив результата портфеля, или убыток, больше, чем VaR).

Отрицательный VaRData значения допустимы, однако отрицательные значения VaR указывают на высокодоходный портфель, который не может потерять деньги при заданном уровне достоверности VaR. То есть наихудший сценарий на данном доверительном уровне - все-таки прибыль.

Примечание

Необходимые входные аргументы для PortfolioData и VaRData все они должны состоять из одних и тех же единиц. Эти аргументы могут быть выражены как прибыль или как прибыль и убытки. Нет проверок в varbacktest объект относительно единиц этих аргументов.

Типы данных: double | table | timetable

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: vbt = varbacktest(PortfolioData,VaRData,'PortfolioID','Equity100','VaRID','TotalVaR','VaRLevel',.99)

Пользовательский идентификатор для PortfolioData вход, указанный как пара, разделенная запятыми, состоящая из 'PortfolioID' и символьный вектор или строку. PortfolioID Аргумент пары «имя-значение» задает свойство «Идентификатор ошибки».

Если PortfolioData - числовой массив, значение по умолчанию для PortfolioID является 'Portfolio'. Если PortfolioData является таблицей, PortfolioID по умолчанию устанавливается соответствующее имя переменной в таблице.

Типы данных: char | string

Идентификатор VaR для VaRData столбцы, указанные как разделенная запятыми пара, состоящая из 'VaRID' и символьный вектор или строку. Несколько VaRIDs указаны с помощью 1около-NumVaRs (или NumVaRsоколо-1) массив ячеек символьных векторов или строкового вектора с пользовательскими идентификаторами для VaRData столбцы. VaRID аргумент пары имя-значение задает свойство VaRID.

Если NumVaRs = 1, значение по умолчанию для VaRID является 'VaR'. Если NumVaRs > 1, значением по умолчанию является 'VaR1', 'VaR2'и так далее. Если VaRData является таблицей, 'VaRID' по умолчанию устанавливается соответствующее имя переменной в таблице.

Типы данных: char | cell | string

Уровень достоверности VaR, определяемый как разделенная запятыми пара, состоящая из 'VaRLevel' и числовое значение между 0 и 1 или 1около-NumVaRs числовой массив со значениями между 0 и 1 для соответствующих столбцов в VaRData. VaRLevel аргумент пары имя-значение задает свойство VaRLevel.

Типы данных: double

Свойства

развернуть все

Портфельные данные для анализа обратного тестирования VaR, указанные как NumRowsоколо-1 числовой массив, содержащий копию данных портфеля.

Типы данных: double

Данные VaR для анализа обратного тестирования VaR, указанные как NumRowsоколо-NumVaRs числовой массив, содержащий копию данных VaR.

Типы данных: double

Идентификатор портфеля, указанный как строка.

Типы данных: string

Идентификатор VaR, указанный как 1около-NumVaRs строковый массив, содержащий идентификаторы VaR для соответствующих столбцов в VaRData.

Типы данных: string

Уровень VaR, указанный как 1около-NumVaRs числовой массив, содержащий уровни VaR для соответствующих столбцов в VaRData.

Типы данных: double

varbacktest СобственностьЗадание или изменение свойства из командной строки с помощью varbacktest Изменение свойства с помощью точечной нотации
PortfolioDataДаНет
VaRDataДаНет
PortfolioIDДаДа
VaRIDДаДа
VaRLevelДаДа

Функции объекта

tlТест светофора для обратного тестирования значения риска (VaR)
binБиномиальный тест для обратного тестирования значения риска (VaR)
pofДоля испытаний на отказы для обратного тестирования значения риска (VaR)
tuffВремя до первого испытания на отказ для обратного тестирования значения риска (VaR)
ccСмешанный тест условного покрытия для обратного тестирования стоимости и риска (VaR)
cciТест независимости условного покрытия для обратного тестирования стоимости и риска (VaR)
tbfВремя между отказами смешанного теста для обратного тестирования значения риска (VaR)
tbfiВремя между испытаниями на независимость от отказов для обратного тестирования значения риска (VaR)
summaryОтчет о данных varbacktest
runtestsЗапустить все тесты в varbacktest

Примеры

свернуть все

varbacktest принимает данные о результатах портфеля и соответствующие данные о стоимости и риске (VaR) и возвращает varbacktest объект.

Создать varbacktest объект.

 load VaRBacktestData
 vbt = varbacktest(EquityIndex,Normal95)
vbt = 
  varbacktest with properties:

    PortfolioData: [1043x1 double]
          VaRData: [1043x1 double]
      PortfolioID: "Portfolio"
            VaRID: "VaR"
         VaRLevel: 0.9500

vbt, varbacktest объект, содержит копию данных данного портфеля (PortfolioData свойство), данные VaR (VaRData свойство) и все комбинации идентификатора портфеля, идентификатора VaR и уровня VaR для тестирования (PortfolioID, VaRID, и VaRLevel свойства).

Запустите тесты с помощью vbt объект.

 runtests(vbt)
ans=1×11 table
    PortfolioID    VaRID    VaRLevel     TL       Bin       POF       TUFF       CC       CCI       TBF       TBFI 
    ___________    _____    ________    _____    ______    ______    ______    ______    ______    ______    ______

    "Portfolio"    "VaR"      0.95      green    accept    accept    accept    accept    accept    reject    reject

Изменить PortfolfioID и VaRID с использованием точечной нотации.

vbt.PortfolioID = 'S&P'
vbt = 
  varbacktest with properties:

    PortfolioData: [1043x1 double]
          VaRData: [1043x1 double]
      PortfolioID: "S&P"
            VaRID: "VaR"
         VaRLevel: 0.9500

vbt.VaRID = 'Normal at 95%'
vbt = 
  varbacktest with properties:

    PortfolioData: [1043x1 double]
          VaRData: [1043x1 double]
      PortfolioID: "S&P"
            VaRID: "Normal at 95%"
         VaRLevel: 0.9500

Запустить все тесты с использованием обновленного varbacktest объект.

 runtests(vbt)
ans=1×11 table
    PortfolioID         VaRID         VaRLevel     TL       Bin       POF       TUFF       CC       CCI       TBF       TBFI 
    ___________    _______________    ________    _____    ______    ______    ______    ______    ______    ______    ______

       "S&P"       "Normal at 95%"      0.95      green    accept    accept    accept    accept    accept    reject    reject

Создать varbacktest объект.

 load VaRBacktestData
 vbt = varbacktest(EquityIndex,Normal95)
vbt = 
  varbacktest with properties:

    PortfolioData: [1043x1 double]
          VaRData: [1043x1 double]
      PortfolioID: "Portfolio"
            VaRID: "VaR"
         VaRLevel: 0.9500

vbt, varbacktest объект, содержит копию данных данного портфеля (PortfolioData свойство), данные VaR (VaRData свойство) и все комбинации идентификатора портфеля, идентификатора VaR и уровня VaR для тестирования (PortfolioID, VaRID, и VaRLevel свойства).

Запустите тесты с помощью varbacktest объект.

 runtests(vbt)
ans=1×11 table
    PortfolioID    VaRID    VaRLevel     TL       Bin       POF       TUFF       CC       CCI       TBF       TBFI 
    ___________    _____    ________    _____    ______    ______    ______    ______    ______    ______    ______

    "Portfolio"    "VaR"      0.95      green    accept    accept    accept    accept    accept    reject    reject

Изменить PortfolfioID и VaRID с использованием точечной нотации.

vbt.PortfolioID = 'S&P'
vbt = 
  varbacktest with properties:

    PortfolioData: [1043x1 double]
          VaRData: [1043x1 double]
      PortfolioID: "S&P"
            VaRID: "VaR"
         VaRLevel: 0.9500

vbt.VaRID = 'Normal at 95%'
vbt = 
  varbacktest with properties:

    PortfolioData: [1043x1 double]
          VaRData: [1043x1 double]
      PortfolioID: "S&P"
            VaRID: "Normal at 95%"
         VaRLevel: 0.9500

Запустить все тесты с использованием обновленного varbacktest объект.

 runtests(vbt)
ans=1×11 table
    PortfolioID         VaRID         VaRLevel     TL       Bin       POF       TUFF       CC       CCI       TBF       TBFI 
    ___________    _______________    ________    _____    ______    ______    ______    ______    ______    ______    ______

       "S&P"       "Normal at 95%"      0.95      green    accept    accept    accept    accept    accept    reject    reject

Создать varbacktest объект, имеющий несколько идентификаторов VaR с различными уровнями достоверности.

load VaRBacktestData
    vbt = varbacktest(EquityIndex,...
       [Normal95 Normal99 Historical95 Historical99 EWMA95 EWMA99],...
       'PortfolioID','Equity',...
       'VaRID',{'Normal95' 'Normal99' 'Historical95' 'Historical99' 'EWMA95' 'EWMA99'},...
       'VaRLevel',[0.95 0.99 0.95 0.99 0.95 0.99]);

Выполнение сводного отчета для varbacktest объект.

 summary(vbt)
ans=6×10 table
    PortfolioID        VaRID         VaRLevel    ObservedLevel    Observations    Failures    Expected    Ratio     FirstFailure    Missing
    ___________    ______________    ________    _____________    ____________    ________    ________    ______    ____________    _______

     "Equity"      "Normal95"          0.95         0.94535           1043           57        52.15       1.093         58            0   
     "Equity"      "Normal99"          0.99          0.9837           1043           17        10.43      1.6299        173            0   
     "Equity"      "Historical95"      0.95         0.94343           1043           59        52.15      1.1314         55            0   
     "Equity"      "Historical99"      0.99         0.98849           1043           12        10.43      1.1505        173            0   
     "Equity"      "EWMA95"            0.95         0.94343           1043           59        52.15      1.1314         28            0   
     "Equity"      "EWMA99"            0.99         0.97891           1043           22        10.43      2.1093        143            0   

Запустить все тесты с помощью varbacktest объект.

 runtests(vbt)
ans=6×11 table
    PortfolioID        VaRID         VaRLevel      TL       Bin       POF       TUFF       CC       CCI       TBF       TBFI 
    ___________    ______________    ________    ______    ______    ______    ______    ______    ______    ______    ______

     "Equity"      "Normal95"          0.95      green     accept    accept    accept    accept    accept    reject    reject
     "Equity"      "Normal99"          0.99      yellow    reject    accept    accept    accept    accept    accept    accept
     "Equity"      "Historical95"      0.95      green     accept    accept    accept    accept    accept    reject    reject
     "Equity"      "Historical99"      0.99      green     accept    accept    accept    accept    accept    accept    accept
     "Equity"      "EWMA95"            0.95      green     accept    accept    accept    accept    accept    accept    accept
     "Equity"      "EWMA99"            0.99      yellow    reject    reject    accept    reject    accept    reject    accept

Запустите тест светофора (tl) с использованием varbacktest объект.

 tl(vbt)
ans=6×9 table
    PortfolioID        VaRID         VaRLevel      TL      Probability      TypeI      Increase    Observations    Failures
    ___________    ______________    ________    ______    ___________    _________    ________    ____________    ________

     "Equity"      "Normal95"          0.95      green       0.77913        0.26396          0         1043           57   
     "Equity"      "Normal99"          0.99      yellow      0.97991        0.03686    0.26582         1043           17   
     "Equity"      "Historical95"      0.95      green       0.85155        0.18232          0         1043           59   
     "Equity"      "Historical99"      0.99      green       0.74996        0.35269          0         1043           12   
     "Equity"      "EWMA95"            0.95      green       0.85155        0.18232          0         1043           59   
     "Equity"      "EWMA99"            0.99      yellow      0.99952      0.0011122    0.43511         1043           22   

Использовать varbacktest с табличными входами и аргументами пары имя-значение для создания двух varbacktest и выполните сводный отчет с конкатенацией. varbacktest использует имена переменных во входных данных таблицы как PortfolioID и VaRID.

load VaRBacktestData
vbtE = varbacktest(DataTable(:,2),DataTable(:,3:4),'VaRLevel',[0.95 0.99]);
vbtD = varbacktest(DataTable(:,5),DataTable(:,6:7),'VaRLevel',[0.95 0.99]);
[summary(vbtE); summary(vbtD)]
ans=4×10 table
     PortfolioID           VaRID           VaRLevel    ObservedLevel    Observations    Failures    Expected     Ratio     FirstFailure    Missing
    _____________    __________________    ________    _____________    ____________    ________    ________    _______    ____________    _______

    "Equity"         "VaREquity95"           0.95         0.94343           1043           59        52.15       1.1314         28            0   
    "Equity"         "VaREquity99"           0.99         0.97891           1043           22        10.43       2.1093        143            0   
    "Derivatives"    "VaRDerivatives95"      0.95         0.95014           1043           52        52.15      0.99712          9            0   
    "Derivatives"    "VaRDerivatives99"      0.99         0.97028           1043           31        10.43       2.9722         28            0   

Выполните все тесты и объедините результаты.

[runtests(vbtE); runtests(vbtD)]
ans=4×11 table
     PortfolioID           VaRID           VaRLevel      TL       Bin       POF       TUFF       CC       CCI       TBF       TBFI 
    _____________    __________________    ________    ______    ______    ______    ______    ______    ______    ______    ______

    "Equity"         "VaREquity95"           0.95      green     accept    accept    accept    accept    accept    accept    accept
    "Equity"         "VaREquity99"           0.99      yellow    reject    reject    accept    reject    accept    reject    accept
    "Derivatives"    "VaRDerivatives95"      0.95      green     accept    accept    accept    accept    accept    reject    reject
    "Derivatives"    "VaRDerivatives99"      0.99      red       reject    reject    accept    reject    accept    reject    reject

Запустить pof тест и конкатенация результатов.

 [pof(vbtE); pof(vbtD)]
ans=4×9 table
     PortfolioID           VaRID           VaRLevel     POF      LRatioPOF     PValuePOF     Observations    Failures    TestLevel
    _____________    __________________    ________    ______    __________    __________    ____________    ________    _________

    "Equity"         "VaREquity95"           0.95      accept       0.91023       0.34005        1043           59         0.95   
    "Equity"         "VaREquity99"           0.99      reject        9.8298     0.0017171        1043           22         0.95   
    "Derivatives"    "VaRDerivatives95"      0.95      accept    0.00045457       0.98299        1043           52         0.95   
    "Derivatives"    "VaRDerivatives99"      0.99      reject        26.809    2.2457e-07        1043           31         0.95   

Ссылки

[1] Базельский комитет по банковскому надзору, надзорная структура для использования «бэктестинга» в сочетании с подходом внутренних моделей к требованиям к рыночному риску капитала. Январь 1996, https://www.bis.org/publ/bcbs22.htm.

[2] Кристофферсен, П. «Оценка прогнозов интервалов». Международный экономический обзор. Том 39, 1998, стр. 841-862.

[3] Cogneau, Ph. «Обратное тестирование ценности под угрозой: насколько хороша модель?» Интеллектуальный риск, PRMIA, июль 2015 г.

[4] Хаас, М. «Новые методы обратного тестирования». Финансовый инжиниринг, Исследовательский центр Цезарь, Бонн, 2001 год.

[5] Jorion, Ph. Руководство по управлению финансовыми рисками. 6-е издание. Уайли Финанс, 2011.

[6] Купец, П. «Методы проверки точности моделей управления рисками». Журнал производных. Том 3, 1995, стр. 73-84.

[7] Макнил, А., Фрей, Р. и Эмбрехтс, П. Количественное управление рисками. Princeton University Press, 2005.

[8] Ниппола, О. «Обратное тестирование моделей ценности и риска». Магистерская диссертация, Хельсинкская школа экономики, 2009 год.

Представлен в R2016b