Этот пример показывает ожидаемый недостаток (ES) backtesting рабочий процесс с помощью esbacktestbysim
объект. Тесты поддержаны в esbacktestbysim
объект требует как входные параметры не только тестовые данные (Portfolio
var
, и ES
данные), но также и информация о распределении протестированной модели.
esbacktestbysim
класс поддерживает пять тестов - условное выражение, безусловное, квантиль, которые основаны на Acerbi-Szekely (2014) и minBiasAbsolute и minBiasRelative, которые основаны на Acerbi-Szekely (2 017 ans 2019). Эти тесты используют дистрибутивные предположения, чтобы симулировать, возвращают сценарии, принимая, что дистрибутивные предположения правильны (нулевая гипотеза). Симулированные сценарии находят распределение типичных значений для тестовой статистики и значения тестов. esbacktestbysim
поддерживает нормальные и t распределения шкалы местоположения (с постоянным числом степеней свободы в тестовом окне).
Используйте ESBacktestBySimData.mat
файл, чтобы загрузить данные в рабочую область. Этот пример работает с Returns
числовой массив. Этот массив представляет акцию, возвращается. Соответствующие данные VaR и доверительные уровни VaR находятся в VaR
и VaRLevel
. Ожидаемые данные о недостатке содержатся в ES
.
load ESBacktestBySimData
Используйте plot
функция, чтобы визуализировать ES backtesting данные. Этот тип визуализации является общим первым шагом при выполнении ES backtesting анализ. Этот график отображает данные о возвратах против данные о ES и VaR.
VaRInd = 2; figure; plot(Dates,Returns,Dates,-VaR(:,VaRInd),Dates,-ES(:,VaRInd)) legend('Returns','VaR','ES') title(['Test Data, ' num2str(VaRLevel(VaRInd)*100) '% Confidence']) grid on
esbacktestbysim
объект.Создайте esbacktestbysim
объект с помощью esbacktestbysim
. Distribution
информация используется, чтобы симулировать, возвращается, чтобы оценить значение тестов. Симуляция, чтобы оценить значение запущена по умолчанию, когда вы создаете esbacktestbysim
объект. Поэтому результаты испытаний доступны, когда вы создаете объект. Можно установить дополнительный входной параметр пары "имя-значение" 'Simulate'
к false
чтобы избежать симуляции, в этом случае можно использовать simulate
функция прежде, чем запросить для результатов испытаний.
rng('default'); % for reproducibility IDs = ["t(dof) 95%","t(dof) 97.5%","t(dof) 99%"]; IDs = strrep(IDs,"dof",num2str(DoF)); ebts = esbacktestbysim(Returns,VaR,ES,Distribution,... 'DegreesOfFreedom',DoF,... 'Location',Mu,... 'Scale',Sigma,... 'PortfolioID',"S&P",... 'VaRID',IDs,... 'VaRLevel',VaRLevel); disp(ebts)
esbacktestbysim with properties: PortfolioData: [1966×1 double] VaRData: [1966×3 double] ESData: [1966×3 double] Distribution: [1×1 struct] PortfolioID: "S&P" VaRID: [1×3 string] VaRLevel: [1×3 double]
disp(ebts.Distribution) % distribution information stored in the 'Distribution' property
Name: "t" DegreesOfFreedom: 10 Location: 0 Scale: [1966×1 double]
Сводный отчет ES предоставляет информацию о серьезности нарушений, то есть, как большой потеря сравнивается с VaR в дни, когда VaR был нарушен. ObservedSeverity
(или наблюдаемое среднее отношение серьезности) столбец является отношением потери для VaR за дни, когда VaR нарушен. ExpectedSeverity
(или ожидаемое среднее отношение серьезности) столбец показывает среднее значение отношения ES к VaR в дни, когда VaR нарушен.
S = summary(ebts); disp(S)
PortfolioID VaRID VaRLevel ObservedLevel ExpectedSeverity ObservedSeverity Observations Failures Expected Ratio Missing ___________ _____________ ________ _____________ ________________ ________________ ____________ ________ ________ ______ _______ "S&P" "t(10) 95%" 0.95 0.94812 1.3288 1.4515 1966 102 98.3 1.0376 0 "S&P" "t(10) 97.5%" 0.975 0.97202 1.2652 1.4134 1966 55 49.15 1.119 0 "S&P" "t(10) 99%" 0.99 0.98627 1.2169 1.3947 1966 27 19.66 1.3733 0
Запустите все тесты и сгенерируйте отчет только относительно принятия или отклоните результаты.
t = runtests(ebts); disp(t)
PortfolioID VaRID VaRLevel Conditional Unconditional Quantile MinBiasAbsolute MinBiasRelative ___________ _____________ ________ ___________ _____________ ________ _______________ _______________ "S&P" "t(10) 95%" 0.95 reject accept reject accept reject "S&P" "t(10) 97.5%" 0.975 reject reject reject reject reject "S&P" "t(10) 99%" 0.99 reject reject reject reject reject
Запустите отдельный тест для условного теста (также известный как первый тест Acerbi-Szekely). Второй выход (s
) содержит симулированные тестовые значения статистической величины, принимая, что дистрибутивные предположения правильны. Каждая строка s
выведите совпадает с VaRID
в соответствующей строке t
вывод . Используйте эти симулированные статистические данные, чтобы определить значение тестов.
[t,s] = conditional(ebts); disp(t)
PortfolioID VaRID VaRLevel Conditional ConditionalOnly PValue TestStatistic CriticalValue VaRTest VaRTestResult VaRTestPValue Observations Scenarios TestLevel ___________ _____________ ________ ___________ _______________ ______ _____________ _____________ _______ _____________ _____________ ____________ _________ _________ "S&P" "t(10) 95%" 0.95 reject reject 0 -0.092302 -0.043941 "pof" accept 0.70347 1966 1000 0.95 "S&P" "t(10) 97.5%" 0.975 reject reject 0.001 -0.11714 -0.052575 "pof" accept 0.40682 1966 1000 0.95 "S&P" "t(10) 99%" 0.99 reject reject 0.003 -0.14608 -0.085433 "pof" accept 0.11536 1966 1000 0.95
whos s
Name Size Bytes Class Attributes s 3x1000 24000 double
Визуализируйте значение условного теста с помощью гистограмм, чтобы показать распределение типичных значений (результаты симуляции). В гистограммах звездочка показывает значение тестовой статистической величины, наблюдаемой для фактических возвратов. Это - визуализация автономного условного теста. Итоговый условный результат испытаний также зависит от предварительного VaR backtest, как показано в условном тесте выход.
NumVaRs = height(t); figure; for VaRInd = 1:NumVaRs subplot(NumVaRs,1,VaRInd) histogram(s(VaRInd,:)); hold on; plot(t.TestStatistic(VaRInd),0,'*'); hold off; Title = sprintf('Conditional: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd)); title(Title) end
Запустите отдельный тест для безусловного теста (также известный как второй тест Acerbi-Szekely).
[t,s] = unconditional(ebts); disp(t)
PortfolioID VaRID VaRLevel Unconditional PValue TestStatistic CriticalValue Observations Scenarios TestLevel ___________ _____________ ________ _____________ ______ _____________ _____________ ____________ _________ _________ "S&P" "t(10) 95%" 0.95 accept 0.093 -0.13342 -0.16252 1966 1000 0.95 "S&P" "t(10) 97.5%" 0.975 reject 0.031 -0.25011 -0.2268 1966 1000 0.95 "S&P" "t(10) 99%" 0.99 reject 0.008 -0.57396 -0.38264 1966 1000 0.95
Визуализируйте значение безусловного теста с помощью гистограмм, чтобы показать распределение типичных значений (результаты симуляции). В гистограммах звездочка показывает значение тестовой статистической величины, наблюдаемой для фактических возвратов.
NumVaRs = height(t); figure; for VaRInd = 1:NumVaRs subplot(NumVaRs,1,VaRInd) histogram(s(VaRInd,:)); hold on; plot(t.TestStatistic(VaRInd),0,'*'); hold off; Title = sprintf('Unconditional: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd)); title(Title) end
Запустите отдельный тест для теста квантиля (также известный как третий тест Acerbi-Szekely).
[t,s] = quantile(ebts); disp(t)
PortfolioID VaRID VaRLevel Quantile PValue TestStatistic CriticalValue Observations Scenarios TestLevel ___________ _____________ ________ ________ ______ _____________ _____________ ____________ _________ _________ "S&P" "t(10) 95%" 0.95 reject 0.002 -0.10602 -0.055798 1966 1000 0.95 "S&P" "t(10) 97.5%" 0.975 reject 0 -0.15697 -0.073513 1966 1000 0.95 "S&P" "t(10) 99%" 0.99 reject 0 -0.26561 -0.10117 1966 1000 0.95
Визуализируйте значение теста квантиля с помощью гистограмм, чтобы показать распределение типичных значений (результаты симуляции). В гистограммах звездочка показывает значение тестовой статистической величины, наблюдаемой для фактических возвратов.
NumVaRs = height(t); figure; for VaRInd = 1:NumVaRs subplot(NumVaRs,1,VaRInd) histogram(s(VaRInd,:)); hold on; plot(t.TestStatistic(VaRInd),0,'*'); hold off; Title = sprintf('Quantile: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd)); title(Title) end
Запустите отдельный тест для теста minBiasAbsolute.
[t,s] = minBiasAbsolute(ebts); disp(t)
PortfolioID VaRID VaRLevel MinBiasAbsolute PValue TestStatistic CriticalValue Observations Scenarios TestLevel ___________ _____________ ________ _______________ ______ _____________ _____________ ____________ _________ _________ "S&P" "t(10) 95%" 0.95 accept 0.062 -0.0014247 -0.0015578 1966 1000 0.95 "S&P" "t(10) 97.5%" 0.975 reject 0.029 -0.0026674 -0.0023251 1966 1000 0.95 "S&P" "t(10) 99%" 0.99 reject 0.005 -0.0060982 -0.0039004 1966 1000 0.95
Визуализируйте значение теста minBiasAbsolute с помощью гистограмм, чтобы показать распределение типичных значений (результаты симуляции). В гистограммах звездочка показывает значение тестовой статистической величины, наблюдаемой для фактических возвратов.
NumVaRs = height(t); figure; for VaRInd = 1:NumVaRs subplot(NumVaRs,1,VaRInd) histogram(s(VaRInd,:)); hold on; plot(t.TestStatistic(VaRInd),0,'*'); hold off; Title = sprintf('minBiasAbsolute: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd)); title(Title) end
Запустите отдельный тест для теста minBiasRelative.
[t,s] = minBiasRelative(ebts); disp(t)
PortfolioID VaRID VaRLevel MinBiasRelative PValue TestStatistic CriticalValue Observations Scenarios TestLevel ___________ _____________ ________ _______________ ______ _____________ _____________ ____________ _________ _________ "S&P" "t(10) 95%" 0.95 reject 0.003 -0.10509 -0.056072 1966 1000 0.95 "S&P" "t(10) 97.5%" 0.975 reject 0 -0.15603 -0.073324 1966 1000 0.95 "S&P" "t(10) 99%" 0.99 reject 0 -0.26716 -0.104 1966 1000 0.95
Визуализируйте значение теста minBiasRelative с помощью гистограмм, чтобы показать распределение типичных значений (результаты симуляции). В гистограммах звездочка показывает значение тестовой статистической величины, наблюдаемой для фактических возвратов.
NumVaRs = height(t); figure; for VaRInd = 1:NumVaRs subplot(NumVaRs,1,VaRInd) histogram(s(VaRInd,:)); hold on; plot(t.TestStatistic(VaRInd),0,'*'); hold off; Title = sprintf('minBiasRelative: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd)); title(Title) end
Запустите симуляцию снова с помощью 5 000 сценариев, чтобы сгенерировать новый набор результатов испытаний. Если начальными результатами испытаний для одного из тестов является граница, использование большей симуляции может помочь разъяснить результаты испытаний.
ebts = simulate(ebts,'NumScenarios',5000); t = unconditional(ebts); % new results for unconditional test disp(t)
PortfolioID VaRID VaRLevel Unconditional PValue TestStatistic CriticalValue Observations Scenarios TestLevel ___________ _____________ ________ _____________ ______ _____________ _____________ ____________ _________ _________ "S&P" "t(10) 95%" 0.95 accept 0.0984 -0.13342 -0.17216 1966 5000 0.95 "S&P" "t(10) 97.5%" 0.975 reject 0.0456 -0.25011 -0.24251 1966 5000 0.95 "S&P" "t(10) 99%" 0.99 reject 0.0104 -0.57396 -0.40089 1966 5000 0.95
conditional
| minBiasAbsolute
| minBiasRelative
| quantile
| runtests
| simulate
| summary
| unconditional