Вычисление кредитовых рисков из значений договора
[
вычисляет кредитные риски контрагента из массива значений внебиржевого контракта. Эти риски используются при вычислении CVA (корректировка кредитного значения) для портфеля. exposures
,exposurecpty
]
= creditexposures(values
,counterparties
)
[
добавляет необязательные аргументы имя-значение.exposures
,exposurecpty
]
= creditexposures(___,Name,Value
)
[
вычисляет кредитные риски контрагента из массива значений внебиржевых контрактов с маркой на рынок с помощью необязательных аргументов пары "имя-значение" для exposures
,exposurecpty
,collateral
]
= creditexposures(___,Name,Value
)CollateralTable
и Dates
, а collateral
выход возвращается для моделируемых сумм обеспечения, доступных контрагентам на каждую дату симуляции и по каждому сценарию.
После вычисления значений контракта между рынками для портфеля свопов по многим сценариям вычислите кредитный риск для конкретного контрагента. Просмотрите значения договора и кредитный риск с течением времени.
Во-первых, загрузите данные (ccr.mat
) содержащие значения контракта на продажу для портфеля свопов по многим сценариям.
load ccr.mat % Look at one counterparty. cpID = 4; cpValues = squeeze(sum(values(:,swaps.Counterparty == cpID,:),2)); subplot(2,1,1) plot(simulationDates,cpValues); title(sprintf('Mark-to-Market Contract Values for Counterparty: %d',cpID)); datetick('x','mmmyy') ylabel('Portfolio Value ($)') % Compute the exposure by counterparty. [exposures, expcpty] = creditexposures(values,swaps.Counterparty,... 'NettingID',swaps.NettingID); % View the credit exposure over time for the counterparty. subplot(2,1,2) cpIdx = find(expcpty == cpID); plot(simulationDates,squeeze(exposures(:,cpIdx,:))); title(sprintf('Exposure for counterparty: %d',cpIdx)); datetick('x','mmmyy') ylabel('Exposure ($)') xlabel('Simulation Dates')
Загрузите данные (ccr.mat
) содержащие значения контракта на продажу для портфеля свопов по многим сценариям.
load ccr.mat
Посмотрите на одного контрагента.
cpID = 4; cpIdx = swaps.Counterparty == cpID; cpValues = values(:,cpIdx,:); plot(simulationDates,squeeze(sum(cpValues,2))); grid on; title(sprintf('Potential Mark-to-Market Portfolio Values for Counterparty: %d',cpID)); datetick('x','mmmyy') ylabel('Portfolio Value ($)')
Вычислите воздействия.
netting = swaps.NettingID(cpIdx);
exposures = creditexposures(cpValues,cpID,'NettingID',netting);
Просмотрите кредитный риск с течением времени для контрагента.
figure; plot(simulationDates,squeeze(exposures)); grid on title(sprintf('Exposure for counterparty: %d',cpID)); datetick('x','mmmyy') ylabel('Exposure ($)') xlabel('Simulation Dates')
Вычислите профили кредитного риска.
profilesBefore = exposureprofiles(simulationDates,exposures)
profilesBefore = struct with fields:
Dates: [37x1 double]
EE: [37x1 double]
PFE: [37x1 double]
MPFE: 2.1580e+05
EffEE: [37x1 double]
EPE: 2.8602e+04
EffEPE: 4.9579e+04
Рассмотрим новую торговлю с контрагентом. В данном примере возьмите другую сделку из исходного портфеля свопов и «скопируйте» ее для нового контрагента. Этот пример предназначен только для иллюстративных целей.
newTradeIdx = 3; newTradeValues = values(:,newTradeIdx,:); % Append a new trade to your existing portfolio. cpValues = [cpValues newTradeValues]; netting = [netting; cpID]; exposures = creditexposures(cpValues,cpID,'NettingID',netting);
Вычислите новые профили кредитного риска.
profilesAfter = exposureprofiles(simulationDates,exposures)
profilesAfter = struct with fields:
Dates: [37x1 double]
EE: [37x1 double]
PFE: [37x1 double]
MPFE: 2.4689e+05
EffEE: [37x1 double]
EPE: 3.1609e+04
EffEPE: 5.6178e+04
Визуализация ожидаемого воздействия и постепенного воздействия новой торговли. Используйте инкрементный риск для вычисления платы за добавочный кредит значения корректировку (CVA).
figure; subplot(2,1,1) plot(simulationDates,profilesBefore.EE,... simulationDates,profilesAfter.EE); grid on; legend({'EE before','EE with trade'}) datetick('x','mmmyy','keeplimits') title('Expected Exposure before and after new trade'); ylabel('Exposure ($)') subplot(2,1,2) incrementalEE = profilesAfter.EE - profilesBefore.EE; plot(simulationDates,incrementalEE); grid on; legend('incremental EE') datetick('x','mmmyy','keeplimits') ylabel('Exposure ($)') xlabel('Simulation Dates')
Загрузите данные (ccr.mat
) содержащие значения контракта на продажу для портфеля свопов по многим сценариям.
load ccr.mat
Только один контрагент для этого примера.
cpID = 4; cpIdx = swaps.Counterparty == cpID; cpValues = values(:,cpIdx,:);
Вычислите неколлатерализованные воздействия.
exposures = creditexposures(cpValues,swaps.Counterparty(cpIdx),... 'NettingID',swaps.NettingID(cpIdx));
Просмотрите кредитный риск с течением времени для контрагента.
plot(simulationDates,squeeze(exposures)); expYLim = get(gca,'YLim'); title(sprintf('Exposures for Counterparty: %d',cpID)); datetick('x','mmmyy') ylabel('Exposure ($)') xlabel('Simulation Dates')
Добавьте договор обеспечения для контрагента. The 'CollateralTable'
параметром является таблица MATLAB ®. Можно создавать таблицы из электронных таблиц или других источников данных, в дополнение к созданию их в строке, как показано здесь. Для получения дополнительной информации см.
table
.
collateralVariables = {'Counterparty';'PeriodOfRisk';'Threshold';'MinimumTransfer'}; periodOfRisk = 14; threshold = 100000; minTransfer = 10000; collateralTable = table(cpID,periodOfRisk,threshold,minTransfer,... 'VariableNames',collateralVariables)
collateralTable=1×4 table
Counterparty PeriodOfRisk Threshold MinimumTransfer
____________ ____________ _________ _______________
4 14 1e+05 10000
Вычислите залоговые воздействия.
[collatExp, collatcpty, collateral] = creditexposures(cpValues,... swaps.Counterparty(cpIdx),'NettingID',swaps.NettingID(cpIdx),... 'CollateralTable',collateralTable,'Dates',simulationDates);
Постройте график уровней обеспечения и обеспеченных рисков.
figure; subplot(2,1,1) plot(simulationDates,squeeze(collateral)); set(gca,'YLim',expYLim); title(sprintf('Collateral for counterparty: %d',cpID)); datetick('x','mmmyy') ylabel('Collateral ($)') xlabel('Simulation Dates') subplot(2,1,2) plot(simulationDates,squeeze(collatExp)); set(gca,'YLim',expYLim); title(sprintf('Collateralized Exposure for Counterparty: %d',cpID)); datetick('x','mmmyy') ylabel('Exposure ($)') xlabel('Simulation Dates');
values
- трехмерный массив моделируемых марок к рыночным значениям портфеля контрактовТрехмерные массивы моделируемых значений на рынок портфеля контрактов, моделируемых в течение ряда дат симуляции и во многих сценариях, заданные как NumDates
-by- NumContracts
-by- NumScenarios
«куба» значений контракта. Каждая строка представляет разную дату моделирования, каждый столбец - разный контракт, и каждая «страница» является отличным сценарием от симуляции Монте-Карло.
Типы данных: double
counterparties
- контрагенты, соответствующие каждому договору;Контрагенты, соответствующие каждому контракту в values
, заданный как NumContracts
-элементный вектор контрагентов. Контрагенты могут быть вектором числовых идентификаторов или массивом ячеек с именами контрагентов. По умолчанию каждый контрагент считается имеющим один набор взаимозачетов, который покрывает все его контракты. Если контрагенты охвачены несколькими наборами взаимозачетов, используйте NettingID
параметр. Значение NaN
(или ''
в массиве ячеек) указывает, что контракт не включен ни в один набор взаимозачетов, если иное не задано NettingID
. counterparties
удаляют нечувствительные и ведущие или конечные белые пространства.
Типы данных: double
| cell
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
[exposures,exposurecpty] = creditexposures(values,counterparties,'NettingID','10','ExposureType','Additive')
'NettingID'
- Идентификаторы набора взаимозачета указывают, какой набор взаимозачета принадлежит каждому контракту.Идентификаторы набора взаимозачетов, для указания того, какие взаимозачеты устанавливают каждый контракт в values
принадлежит, задается как NumContracts
-элементный вектор идентификаторов наборов взаимозачетов. NettingID
может быть вектором числовых идентификаторов или массивом ячеек с идентификаторами векторов символов. The creditexposures
функция использует counterparties
и NettingID
для определения каждого уникального набора взаимозачетов (все контракты в наборе взаимозачета должны быть с одним и тем же контрагентом). По умолчанию каждый контрагент имеет один набор взаимозачетов, который охватывает все их контракты. Значение NaN
(или ''
в массиве ячеек) указывает, что контракт не включен ни в один набор взаимозачета. NettingID
удаляют нечувствительные и ведущие или конечные белые пространства.
Типы данных: double
| cell
'ExposureType'
- Метод вычисления воздействия'Counterparty'
(по умолчанию) | вектор со значением 'Counterparty'
или 'Additive'
Метод вычисления воздействия, заданный значениями:
'Counterparty'
- Вычисление воздействия на контрагента.
'Additive'
- Вычисление воздействия добавок на уровне контракта. Экспозиции рассчитываются по контракту и в сумме по общему риску контрагента.
Типы данных: char
'CollateralTable'
- Таблица, содержащая информацию о залоговых соглашениях контрагентовТаблица, содержащая информацию о залоговых соглашениях контрагентов, указанная в виде таблицы MATLAB. Таблица состоит из одной записи (строки) для каждого обеспеченного контрагента и должна иметь следующие переменные (столбцы):
'Counterparty'
- Имя контрагента или идентификатор. Имя или идентификатор контрагента должен совпадать с параметром 'Counterparty'
для ExposureType
аргумент.
'PeriodOfRisk'
- маржинальный период риска в днях. Количество дней с момента вызова маржи до тех пор, пока разнесенное обеспечение не будет доступно у контрагента.
'Threshold'
- Порог обеспечения. Когда риски контрагента превышают эту сумму, контрагент должен разместить обеспечение.
'MinimumTransfer'
- Минимальная сумма перевода. Минимальная сумма сверх/ниже порога, необходимого для передачи обеспечения.
Примечание
При вычислении залоговых воздействий оба CollateralTable
параметр и Dates
параметр должен быть задан.
Типы данных: table
'Dates'
- Даты симуляции, соответствующие каждой строке массива значенийДаты симуляции, соответствующие каждой строке values
массив, заданный как NUMDATES
-by- 1
вектор дат симуляции. Dates
является вектором с номерами дат MATLAB или массивом ячеек из векторов символов в известном формате дат. Посмотрите datenum
для известных форматов дат.
Примечание
При вычислении залоговых воздействий оба CollateralTable
параметр и Dates
параметр должен быть задан.
Типы данных: double
| cell
exposures
- трехмерный массив кредитных рисковТрехмерный массив кредитных рисков, представляющих потенциальные убытки от каждого контрагента или договора на каждую дату и по всем сценариям. Размер exposures
зависит от ExposureType
входной параметр:
Когда ExposureType
является 'Counterparty'
, exposures
возвращает NumDates
-by- NumCounterparties
-by- NumScenarios
«кубик» кредитных рисков, представляющих потенциальные убытки, которые могут быть понесены во всех датах, контрагентах и сценариях, если контрагент допустил дефолт (игнорируя любое восстановление после дефолта).
Когда ExposureType
является 'Additive'
, exposures
возвращает NumDates
-by- NumContracts
-by- NumScenarios
«cube», где каждый элемент является аддитивной экспозицией каждого контракта (по всем датам и сценариям). Сумма аддитивного воздействия на уровень контрагента.
exposurecpty
- контрагенты, которые соответствуют столбцам exposures
массивКонтрагенты, которые соответствуют столбцам exposures
массив, возвращенный как NumCounterparties
или NumContracts
элементы в зависимости от ExposureType
.
collateral
- Моделируемые суммы обеспечения, доступные контрагентам на каждую дату симуляции и по каждому сценариюМоделируемые суммы обеспечения, доступные контрагентам на каждую дату симуляции и по каждому сценарию, возвращенные как NumDates
-by- NumCounterparties
-by- NumScenarios
3D массив. Суммы обеспечения рассчитываются с помощью брауновского моста для оценки значений контракта между датами симуляции. Для получения дополнительной информации см. Brownian Bridge. Если на CollateralTable
не задан, этот выход пуст.
Брауновский мост используется для моделирования значений портфеля в промежуточные даты для вычисления обеспечения, доступного на последующие даты симуляции.
Для примера, чтобы оценить обеспеченность, доступную на конкретную дату симуляции, t i, необходимо знать состояние портфеля в момент t i - dt, где dt является периодом маржи риска. Значения портфеля моделируются в эти промежуточные даты путем извлечения из распределения, заданного Брауновским мостом между t i и предыдущей датой симуляции, t i–1.
Если договорные стоимости во время <reservedrangesplaceholder10> <reservedrangesplaceholder9> и <reservedrangesplaceholder8> <reservedrangesplaceholder7> известны, и Вы хотите оценить договорную стоимость во время <reservedrangesplaceholder6> <reservedrangesplaceholder5> (где <reservedrangesplaceholder4> <reservedrangesplaceholder3> - <reservedrangesplaceholder2> <reservedrangesplaceholder1> - dt), то выборка от нормального распределения используется с отклонением:
и со средним значением, которое является просто линейной интерполяцией значений контракта между двумя датами симуляции в момент времени t c. Для получения дополнительной информации см. раздел « Ссылки».
[1] Ломибао, Д., и С. Чжу. «Условный подход к оценке для зависящих от пути инструментов». Август 2005 года.
[2] Пыхтин М. «Моделирование кредитного риска для обеспеченных контрагентов». Декабрь 2009 года.
[3] Пыхтин М., и С. Чжу. «Руководство к моделированию контрагентского кредитного риска». ГАРП, июль/август 2007 года, выпуск 37.
[4] Пыхтин, Майкл, и Дэн Розен. «Ценообразование контрагентского риска на уровне торговли и распределение CVA». ФЕДС Работы Бумага № 10., 1 февраля 2010 года.
datenum
| exposureprofiles
| table
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.