В этом примере показано, как выполнить оценку и backtesting моделей Expected Shortfall.
Подверженный риску значения (VaR) и Ожидаемый недостаток (ES) должны быть оценены вместе, потому что оценка ES зависит от оценки VaR. Используя исторические данные, этот пример оценивает VaR и ES по тестовому окну, с помощью исторических и параметрических подходов VaR. Параметрический VaR вычисляется под предположением о нормальных и t распределениях.
Этот пример запускает ES назад тесты, поддержанные в esbacktest
, esbacktestbysim
, и esbacktestbyde
функциональность, чтобы оценить производительность моделей ES в тестовом окне.
esbacktest
объект не запрашивает информации распределения. Как varbacktest
объект, esbacktest
возразите только берет тестовые данные в качестве входа. Входные параметры к esbacktest
включайте данные о портфеле, данные VaR и соответствующий уровень VaR, и также данные о ES, поскольку это - то, что назад тестируется. Как varbacktest
, esbacktest
запускает тесты для одного портфеля, но может поддержать тестовые многоуровневые модели и несколько уровней VaR целиком. esbacktest
возразите использованию предварительно вычисленные таблицы критических значений, чтобы определить, должны ли модели быть отклонены. Эти основанные на таблице тесты могут быть применены как аппроксимированные тесты для любой модели VaR. В этом примере они применяются к историческим и параметрическим моделям VaR теста спины. Они могли использоваться в других подходах VaR, таких как модели Monte-Carlo или Extreme-Value.
В отличие от этого esbacktestbysim
и esbacktestbyde
объекты запрашивают информацию распределения, а именно, имя распределения (normal
или t) и параметры распределения в течение каждого дня в тестовом окне. esbacktestbysim
и esbacktestbyde
может только поддержать тест одна модель за один раз, потому что они соединяются с конкретным распределением, несмотря на то, что можно все еще отступить, тестируют несколько уровней VaR целиком. esbacktestbysim
возразите реализует основанные на симуляции тесты, и это использует предоставленную информацию о распределении, чтобы запустить симуляции, чтобы определить критические значения. esbacktestbyde
возразите тестам реализаций, где критические значения получены или на приближение большой выборки или на симуляцию (конечная выборка). conditionalDE
протестируйте в esbacktestbyde
возразите тестам для независимости в зависимости от времени, чтобы оценить, если существует доказательство автокорреляции в серии потерь хвоста. Все другие тесты являются тестами серьезности, чтобы оценить, если величина потерь хвоста сопоставима с прогнозами модели. Оба esbacktestbysim
и esbacktestbyde
объекты поддерживают нормальные и t распределения. Эти тесты могут использоваться в любой модели, где базовое распределение результатов портфеля нормально или t, таково как экспоненциально взвешенное скользящее среднее значение (EWMA), гамма дельты, или обобщило авторегрессивное условное выражение heteroskedasticity модели (GARCH).
Для получения дополнительной информации о ES backtesting методология, смотрите esbacktest
, esbacktestbysim
, и esbacktestbyde
, также см. [1] и [3] в Ссылках.
Набор данных, используемый в этом примере, содержит исторические данные для индекса S&P, охватывающего приблизительно 10 лет с середины 1 993 в течение середины 2 003. Размер окна оценки задан как 250 дней, так, чтобы целый год данных использовался, чтобы оценить и исторический VaR и энергозависимость. Тестовое окно в этом примере запускается с начала 1 995 через конец 2 002.
В этом примере доверительный уровень VaR 97,5% используется, как требуется Основным Анализом Торговой Книги (FRTB) регулирование; см. [2].
load VaRExampleData.mat Returns = tick2ret(sp); DateReturns = dates(2:end); SampleSize = length(Returns); TestWindowStart = find(year(DateReturns)==1995,1); TestWindowEnd = find(year(DateReturns)==2002,1,'last'); TestWindow = TestWindowStart:TestWindowEnd; EstimationWindowSize = 250; DatesTest = DateReturns(TestWindow); ReturnsTest = Returns(TestWindow); VaRLevel = 0.975;
Исторический VaR является непараметрическим подходом, чтобы оценить VaR и ES от исторических данных по окну оценки. VaR является процентилью, и существуют альтернативные способы оценить процентиль распределения на основе конечной выборки. Один общий подход должен использовать prctile
функция. Альтернативный подход должен отсортировать данные и определить точку разделения на основе доверительного уровня VaR и объема выборки. Точно так же существуют альтернативные подходы, чтобы оценить ES на основе конечной выборки.
hHistoricalVaRES
локальная функция на нижней части этого примера использует конечно-демонстрационный подход в оценке VaR и ES после методологии, описанной в [5]. В конечной выборке количество наблюдений ниже VaR не может совпадать с общей вероятностью хвоста, соответствующей уровню VaR. Например, для 100 наблюдений и уровня VaR 97,5%, наблюдения хвоста равняются 2, который составляет 2% выборки, однако желаемая вероятность хвоста составляет 2,5%. Это могло быть еще хуже для выборок с повторными наблюдаемыми величинами, например, если бы вторые и третьи отсортированные значения были тем же самым, оба равняются VaR, то только самая маленькая наблюдаемая величина в выборке имела бы значение меньше, чем VaR, и это составляет 1% выборки, не желаемые 2,5%. Метод реализован в hHistoricalVaRES
делает коррекцию так, чтобы вероятность хвоста была всегда сопоставима с уровнем VaR; см. [5] для деталей.
VaR_Hist = zeros(length(TestWindow),1); ES_Hist = zeros(length(TestWindow),1); for t = TestWindow i = t - TestWindowStart + 1; EstimationWindow = t-EstimationWindowSize:t-1; [VaR_Hist(i),ES_Hist(i)] = hHistoricalVaRES(Returns(EstimationWindow),VaRLevel); end
Следующий график показывает, что ежедневная газета возвращается, и VaR и ES, оцененный с историческим методом.
figure; plot(DatesTest,ReturnsTest,DatesTest,-VaR_Hist,DatesTest,-ES_Hist) legend('Returns','VaR','ES','Location','southeast') title('Historical VaR and ES') grid on
Для параметрических моделей должна быть вычислена энергозависимость возвратов. Учитывая энергозависимость, VaR и ES могут быть вычислены аналитически.
Нулевое среднее значение принято в этом примере, но может быть оценено похожим способом.
Для нормального распределения предполагаемая энергозависимость используется непосредственно, чтобы получить VaR и ES. Для t распределения шкалы местоположения масштабный коэффициент вычисляется из предполагаемой энергозависимости и степеней свободы.
hNormalVaRES
и hTVaRES
локальные функции берут в качестве входных параметров параметры распределения (который может быть передан как массивы), и возвратите VaR и ES. Эти локальные функции используют аналитические выражения в VaR и ES для нормальных и t распределений шкалы местоположения, соответственно; см. [4] для деталей.
% Estimate volatility over the test window Volatility = zeros(length(TestWindow),1); for t = TestWindow i = t - TestWindowStart + 1; EstimationWindow = t-EstimationWindowSize:t-1; Volatility(i) = std(Returns(EstimationWindow)); end % Mu=0 in this example Mu = 0; % Sigma (standard deviation parameter) for normal distribution = Volatility SigmaNormal = Volatility; % Sigma (scale parameter) for t distribution = Volatility * sqrt((DoF-2)/DoF) SigmaT10 = Volatility*sqrt((10-2)/10); SigmaT5 = Volatility*sqrt((5-2)/5); % Estimate VaR and ES, normal [VaR_Normal,ES_Normal] = hNormalVaRES(Mu,SigmaNormal,VaRLevel); % Estimate VaR and ES, t with 10 and 5 degrees of freedom [VaR_T10,ES_T10] = hTVaRES(10,Mu,SigmaT10,VaRLevel); [VaR_T5,ES_T5] = hTVaRES(5,Mu,SigmaT5,VaRLevel);
Следующий график показывает, что ежедневная газета возвращается, и VaR и ES, оцененный с нормальным методом.
figure; plot(DatesTest,ReturnsTest,DatesTest,-VaR_Normal,DatesTest,-ES_Normal) legend('Returns','VaR','ES','Location','southeast') title('Normal VaR and ES') grid on
Для параметрического подхода те же шаги могут использоваться, чтобы оценить VaR и ES для альтернативных подходов, таких как EWMA, приближения гаммы дельты и модели GARCH. Во всех этих параметрических подходах энергозависимость оценивается каждый день, или от обновления EWMA, от приближения гаммы дельты, или как условная энергозависимость модели GARCH. Энергозависимость может затем использоваться как выше, чтобы получить VaR и оценки ES или для нормальных или для t распределений шкалы местоположения.
esbacktest
возразите предлагает два задних теста для моделей ES. Оба теста используют безусловную тестовую статистическую величину, предложенную Acerbi и Szekely в [1], данный
где
количество периодов времени в тестовом окне.
результат портфеля, то есть, портфель возвращаются или прибыль портфеля и потеря в течение периода t.
вероятность отказа VaR, заданного как уровень с 1 var.
предполагаемый ожидаемый недостаток в течение периода t.
индикатор отказа VaR на периоде t со значением 1 если , и 0 в противном случае.
Ожидаемое значение для этой тестовой статистической величины 0, и это отрицательно, когда существует доказательство недооценки риска. Чтобы определить, насколько отрицательный это должно быть должно отклонить модель, критические значения необходимы, и определить критические значения, дистрибутивные предположения необходимы для результатов портфеля .
Безусловная тестовая статистическая величина оказывается устойчивой через область значений дистрибутивных предположений для , от распределений с тонким хвостом такой столь же нормальный, к распределениям с тяжелым хвостом, таким как t с низкими степенями свободы (высоко одна цифры). Только большинство t распределений с тяжелым хвостом (низко одна цифры) приводит к более заметным различиям в критических значениях. См. [1] для деталей.
esbacktest
объект использует в своих интересах устойчивость критических значений безусловной тестовой статистической величины и использует таблицы предварительно вычисленных критических значений, чтобы запустить ES назад тесты. esbacktest
имеет два набора таблиц критического значения. Первый набор критических значений принимает что результаты портфеля следуйте за стандартным нормальным распределением; это - unconditionalNormal
тест. Второй набор критических значений использует самые тяжелые хвосты, он принимает что результаты портфеля следуйте за t распределением с 3 степенями свободы; это - unconditionalT
тест.
Безусловная тестовая статистическая величина чувствительна и к серьезности отказов VaR относительно оценки ES, и к также к количеству отказов VaR (сколько раз VaR нарушен). Поэтому один, но очень большой отказ VaR относительно ES (или только очень немного больших потерь) может вызвать отклонение модели в окне определенного времени. Большая потеря в день, когда оценка ES является также большой, не может повлиять на результаты испытаний так же как большая потеря, когда ES меньше. И модель может также быть отклонена в периоды со многими отказами VaR, даже если все нарушения VaR относительно малы и незначительно выше, чем VaR. Обе ситуации проиллюстрированы в этом примере.
esbacktest
возразите берет в качестве входа тестовые данные, но никакая информация о распределении не предоставляется esbacktest
. Опционально, можно задать ID для портфеля, и для каждой из моделей VaR и ES, являющихся backtested. Несмотря на то, что ID модели в этом примере действительно имеет ссылки распределения (например, "normal"
или "t 10"
), это только метки, используемые в создании отчетов о целях. Тесты не используют то, что первая модель является историческим методом VaR, или что другие модели являются альтернативными параметрическими моделями VaR. Параметры распределения, используемые, чтобы оценить VaR и ES в предыдущем разделе, не передаются esbacktest
, и не используются ни в каком случае в этом разделе. Эти параметры, однако, должны быть обеспечены для основанных на симуляции тестов, поддержанных в esbacktestbysim
объект, обсужденный в разделе Simulation-Based Tests, и для тестов, поддержан в esbacktestbyde
объект обсужден в разделе Large-Sample и Simulation Tests.
ebt = esbacktest(ReturnsTest,[VaR_Hist VaR_Normal VaR_T10 VaR_T5],... [ES_Hist ES_Normal ES_T10 ES_T5],'PortfolioID',"S&P, 1995-2002",... 'VaRID',["Historical" "Normal","T 10","T 5"],'VaRLevel',VaRLevel); disp(ebt)
esbacktest with properties: PortfolioData: [2087x1 double] VaRData: [2087x4 double] ESData: [2087x4 double] PortfolioID: "S&P, 1995-2002" VaRID: ["Historical" "Normal" "T 10" "T 5"] VaRLevel: [0.9750 0.9750 0.9750 0.9750]
Запустите анализ путем выполнения summary
функция.
s = summary(ebt); disp(s)
PortfolioID VaRID VaRLevel ObservedLevel ExpectedSeverity ObservedSeverity Observations Failures Expected Ratio Missing ________________ ____________ ________ _____________ ________________ ________________ ____________ ________ ________ ______ _______ "S&P, 1995-2002" "Historical" 0.975 0.96694 1.3711 1.4039 2087 69 52.175 1.3225 0 "S&P, 1995-2002" "Normal" 0.975 0.97077 1.1928 1.416 2087 61 52.175 1.1691 0 "S&P, 1995-2002" "T 10" 0.975 0.97173 1.2652 1.4063 2087 59 52.175 1.1308 0 "S&P, 1995-2002" "T 5" 0.975 0.97173 1.37 1.4075 2087 59 52.175 1.1308 0
ObservedSeverity
столбец показывает среднее отношение потери для VaR на периодах, когда VaR был нарушен. ExpectedSeverity
столбец использует среднее отношение ES к VaR в течение периодов нарушения VaR. Для "Historical"
и "T 5"
модели, наблюдаемое и ожидаемое строгое обращение сопоставимо. Однако для "Historical"
метод, наблюдаемое количество отказов (Failures
столбец), значительно выше, чем ожидаемое количество отказов (Expected
столбец), приблизительно на 32% выше (см. Ratio
столбец). Оба "Normal"
и the "T 10"
модели наблюдали строгое обращение намного выше, чем ожидаемое строгое обращение.
figure; subplot(2,1,1) bar(categorical(s.VaRID),[s.ExpectedSeverity,s.ObservedSeverity]) ylim([1 1.5]) legend('Expected','Observed','Location','southeast') title('Average Severity Ratio') subplot(2,1,2) bar(categorical(s.VaRID),[s.Expected,s.Failures]) ylim([40 70]) legend('Expected','Observed','Location','southeast') title('Number of VaR Failures')
runtests
функция запускает все тесты и сообщает только о принятии или результате отклонения. Безусловный нормальный тест более строг. Для 8-летнего тестового окна здесь, две модели проваливают оба теста ("Historical"
и "Normal"
), одна модель проваливает безусловный нормальный тест, но проходит безусловный t тест ("T 10"
), и одна модель проходит оба теста ("T 5"
).
t = runtests(ebt); disp(t)
PortfolioID VaRID VaRLevel UnconditionalNormal UnconditionalT ________________ ____________ ________ ___________________ ______________ "S&P, 1995-2002" "Historical" 0.975 reject reject "S&P, 1995-2002" "Normal" 0.975 reject reject "S&P, 1995-2002" "T 10" 0.975 reject accept "S&P, 1995-2002" "T 5" 0.975 accept accept
Дополнительные детали о тестах могут быть получены путем вызывания отдельных тестовых функций. Вот детали для unconditionalNormal
тест.
t = unconditionalNormal(ebt); disp(t)
PortfolioID VaRID VaRLevel UnconditionalNormal PValue TestStatistic CriticalValue Observations TestLevel ________________ ____________ ________ ___________________ _________ _____________ _____________ ____________ _________ "S&P, 1995-2002" "Historical" 0.975 reject 0.0047612 -0.37917 -0.23338 2087 0.95 "S&P, 1995-2002" "Normal" 0.975 reject 0.0043287 -0.38798 -0.23338 2087 0.95 "S&P, 1995-2002" "T 10" 0.975 reject 0.037528 -0.2569 -0.23338 2087 0.95 "S&P, 1995-2002" "T 5" 0.975 accept 0.13069 -0.16179 -0.23338 2087 0.95
Вот детали для unconditionalT
тест.
t = unconditionalT(ebt); disp(t)
PortfolioID VaRID VaRLevel UnconditionalT PValue TestStatistic CriticalValue Observations TestLevel ________________ ____________ ________ ______________ ________ _____________ _____________ ____________ _________ "S&P, 1995-2002" "Historical" 0.975 reject 0.017032 -0.37917 -0.27415 2087 0.95 "S&P, 1995-2002" "Normal" 0.975 reject 0.015375 -0.38798 -0.27415 2087 0.95 "S&P, 1995-2002" "T 10" 0.975 accept 0.062835 -0.2569 -0.27415 2087 0.95 "S&P, 1995-2002" "T 5" 0.975 accept 0.16414 -0.16179 -0.27415 2087 0.95
Этот раздел показывает, как использовать esbacktest
возразите, чтобы запустить пользовательские тесты светофора, и также как запустить тесты по прокручивающимся тестовым окнам.
Один способ задать тест светофора путем объединения результатов безусловного нормального и безусловных тестов t. Поскольку безусловное нормальное более строго, можно задать тест светофора с этими уровнями:
Зеленый: модель проходит и безусловные нормальные и безусловные тесты t.
Желтый: модель проваливает безусловный нормальный тест, но проходит безусловный t тест.
Красный: модель отклоняется и безусловными нормальными и безусловными тестами t.
t = runtests(ebt); TLValue = (t.UnconditionalNormal=='reject')+(t.UnconditionalT=='reject'); t.TrafficLight = categorical(TLValue,0:2,{'green','yellow','red'},'Ordinal',true); disp(t)
PortfolioID VaRID VaRLevel UnconditionalNormal UnconditionalT TrafficLight ________________ ____________ ________ ___________________ ______________ ____________ "S&P, 1995-2002" "Historical" 0.975 reject reject red "S&P, 1995-2002" "Normal" 0.975 reject reject red "S&P, 1995-2002" "T 10" 0.975 reject accept yellow "S&P, 1995-2002" "T 5" 0.975 accept accept green
Альтернативный пользовательский тест светофора может использовать один тест, но на различных тестовых доверительных уровнях:
Зеленый: результат к 'accept
'с тестовым уровнем 95%.
Желтый: результат к 'reject'
на 95%-м тестовом уровне, но 'accept
'в 99%.
Красный: результатом является 'reject'
на 99%-м тестовом уровне.
Подобный тест предложен в [1] с высоким тестовым уровнем 99,99%.
t95 = runtests(ebt); % 95% is the default test level value t99 = runtests(ebt,'TestLevel',0.99); TLValue = (t95.UnconditionalNormal=='reject')+(t99.UnconditionalNormal=='reject'); tRolling = t95(:,1:3); tRolling.UnconditionalNormal95 = t95.UnconditionalNormal; tRolling.UnconditionalNormal99 = t99.UnconditionalNormal; tRolling.TrafficLight = categorical(TLValue,0:2,{'green','yellow','red'},'Ordinal',true); disp(tRolling)
PortfolioID VaRID VaRLevel UnconditionalNormal95 UnconditionalNormal99 TrafficLight ________________ ____________ ________ _____________________ _____________________ ____________ "S&P, 1995-2002" "Historical" 0.975 reject reject red "S&P, 1995-2002" "Normal" 0.975 reject reject red "S&P, 1995-2002" "T 10" 0.975 reject accept yellow "S&P, 1995-2002" "T 5" 0.975 accept accept green
Результаты испытаний могут отличаться по различным тестовым окнам. Здесь, окно прокрутки одного года используется, чтобы запустить ES назад тесты за восемь отдельных лет, заполненных исходным тестовым окном. Первый пользовательский светофор, описанный выше, добавляется к таблице результатов испытаний. summary
функция также вызвана в течение каждого отдельного года, чтобы просмотреть историю серьезности и количество отказов VaR.
sRolling = table; tRolling = table; for Year = 1995:2002 Ind = year(DatesTest)==Year; PortID = ['S&P, ' num2str(Year)]; PortfolioData = ReturnsTest(Ind); VaRData = [VaR_Hist(Ind) VaR_Normal(Ind) VaR_T10(Ind) VaR_T5(Ind)]; ESData = [ES_Hist(Ind) ES_Normal(Ind) ES_T10(Ind) ES_T5(Ind)]; ebt = esbacktest(PortfolioData,VaRData,ESData,... 'PortfolioID',PortID,'VaRID',["Historical" "Normal" "T 10" "T 5"],... 'VaRLevel',VaRLevel); if Year == 1995 sRolling = summary(ebt); tRolling = runtests(ebt); else sRolling = [sRolling;summary(ebt)]; tRolling = [tRolling;runtests(ebt)]; end end % Optional: Add the first user-defined traffic light test described above TLValue = (tRolling.UnconditionalNormal=='reject')+(tRolling.UnconditionalT=='reject'); tRolling.TrafficLight = categorical(TLValue,0:2,{'green','yellow','red'},'Ordinal',true);
Отобразите результаты, одна модель за один раз. "T 5"
модель имеет лучшую производительность в этих тестах (два "yellow"
), и "Normal"
смоделируйте худшее (три "red
"и один "yellow
").
disp(tRolling(tRolling.VaRID=="Historical",:))
PortfolioID VaRID VaRLevel UnconditionalNormal UnconditionalT TrafficLight ___________ ____________ ________ ___________________ ______________ ____________ "S&P, 1995" "Historical" 0.975 accept accept green "S&P, 1996" "Historical" 0.975 reject accept yellow "S&P, 1997" "Historical" 0.975 reject reject red "S&P, 1998" "Historical" 0.975 accept accept green "S&P, 1999" "Historical" 0.975 accept accept green "S&P, 2000" "Historical" 0.975 accept accept green "S&P, 2001" "Historical" 0.975 accept accept green "S&P, 2002" "Historical" 0.975 reject reject red
disp(tRolling(tRolling.VaRID=="Normal",:))
PortfolioID VaRID VaRLevel UnconditionalNormal UnconditionalT TrafficLight ___________ ________ ________ ___________________ ______________ ____________ "S&P, 1995" "Normal" 0.975 accept accept green "S&P, 1996" "Normal" 0.975 reject reject red "S&P, 1997" "Normal" 0.975 reject reject red "S&P, 1998" "Normal" 0.975 reject accept yellow "S&P, 1999" "Normal" 0.975 accept accept green "S&P, 2000" "Normal" 0.975 accept accept green "S&P, 2001" "Normal" 0.975 accept accept green "S&P, 2002" "Normal" 0.975 reject reject red
disp(tRolling(tRolling.VaRID=="T 10",:))
PortfolioID VaRID VaRLevel UnconditionalNormal UnconditionalT TrafficLight ___________ ______ ________ ___________________ ______________ ____________ "S&P, 1995" "T 10" 0.975 accept accept green "S&P, 1996" "T 10" 0.975 reject reject red "S&P, 1997" "T 10" 0.975 reject accept yellow "S&P, 1998" "T 10" 0.975 accept accept green "S&P, 1999" "T 10" 0.975 accept accept green "S&P, 2000" "T 10" 0.975 accept accept green "S&P, 2001" "T 10" 0.975 accept accept green "S&P, 2002" "T 10" 0.975 reject reject red
disp(tRolling(tRolling.VaRID=="T 5",:))
PortfolioID VaRID VaRLevel UnconditionalNormal UnconditionalT TrafficLight ___________ _____ ________ ___________________ ______________ ____________ "S&P, 1995" "T 5" 0.975 accept accept green "S&P, 1996" "T 5" 0.975 reject accept yellow "S&P, 1997" "T 5" 0.975 accept accept green "S&P, 1998" "T 5" 0.975 accept accept green "S&P, 1999" "T 5" 0.975 accept accept green "S&P, 2000" "T 5" 0.975 accept accept green "S&P, 2001" "T 5" 0.975 accept accept green "S&P, 2002" "T 5" 0.975 reject accept yellow
Год 2002 является примером года с относительно маленьким строгим обращением, все же многими отказами VaR. Все модели выполняют плохо в 2 002, даже при том, что наблюдаемое строгое обращение является низким. Однако количество отказов VaR для некоторых моделей является более двух раз ожидаемым количеством отказов VaR.
disp(summary(ebt))
PortfolioID VaRID VaRLevel ObservedLevel ExpectedSeverity ObservedSeverity Observations Failures Expected Ratio Missing ___________ ____________ ________ _____________ ________________ ________________ ____________ ________ ________ ______ _______ "S&P, 2002" "Historical" 0.975 0.94636 1.2022 1.2 261 14 6.525 2.1456 0 "S&P, 2002" "Normal" 0.975 0.94636 1.1928 1.2111 261 14 6.525 2.1456 0 "S&P, 2002" "T 10" 0.975 0.95019 1.2652 1.2066 261 13 6.525 1.9923 0 "S&P, 2002" "T 5" 0.975 0.95019 1.37 1.2077 261 13 6.525 1.9923 0
Следующий рисунок показывает данные по целому 8-летнему окну и отношение серьезности год за годом (ожидаемый и наблюдаемый) для "Historical"
модель. Абсолютный размер потерь не так важен как относительный размер по сравнению с ES (или эквивалентно, по сравнению с VaR). И 1997 и 1998 имеют большие потери, сопоставимые в величине. Однако ожидаемая серьезность в 1 998 намного выше (большие оценки ES). В целом, "Historical"
метод, кажется, преуспевает относительно отношений серьезности.
sH = sRolling(sRolling.VaRID=="Historical",:); figure; subplot(2,1,1) FailureInd = ReturnsTest<-VaR_Hist; plot(DatesTest,ReturnsTest,DatesTest,-VaR_Hist,DatesTest,-ES_Hist) hold on plot(DatesTest(FailureInd),ReturnsTest(FailureInd),'.') hold off legend('Returns','VaR','ES','Location','best') title('Historical VaR and ES') grid on subplot(2,1,2) bar(1995:2002,[sH.ExpectedSeverity,sH.ObservedSeverity]) ylim([1 1.8]) legend('Expected','Observed','Location','best') title('Yearly Average Severity Ratio, Historical VaR')
Однако подобная визуализация с ожидаемым против наблюдаемого количества отказов VaR показывает что "Historical"
метод имеет тенденцию быть нарушенным намного больше раз, чем ожидалось. Например, даже при том, что в 2 002 ожидаемое среднее отношение серьезности очень близко к наблюдаемому, количество отказов VaR было более двух раз ожидаемым номером. Это затем приводит к непройденным тестам и для безусловных нормальных и для безусловных тестов t.
figure; subplot(2,1,1) plot(DatesTest,ReturnsTest,DatesTest,-VaR_Hist,DatesTest,-ES_Hist) hold on plot(DatesTest(FailureInd),ReturnsTest(FailureInd),'.') hold off legend('Returns','VaR','ES','Location','best') title('Historical VaR and ES') grid on subplot(2,1,2) bar(1995:2002,[sH.Expected,sH.Failures]) legend('Expected','Observed','Location','best') title('Yearly VaR Failures, Historical VaR')
esbacktestbysim
поддержка объектов три основанных на симуляции ES назад тестирует. esbacktestbysim
запрашивает информацию распределения для результатов портфеля, а именно, имя распределения ("normal"
или "t"
) и параметры распределения в течение каждого дня в тестовом окне. esbacktestbysim
использует предоставленную информацию о распределении, чтобы запустить симуляции, чтобы определить критические значения. Тесты поддержаны в esbacktestbysim
conditional
, unconditional
, и quantile
. Это реализации тестов, предложенных Acerbi и Szekely в [1].
esbacktestbysim
поддержка объектов нормальные и t распределения. Эти тесты могут использоваться в любой модели, где базовое распределение результатов портфеля нормально или t, таково как экспоненциально взвешенное скользящее среднее значение (EWMA), гамма дельты, или обобщило авторегрессивное условное выражение heteroskedasticity модели (GARCH).
"Normal"
, "T 10"
, и "T 5"
модели могут быть backtested с основанными на симуляции тестами в esbacktestbysim
. В целях рисунка, только "T 5"
backtested. Имя распределения ("t"
) и параметры (степени свободы, местоположение и шкала) обеспечиваются когда esbacktestbysim
объект создается.
rng('default'); % for reproducibility; the esbacktestbysim constructor runs a simulation ebts = esbacktestbysim(ReturnsTest,VaR_T5,ES_T5,"t",'DegreesOfFreedom',5,... 'Location',Mu,'Scale',SigmaT5,... 'PortfolioID',"S&P",'VaRID',"T 5",'VaRLevel',VaRLevel);
Рекомендуемый рабочий процесс является тем же самым: во-первых, запустите summary
функция, затем запустите runtests
функция, и затем запускает отдельные тестовые функции. summary
функция предоставляет точно ту же информацию как summary
функция от esbacktest
.
s = summary(ebts); disp(s)
PortfolioID VaRID VaRLevel ObservedLevel ExpectedSeverity ObservedSeverity Observations Failures Expected Ratio Missing ___________ _____ ________ _____________ ________________ ________________ ____________ ________ ________ ______ _______ "S&P" "T 5" 0.975 0.97173 1.37 1.4075 2087 59 52.175 1.1308 0
runtests
функция показывает, что финал принимает или отклоняет результат.
t = runtests(ebts); disp(t)
PortfolioID VaRID VaRLevel Conditional Unconditional Quantile ___________ _____ ________ ___________ _____________ ________ "S&P" "T 5" 0.975 accept accept accept
Дополнительные детали о результатах испытаний получены путем вызывания отдельных тестовых функций.
[t,s] = conditional(ebts); disp(t)
PortfolioID VaRID VaRLevel Conditional ConditionalOnly PValue TestStatistic CriticalValue VaRTest VaRTestResult VaRTestPValue Observations Scenarios TestLevel ___________ _____ ________ ___________ _______________ ______ _____________ _____________ _______ _____________ _____________ ____________ _________ _________ "S&P" "T 5" 0.975 accept accept 0.243 -0.027397 -0.084492 "pof" accept 0.34844 2087 1000 0.95
Второй выход, s
, содержит симулированные тестовые значения статистической величины, принимающие, что дистрибутивные предположения правильны. Например, esbacktestbysim
сгенерированный 1 000 сценариев результатов портфеля в этом случае, где каждый сценарий является рядом 2 087 наблюдений, симулированных от t случайных переменных с 5 степенями свободы и данным местоположением и масштабными коэффициентами. Симулированные значения возвращены в дополнительном s
типичные значения выхода show тестовой статистической величины, если дистрибутивные предположения правильны. Это симулированная статистика, используемая, чтобы определить значение тестов, то есть, критических значений, о которых сообщают, и p-значений.
whos s
Name Size Bytes Class Attributes s 1x1000 8000 double
Следующая фигура является визуализацией значения тестов. Гистограмма показывает распределение симулированной тестовой статистики, и звездочка показывает, что значение тестовой статистической величины для фактического портфеля возвращается.
Для conditional
протестируйте, это - визуализация автономного условного теста (ConditionalOnly
приведите к приведенной выше таблице). Итоговый условный результат испытаний (Conditional
столбец), зависит также от предварительного VaR backtest (VaRTestResult
столбец).
figure; histogram(s); hold on; plot(t.TestStatistic,0,'*'); hold off; Title = sprintf('Conditional: %s, p-value: %4.3f',t.VaRID,t.PValue); title(Title)
Подобные тестовые детали и визуализация могут быть получены для других тестов. Это unconditional
результаты испытаний. О безусловной тестовой статистической величине сообщает esbacktestbysim
точно то же самое как безусловная тестовая статистическая величина, о которой сообщает esbacktest
. Однако критические значения, о которых сообщает esbacktestbysim
основаны на симуляции с помощью t распределения с 5 степенями свободы и данным местоположением и масштабными коэффициентами. esbacktest
объект дает аппроксимированные результаты испытаний для "T 5"
модель, тогда как результаты здесь специфичны для предоставленной информации о распределении.
[t,s] = unconditional(ebts); disp(t)
PortfolioID VaRID VaRLevel Unconditional PValue TestStatistic CriticalValue Observations Scenarios TestLevel ___________ _____ ________ _____________ ______ _____________ _____________ ____________ _________ _________ "S&P" "T 5" 0.975 accept 0.13 -0.16179 -0.24268 2087 1000 0.95
figure; histogram(s); hold on; plot(t.TestStatistic,0,'*'); hold off; Title = sprintf('Unconditional: %s, p-value: %4.3f',t.VaRID,t.PValue); title(Title)
Вот результаты для quantile
тест.
[t,s] = quantile(ebts); disp(t)
PortfolioID VaRID VaRLevel Quantile PValue TestStatistic CriticalValue Observations Scenarios TestLevel ___________ _____ ________ ________ ______ _____________ _____________ ____________ _________ _________ "S&P" "T 5" 0.975 accept 0.116 -0.067265 -0.095557 2087 1000 0.95
figure; histogram(s); hold on; plot(t.TestStatistic,0,'*'); hold off; Title = sprintf('Quantile: %s, p-value: %4.3f',t.VaRID,t.PValue); title(Title)
"T 5"
модель принята тремя тестами.
esbacktestbysim
объект обеспечивает simulate
функционируйте, чтобы запустить новую симуляцию. Например, если существует пограничный результат испытаний, где тестовая статистическая величина около критического значения, вы можете использовать simulate
функция, чтобы симулировать новые сценарии. В случаях, где больше точности требуется, может быть запущена большая симуляция.
esbacktestbysim
тесты могут быть запущены по прокручивающемуся окну, после того же подхода, описанного выше для esbacktest
. Пользовательские тесты светофора могут также быть заданы, например, с помощью двух различных тестовых доверительных уровней, похожих на то, что было сделано выше для esbacktest
.
esbacktestbyde
поддержка объектов два ES назад тестирует с критическими значениями, определенными или приближением большой выборки или симуляцией (конечная выборка). esbacktestbyde
запрашивает информацию распределения для результатов портфеля, а именно, имя распределения ("normal"
или "t"
) и параметры распределения в течение каждого дня в тестовом окне. Это не требует VaR данных о ES. esbacktestbyde
использует предоставленную информацию о распределении, чтобы сопоставить результаты портфеля в "ранги", то есть, применять кумулятивную функцию распределения, чтобы сопоставить возвращается в значения в единичном интервале, где тестовые статистические данные заданы. esbacktestbyde
может определить критические значения при помощи приближения большой выборки или конечно-демонстрационной симуляции.
Тесты поддержаны в esbacktestbyde
conditionalDE
и unconditionalDE
. Это реализации тестов, предложенных Du и Escanciano в [3]. unconditionalDE
тесты и все тесты, ранее обсужденные в этом примере, являются тестами серьезности, которые оценивают, если величина потерь хвоста сопоставима с прогнозами модели. conditionalDE
протестируйте, однако, тест для независимости в зависимости от времени, которые оценивают, если существует доказательство автокорреляции в серии потерь хвоста.
esbacktestbyde
поддержка объектов нормальные и t распределения. Эти тесты могут использоваться в любой модели, где базовое распределение результатов портфеля нормально или t, таково как экспоненциально взвешенное скользящее среднее значение (EWMA), гамма дельты, или обобщило авторегрессивное условное выражение heteroskedasticity модели (GARCH).
"Normal"
, "T 10"
, и "T 5"
модели могут быть backtested с тестами в esbacktestbyde
. В целях рисунка, только "T 5"
backtested. Имя распределения ("t"
) и параметры (DegreesOfFreedom
местоположение
, и Scale
) обеспечиваются когда esbacktestbyde
объект создается.
rng('default'); % for reproducibility; the esbacktestbyde constructor runs a simulation ebtde = esbacktestbyde(ReturnsTest,"t",'DegreesOfFreedom',5,... 'Location',Mu,'Scale',SigmaT5,... 'PortfolioID',"S&P",'VaRID',"T 5",'VaRLevel',VaRLevel);
Рекомендуемый рабочий процесс является тем же самым: во-первых, запустите summary
функция, затем запустите runtests
функция, и затем запускает отдельные тестовые функции. summary
функция предоставляет точно ту же информацию как summary
функция от esbacktest
.
s = summary(ebtde); disp(s)
PortfolioID VaRID VaRLevel ObservedLevel ExpectedSeverity ObservedSeverity Observations Failures Expected Ratio Missing ___________ _____ ________ _____________ ________________ ________________ ____________ ________ ________ ______ _______ "S&P" "T 5" 0.975 0.97173 1.37 1.4075 2087 59 52.175 1.1308 0
runtests
функция показывает, что финал принимает или отклоняет результат.
t = runtests(ebtde); disp(t)
PortfolioID VaRID VaRLevel ConditionalDE UnconditionalDE ___________ _____ ________ _____________ _______________ "S&P" "T 5" 0.975 reject accept
Дополнительные детали о результатах испытаний получены путем вызывания отдельных тестовых функций.
t = conditionalDE(ebtde); disp(t)
PortfolioID VaRID VaRLevel ConditionalDE PValue TestStatistic CriticalValue AutoCorrelation Observations CriticalValueMethod NumLags Scenarios TestLevel ___________ _____ ________ _____________ __________ _____________ _____________ _______________ ____________ ___________________ _______ _________ _________ "S&P" "T 5" 0.975 reject 0.00034769 12.794 3.8415 0.078297 2087 "large-sample" 1 NaN 0.95
По умолчанию критические значения определяются приближением большой выборки. Критические значения на основе конечно-демонстрационного распределения, оцененного при помощи симуляции, доступны при использовании 'CriticalValueMethod'
дополнительный аргумент пары "имя-значение".
[t,s] = conditionalDE(ebtde,'CriticalValueMethod','simulation'); disp(t)
PortfolioID VaRID VaRLevel ConditionalDE PValue TestStatistic CriticalValue AutoCorrelation Observations CriticalValueMethod NumLags Scenarios TestLevel ___________ _____ ________ _____________ ______ _____________ _____________ _______________ ____________ ___________________ _______ _________ _________ "S&P" "T 5" 0.975 reject 0.01 12.794 3.7961 0.078297 2087 "simulation" 1 1000 0.95
Второй выход, s
, содержит симулированные тестовые значения статистической величины. Следующая визуализация полезна для сравнения, как хорошо симулированное конечно-демонстрационное распределение совпадает с приближением большой выборки. График показывает, что хвост распределения тестовой статистики немного более тяжел для основанного на симуляции (конечно-демонстрационного) распределения. Это означает, что основанная на симуляции версия тестов более терпима и не отклонила бы в некоторых случаях, где приближение большой выборки заканчивается отклонение. Как тесно соответствие распределений большой выборки и симуляции зависит не только от количества наблюдений в тестовом окне, но также и на доверительном уровне VaR (более высокий вывод уровней VaR к более тяжелым хвостам в конечно-демонстрационном распределении).
xLS = 0:0.05:30; pdfLS = chi2pdf(xLS,t.NumLags); histogram(s,'Normalization',"pdf") hold on plot(xLS,pdfLS) hold off ylim([0 0.1]) legend({'Simulation','Large-Sample'}) Title = sprintf('Conditional Test Distribution\nVaR Level: %g%%, Sample Size = %d',VaRLevel*100,t.Observations); title(Title)
Подобные шаги могут использоваться, чтобы видеть детали о unconditionalDE
протестируйте, и сравнить большую выборку и основанные на симуляции результаты.
esbacktestbyde
объект обеспечивает simulate
функционируйте, чтобы запустить новую симуляцию. Например, если существует пограничный результат испытаний, где тестовая статистическая величина около критического значения, можно использовать simulate
функция, чтобы симулировать новые сценарии. Кроме того, по умолчанию симуляция хранит результаты максимум для 5 задержек для условного теста, поэтому если основанные на симуляции результаты для большего числа задержек необходимы, необходимо использовать simulate
функция.
Если тесты приближения большой выборки являются единственными тестами, в которых вы нуждаетесь, потому что они надежны для конкретного объема выборки и уровня VaR, можно выключить симуляцию при создании esbacktestbyde
объект при помощи 'Simulate'
дополнительный вход.
esbacktestbyde
тесты могут быть запущены по прокручивающемуся окну, после того же подхода, описанного выше для esbacktest
. Можно также задать тесты светофора, например, вы могли использовать два различных тестовых доверительных уровня, похожие на то, что было сделано выше для esbacktest
.
Контрастировать три ES backtesting объекты:
esbacktest
объект используется в широком спектре дистрибутивных предположений: исторический VaR, параметрический VaR, VaR Монте-Карло или модели экстремума. Однако esbacktest
предложения аппроксимируют результаты испытаний на основе двух изменений того же теста: безусловная тестовая статистическая величина с двумя различными наборами предварительно вычисленных критических значений (unconditionalNormal
и unconditionalT
).
esbacktestbysim
объект используется в параметрических методах с нормальными и t распределениями (который включает EWMA, GARCH и гамму дельты), и требует параметров распределения как входных параметров. esbacktestbysim
предложения три различных теста (conditional
, unconditional
, и quantile
) и критические значения для этих тестов симулированы с помощью информации о распределении, которую вы предоставляете, и поэтому, более точны.
esbacktestbyde
объект также используется в параметрических методах с нормальными и t распределениями (который включает EWMA, GARCH и гамму дельты), и требует параметров распределения как входных параметров. esbacktestbyde
содержит серьезность (unconditionalDE
) и независимость времени (conditionalDE
) тесты и это имеют удобство большой выборки, быструю версию тестов. conditionalDE
тест является единственным тестом для независимости в зависимости от времени для моделей ES среди всех тестов, поддержанных в этих трех классах.
Как показано в этом примере, все три ES backtesting объекты обеспечивают функциональность, чтобы сгенерировать отчеты относительно строгого обращения, отказов VaR и информации о результатах испытаний. Три ES backtest объекты обеспечивают гибкость, чтобы основываться на них. Например, можно создать пользовательские тесты светофора и запустить ES backtesting анализ по прокручивающимся окнам.
[1] Acerbi, C. и Б. Сзекели. "Бэктестинг ожидаемый недостаток". MSCI Inc., декабрь 2014.
[2] Базельский Комитет по Банковскому надзору. "Требования Минимального капитала для Риска Рынка". Январь 2016, https://www.bis.org/bcbs/publ/d352.htm
[3] Du, Z. и Х. К. Эскансиано. "Бэктестинг ожидаемый недостаток: составление риска хвоста". Наука управления. Vol 63, выпуск 4, апрель 2017.
[4] Макнейл, A., Р. Фрэй и П. Эмбречтс. Количественное управление рисками: Концепции, методы и инструменты. Издательство Принстонского университета. 2005.
[5] Rockafellar, R. T. и С. Урясев. "Условное выражение, Подверженное риску значения Общих Распределений Потерь". Журнал Банковского дела и Финансов. Издание 26, 2002, стр 1443-1471.
function [VaR,ES] = hHistoricalVaRES(Sample,VaRLevel) % Compute historical VaR and ES % See [5] for technical details % Convert to losses Sample = -Sample; N = length(Sample); k = ceil(N*VaRLevel); z = sort(Sample); VaR = z(k); if k < N ES = ((k - N*VaRLevel)*z(k) + sum(z(k+1:N)))/(N*(1 - VaRLevel)); else ES = z(k); end end function [VaR,ES] = hNormalVaRES(Mu,Sigma,VaRLevel) % Compute VaR and ES for normal distribution % See [4] for technical details VaR = -1*(Mu-Sigma*norminv(VaRLevel)); ES = -1*(Mu-Sigma*normpdf(norminv(VaRLevel))./(1-VaRLevel)); end function [VaR,ES] = hTVaRES(DoF,Mu,Sigma,VaRLevel) % Compute VaR and ES for t location-scale distribution % See [4] for technical details VaR = -1*(Mu-Sigma*tinv(VaRLevel,DoF)); ES_StandardT = (tpdf(tinv(VaRLevel,DoF),DoF).*(DoF+tinv(VaRLevel,DoF).^2)./((1-VaRLevel).*(DoF-1))); ES = -1*(Mu-Sigma*ES_StandardT); end