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). The vbt объект имеет следующие свойства:

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

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

  • PortfolioID - Строка, содержащая PortfolioID

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

  • VaRLevel - 1-by- 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-by- 1 числовой массив, NumRows-by- 1 таблица, или NumRows-by- 1 timetable с числовым столбцом, содержащим данные о результатах портфеля. PortfolioData вход устанавливает свойство PortfolioData.

Примечание

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

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

Данные о значении риска (VaR), заданные с помощью NumRows-by- NumVaRs числовой массив, NumRows-by- NumVaRs таблица, или NumRows-by- 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' и вектор символов или строка. The PortfolioID аргумент пары "имя-значение" устанавливает свойство PortfolioID.

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

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

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

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

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

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

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

Свойства

расширить все

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

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

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

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

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

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

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

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

Уровень VaR, заданный как 1-by- 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] Базельский комитет по банковскому надзору, среда надзора за использованием 'Backtesting' в сочетании с внутренними моделями подхода к требованиям к рыночному риску. Январь 1996, https://www.bis.org/publ/bcbs22.htm.

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

[3] Cogneau, Ph. «Backtesting Value-At-Risk: Насколько хороша модель?» Интеллектуальный риск, PRMIA, июль 2015 г.

[4] Haas, M. «New Methods in Backtesting». Финансовая инженерия, Исследовательский центр Цезарь, Бонн, 2001 год.

[5] Jorion, Ph. Financial Risk Manager Handbook. 6-е издание. Wiley Finance, 2011.

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

[7] McNeil, A., Frey, R. and Embrechts, P. Quantitative Risk Management. Пресса Принстонского университета, 2005.

[8] Nieppola, O. «Backtesting Value-At-Risk Models». Магистерская диссертация, Хельсинкская школа экономики, 2009.

Введенный в R2016b