Этот пример показывает подверженный риску значения (VaR) backtesting рабочий процесс и использование инструментов VaR backtesting. Для более всестороннего примера VaR backtesting смотрите Value-at-Risk Estimation и Backtesting.
Используйте файл VaRBacktestData.mat
, чтобы загрузить данные VaR в рабочую область. Этот пример работает с EquityIndex
, Normal95
и числовыми массивами Normal99
. Эти массивы являются акцией, возвращается, и соответствующие данные VaR в 95% и 99% доверительных уровней производятся с нормальным распределением (подход ковариации отклонения). Смотрите Value-at-Risk Estimation и Backtesting для примера о том, как сгенерировать эти данные 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 backtesting. Этот тип визуализации является общим первым шагом при выполнении анализа VaR backtesting.
plot(Date,[EquityIndex -Normal95 -Normal99]) title('VaR Backtesting') xlabel('Date') ylabel('Returns') legend('Returns','VaR 95%','VaR 99%')
varbacktest
.Создайте объект varbacktest
для акции, возвращается и Вар в 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 backtests для различных портфелей или того же портфеля по различным окнам времени. Запустите тесты более чем два различных подокна исходного тестового окна.
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