Этот пример показывает рабочий процесс обратного тестирования (VaR) и использование инструментов обратного тестирования VaR. Более подробный пример обратного тестирования VaR см. в разделе Оценка ценности риска и обратное тестирование.
Используйте VaRBacktestData.mat
файл для загрузки данных VaR в рабочую область. Этот пример работает с EquityIndex
, Normal95
, и Normal99
числовые массивы. Эти массивы являются возвратами капитала, и соответствующие данные VaR на 95% и 99% доверительных уровнях получаются с нормальным распределением (дисперсионно-ковариационный подход). Пример генерации данных VaR см. в разделе Оценка ценности риска и обратное тестирование.
load('VaRBacktestData')
disp([EquityIndex(1:5) Normal95(1:5) Normal99(1:5)])
-0.0043 0.0196 0.0277 -0.0036 0.0195 0.0276 -0.0000 0.0195 0.0275 0.0298 0.0194 0.0275 0.0023 0.0197 0.0278
В первом столбце показаны три потери за первые три дня, но ни один из этих потерь не превышает соответствующий VaR (столбцы 2 и 3). Модель VaR прекращает работать каждый раз, когда потеря (отрицание возвратов) превышает VaR.
Используйте plot
функция для визуализации данных обратного тестирования VaR. Этот тип визуализации является общим первым шагом при выполнении обратного тестирования VaR.
plot(Date,[EquityIndex -Normal95 -Normal99]) title('VaR Backtesting') xlabel('Date') ylabel('Returns') legend('Returns','VaR 95%','VaR 99%')
varbacktest
объект.Создайте varbacktest
объект для возвратов и VaRs на 95% и 99% доверительных уровней.
vbt = varbacktest(EquityIndex,[Normal95 Normal99],... 'PortfolioID','S&P', ... 'VaRID',{'Normal95' 'Normal99'}, ... 'VaRLevel',[0.95 0.99]); disp(vbt)
varbacktest with properties: PortfolioData: [1043x1 double] VaRData: [1043x2 double] PortfolioID: "S&P" VaRID: ["Normal95" "Normal99"] VaRLevel: [0.9500 0.9900]
Используйте summary
функция для получения сводных данных по количеству наблюдений, количеству отказов и другим простым метрикам.
summary(vbt)
ans=2×10 table
PortfolioID VaRID VaRLevel ObservedLevel Observations Failures Expected Ratio FirstFailure Missing
___________ __________ ________ _____________ ____________ ________ ________ ______ ____________ _______
"S&P" "Normal95" 0.95 0.94535 1043 57 52.15 1.093 58 0
"S&P" "Normal99" 0.99 0.9837 1043 17 10.43 1.6299 173 0
Используйте runtests
функция для отображения окончательных результатов тестирования сразу.
runtests(vbt)
ans=2×11 table
PortfolioID VaRID VaRLevel TL Bin POF TUFF CC CCI TBF TBFI
___________ __________ ________ ______ ______ ______ ______ ______ ______ ______ ______
"S&P" "Normal95" 0.95 green accept accept accept accept accept reject reject
"S&P" "Normal99" 0.99 yellow reject accept accept accept accept accept accept
После выполнения всех тестов можно исследовать детали конкретных тестов. Для примера используйте tl
функция для запуска теста светофора.
tl(vbt)
ans=2×9 table
PortfolioID VaRID VaRLevel TL Probability TypeI Increase Observations Failures
___________ __________ ________ ______ ___________ _______ ________ ____________ ________
"S&P" "Normal95" 0.95 green 0.77913 0.26396 0 1043 57
"S&P" "Normal99" 0.99 yellow 0.97991 0.03686 0.26582 1043 17
Можно создать бэктесты VaR для различных портфелей или одного и того же портфеля в разные временные окна. Запустите тесты по двум различным подокнам исходного тестового окна.
Ind1 = year(Date)<=2000; Ind2 = year(Date)>2000; vbt1 = varbacktest(EquityIndex(Ind1),[Normal95(Ind1,:) Normal99(Ind1,:)],... 'PortfolioID','S&P, 1999-2000',... 'VaRID',{'Normal95' 'Normal99'},... 'VaRLevel',[0.95 0.99]); vbt2 = varbacktest(EquityIndex(Ind2),[Normal95(Ind2,:) Normal99(Ind2,:)],... 'PortfolioID','S&P, 2001-2002',... 'VaRID',{'Normal95' 'Normal99'},... 'VaRLevel',[0.95 0.99]);
Используйте summary
функция для отображения сводных данных для обоих портфелей.
Summary = [summary(vbt1); summary(vbt2)]; disp(Summary)
PortfolioID VaRID VaRLevel ObservedLevel Observations Failures Expected Ratio FirstFailure Missing ________________ __________ ________ _____________ ____________ ________ ________ ______ ____________ _______ "S&P, 1999-2000" "Normal95" 0.95 0.94626 521 28 26.05 1.0749 58 0 "S&P, 1999-2000" "Normal99" 0.99 0.98464 521 8 5.21 1.5355 173 0 "S&P, 2001-2002" "Normal95" 0.95 0.94444 522 29 26.1 1.1111 35 0 "S&P, 2001-2002" "Normal99" 0.99 0.98276 522 9 5.22 1.7241 45 0
Используйте runtests
функция для отображения конечного результата тестирования для обоих портфелей.
Results = [runtests(vbt1);runtests(vbt2)]; disp(Results)
PortfolioID VaRID VaRLevel TL Bin POF TUFF CC CCI TBF TBFI ________________ __________ ________ ______ ______ ______ ______ ______ ______ ______ ______ "S&P, 1999-2000" "Normal95" 0.95 green accept accept accept accept accept reject reject "S&P, 1999-2000" "Normal99" 0.99 green accept accept accept accept accept accept accept "S&P, 2001-2002" "Normal95" 0.95 green accept accept accept accept accept accept accept "S&P, 2001-2002" "Normal99" 0.99 yellow accept accept accept accept accept accept accept
bin
| cc
| cci
| pof
| runtests
| summary
| tbf
| tbfi
| tl
| tuff
| varbacktest