varbacktest

Создайте объект varbacktest запустить комплект подверженного риску значения (VaR) backtests

Описание

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

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

  2. Создайте объект varbacktest. Для получения дополнительной информации смотрите, Создают varbacktest.

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

  4. Используйте функцию runtests, чтобы запустить все тесты целиком.

  5. Для дополнительных тестовых деталей, запущенных следующие отдельные тесты:

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

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

    • pof — Пропорция отказов

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

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

    • cci — Условная независимость покрытия

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

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

    Для получения дополнительной информации смотрите рабочий процесс VaR Backtesting.

Создание

Синтаксис

vbt = varbacktest(PortfolioData,VaRData)
vbt = varbacktest(___,Name,Value)

Описание

пример

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

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

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

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

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

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

Примечание

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

  • Если существуют отсутствующие значения (NaN s) в данных для 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 расписание с числовым столбцом, содержащим данные по результатам портфеля. вход 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. По умолчанию доверительный уровень 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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

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

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

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

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

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

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

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

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

Свойства

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

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

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

Данные VaR для анализа VaR backtesting, заданного как 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) backtesting
binБиномиальный тест для подверженного риску значения (VaR) backtesting
pofПропорция отказов тестирует на подверженный риску значения (VaR) backtesting
tuffВремя до первого теста отказа для подверженного риску значения (VaR) backtesting
ccУсловное покрытие смешанный тест для подверженного риску значения (VaR) backtesting
cciУсловная независимость покрытия тестирует на подверженный риску значения (VaR) backtesting
tbfВремя между отказами смешанный тест для подверженного риску значения (VaR) backtesting
tbfiВремя между независимостью отказов тестирует на подверженный риску значения (VaR) backtesting
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) и все комбинации ID портфеля, VaR ID и уровня 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) и все комбинации ID портфеля, VaR ID и уровня 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] Кристофферсен, P. "Оценка Прогнозов Интервала". Международный Экономический Анализ. Издание 39, 1998, стр 841–862.

[3] Cogneau, Ph. “Подверженный риску значения Backtesting: Насколько Хороший Модель?" Интеллектуальный Риск, PRMIA, июль 2015.

[4] Хаас, M. "Новые методы в Backtesting". Финансовая разработка, научно-исследовательский центр Цезарь, Бонн, 2001.

[5] Jorion, ph финансовое руководство менеджера по рискам. 6-й выпуск. Финансы Вайли, 2011.

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

[7] Макнейл, A., Фрэй, R. и Embrechts, P. Количественное управление рисками. Издательство Принстонского университета, 2005.

[8] Nieppola, O. “Backtesting подверженные риску значения модели”. Магистерская диссертация, Хельсинская школа экономики, 2009.

Введенный в R2017b