Class SaCcrHaircuts
SaCcrHaircuts.Table.BASEL_II_2006 is
the June 2006 Basel II text (BCBS 128): the table of paragraph 151,
the 8% currency add-on of paragraph 152, and the square-root-of-time
scaling of paragraphs 168-169. SaCcrHaircuts.Table.CRE22 is the current
consolidated Basel Framework (December 2017 revision): the table of
CRE22.49 for jurisdictions that use external ratings, the same 8%
add-on in CRE22.52, and the same scaling in CRE22.56-59. Every value
below was checked against those texts (published reference).
The plain idea: collateral the bank holds may fall in value before it can be sold, so it counts for less than its market value; collateral the bank has posted may rise in value and be lost if the counterparty fails, so it counts for more. Formally, for market value X and haircut H (as a decimal),
held: C = X (1 - H - H_fx) posted: C = -X (1 + H + H_fx) H_N = H_10 sqrt(N / 10) for a holding period of N business days
Worked example (own hand computation): 1,000 of A-rated corporate bonds with 3 years to maturity, held, in a different currency, on a 10-day period: H = 6%, H_fx = 8%, C = 1,000 * 0.86 = 860. On a 20-day period both haircuts scale by sqrt(2): C = 1,000 (1 - 0.14 sqrt 2) = 802.0.
Table values (10-day, percent): sovereign debt AAA to AA- 0.5 / 2 / 4 for residual maturity up to 1y / 1y to 5y / over 5y, A+ to BBB- 1 / 3 / 6, BB+ to BB- 15; other issuers AAA to AA- 1 / 4 / 8, A+ to BBB- 2 / 6 / 12; main-index equities and gold 15; other listed equities 25; cash in the same currency 0 (BCBS 128 para 151).
CRE22.49 values (10-day, percent), buckets up to 1y / 1y to 3y / 3y to 5y / 5y to 10y / over 10y: sovereign AAA to AA- 0.5 / 2 / 2 / 4 / 4, A+ to BBB- 1 / 3 / 3 / 6 / 6, BB+ to BB- 15; other issuers AAA to AA- 1 / 3 / 4 / 6 / 12, A+ to BBB- 2 / 4 / 6 / 12 / 20, BB not eligible; main-index equities and gold 20; other listed equities 30; cash 0. Worked example (own hand computation): the same 1,000 of A-rated 3-year corporate bonds, held, different currency, 10 days, gives H = 4% under CRE22, so C = 1,000 * (1 - 0.04 - 0.08) = 880.
Securitisation rows of CRE22.49 (10-day, percent, same buckets):
AAA to AA- 2 / 8 / 8 / 16 / 16, A+ to BBB- 4 / 12 / 12 / 24 / 24, BB
not eligible (published reference). The 2006 table of paragraph 151
has no securitisation row, so SaCcrHaircuts.CollateralKind.SECURITISATION
is rejected under SaCcrHaircuts.Table.BASEL_II_2006.
SaCcrHaircuts.Table.CRE22_NO_EXTERNAL_RATINGS is the CRE22.50 table for
jurisdictions that do not allow external ratings. Debt is classed by
SaCcrHaircuts.NoRatingsDebtClass instead of a rating and goes through
haircut10DayNoExternalRatings(SaCcrHaircuts.NoRatingsDebtClass, double): sovereigns by issuer risk weight
0% 0.5 / 2 / 2 / 4 / 4, 20% or 50% 1 / 3 / 3 / 6 / 6, 100% 15; other
investment-grade non-securitisation 2 / 4 / 6 / 12 / 20; senior
securitisation with SA risk weight under 100% 4 / 12 / 12 / 24 / 24;
main-index equities and gold 20; other listed equities 30; cash 0;
other exposure types 30 (published reference). Worked example (own
hand computation): 1,000 of a senior securitisation with SA risk
weight 50% and 4 years to run, held, same currency, 10 days: H = 12%,
C = 880. UCITS and mutual funds take the highest haircut of what the
mandate allows (fundHaircut10DayMandate(double...)) or, where the bank may
look through, the weighted average of the holdings
(fundHaircut10DayLookThrough(double[], double[])). Research lane,
deterministic.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumCollateral kinds of the supervisory haircut table.static enumIssue rating buckets for debt collateral.static enumDebt classes of the CRE22.50 table (jurisdictions without external ratings).static enumWhich supervisory haircut table to use. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final doubleCurrency-mismatch add-on H_fx on a 10-day holding period (BCBS 128 para 152; CRE22.52). -
Method Summary
Modifier and TypeMethodDescriptionstatic doublecollateralValue(double marketValue, double haircut10Day, boolean currencyMismatch, double holdingBusinessDays, boolean held) Haircut value of one collateral item from a 10-day haircut the caller already has (for example fromhaircut10DayNoExternalRatings(SaCcrHaircuts.NoRatingsDebtClass, double)).static doublecollateralValue(double marketValue, SaCcrHaircuts.CollateralKind kind, SaCcrHaircuts.DebtRating rating, double maturityYears, boolean currencyMismatch, double holdingBusinessDays, boolean held) Haircut value of one collateral item for C or NICA, BCBS 128 para 151 table.static doublecollateralValue(SaCcrHaircuts.Table table, double marketValue, SaCcrHaircuts.CollateralKind kind, SaCcrHaircuts.DebtRating rating, double maturityYears, boolean currencyMismatch, double holdingBusinessDays, boolean held) Haircut value of one collateral item for C or NICA, from the chosen table.static doublefundHaircut10DayLookThrough(double[] weights, double[] haircuts) 10-day haircut on fund units under the look-through approach: the weighted average of the haircuts of the instruments the fund holds, available only when the bank may apply the LTA for equity investments in funds (CRE22.49 and CRE22.50, row "UCITS/mutual funds"; published reference).static doublefundHaircut10DayMandate(double... mandateHaircuts) 10-day haircut on units of a UCITS or mutual fund under the mandate rule: the highest haircut that applies to any security the fund can invest in (CRE22.49 and CRE22.50, row "UCITS/mutual funds"; published reference).static doublehaircut10Day(SaCcrHaircuts.CollateralKind kind, SaCcrHaircuts.DebtRating rating, double maturityYears) Supervisory haircut on a 10-day holding period, BCBS 128 para 151 (the 2006 table, the default kept for 2.2 compatibility).static doublehaircut10Day(SaCcrHaircuts.Table table, SaCcrHaircuts.CollateralKind kind, SaCcrHaircuts.DebtRating rating, double maturityYears) Supervisory haircut on a 10-day holding period from the chosen table.static doublehaircut10DayNoExternalRatings(SaCcrHaircuts.NoRatingsDebtClass debtClass, double maturityYears) Supervisory haircut on a 10-day holding period for debt under the CRE22.50 table (jurisdictions without external ratings).static doublescale(double haircut10Day, double holdingBusinessDays) Scales a 10-day haircut to N business days by the square-root-of-time rule, H_N = H_10 sqrt(N / 10) (BCBS 128 paras 168-169; CRE22.56-59).
-
Field Details
-
CURRENCY_MISMATCH
public static final double CURRENCY_MISMATCHCurrency-mismatch add-on H_fx on a 10-day holding period (BCBS 128 para 152; CRE22.52).- See Also:
-
-
Method Details
-
haircut10Day
public static double haircut10Day(SaCcrHaircuts.Table table, SaCcrHaircuts.CollateralKind kind, SaCcrHaircuts.DebtRating rating, double maturityYears) Supervisory haircut on a 10-day holding period from the chosen table.- Parameters:
table- BCBS 128 para 151 or CRE22.49kind- collateral kindrating- issue rating for debt, ignored (may be null) otherwisematurityYears- residual maturity for debt (≥ 0), ignored otherwise- Returns:
- H as a decimal
-
haircut10DayNoExternalRatings
public static double haircut10DayNoExternalRatings(SaCcrHaircuts.NoRatingsDebtClass debtClass, double maturityYears) Supervisory haircut on a 10-day holding period for debt under the CRE22.50 table (jurisdictions without external ratings).- Parameters:
debtClass- issuer risk-weight class or securitisation classmaturityYears- residual maturity (≥ 0, finite)- Returns:
- H as a decimal
-
fundHaircut10DayMandate
public static double fundHaircut10DayMandate(double... mandateHaircuts) 10-day haircut on units of a UCITS or mutual fund under the mandate rule: the highest haircut that applies to any security the fund can invest in (CRE22.49 and CRE22.50, row "UCITS/mutual funds"; published reference). The caller supplies the haircut of each instrument class in the mandate, fromhaircut10Day(SaCcrHaircuts.Table, SaCcrHaircuts.CollateralKind, SaCcrHaircuts.DebtRating, double)orhaircut10DayNoExternalRatings(SaCcrHaircuts.NoRatingsDebtClass, double). Eligibility is the caller's check: daily public price and a mandate limited to eligible instruments (CRE22.34(6), CRE22.45(3); hedging derivatives allowed by footnote 139).- Parameters:
mandateHaircuts- 10-day haircuts in [0, 1], at least one- Returns:
- the largest of them
-
fundHaircut10DayLookThrough
public static double fundHaircut10DayLookThrough(double[] weights, double[] haircuts) 10-day haircut on fund units under the look-through approach: the weighted average of the haircuts of the instruments the fund holds, available only when the bank may apply the LTA for equity investments in funds (CRE22.49 and CRE22.50, row "UCITS/mutual funds"; published reference). Weights are the holdings' shares of fund value and must sum to 1 within 1e-9 (library reading: the text says "weighted average" without fixing the weights; value shares are the only weights under which the haircut matches the value at risk of the units).- Parameters:
weights- holding weights, each at least 0haircuts- 10-day haircut of each holding, in [0, 1]- Returns:
- the weighted average haircut
-
collateralValue
public static double collateralValue(double marketValue, double haircut10Day, boolean currencyMismatch, double holdingBusinessDays, boolean held) Haircut value of one collateral item from a 10-day haircut the caller already has (for example fromhaircut10DayNoExternalRatings(SaCcrHaircuts.NoRatingsDebtClass, double)).- Parameters:
marketValue- X (≥ 0)haircut10Day- H_10currencyMismatch- true when the currencies differholdingBusinessDays- holding period Nheld- true for collateral held, false for posted- Returns:
- the signed contribution to C
-
haircut10Day
public static double haircut10Day(SaCcrHaircuts.CollateralKind kind, SaCcrHaircuts.DebtRating rating, double maturityYears) Supervisory haircut on a 10-day holding period, BCBS 128 para 151 (the 2006 table, the default kept for 2.2 compatibility).- Parameters:
kind- collateral kindrating- issue rating for debt, ignored (may be null) otherwisematurityYears- residual maturity for debt (≥ 0), ignored otherwise- Returns:
- H as a decimal
-
scale
public static double scale(double haircut10Day, double holdingBusinessDays) Scales a 10-day haircut to N business days by the square-root-of-time rule, H_N = H_10 sqrt(N / 10) (BCBS 128 paras 168-169; CRE22.56-59).- Parameters:
haircut10Day- H_10holdingBusinessDays- N > 0- Returns:
- H_N
-
collateralValue
public static double collateralValue(SaCcrHaircuts.Table table, double marketValue, SaCcrHaircuts.CollateralKind kind, SaCcrHaircuts.DebtRating rating, double maturityYears, boolean currencyMismatch, double holdingBusinessDays, boolean held) Haircut value of one collateral item for C or NICA, from the chosen table.- Parameters:
table- BCBS 128 para 151 or CRE22.49marketValue- X, the market value (≥ 0)kind- collateral kindrating- issue rating for debt, else nullmaturityYears- residual maturity for debt, else 0currencyMismatch- true when the currencies differholdingBusinessDays- holding period Nheld- true for collateral held, false for posted- Returns:
- the signed contribution to C
-
collateralValue
public static double collateralValue(double marketValue, SaCcrHaircuts.CollateralKind kind, SaCcrHaircuts.DebtRating rating, double maturityYears, boolean currencyMismatch, double holdingBusinessDays, boolean held) Haircut value of one collateral item for C or NICA, BCBS 128 para 151 table.- Parameters:
marketValue- X, the market value (≥ 0)kind- collateral kindrating- issue rating for debt, else nullmaturityYears- residual maturity for debt, else 0currencyMismatch- true when the collateral currency differs from the settlement currencyholdingBusinessDays- holding period N (10 for the table values; the caller picks it, for example the MPOR)held- true for collateral the bank holds, false for collateral it has posted- Returns:
- the signed contribution to C: positive held, negative posted
-