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) создает varbacktest (vbt) объект с помощью данных по результатам портфеля и соответствующих данных о подверженном риску значения (VaR). vbt объект имеет следующие свойства:

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

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

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

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

  • VaRLevel1- 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. По умолчанию, 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)

Пользовательский ID для PortfolioData введите, заданный как разделенная запятой пара, состоящая из 'PortfolioID' и вектор символов или строка. 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 backtesting, заданного как NumRows- 1 числовой массив, содержащий копию данных о портфеле.

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

Данные VaR для анализа VaR backtesting, заданного как 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) 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

Для просмотра документации необходимо авторизоваться на сайте